tapyrus 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +2 -2
- data/{.prettierrc.yaml → .prettierrc.yml} +0 -1
- data/.ruby-version +1 -1
- data/Gemfile +2 -2
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/exe/tapyrus-script-debugger +5 -5
- data/exe/tapyrusrb-cli +1 -1
- data/exe/tapyrusrbd +18 -17
- data/lib/openassets/payload.rb +2 -2
- data/lib/openassets/util.rb +2 -2
- data/lib/openassets.rb +4 -4
- data/lib/schnorr/sign_to_contract.rb +4 -4
- data/lib/schnorr/signature.rb +5 -5
- data/lib/schnorr.rb +14 -14
- data/lib/tapyrus/base58.rb +8 -8
- data/lib/tapyrus/bip175.rb +5 -5
- data/lib/tapyrus/block_header.rb +2 -2
- data/lib/tapyrus/bloom_filter.rb +1 -1
- data/lib/tapyrus/chain_params.rb +5 -5
- data/lib/tapyrus/constants.rb +1 -1
- data/lib/tapyrus/errors.rb +9 -9
- data/lib/tapyrus/ext/ecdsa.rb +4 -4
- data/lib/tapyrus/ext/json_parser.rb +1 -1
- data/lib/tapyrus/ext.rb +3 -3
- data/lib/tapyrus/ext_key.rb +21 -21
- data/lib/tapyrus/jws.rb +76 -0
- data/lib/tapyrus/key.rb +48 -20
- data/lib/tapyrus/key_path.rb +3 -3
- data/lib/tapyrus/logger.rb +4 -11
- data/lib/tapyrus/merkle_tree.rb +1 -1
- data/lib/tapyrus/message/addr.rb +2 -2
- data/lib/tapyrus/message/base.rb +2 -2
- data/lib/tapyrus/message/block.rb +1 -1
- data/lib/tapyrus/message/block_txn.rb +1 -1
- data/lib/tapyrus/message/cmpct_block.rb +1 -1
- data/lib/tapyrus/message/fee_filter.rb +3 -3
- data/lib/tapyrus/message/filter_add.rb +1 -1
- data/lib/tapyrus/message/filter_clear.rb +2 -2
- data/lib/tapyrus/message/filter_load.rb +7 -7
- data/lib/tapyrus/message/get_addr.rb +2 -2
- data/lib/tapyrus/message/get_block_txn.rb +1 -1
- data/lib/tapyrus/message/get_blocks.rb +1 -1
- data/lib/tapyrus/message/get_data.rb +1 -1
- data/lib/tapyrus/message/get_headers.rb +1 -1
- data/lib/tapyrus/message/header_and_short_ids.rb +6 -6
- data/lib/tapyrus/message/headers.rb +1 -1
- data/lib/tapyrus/message/headers_parser.rb +2 -2
- data/lib/tapyrus/message/inv.rb +1 -1
- data/lib/tapyrus/message/inventory.rb +3 -3
- data/lib/tapyrus/message/mem_pool.rb +2 -2
- data/lib/tapyrus/message/merkle_block.rb +3 -3
- data/lib/tapyrus/message/network_addr.rb +9 -9
- data/lib/tapyrus/message/not_found.rb +1 -1
- data/lib/tapyrus/message/ping.rb +3 -3
- data/lib/tapyrus/message/pong.rb +3 -3
- data/lib/tapyrus/message/reject.rb +6 -6
- data/lib/tapyrus/message/send_cmpct.rb +4 -4
- data/lib/tapyrus/message/send_headers.rb +2 -2
- data/lib/tapyrus/message/tx.rb +1 -1
- data/lib/tapyrus/message/ver_ack.rb +2 -2
- data/lib/tapyrus/message/version.rb +7 -7
- data/lib/tapyrus/message.rb +37 -37
- data/lib/tapyrus/mnemonic.rb +18 -16
- data/lib/tapyrus/network/connection.rb +2 -2
- data/lib/tapyrus/network/message_handler.rb +11 -11
- data/lib/tapyrus/network/peer.rb +1 -1
- data/lib/tapyrus/network/peer_discovery.rb +1 -1
- data/lib/tapyrus/network/pool.rb +4 -4
- data/lib/tapyrus/network.rb +6 -6
- data/lib/tapyrus/node/cli.rb +34 -34
- data/lib/tapyrus/node/configuration.rb +3 -3
- data/lib/tapyrus/node/spv.rb +2 -2
- data/lib/tapyrus/node.rb +3 -3
- data/lib/tapyrus/opcodes.rb +7 -7
- data/lib/tapyrus/out_point.rb +2 -2
- data/lib/tapyrus/rpc/http_server.rb +6 -6
- data/lib/tapyrus/rpc/request_handler.rb +5 -5
- data/lib/tapyrus/rpc/tapyrus_core_client.rb +10 -10
- data/lib/tapyrus/rpc.rb +4 -4
- data/lib/tapyrus/script/color.rb +3 -3
- data/lib/tapyrus/script/debugger.rb +9 -9
- data/lib/tapyrus/script/multisig.rb +2 -2
- data/lib/tapyrus/script/script.rb +28 -28
- data/lib/tapyrus/script/script_error.rb +42 -42
- data/lib/tapyrus/script/script_interpreter.rb +9 -9
- data/lib/tapyrus/script/tx_checker.rb +2 -2
- data/lib/tapyrus/secp256k1/native.rb +23 -23
- data/lib/tapyrus/secp256k1/rfc6979.rb +7 -7
- data/lib/tapyrus/secp256k1/ruby.rb +2 -2
- data/lib/tapyrus/secp256k1.rb +3 -3
- data/lib/tapyrus/slip39/share.rb +7 -7
- data/lib/tapyrus/slip39/sss.rb +24 -24
- data/lib/tapyrus/slip39.rb +514 -37
- data/lib/tapyrus/store/db/level_db.rb +2 -2
- data/lib/tapyrus/store/db.rb +1 -1
- data/lib/tapyrus/store/spv_chain.rb +7 -7
- data/lib/tapyrus/store.rb +3 -3
- data/lib/tapyrus/tip0137.rb +201 -0
- data/lib/tapyrus/tx.rb +12 -12
- data/lib/tapyrus/tx_builder.rb +3 -3
- data/lib/tapyrus/tx_in.rb +3 -3
- data/lib/tapyrus/tx_out.rb +3 -3
- data/lib/tapyrus/util.rb +21 -21
- data/lib/tapyrus/validation.rb +9 -9
- data/lib/tapyrus/version.rb +1 -1
- data/lib/tapyrus/wallet/account.rb +12 -12
- data/lib/tapyrus/wallet/base.rb +9 -8
- data/lib/tapyrus/wallet/db.rb +11 -11
- data/lib/tapyrus/wallet/master_key.rb +13 -13
- data/lib/tapyrus/wallet.rb +4 -4
- data/lib/tapyrus.rb +62 -59
- data/tapyrusrb.gemspec +34 -31
- metadata +45 -12
data/lib/tapyrus/wallet/base.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "leveldb-native"
|
|
2
2
|
|
|
3
3
|
module Tapyrus
|
|
4
4
|
module Wallet
|
|
@@ -24,10 +24,10 @@ module Tapyrus
|
|
|
24
24
|
w = self.new(wallet_id, path_prefix)
|
|
25
25
|
|
|
26
26
|
# generate seed
|
|
27
|
-
raise RuntimeError,
|
|
27
|
+
raise RuntimeError, "the seed already exist." if w.db.registered_master?
|
|
28
28
|
master = Tapyrus::Wallet::MasterKey.generate
|
|
29
29
|
w.db.register_master_key(master)
|
|
30
|
-
w.create_account(
|
|
30
|
+
w.create_account("Default")
|
|
31
31
|
w
|
|
32
32
|
end
|
|
33
33
|
|
|
@@ -48,8 +48,8 @@ module Tapyrus
|
|
|
48
48
|
def self.current_wallet(path_prefix = default_path_prefix)
|
|
49
49
|
path = wallet_paths(path_prefix).first # TODO default wallet selection
|
|
50
50
|
return nil unless path
|
|
51
|
-
path.slice!(path_prefix +
|
|
52
|
-
path.slice!(
|
|
51
|
+
path.slice!(path_prefix + "wallet")
|
|
52
|
+
path.slice!("/")
|
|
53
53
|
self.load(path.to_i, path_prefix)
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -70,7 +70,7 @@ module Tapyrus
|
|
|
70
70
|
# @param [String] name a account name.
|
|
71
71
|
# @return [Tapyrus::Wallet::Account]
|
|
72
72
|
def create_account(purpose = Account::PURPOSE_TYPE[:native_segwit], name)
|
|
73
|
-
raise ArgumentError.new(
|
|
73
|
+
raise ArgumentError.new("Account already exists.") if find_account(name, purpose)
|
|
74
74
|
index = accounts.size
|
|
75
75
|
path = "m/#{purpose}'/#{Tapyrus.chain_params.bip44_coin_type}'/#{index}'"
|
|
76
76
|
account_key = master_key.derive(path).ext_pubkey
|
|
@@ -92,7 +92,7 @@ module Tapyrus
|
|
|
92
92
|
# @return [String] generated address.
|
|
93
93
|
def generate_new_address(account_name)
|
|
94
94
|
account = find_account(account_name)
|
|
95
|
-
raise ArgumentError.new(
|
|
95
|
+
raise ArgumentError.new("Account does not exist.") unless account
|
|
96
96
|
account.create_receive.addr
|
|
97
97
|
end
|
|
98
98
|
|
|
@@ -121,7 +121,8 @@ module Tapyrus
|
|
|
121
121
|
|
|
122
122
|
# decrypt wallet
|
|
123
123
|
# @param [String] passphrase the wallet passphrase
|
|
124
|
-
def decrypt(passphrase)
|
|
124
|
+
def decrypt(passphrase)
|
|
125
|
+
end
|
|
125
126
|
|
|
126
127
|
# wallet information
|
|
127
128
|
def to_h
|
data/lib/tapyrus/wallet/db.rb
CHANGED
|
@@ -2,10 +2,10 @@ module Tapyrus
|
|
|
2
2
|
module Wallet
|
|
3
3
|
class DB
|
|
4
4
|
KEY_PREFIX = {
|
|
5
|
-
account:
|
|
6
|
-
master:
|
|
7
|
-
version:
|
|
8
|
-
key:
|
|
5
|
+
account: "a", # key: account index, value: Account raw data.
|
|
6
|
+
master: "m", # value: wallet seed.
|
|
7
|
+
version: "v", # value: wallet version
|
|
8
|
+
key: "k" # key: path to the key, value: public key
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
attr_reader :level_db
|
|
@@ -23,14 +23,14 @@ module Tapyrus
|
|
|
23
23
|
|
|
24
24
|
# get accounts raw data.
|
|
25
25
|
def accounts
|
|
26
|
-
from = KEY_PREFIX[:account] +
|
|
27
|
-
to = KEY_PREFIX[:account] +
|
|
26
|
+
from = KEY_PREFIX[:account] + "00000000"
|
|
27
|
+
to = KEY_PREFIX[:account] + "ffffffff"
|
|
28
28
|
level_db.each(from: from, to: to).map { |k, v| v }
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def save_account(account)
|
|
32
32
|
level_db.batch do
|
|
33
|
-
id = [account.purpose, account.index].pack(
|
|
33
|
+
id = [account.purpose, account.index].pack("I*").bth
|
|
34
34
|
key = KEY_PREFIX[:account] + id
|
|
35
35
|
level_db.put(key, account.to_payload)
|
|
36
36
|
end
|
|
@@ -38,16 +38,16 @@ module Tapyrus
|
|
|
38
38
|
|
|
39
39
|
def save_key(account, purpose, index, key)
|
|
40
40
|
pubkey = key.pub
|
|
41
|
-
id = [account.purpose, account.index, purpose, index].pack(
|
|
41
|
+
id = [account.purpose, account.index, purpose, index].pack("I*").bth
|
|
42
42
|
k = KEY_PREFIX[:key] + id
|
|
43
43
|
level_db.put(k, pubkey)
|
|
44
44
|
key
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def get_keys(account)
|
|
48
|
-
id = [account.purpose, account.index].pack(
|
|
49
|
-
from = KEY_PREFIX[:key] + id +
|
|
50
|
-
to = KEY_PREFIX[:key] + id +
|
|
48
|
+
id = [account.purpose, account.index].pack("I*").bth
|
|
49
|
+
from = KEY_PREFIX[:key] + id + "00000000"
|
|
50
|
+
to = KEY_PREFIX[:key] + id + "ffffffff"
|
|
51
51
|
level_db.each(from: from, to: to).map { |k, v| v }
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -12,7 +12,7 @@ module Tapyrus
|
|
|
12
12
|
attr_accessor :encrypted
|
|
13
13
|
attr_accessor :mnemonic # ephemeral data existing only at initialization
|
|
14
14
|
|
|
15
|
-
def initialize(seed, salt:
|
|
15
|
+
def initialize(seed, salt: "", encrypted: false, mnemonic: nil)
|
|
16
16
|
@mnemonic = mnemonic
|
|
17
17
|
@seed = seed
|
|
18
18
|
@encrypted = encrypted
|
|
@@ -23,7 +23,7 @@ module Tapyrus
|
|
|
23
23
|
# @return Tapyrus::Wallet::MasterKey
|
|
24
24
|
def self.generate
|
|
25
25
|
entropy = SecureRandom.hex(32)
|
|
26
|
-
mnemonic = Tapyrus::Mnemonic.new(
|
|
26
|
+
mnemonic = Tapyrus::Mnemonic.new("english")
|
|
27
27
|
self.recover_from_words(mnemonic.to_mnemonic(entropy))
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ module Tapyrus
|
|
|
31
31
|
# @param [Array] words the mnemonic word list.
|
|
32
32
|
# @return Tapyrus::Wallet::MasterKey
|
|
33
33
|
def self.recover_from_words(words)
|
|
34
|
-
mnemonic = Tapyrus::Mnemonic.new(
|
|
34
|
+
mnemonic = Tapyrus::Mnemonic.new("english")
|
|
35
35
|
seed = mnemonic.to_seed(words)
|
|
36
36
|
self.new(seed, mnemonic: words)
|
|
37
37
|
end
|
|
@@ -41,9 +41,9 @@ module Tapyrus
|
|
|
41
41
|
# @return [Tapyrus::Wallet::MasterKey]
|
|
42
42
|
def self.parse_from_payload(payload)
|
|
43
43
|
flag, payload = unpack_var_int(payload)
|
|
44
|
-
raise
|
|
44
|
+
raise "encrypted flag is invalid." unless [0, 1].include?(flag)
|
|
45
45
|
salt, payload = unpack_var_string(payload)
|
|
46
|
-
salt =
|
|
46
|
+
salt = "" unless salt
|
|
47
47
|
seed, payload = unpack_var_string(payload)
|
|
48
48
|
self.new(seed.bth, salt: salt.bth, encrypted: flag == 1)
|
|
49
49
|
end
|
|
@@ -58,7 +58,7 @@ module Tapyrus
|
|
|
58
58
|
# get master key
|
|
59
59
|
# @return [Tapyrus::ExtKey] the master key
|
|
60
60
|
def key
|
|
61
|
-
raise
|
|
61
|
+
raise "seed is encrypted. please decrypt the seed." if encrypted
|
|
62
62
|
Tapyrus::ExtKey.generate_master(seed)
|
|
63
63
|
end
|
|
64
64
|
|
|
@@ -72,12 +72,12 @@ module Tapyrus
|
|
|
72
72
|
|
|
73
73
|
# encrypt seed
|
|
74
74
|
def encrypt(passphrase)
|
|
75
|
-
raise
|
|
75
|
+
raise "The wallet is already encrypted." if encrypted
|
|
76
76
|
@salt = SecureRandom.hex(16)
|
|
77
|
-
enc = OpenSSL::Cipher.new(
|
|
77
|
+
enc = OpenSSL::Cipher.new("AES-256-CBC")
|
|
78
78
|
enc.encrypt
|
|
79
79
|
enc.key, enc.iv = key_iv(enc, passphrase)
|
|
80
|
-
encrypted_data =
|
|
80
|
+
encrypted_data = ""
|
|
81
81
|
encrypted_data << enc.update(seed)
|
|
82
82
|
encrypted_data << enc.final
|
|
83
83
|
@seed = encrypted_data
|
|
@@ -86,16 +86,16 @@ module Tapyrus
|
|
|
86
86
|
|
|
87
87
|
# decrypt seed
|
|
88
88
|
def decrypt(passphrase)
|
|
89
|
-
raise
|
|
90
|
-
dec = OpenSSL::Cipher.new(
|
|
89
|
+
raise "The wallet is not encrypted." unless encrypted
|
|
90
|
+
dec = OpenSSL::Cipher.new("AES-256-CBC")
|
|
91
91
|
dec.decrypt
|
|
92
92
|
dec.key, dec.iv = key_iv(dec, passphrase)
|
|
93
|
-
decrypted_data =
|
|
93
|
+
decrypted_data = ""
|
|
94
94
|
decrypted_data << dec.update(seed)
|
|
95
95
|
decrypted_data << dec.final
|
|
96
96
|
@seed = decrypted_data
|
|
97
97
|
@encrypted = false
|
|
98
|
-
@salt =
|
|
98
|
+
@salt = ""
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
private
|
data/lib/tapyrus/wallet.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module Tapyrus
|
|
2
2
|
module Wallet
|
|
3
|
-
autoload :Base,
|
|
4
|
-
autoload :Account,
|
|
5
|
-
autoload :DB,
|
|
6
|
-
autoload :MasterKey,
|
|
3
|
+
autoload :Base, "tapyrus/wallet/base"
|
|
4
|
+
autoload :Account, "tapyrus/wallet/account"
|
|
5
|
+
autoload :DB, "tapyrus/wallet/db"
|
|
6
|
+
autoload :MasterKey, "tapyrus/wallet/master_key"
|
|
7
7
|
end
|
|
8
8
|
end
|
data/lib/tapyrus.rb
CHANGED
|
@@ -1,60 +1,63 @@
|
|
|
1
1
|
# Porting part of the code from bitcoin-ruby. see the license.
|
|
2
2
|
# https://github.com/lian/bitcoin-ruby/blob/master/COPYING
|
|
3
3
|
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
|
|
13
|
-
require_relative
|
|
4
|
+
require "tapyrus/version"
|
|
5
|
+
require "eventmachine"
|
|
6
|
+
require "ecdsa"
|
|
7
|
+
require "securerandom"
|
|
8
|
+
require "json"
|
|
9
|
+
require "jwt"
|
|
10
|
+
require "ffi"
|
|
11
|
+
require "observer"
|
|
12
|
+
require "tmpdir"
|
|
13
|
+
require_relative "openassets"
|
|
14
|
+
require_relative "schnorr"
|
|
14
15
|
|
|
15
16
|
module Tapyrus
|
|
16
|
-
autoload :Ext,
|
|
17
|
-
autoload :Util,
|
|
18
|
-
autoload :ChainParams,
|
|
19
|
-
autoload :Message,
|
|
20
|
-
autoload :Logger,
|
|
21
|
-
autoload :Block,
|
|
22
|
-
autoload :BlockHeader,
|
|
23
|
-
autoload :Tx,
|
|
24
|
-
autoload :Script,
|
|
25
|
-
autoload :Multisig,
|
|
26
|
-
autoload :ScriptInterpreter,
|
|
27
|
-
autoload :ScriptDebugger,
|
|
28
|
-
autoload :ScriptError,
|
|
29
|
-
autoload :TxChecker,
|
|
30
|
-
autoload :TxIn,
|
|
31
|
-
autoload :TxOut,
|
|
32
|
-
autoload :OutPoint,
|
|
33
|
-
autoload :MerkleTree,
|
|
34
|
-
autoload :Key,
|
|
35
|
-
autoload :ExtKey,
|
|
36
|
-
autoload :ExtPubkey,
|
|
37
|
-
autoload :Opcodes,
|
|
38
|
-
autoload :Node,
|
|
39
|
-
autoload :Base58,
|
|
40
|
-
autoload :Secp256k1,
|
|
41
|
-
autoload :Mnemonic,
|
|
42
|
-
autoload :ValidationState,
|
|
43
|
-
autoload :Network,
|
|
44
|
-
autoload :Store,
|
|
45
|
-
autoload :RPC,
|
|
46
|
-
autoload :Wallet,
|
|
47
|
-
autoload :BloomFilter,
|
|
48
|
-
autoload :KeyPath,
|
|
49
|
-
autoload :SLIP39,
|
|
50
|
-
autoload :Color,
|
|
51
|
-
autoload :Errors,
|
|
52
|
-
autoload :TxBuilder,
|
|
53
|
-
autoload :BIP175,
|
|
54
|
-
autoload :Contract,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
17
|
+
autoload :Ext, "tapyrus/ext"
|
|
18
|
+
autoload :Util, "tapyrus/util"
|
|
19
|
+
autoload :ChainParams, "tapyrus/chain_params"
|
|
20
|
+
autoload :Message, "tapyrus/message"
|
|
21
|
+
autoload :Logger, "tapyrus/logger"
|
|
22
|
+
autoload :Block, "tapyrus/block"
|
|
23
|
+
autoload :BlockHeader, "tapyrus/block_header"
|
|
24
|
+
autoload :Tx, "tapyrus/tx"
|
|
25
|
+
autoload :Script, "tapyrus/script/script"
|
|
26
|
+
autoload :Multisig, "tapyrus/script/multisig"
|
|
27
|
+
autoload :ScriptInterpreter, "tapyrus/script/script_interpreter"
|
|
28
|
+
autoload :ScriptDebugger, "tapyrus/script/debugger"
|
|
29
|
+
autoload :ScriptError, "tapyrus/script/script_error"
|
|
30
|
+
autoload :TxChecker, "tapyrus/script/tx_checker"
|
|
31
|
+
autoload :TxIn, "tapyrus/tx_in"
|
|
32
|
+
autoload :TxOut, "tapyrus/tx_out"
|
|
33
|
+
autoload :OutPoint, "tapyrus/out_point"
|
|
34
|
+
autoload :MerkleTree, "tapyrus/merkle_tree"
|
|
35
|
+
autoload :Key, "tapyrus/key"
|
|
36
|
+
autoload :ExtKey, "tapyrus/ext_key"
|
|
37
|
+
autoload :ExtPubkey, "tapyrus/ext_key"
|
|
38
|
+
autoload :Opcodes, "tapyrus/opcodes"
|
|
39
|
+
autoload :Node, "tapyrus/node"
|
|
40
|
+
autoload :Base58, "tapyrus/base58"
|
|
41
|
+
autoload :Secp256k1, "tapyrus/secp256k1"
|
|
42
|
+
autoload :Mnemonic, "tapyrus/mnemonic"
|
|
43
|
+
autoload :ValidationState, "tapyrus/validation"
|
|
44
|
+
autoload :Network, "tapyrus/network"
|
|
45
|
+
autoload :Store, "tapyrus/store"
|
|
46
|
+
autoload :RPC, "tapyrus/rpc"
|
|
47
|
+
autoload :Wallet, "tapyrus/wallet"
|
|
48
|
+
autoload :BloomFilter, "tapyrus/bloom_filter"
|
|
49
|
+
autoload :KeyPath, "tapyrus/key_path"
|
|
50
|
+
autoload :SLIP39, "tapyrus/slip39"
|
|
51
|
+
autoload :Color, "tapyrus/script/color"
|
|
52
|
+
autoload :Errors, "tapyrus/errors"
|
|
53
|
+
autoload :TxBuilder, "tapyrus/tx_builder"
|
|
54
|
+
autoload :BIP175, "tapyrus/bip175"
|
|
55
|
+
autoload :Contract, "tapyrus/contract"
|
|
56
|
+
autoload :TIP0137, "tapyrus/tip0137"
|
|
57
|
+
autoload :JWS, "tapyrus/jws"
|
|
58
|
+
|
|
59
|
+
require_relative "tapyrus/constants"
|
|
60
|
+
require_relative "tapyrus/ext/ecdsa"
|
|
58
61
|
|
|
59
62
|
extend Util
|
|
60
63
|
|
|
@@ -86,27 +89,27 @@ module Tapyrus
|
|
|
86
89
|
|
|
87
90
|
# get secp implementation module
|
|
88
91
|
def self.secp_impl
|
|
89
|
-
path = ENV[
|
|
92
|
+
path = ENV["SECP256K1_LIB_PATH"]
|
|
90
93
|
(path && File.exist?(path)) ? Tapyrus::Secp256k1::Native : Tapyrus::Secp256k1::Ruby
|
|
91
94
|
end
|
|
92
95
|
|
|
93
96
|
def self.hmac_sha512(key, data)
|
|
94
|
-
OpenSSL::HMAC.digest(OpenSSL::Digest.new(
|
|
97
|
+
OpenSSL::HMAC.digest(OpenSSL::Digest.new("SHA512"), key, data)
|
|
95
98
|
end
|
|
96
99
|
|
|
97
100
|
def self.hmac_sha256(key, data)
|
|
98
|
-
OpenSSL::HMAC.digest(OpenSSL::Digest.new(
|
|
101
|
+
OpenSSL::HMAC.digest(OpenSSL::Digest.new("SHA256"), key, data)
|
|
99
102
|
end
|
|
100
103
|
|
|
101
104
|
class ::String
|
|
102
105
|
# binary convert to hex string
|
|
103
106
|
def bth
|
|
104
|
-
unpack(
|
|
107
|
+
unpack("H*").first
|
|
105
108
|
end
|
|
106
109
|
|
|
107
110
|
# hex string convert to binary
|
|
108
111
|
def htb
|
|
109
|
-
[self].pack(
|
|
112
|
+
[self].pack("H*")
|
|
110
113
|
end
|
|
111
114
|
|
|
112
115
|
# binary convert to integer
|
|
@@ -161,7 +164,7 @@ module Tapyrus
|
|
|
161
164
|
class ::Integer
|
|
162
165
|
def to_even_length_hex
|
|
163
166
|
hex = to_s(16)
|
|
164
|
-
hex.rjust((hex.length / 2.0).ceil * 2,
|
|
167
|
+
hex.rjust((hex.length / 2.0).ceil * 2, "0")
|
|
165
168
|
end
|
|
166
169
|
|
|
167
170
|
def itb
|
|
@@ -170,7 +173,7 @@ module Tapyrus
|
|
|
170
173
|
|
|
171
174
|
# convert bit string
|
|
172
175
|
def to_bits(length = nil)
|
|
173
|
-
length ? to_s(2).rjust(length,
|
|
176
|
+
length ? to_s(2).rjust(length, "0") : to_s(2)
|
|
174
177
|
end
|
|
175
178
|
end
|
|
176
179
|
end
|
data/tapyrusrb.gemspec
CHANGED
|
@@ -1,45 +1,48 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
-
lib = File.expand_path(
|
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
4
|
+
require "tapyrus/version"
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name =
|
|
7
|
+
spec.name = "tapyrus"
|
|
8
8
|
spec.version = Tapyrus::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
9
|
+
spec.authors = ["azuchi"]
|
|
10
|
+
spec.email = ["azuchi@chaintope.com"]
|
|
11
11
|
|
|
12
|
-
spec.summary =
|
|
13
|
-
spec.description =
|
|
14
|
-
spec.homepage =
|
|
15
|
-
spec.license =
|
|
12
|
+
spec.summary = "The implementation of Tapyrus Protocol for Ruby."
|
|
13
|
+
spec.description = "The implementation of Tapyrus Protocol for Ruby."
|
|
14
|
+
spec.homepage = "https://github.com/chaintope/tapyrusrb"
|
|
15
|
+
spec.license = "MIT"
|
|
16
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
|
|
16
17
|
|
|
17
18
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
18
|
-
spec.bindir =
|
|
19
|
+
spec.bindir = "exe"
|
|
19
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
|
-
spec.require_paths = [
|
|
21
|
+
spec.require_paths = ["lib"]
|
|
21
22
|
|
|
22
|
-
spec.add_runtime_dependency
|
|
23
|
-
spec.add_runtime_dependency
|
|
24
|
-
spec.add_runtime_dependency
|
|
25
|
-
spec.add_runtime_dependency
|
|
26
|
-
spec.add_runtime_dependency
|
|
27
|
-
spec.add_runtime_dependency
|
|
28
|
-
spec.add_runtime_dependency
|
|
29
|
-
spec.add_runtime_dependency
|
|
30
|
-
spec.add_runtime_dependency
|
|
31
|
-
spec.add_runtime_dependency
|
|
32
|
-
spec.add_runtime_dependency
|
|
33
|
-
spec.add_runtime_dependency
|
|
34
|
-
spec.add_runtime_dependency
|
|
23
|
+
spec.add_runtime_dependency "ecdsa"
|
|
24
|
+
spec.add_runtime_dependency "eventmachine"
|
|
25
|
+
spec.add_runtime_dependency "murmurhash3"
|
|
26
|
+
spec.add_runtime_dependency "daemon-spawn"
|
|
27
|
+
spec.add_runtime_dependency "thor"
|
|
28
|
+
spec.add_runtime_dependency "ffi"
|
|
29
|
+
spec.add_runtime_dependency "leb128", "~> 1.0.0"
|
|
30
|
+
spec.add_runtime_dependency "eventmachine_httpserver"
|
|
31
|
+
spec.add_runtime_dependency "iniparse"
|
|
32
|
+
spec.add_runtime_dependency "siphash"
|
|
33
|
+
spec.add_runtime_dependency "activesupport", ">= 5.2.3"
|
|
34
|
+
spec.add_runtime_dependency "json_pure", ">= 2.6.3", "< 2.8.0"
|
|
35
|
+
spec.add_runtime_dependency "terminal-table", "~> 3.0.2"
|
|
36
|
+
spec.add_runtime_dependency "jwt"
|
|
37
|
+
spec.add_development_dependency "observer"
|
|
35
38
|
|
|
36
39
|
# for options
|
|
37
|
-
spec.add_development_dependency
|
|
40
|
+
spec.add_development_dependency "leveldb-native"
|
|
38
41
|
|
|
39
|
-
spec.add_development_dependency
|
|
40
|
-
spec.add_development_dependency
|
|
41
|
-
spec.add_development_dependency
|
|
42
|
-
spec.add_development_dependency
|
|
43
|
-
spec.add_development_dependency
|
|
44
|
-
spec.add_development_dependency
|
|
42
|
+
spec.add_development_dependency "bundler"
|
|
43
|
+
spec.add_development_dependency "prettier", "4.0.4"
|
|
44
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
|
45
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
|
46
|
+
spec.add_development_dependency "timecop"
|
|
47
|
+
spec.add_development_dependency "webmock", "~> 3.0"
|
|
45
48
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tapyrus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- azuchi
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2025-01-31 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: ecdsa
|
|
@@ -170,14 +169,20 @@ dependencies:
|
|
|
170
169
|
requirements:
|
|
171
170
|
- - ">="
|
|
172
171
|
- !ruby/object:Gem::Version
|
|
173
|
-
version: 2.3
|
|
172
|
+
version: 2.6.3
|
|
173
|
+
- - "<"
|
|
174
|
+
- !ruby/object:Gem::Version
|
|
175
|
+
version: 2.8.0
|
|
174
176
|
type: :runtime
|
|
175
177
|
prerelease: false
|
|
176
178
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
179
|
requirements:
|
|
178
180
|
- - ">="
|
|
179
181
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: 2.3
|
|
182
|
+
version: 2.6.3
|
|
183
|
+
- - "<"
|
|
184
|
+
- !ruby/object:Gem::Version
|
|
185
|
+
version: 2.8.0
|
|
181
186
|
- !ruby/object:Gem::Dependency
|
|
182
187
|
name: terminal-table
|
|
183
188
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -192,6 +197,34 @@ dependencies:
|
|
|
192
197
|
- - "~>"
|
|
193
198
|
- !ruby/object:Gem::Version
|
|
194
199
|
version: 3.0.2
|
|
200
|
+
- !ruby/object:Gem::Dependency
|
|
201
|
+
name: jwt
|
|
202
|
+
requirement: !ruby/object:Gem::Requirement
|
|
203
|
+
requirements:
|
|
204
|
+
- - ">="
|
|
205
|
+
- !ruby/object:Gem::Version
|
|
206
|
+
version: '0'
|
|
207
|
+
type: :runtime
|
|
208
|
+
prerelease: false
|
|
209
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
210
|
+
requirements:
|
|
211
|
+
- - ">="
|
|
212
|
+
- !ruby/object:Gem::Version
|
|
213
|
+
version: '0'
|
|
214
|
+
- !ruby/object:Gem::Dependency
|
|
215
|
+
name: observer
|
|
216
|
+
requirement: !ruby/object:Gem::Requirement
|
|
217
|
+
requirements:
|
|
218
|
+
- - ">="
|
|
219
|
+
- !ruby/object:Gem::Version
|
|
220
|
+
version: '0'
|
|
221
|
+
type: :development
|
|
222
|
+
prerelease: false
|
|
223
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
224
|
+
requirements:
|
|
225
|
+
- - ">="
|
|
226
|
+
- !ruby/object:Gem::Version
|
|
227
|
+
version: '0'
|
|
195
228
|
- !ruby/object:Gem::Dependency
|
|
196
229
|
name: leveldb-native
|
|
197
230
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -226,14 +259,14 @@ dependencies:
|
|
|
226
259
|
requirements:
|
|
227
260
|
- - '='
|
|
228
261
|
- !ruby/object:Gem::Version
|
|
229
|
-
version:
|
|
262
|
+
version: 4.0.4
|
|
230
263
|
type: :development
|
|
231
264
|
prerelease: false
|
|
232
265
|
version_requirements: !ruby/object:Gem::Requirement
|
|
233
266
|
requirements:
|
|
234
267
|
- - '='
|
|
235
268
|
- !ruby/object:Gem::Version
|
|
236
|
-
version:
|
|
269
|
+
version: 4.0.4
|
|
237
270
|
- !ruby/object:Gem::Dependency
|
|
238
271
|
name: rake
|
|
239
272
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -303,7 +336,7 @@ files:
|
|
|
303
336
|
- ".github/workflows/ruby.yml"
|
|
304
337
|
- ".gitignore"
|
|
305
338
|
- ".prettierignore"
|
|
306
|
-
- ".prettierrc.
|
|
339
|
+
- ".prettierrc.yml"
|
|
307
340
|
- ".rspec"
|
|
308
341
|
- ".ruby-gemset"
|
|
309
342
|
- ".ruby-version"
|
|
@@ -339,6 +372,7 @@ files:
|
|
|
339
372
|
- lib/tapyrus/ext/ecdsa.rb
|
|
340
373
|
- lib/tapyrus/ext/json_parser.rb
|
|
341
374
|
- lib/tapyrus/ext_key.rb
|
|
375
|
+
- lib/tapyrus/jws.rb
|
|
342
376
|
- lib/tapyrus/key.rb
|
|
343
377
|
- lib/tapyrus/key_path.rb
|
|
344
378
|
- lib/tapyrus/logger.rb
|
|
@@ -424,6 +458,7 @@ files:
|
|
|
424
458
|
- lib/tapyrus/store/db.rb
|
|
425
459
|
- lib/tapyrus/store/db/level_db.rb
|
|
426
460
|
- lib/tapyrus/store/spv_chain.rb
|
|
461
|
+
- lib/tapyrus/tip0137.rb
|
|
427
462
|
- lib/tapyrus/tx.rb
|
|
428
463
|
- lib/tapyrus/tx_builder.rb
|
|
429
464
|
- lib/tapyrus/tx_in.rb
|
|
@@ -442,7 +477,6 @@ homepage: https://github.com/chaintope/tapyrusrb
|
|
|
442
477
|
licenses:
|
|
443
478
|
- MIT
|
|
444
479
|
metadata: {}
|
|
445
|
-
post_install_message:
|
|
446
480
|
rdoc_options: []
|
|
447
481
|
require_paths:
|
|
448
482
|
- lib
|
|
@@ -450,15 +484,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
450
484
|
requirements:
|
|
451
485
|
- - ">="
|
|
452
486
|
- !ruby/object:Gem::Version
|
|
453
|
-
version:
|
|
487
|
+
version: 3.0.0
|
|
454
488
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
455
489
|
requirements:
|
|
456
490
|
- - ">="
|
|
457
491
|
- !ruby/object:Gem::Version
|
|
458
492
|
version: '0'
|
|
459
493
|
requirements: []
|
|
460
|
-
rubygems_version: 3.
|
|
461
|
-
signing_key:
|
|
494
|
+
rubygems_version: 3.6.2
|
|
462
495
|
specification_version: 4
|
|
463
496
|
summary: The implementation of Tapyrus Protocol for Ruby.
|
|
464
497
|
test_files: []
|