btcruby 1.1.4 → 1.1.5

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.
@@ -12,9 +12,9 @@ describe BTC::Data do
12
12
  end
13
13
 
14
14
  it "should not decode invalid hex" do
15
- lambda { BTC.from_hex("f") }.must_raise FormatError
16
- lambda { BTC.from_hex("dxadBEEF") }.must_raise FormatError
17
- lambda { BTC.from_hex("-") }.must_raise FormatError
15
+ lambda { BTC.from_hex("f") }.must_raise BTC::FormatError
16
+ lambda { BTC.from_hex("dxadBEEF") }.must_raise BTC::FormatError
17
+ lambda { BTC.from_hex("-") }.must_raise BTC::FormatError
18
18
  end
19
19
 
20
20
  it "should encode valid hex" do
@@ -128,17 +128,17 @@ describe BTC::Key do
128
128
  2560.times do |i|
129
129
  hash = BTC.sha256("tx#{i}")
130
130
  sig = key.ecdsa_signature(hash) + "\x01".b
131
- canonical = Key.validate_script_signature(sig)
131
+ canonical = BTC::Key.validate_script_signature(sig)
132
132
  if !canonical
133
- puts Diagnostics.current.last_message
133
+ puts BTC::Diagnostics.current.last_message
134
134
  end
135
135
  canonical.must_equal true
136
136
  end
137
137
 
138
138
  sig = "3045022100e81a33ac22d0ef25d359a5353977f0f953608b2733141239ec02363237ab6781022045c71237e95b56079e9fa88591060e4c1a4bb02c0cad1ebeb092749d4aa9754701".from_hex
139
- canonical = Key.validate_script_signature(sig)
139
+ canonical = BTC::Key.validate_script_signature(sig)
140
140
  if !canonical
141
- puts Diagnostics.current.last_message
141
+ puts BTC::Diagnostics.current.last_message
142
142
  end
143
143
  canonical.must_equal true
144
144
  end
@@ -150,7 +150,7 @@ describe BTC::Key do
150
150
  # 2560.times do |i|
151
151
  # hash = BTC.sha256("tx#{i}")
152
152
  # sig = key.ecdsa_signature(hash, normalized: false) + "\x01".b
153
- # if !Key.validate_script_signature(sig)
153
+ # if !BTC::Key.validate_script_signature(sig)
154
154
  # puts sig[0, sig.size - 1].to_hex
155
155
  # end
156
156
  # end
@@ -181,23 +181,23 @@ describe BTC::Key do
181
181
  3045022062d08bff9580238c8cd62d9d64e9c1d518932886651f46a445bff773993500f00221008029263cc9ec64589bbbe140995096c257a1fbacf5f9f5ee69a69b96c626cc7a
182
182
  ].each do |hex_sig|
183
183
  sig = hex_sig.from_hex
184
- canonical = Key.validate_script_signature(sig + "\x01".b)
184
+ canonical = BTC::Key.validate_script_signature(sig + "\x01".b)
185
185
  canonical.must_equal false
186
- sig2 = Key.normalized_signature(sig)
186
+ sig2 = BTC::Key.normalized_signature(sig)
187
187
  sig2.wont_equal nil
188
188
  sig2.wont_equal sig
189
- canonical = Key.validate_script_signature(sig2 + "\x01".b)
189
+ canonical = BTC::Key.validate_script_signature(sig2 + "\x01".b)
190
190
  if !canonical
191
- puts Diagnostics.current.last_message
191
+ puts BTC::Diagnostics.current.last_message
192
192
  end
193
193
  canonical.must_equal true
194
194
 
195
195
  # Non-canonical signature must be normalized
196
- sig3 = Key.validate_and_normalize_script_signature(sig + "\x01".b)
196
+ sig3 = BTC::Key.validate_and_normalize_script_signature(sig + "\x01".b)
197
197
  sig3.must_equal sig2 + "\x01".b
