tapyrus 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- 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 +33 -31
- metadata +30 -14
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,47 @@
|
|
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"
|
35
|
+
spec.add_runtime_dependency "terminal-table", "~> 3.0.2"
|
36
|
+
spec.add_runtime_dependency "jwt"
|
35
37
|
|
36
38
|
# for options
|
37
|
-
spec.add_development_dependency
|
39
|
+
spec.add_development_dependency "leveldb-native"
|
38
40
|
|
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
|
41
|
+
spec.add_development_dependency "bundler"
|
42
|
+
spec.add_development_dependency "prettier", "4.0.4"
|
43
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
44
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
45
|
+
spec.add_development_dependency "timecop"
|
46
|
+
spec.add_development_dependency "webmock", "~> 3.0"
|
45
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ecdsa
|
@@ -168,16 +168,16 @@ dependencies:
|
|
168
168
|
name: json_pure
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - '='
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 2.3
|
173
|
+
version: 2.6.3
|
174
174
|
type: :runtime
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - '='
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 2.3
|
180
|
+
version: 2.6.3
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: terminal-table
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,6 +192,20 @@ dependencies:
|
|
192
192
|
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: 3.0.2
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: jwt
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: leveldb-native
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,14 +240,14 @@ dependencies:
|
|
226
240
|
requirements:
|
227
241
|
- - '='
|
228
242
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
243
|
+
version: 4.0.4
|
230
244
|
type: :development
|
231
245
|
prerelease: false
|
232
246
|
version_requirements: !ruby/object:Gem::Requirement
|
233
247
|
requirements:
|
234
248
|
- - '='
|
235
249
|
- !ruby/object:Gem::Version
|
236
|
-
version:
|
250
|
+
version: 4.0.4
|
237
251
|
- !ruby/object:Gem::Dependency
|
238
252
|
name: rake
|
239
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -303,7 +317,7 @@ files:
|
|
303
317
|
- ".github/workflows/ruby.yml"
|
304
318
|
- ".gitignore"
|
305
319
|
- ".prettierignore"
|
306
|
-
- ".prettierrc.
|
320
|
+
- ".prettierrc.yml"
|
307
321
|
- ".rspec"
|
308
322
|
- ".ruby-gemset"
|
309
323
|
- ".ruby-version"
|
@@ -339,6 +353,7 @@ files:
|
|
339
353
|
- lib/tapyrus/ext/ecdsa.rb
|
340
354
|
- lib/tapyrus/ext/json_parser.rb
|
341
355
|
- lib/tapyrus/ext_key.rb
|
356
|
+
- lib/tapyrus/jws.rb
|
342
357
|
- lib/tapyrus/key.rb
|
343
358
|
- lib/tapyrus/key_path.rb
|
344
359
|
- lib/tapyrus/logger.rb
|
@@ -424,6 +439,7 @@ files:
|
|
424
439
|
- lib/tapyrus/store/db.rb
|
425
440
|
- lib/tapyrus/store/db/level_db.rb
|
426
441
|
- lib/tapyrus/store/spv_chain.rb
|
442
|
+
- lib/tapyrus/tip0137.rb
|
427
443
|
- lib/tapyrus/tx.rb
|
428
444
|
- lib/tapyrus/tx_builder.rb
|
429
445
|
- lib/tapyrus/tx_in.rb
|
@@ -442,7 +458,7 @@ homepage: https://github.com/chaintope/tapyrusrb
|
|
442
458
|
licenses:
|
443
459
|
- MIT
|
444
460
|
metadata: {}
|
445
|
-
post_install_message:
|
461
|
+
post_install_message:
|
446
462
|
rdoc_options: []
|
447
463
|
require_paths:
|
448
464
|
- lib
|
@@ -450,15 +466,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
450
466
|
requirements:
|
451
467
|
- - ">="
|
452
468
|
- !ruby/object:Gem::Version
|
453
|
-
version:
|
469
|
+
version: 3.0.0
|
454
470
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
455
471
|
requirements:
|
456
472
|
- - ">="
|
457
473
|
- !ruby/object:Gem::Version
|
458
474
|
version: '0'
|
459
475
|
requirements: []
|
460
|
-
rubygems_version: 3.3
|
461
|
-
signing_key:
|
476
|
+
rubygems_version: 3.5.3
|
477
|
+
signing_key:
|
462
478
|
specification_version: 4
|
463
479
|
summary: The implementation of Tapyrus Protocol for Ruby.
|
464
480
|
test_files: []
|