198
198
 
199
199
  # Canonical signature should stay the same
200
- sig4 = Key.validate_and_normalize_script_signature(sig2 + "\x01".b)
200
+ sig4 = BTC::Key.validate_and_normalize_script_signature(sig2 + "\x01".b)
201
201
  sig4.must_equal sig2 + "\x01".b
202
202
  end
203
203
  end
@@ -4,18 +4,18 @@ describe BTC::Keychain do
4
4
 
5
5
  it "should support tpub/tprv prefixes for testnet" do
6
6
  seed = "000102030405060708090a0b0c0d0e0f".from_hex
7
- master = Keychain.new(seed: seed)
8
- master.network = Network.testnet
7
+ master = BTC::Keychain.new(seed: seed)
8
+ master.network = BTC::Network.testnet
9
9
  master.xpub.must_equal "tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp"
10
10
  master.xprv.must_equal "tprv8ZgxMBicQKsPeDgjzdC36fs6bMjGApWDNLR9erAXMs5skhMv36j9MV5ecvfavji5khqjWaWSFhN3YcCUUdiKH6isR4Pwy3U5y5egddBr16m"
11
- master.network = Network.mainnet
11
+ master.network = BTC::Network.mainnet
12
12
  master.xpub.must_equal "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"
13
13
  master.xprv.must_equal "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi"
14
14
  end
15
15
 
16
16
  it "should support path API" do
17
17
  seed = "000102030405060708090a0b0c0d0e0f".from_hex
18
- master = Keychain.new(seed: seed)
18
+ master = BTC::Keychain.new(seed: seed)
19
19
  master.derived_keychain("").xpub.must_equal "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"
20
20
  master.derived_keychain("m").xpub.must_equal "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"
21
21
  master.derived_keychain("0'").xpub.must_equal "xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw"
@@ -51,7 +51,7 @@ describe BTC::Keychain do
51
51
  # * ext prv: xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76
52
52
 
53
53
  seed = "000102030405060708090a0b0c0d0e0f".from_hex
54
- master = Keychain.new(seed: seed)
54
+ master = BTC::Keychain.new(seed: seed)
55
55
 
56
56
  master.key.address.to_s.must_equal "15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma"
57
57
  master.key.address.to_s.must_equal master.public_keychain.key.address.to_s
@@ -70,7 +70,7 @@ describe BTC::Keychain do
70
70
  master.xpub.must_equal "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"
71
71
  master.xprv.must_equal "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi"
72
72
 
73
- master2 = Keychain.new(xprv: master.extended_private_key)
73
+ master2 = BTC::Keychain.new(xprv: master.extended_private_key)
74
74
  master2.private?.must_equal true
75
75
  (master2 == master).must_equal true
76
76
  master2.xpub.must_equal master.xpub
@@ -135,7 +135,7 @@ describe BTC::Keychain do
135
135
  # * ext prv: xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j
136
136
 
137
137
  seed = "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542".from_hex
138
- master = Keychain.new(seed: seed)
138
+ master = BTC::Keychain.new(seed: seed)
139
139
 
140
140
  master.parent_fingerprint.must_equal 0
141
141
  master.identifier.to_hex.must_equal "bd16bee53961a47d6ad888e29545434a89bdfe95"
@@ -173,7 +173,7 @@ describe BTC::Keychain do
173
173
  end
174
174
 
175
175
  it "should behave correctly on privkeys below 32-byte size" do
176
- keychain = Keychain.new(seed: "stress test")
176
+ keychain = BTC::Keychain.new(seed: "stress test")
177
177
  #puts keychain.extended_private_key
178
178
  # Uncomment this to figure out the indexes for the shorter keys
179
179
  if false
@@ -221,7 +221,7 @@ describe BTC::Keychain do
221
221
 
222
222
  it "should verify a certain regression test" do
223
223
  extprv = "xprv9s21ZrQH143K3ZhiFsU612wiYCnd5miCTnWRMRJCmbTUxnn3F2WXuTXcoEyWpsit8ZqS5ddNvsoaEQuwzNwH8nmVDS24NwHbiu5oCrj85Kz"
224
- keychain = Keychain.new(xprv: extprv)
224
+ keychain = BTC::Keychain.new(xprv: extprv)
225
225
  key0 = keychain.derived_keychain(0, hardened: false).key
226
226
  # puts "UNCOMPR: #{key0.uncompressed_key.address.to_s}"
227
227
  # puts " COMPR: #{key0.compressed_key.address.to_s}"
@@ -233,7 +233,7 @@ describe BTC::Keychain do
233
233
 
234
234
  it "should support conversion to public keychain" do
235
235
  seed = "000102030405060708090a0b0c0d0e0f".from_hex
236
- master = Keychain.new(seed: seed)
236
+ master = BTC::Keychain.new(seed: seed)
237
237
 
238
238
  m0prv = master.derived_keychain(0, hardened:true)
239
239
  m0prv_pub = m0prv.public_keychain
@@ -248,12 +248,12 @@ describe BTC::Keychain do
248
248
  m0prv_pub.public?.must_equal true
249
249
  m0prv_pub.hardened?.must_equal true
250
250
 
251
- m0prv_pub2 = Keychain.new(extended_key: m0prv.extended_public_key)
251
+ m0prv_pub2 = BTC::Keychain.new(extended_key: m0prv.extended_public_key)
252
252
  m0prv_pub2.must_equal m0prv_pub
253
253
  end
254
254
 
255
255
  it "should support public-only derivation" do
256
- keychain = Keychain.new(xpub: "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB")
256
+ keychain = BTC::Keychain.new(xpub: "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB")
257
257
  m0pub = keychain.derived_keychain(0)
258
258
  m0pub.extended_public_key.must_equal "xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH"
259
259
  m0pub.extended_private_key.must_equal nil
@@ -3,7 +3,7 @@ describe BTC::MerkleTree do
3
3
 
4
4
  it "should compute root of one hash equal to that hash" do
5
5
  hash = "5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456"
6
- MerkleTree.new(hashes: [hash.from_hex]).merkle_root.to_hex.must_equal hash
6
+ BTC::MerkleTree.new(hashes: [hash.from_hex]).merkle_root.to_hex.must_equal hash
7
7
  end
8
8
 
9
9
  it "merkle root of 2 hashes must equal hash(a+b)" do
@@ -11,7 +11,7 @@ describe BTC::MerkleTree do
11
11
  b = "0c08173828583fc6ecd6ecdbcca7b6939c49c242ad5107e39deb7b0a5996b903".from_hex
12
12
  r = "7de236613dd3d9fa1d86054a84952f1e0df2f130546b394a4d4dd7b76997f607".from_hex
13
13
  r.to_hex.must_equal BTC.hash256(a+b).to_hex
14
- mt = MerkleTree.new(hashes: [a,b])
14
+ mt = BTC::MerkleTree.new(hashes: [a,b])
15
15
  mt.tail_duplicates?.must_equal false
16
16
  mt.merkle_root.to_hex.must_equal r.to_hex
17
17
  end
@@ -22,7 +22,7 @@ describe BTC::MerkleTree do
22
22
  c = "80903da4e6bbdf96e8ff6fc3966b0cfd355c7e860bdd1caa8e4722d9230e40ac".from_hex
23
23
  r = "5b7534123197114fa7e7459075f39d89ffab74b5c3f31fad48a025b931ff5a01".from_hex
24
24
  r.to_hex.must_equal BTC.hash256(BTC.hash256(a+b)+BTC.hash256(c+c)).to_hex
25
- mt = MerkleTree.new(hashes: [a,b,c])
25
+ mt = BTC::MerkleTree.new(hashes: [a,b,c])
26
26
  mt.tail_duplicates?.must_equal false
27
27
  mt.merkle_root.to_hex.must_equal r.to_hex
28
28
  end
@@ -2,31 +2,31 @@ require_relative '../spec_helper'
2
2
 
3
3
  describe BTC::AssetAddress do
4
4
  it "should encode bitcoin address to a correct asset address" do
5
- btc_address = Address.parse("16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM")
6
- asset_address = AssetAddress.new(bitcoin_address: btc_address)
5
+ btc_address = BTC::Address.parse("16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM")
6
+ asset_address = BTC::AssetAddress.new(bitcoin_address: btc_address)
7
7
  asset_address.bitcoin_address.must_equal btc_address
8
8
  asset_address.to_s.must_equal "akB4NBW9UuCmHuepksob6yfZs6naHtRCPNy"
9
9
  asset_address.mainnet?.must_equal true
10
10
  end
11
11
  it "should decode an asset address" do
12
- asset_address = Address.parse("akB4NBW9UuCmHuepksob6yfZs6naHtRCPNy")
12
+ asset_address = BTC::Address.parse("akB4NBW9UuCmHuepksob6yfZs6naHtRCPNy")
13
13
  asset_address.bitcoin_address.to_s.must_equal "16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM"
14
14
  asset_address.mainnet?.must_equal true
15
15
  end
16
16
  it "should allow instantiating Asset Address with an Asset Address" do
17
- asset_address = AssetAddress.new(bitcoin_address: "akB4NBW9UuCmHuepksob6yfZs6naHtRCPNy")
17
+ asset_address = BTC::AssetAddress.new(bitcoin_address: "akB4NBW9UuCmHuepksob6yfZs6naHtRCPNy")
18
18
  asset_address.to_s.must_equal "akB4NBW9UuCmHuepksob6yfZs6naHtRCPNy"
19
19
  asset_address.bitcoin_address.to_s.must_equal "16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM"
20
20
  asset_address.mainnet?.must_equal true
21
21
  end
22
22
  it "should support P2SH address for assets" do
23
- asset_address = AssetAddress.new(bitcoin_address: "3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
23
+ asset_address = BTC::AssetAddress.new(bitcoin_address: "3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
24
24
  asset_address.to_s.must_equal "anQin2TDYaubr6M5MQM8kNXMitHc2hsmfGc"
25
25
  asset_address.bitcoin_address.to_s.must_equal "3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX"
26
26
  asset_address.mainnet?.must_equal true
27
27
 
28
- asset_address = Address.parse("anQin2TDYaubr6M5MQM8kNXMitHc2hsmfGc")
29
- asset_address.class.must_equal(AssetAddress)
28
+ asset_address = BTC::Address.parse("anQin2TDYaubr6M5MQM8kNXMitHc2hsmfGc")
29
+ asset_address.class.must_equal(BTC::AssetAddress)
30
30
  asset_address.bitcoin_address.to_s.must_equal "3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX"
31
31
  asset_address.mainnet?.must_equal true
32
32
  end
@@ -2,13 +2,13 @@ require_relative '../spec_helper'
2
2
 
3
3
  describe BTC::AssetID do
4
4
  it "should encode script to a correct address" do
5
- key = Key.new(private_key: "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725".from_hex, public_key_compressed: false)
6
- asset_id = AssetID.new(script: key.address(network: Network.mainnet).script, network: Network.mainnet)
5
+ key = BTC::Key.new(private_key: "18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725".from_hex, public_key_compressed: false)
6
+ asset_id = BTC::AssetID.new(script: key.address(network: BTC::Network.mainnet).script, network: BTC::Network.mainnet)
7
7
  asset_id.to_s.must_equal "ALn3aK1fSuG27N96UGYB1kUYUpGKRhBuBC"
8
8
  asset_id.is_a?(BTC::AssetID).must_equal true
9
9
  end
10
10
  it "should decode an asset address" do
11
- asset_id = Address.parse("ALn3aK1fSuG27N96UGYB1kUYUpGKRhBuBC")
11
+ asset_id = BTC::Address.parse("ALn3aK1fSuG27N96UGYB1kUYUpGKRhBuBC")
12
12
  asset_id.is_a?(BTC::AssetID).must_equal true
13
13
  asset_id.hash.must_equal "36e0ea8e93eaa0285d641305f4c81e563aa570a2".from_hex
14
14
  end
@@ -18,22 +18,22 @@ describe BTC::AssetMarker do
18
18
  # - Outputs after output 3 (if any) have an asset quantity of 0.
19
19
  # 0x05 The metadata is 5 bytes long.
20
20
  # 0x48 0x65 0x6c 0x6c 0x6f Some arbitrary metadata.
21
- output = TransactionOutput.new(value: 0, script: Script.new << OP_RETURN << "4f41010003ac0200e58e260548656c6c6f".from_hex)
22
- marker = AssetMarker.new(output: output)
21
+ output = BTC::TransactionOutput.new(value: 0, script: BTC::Script.new << BTC::OP_RETURN << "4f41010003ac0200e58e260548656c6c6f".from_hex)
22
+ marker = BTC::AssetMarker.new(output: output)
23
23
  marker.quantities.must_equal [300, 0, 624_485]
24
24
  marker.metadata.must_equal "Hello"
25
25
 
26
- marker = AssetMarker.new(script: output.script)
26
+ marker = BTC::AssetMarker.new(script: output.script)
27
27
  marker.quantities.must_equal [300, 0, 624_485]
28
28
  marker.metadata.must_equal "Hello"
29
29
 
30
- marker = AssetMarker.new(data: output.script.op_return_data)
30
+ marker = BTC::AssetMarker.new(data: output.script.op_return_data)
31
31
  marker.quantities.must_equal [300, 0, 624_485]
32
32
  marker.metadata.must_equal "Hello"
33
33
  end
34
34
 
35
35
  it "should encode marker output" do
36
- marker = AssetMarker.new
36
+ marker = BTC::AssetMarker.new
37
37
  marker.data.must_equal "4f4101000000".from_hex
38
38
  marker.metadata = "Hello"
39
39
  marker.data.must_equal "4f410100000548656c6c6f".from_hex
@@ -3,21 +3,21 @@ require_relative '../spec_helper'
3
3
  describe "Verifying transfer outputs" do
4
4
 
5
5
  def build_asset_transaction(inputs: [], issues: [], transfers: [])
6
- tx = Transaction.new
7
- script = PublicKeyAddress.new(hash: "some address".hash160).script
6
+ tx = BTC::Transaction.new
7
+ script = BTC::PublicKeyAddress.new(hash: "some address".hash160).script
8
8
  inputs.each do
9
- tx.add_input(TransactionInput.new(previous_hash: "".sha256, previous_index: 0))
9
+ tx.add_input(BTC::TransactionInput.new(previous_hash: "".sha256, previous_index: 0))
10
10
  end
11
11
  issues.each do |tuple|
12
- tx.add_output(TransactionOutput.new(value: 1, script: script))
12
+ tx.add_output(BTC::TransactionOutput.new(value: 1, script: script))
13
13
  end
14
14
  qtys = issues.map{|tuple| tuple.first} + transfers.map{|tuple| tuple.first}
15
- tx.add_output(AssetMarker.new(quantities: qtys).output)
15
+ tx.add_output(BTC::AssetMarker.new(quantities: qtys).output)
16
16
  transfers.each do |tuple|
17
- tx.add_output(TransactionOutput.new(value: 1, script: script))
17
+ tx.add_output(BTC::TransactionOutput.new(value: 1, script: script))
18
18
  end
19
19
 
20
- atx = AssetTransaction.new(transaction: tx)
20
+ atx = BTC::AssetTransaction.new(transaction: tx)
21
21
  atx.inputs.each_with_index do |ain, i|
22
22
  amount, name = inputs[i]
23
23
  if amount
@@ -35,7 +35,7 @@ describe "Verifying transfer outputs" do
35
35
  end
36
36
 
37
37
  def asset_id(name)
38
- name ? AssetID.new(hash: name.hash160) : nil
38
+ name ? BTC::AssetID.new(hash: name.hash160) : nil
39
39
  end
40
40
 
41
41
  def asset_transfer_must_be_verified(inputs: [], issues: [], transfers: [])
@@ -67,11 +67,11 @@ describe "Verifying transfer outputs" do
67
67
  end
68
68
 
69
69
  before do
70
- @processor = AssetProcessor.new(source: :NOT_USED)
70
+ @processor = BTC::AssetProcessor.new(source: :NOT_USED)
71
71
  end
72
72
 
73
73
  it "should support transferring asset with overlapping and underlapping" do
74
- Diagnostics.current.trace do
74
+ BTC::Diagnostics.current.trace do
75
75
  asset_transfer_must_be_verified(
76
76
  inputs: [ [100, "A"], [50, "A"], [10, "A"], [30, "B"], [14, "B"] ],
77
77
  issues: [ ],
@@ -118,7 +118,7 @@ end
118
118
  describe "Verifying a chain of transactions" do
119
119
 
120
120
  class InMemoryTxSource
121
- include AssetProcessorSource
121
+ include BTC::AssetProcessorSource
122
122
  def initialize
123
123
  @txs = {}
124
124
  end
@@ -134,21 +134,21 @@ describe "Verifying a chain of transactions" do
134
134
  end
135
135
 
136
136
  def build_asset_transaction(inputs: [], issues: [], transfers: [])
137
- tx = Transaction.new
138
- script = PublicKeyAddress.new(hash: "some address".hash160).script
137
+ tx = BTC::Transaction.new
138
+ script = BTC::PublicKeyAddress.new(hash: "some address".hash160).script
139
139
  inputs.each do
140
- tx.add_input(TransactionInput.new(previous_hash: "".sha256, previous_index: 0))
140
+ tx.add_input(BTC::TransactionInput.new(previous_hash: "".sha256, previous_index: 0))
141
141
  end
142
142
  issues.each do |tuple|
143
- tx.add_output(TransactionOutput.new(value: 1, script: script))
143
+ tx.add_output(BTC::TransactionOutput.new(value: 1, script: script))
144
144
  end
145
145
  qtys = issues.map{|tuple| tuple.first} + transfers.map{|tuple| tuple.first}
146
- tx.add_output(AssetMarker.new(quantities: qtys).output)
146
+ tx.add_output(BTC::AssetMarker.new(quantities: qtys).output)
147
147
  transfers.each do |tuple|
148
- tx.add_output(TransactionOutput.new(value: 1, script: script))
148
+ tx.add_output(BTC::TransactionOutput.new(value: 1, script: script))
149
149
  end
150
150
 
151
- atx = AssetTransaction.new(transaction: tx)
151
+ atx = BTC::AssetTransaction.new(transaction: tx)
152
152
  atx.inputs.each_with_index do |ain, i|
153
153
  amount, name = inputs[i]
154
154
  if amount
@@ -166,14 +166,14 @@ describe "Verifying a chain of transactions" do
166
166
  end
167
167
 
168
168
  def asset_id(name)
169
- name ? AssetID.new(hash: name.hash160) : nil
169
+ name ? BTC::AssetID.new(hash: name.hash160) : nil
170
170
  end
171
171
 
172
172
  def make_transaction(inputs: [], outputs: [])
173
- tx = Transaction.new
173
+ tx = BTC::Transaction.new
174
174
  inputs.each do |inp|
175
175
  txout = inp
176
- tx.add_input(TransactionInput.new(previous_hash: txout.transaction_hash,
176
+ tx.add_input(BTC::TransactionInput.new(previous_hash: txout.transaction_hash,
177
177
  previous_index: txout.index))
178
178
  end
179
179
  payment_outputs = []
@@ -192,25 +192,25 @@ describe "Verifying a chain of transactions" do
192
192
  end
193
193
  end
194
194
  issue_outputs.each do |out|
195
- tx.add_output(TransactionOutput.new(value: out[:btc], script: Address.parse(out[:address]).script))
195
+ tx.add_output(BTC::TransactionOutput.new(value: out[:btc], script: BTC::Address.parse(out[:address]).script))
196
196
  end
197
197
  if qtys.size > 0
198
- tx.add_output(AssetMarker.new(quantities: qtys).output)
198
+ tx.add_output(BTC::AssetMarker.new(quantities: qtys).output)
199
199
  end
200
200
  (transfer_outputs + payment_outputs).each do |out|
201
- tx.add_output(TransactionOutput.new(value: out[:btc], script: Address.parse(out[:address]).script))
201
+ tx.add_output(BTC::TransactionOutput.new(value: out[:btc], script: BTC::Address.parse(out[:address]).script))
202
202
  end
203
203
  tx
204
204
  end
205
205
 
206
206
  before do
207
207
  @source = InMemoryTxSource.new
208
- @processor = AssetProcessor.new(source: @source)
208
+ @processor = BTC::AssetProcessor.new(source: @source)
209
209
  end
210
210
 
211
211
  it "should verify a simple issuance chain (parent + child transaction)" do
212
- issue_address = Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
213
- asset_id = AssetID.new(script: issue_address.script)
212
+ issue_address = BTC::Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
213
+ asset_id = BTC::AssetID.new(script: issue_address.script)
214
214
  tx1 = make_transaction(outputs: [
215
215
  {btc: 10_000, address: "3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX"}
216
216
  ])
@@ -224,9 +224,9 @@ describe "Verifying a chain of transactions" do
224
224
  ]
225
225
  )
226
226
  @source.add_transaction(tx1)
227
- atx = AssetTransaction.new(transaction: tx2)
227
+ atx = BTC::AssetTransaction.new(transaction: tx2)
228
228
 
229
- Diagnostics.current.trace do
229
+ BTC::Diagnostics.current.trace do
230
230
  @processor.verify_asset_transaction(atx).must_equal(true)
231
231
  atx.outputs.map {|aout|
232
232
  [aout.verified?, aout.value, aout.asset_id]
@@ -240,8 +240,8 @@ describe "Verifying a chain of transactions" do
240
240
 
241
241
 
242
242
  it "should verify a transfer chain" do
243
- issue_address = Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
244
- asset_id = AssetID.new(script: issue_address.script)
243
+ issue_address = BTC::Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
244
+ asset_id = BTC::AssetID.new(script: issue_address.script)
245
245
  tx1 = make_transaction(outputs: [
246
246
  {btc: 10_000, address: "3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX"}
247
247
  ])
@@ -277,9 +277,9 @@ describe "Verifying a chain of transactions" do
277
277
  @source.add_transaction(tx1)
278
278
  @source.add_transaction(tx2)
279
279
  @source.add_transaction(tx3)
280
- atx = AssetTransaction.new(transaction: tx4)
280
+ atx = BTC::AssetTransaction.new(transaction: tx4)
281
281
 
282
- Diagnostics.current.trace do
282
+ BTC::Diagnostics.current.trace do
283
283
  result = @processor.verify_asset_transaction(atx)
284
284
  result.must_equal(true)
285
285
  atx.outputs.map {|aout|
@@ -293,8 +293,8 @@ describe "Verifying a chain of transactions" do
293
293
  end
294
294
 
295
295
  it "should fail to verify an incorrect transfer chain" do
296
- issue_address = Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
297
- asset_id = AssetID.new(script: issue_address.script)
296
+ issue_address = BTC::Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
297
+ asset_id = BTC::AssetID.new(script: issue_address.script)
298
298
  tx1 = make_transaction(outputs: [
299
299
  {btc: 10_000, address: "3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX"}
300
300
  ])
@@ -331,9 +331,9 @@ describe "Verifying a chain of transactions" do
331
331
  @source.add_transaction(tx1)
332
332
  @source.add_transaction(tx2)
333
333
  @source.add_transaction(tx3)
334
- atx = AssetTransaction.new(transaction: tx4)
334
+ atx = BTC::AssetTransaction.new(transaction: tx4)
335
335
 
336
- #Diagnostics.current.trace do
336
+ #BTC::Diagnostics.current.trace do
337
337
  result = @processor.verify_asset_transaction(atx)
338
338
  result.must_equal(false)
339
339
  atx.outputs.map {|aout|
@@ -347,10 +347,10 @@ describe "Verifying a chain of transactions" do
347
347
  end
348
348
 
349
349
  it "should verify a transfer chain with multiple assets" do
350
- issue_address1 = Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
351
- issue_address2 = Address.parse("3GkKDgJAWJnizg6Tz7DBM8uDtdHtrUkQ2X")
352
- asset_id1 = AssetID.new(script: issue_address1.script)
353
- asset_id2 = AssetID.new(script: issue_address2.script)
350
+ issue_address1 = BTC::Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
351
+ issue_address2 = BTC::Address.parse("3GkKDgJAWJnizg6Tz7DBM8uDtdHtrUkQ2X")
352
+ asset_id1 = BTC::AssetID.new(script: issue_address1.script)
353
+ asset_id2 = BTC::AssetID.new(script: issue_address2.script)
354
354
 
355
355
  tx1 = make_transaction(outputs: [
356
356
  {btc: 10_000, address: issue_address1}
@@ -472,9 +472,9 @@ describe "Verifying a chain of transactions" do
472
472
  @source.add_transaction(tx7)
473
473
  @source.add_transaction(tx8)
474
474
  @source.add_transaction(tx9)
475
- atx = AssetTransaction.new(transaction: tx_final)
475
+ atx = BTC::AssetTransaction.new(transaction: tx_final)
476
476
 
477
- Diagnostics.current.trace do
477
+ BTC::Diagnostics.current.trace do
478
478
  result = @processor.verify_asset_transaction(atx)
479
479
  result.must_equal(true)
480
480
 
@@ -496,10 +496,10 @@ describe "Verifying a chain of transactions" do
496
496
  end
497
497
 
498
498
  it "should fail to verify a mix of assets in one output" do
499
- issue_address1 = Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
500
- issue_address2 = Address.parse("3GkKDgJAWJnizg6Tz7DBM8uDtdHtrUkQ2X")
501
- asset_id1 = AssetID.new(script: issue_address1.script)
502
- asset_id2 = AssetID.new(script: issue_address2.script)
499
+ issue_address1 = BTC::Address.parse("3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX")
500
+ issue_address2 = BTC::Address.parse("3GkKDgJAWJnizg6Tz7DBM8uDtdHtrUkQ2X")
501
+ asset_id1 = BTC::AssetID.new(script: issue_address1.script)
502
+ asset_id2 = BTC::AssetID.new(script: issue_address2.script)
503
503
 
504
504
  tx1 = make_transaction(outputs: [
505
505
  {btc: 10_000, address: issue_address1}
@@ -549,7 +549,7 @@ describe "Verifying a chain of transactions" do
549
549
  @source.add_transaction(tx2)
550
550
  @source.add_transaction(tx3)
551
551
  @source.add_transaction(tx4)
552
- atx = AssetTransaction.new(transaction: tx5)
552
+ atx = BTC::AssetTransaction.new(transaction: tx5)
553
553
 
554
554
  #Diagnostics.current.trace do
555
555
  result = @processor.verify_asset_transaction(atx)