bitcoin-ruby 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.travis.yml +2 -7
  4. data/COPYING +1 -1
  5. data/Gemfile +2 -6
  6. data/Gemfile.lock +34 -0
  7. data/README.rdoc +16 -68
  8. data/Rakefile +3 -6
  9. data/bin/bitcoin_shell +0 -1
  10. data/{concept-examples/blockchain-pow.rb → examples/concept-blockchain-pow.rb} +0 -0
  11. data/lib/bitcoin.rb +350 -296
  12. data/lib/bitcoin/builder.rb +3 -1
  13. data/lib/bitcoin/connection.rb +2 -1
  14. data/lib/bitcoin/contracthash.rb +76 -0
  15. data/lib/bitcoin/dogecoin.rb +97 -0
  16. data/lib/bitcoin/ffi/bitcoinconsensus.rb +74 -0
  17. data/lib/bitcoin/ffi/openssl.rb +98 -2
  18. data/lib/bitcoin/ffi/secp256k1.rb +144 -0
  19. data/lib/bitcoin/key.rb +12 -2
  20. data/lib/bitcoin/logger.rb +3 -12
  21. data/lib/bitcoin/protocol/block.rb +3 -9
  22. data/lib/bitcoin/protocol/parser.rb +6 -2
  23. data/lib/bitcoin/protocol/tx.rb +44 -13
  24. data/lib/bitcoin/protocol/txin.rb +4 -2
  25. data/lib/bitcoin/protocol/txout.rb +2 -2
  26. data/lib/bitcoin/script.rb +212 -37
  27. data/lib/bitcoin/trezor/mnemonic.rb +130 -0
  28. data/lib/bitcoin/version.rb +1 -1
  29. data/spec/bitcoin/bitcoin_spec.rb +32 -3
  30. data/spec/bitcoin/builder_spec.rb +18 -0
  31. data/spec/bitcoin/contracthash_spec.rb +45 -0
  32. data/spec/bitcoin/dogecoin_spec.rb +176 -0
  33. data/spec/bitcoin/ffi_openssl.rb +45 -0
  34. data/spec/bitcoin/fixtures/156e6e1b84c5c3bd3a0927b25e4119fadce6e6d5186f363317511d1d680fae9a.json +24 -0
  35. data/spec/bitcoin/fixtures/8d0b238a06b5a70be75d543902d02d7a514d68d3252a949a513865ac3538874c.json +24 -0
  36. data/spec/bitcoin/fixtures/coinbase-toshi.json +33 -0
  37. data/spec/bitcoin/fixtures/coinbase.json +24 -0
  38. data/spec/bitcoin/fixtures/dogecoin-block-60323982f9c5ff1b5a954eac9dc1269352835f47c2c5222691d80f0d50dcf053.bin +0 -0
  39. data/spec/bitcoin/fixtures/rawtx-01-toshi.json +46 -0
  40. data/spec/bitcoin/fixtures/rawtx-02-toshi.json +46 -0
  41. data/spec/bitcoin/fixtures/rawtx-03-toshi.json +73 -0
  42. data/spec/bitcoin/fixtures/rawtx-testnet-04fdc38d6722ab4b12d79113fc4b2896bdcc5169710690ee4e78541b98e467b4.bin +0 -0
  43. data/spec/bitcoin/fixtures/rawtx-testnet-0b294c7d11dd21bcccb8393e6744fed7d4d1981a08c00e3e88838cc421f33c9f.bin +0 -0
  44. data/spec/bitcoin/fixtures/rawtx-testnet-3bc52ac063291ad92d95ddda5fd776a342083b95607ad32ed8bc6f8f7d30449e.bin +0 -0
  45. data/spec/bitcoin/fixtures/rawtx-testnet-6f0bbdd4e71a8af4305018d738184df32dbb6f27284fdebd5b56d16947f7c181.bin +0 -0
  46. data/spec/bitcoin/fixtures/rawtx-testnet-a7c9b06e275e8674cc19a5f7d3e557c72c6d93576e635b33212dbe08ab7cdb60.bin +0 -0
  47. data/spec/bitcoin/fixtures/rawtx-testnet-f80acbd2f594d04ddb0e1cacba662132104909157dff526935a3c88abe9201a5.bin +0 -0
  48. data/spec/bitcoin/protocol/block_spec.rb +0 -22
  49. data/spec/bitcoin/protocol/tx_spec.rb +145 -2
  50. data/spec/bitcoin/script/script_spec.rb +282 -0
  51. data/spec/bitcoin/secp256k1_spec.rb +48 -0
  52. data/spec/bitcoin/spec_helper.rb +0 -51
  53. data/spec/bitcoin/trezor/mnemonic_spec.rb +161 -0
  54. metadata +48 -98
  55. data/bin/bitcoin_dns_seed +0 -130
  56. data/bin/bitcoin_gui +0 -80
  57. data/bin/bitcoin_node +0 -153
  58. data/bin/bitcoin_node_cli +0 -81
  59. data/bin/bitcoin_wallet +0 -402
  60. data/doc/CONFIG.rdoc +0 -66
  61. data/doc/EXAMPLES.rdoc +0 -13
  62. data/doc/NAMECOIN.rdoc +0 -34
  63. data/doc/NODE.rdoc +0 -225
  64. data/doc/STORAGE.rdoc +0 -33
  65. data/doc/WALLET.rdoc +0 -102
  66. data/examples/balance.rb +0 -66
  67. data/examples/forwarder.rb +0 -73
  68. data/examples/index_nhash.rb +0 -24
  69. data/examples/reindex_p2sh_addrs.rb +0 -44
  70. data/examples/relay_tx.rb +0 -22
  71. data/examples/verify_tx.rb +0 -57
  72. data/lib/bitcoin/config.rb +0 -58
  73. data/lib/bitcoin/gui/addr_view.rb +0 -44
  74. data/lib/bitcoin/gui/bitcoin-ruby.png +0 -0
  75. data/lib/bitcoin/gui/bitcoin-ruby.svg +0 -80
  76. data/lib/bitcoin/gui/conn_view.rb +0 -38
  77. data/lib/bitcoin/gui/connection.rb +0 -70
  78. data/lib/bitcoin/gui/em_gtk.rb +0 -30
  79. data/lib/bitcoin/gui/gui.builder +0 -1643
  80. data/lib/bitcoin/gui/gui.rb +0 -292
  81. data/lib/bitcoin/gui/helpers.rb +0 -115
  82. data/lib/bitcoin/gui/tree_view.rb +0 -84
  83. data/lib/bitcoin/gui/tx_view.rb +0 -69
  84. data/lib/bitcoin/namecoin.rb +0 -280
  85. data/lib/bitcoin/network/command_client.rb +0 -104
  86. data/lib/bitcoin/network/command_handler.rb +0 -570
  87. data/lib/bitcoin/network/connection_handler.rb +0 -387
  88. data/lib/bitcoin/network/node.rb +0 -565
  89. data/lib/bitcoin/storage/dummy/dummy_store.rb +0 -179
  90. data/lib/bitcoin/storage/models.rb +0 -171
  91. data/lib/bitcoin/storage/sequel/migrations.rb +0 -99
  92. data/lib/bitcoin/storage/sequel/migrations/001_base_schema.rb +0 -52
  93. data/lib/bitcoin/storage/sequel/migrations/002_tx.rb +0 -45
  94. data/lib/bitcoin/storage/sequel/migrations/003_change_txin_script_sig_to_blob.rb +0 -18
  95. data/lib/bitcoin/storage/sequel/migrations/004_change_txin_prev_out_to_blob.rb +0 -18
  96. data/lib/bitcoin/storage/sequel/migrations/005_change_tx_hash_to_bytea.rb +0 -14
  97. data/lib/bitcoin/storage/sequel/migrations/006_add_tx_nhash.rb +0 -31
  98. data/lib/bitcoin/storage/sequel/migrations/007_add_prev_out_index_index.rb +0 -16
  99. data/lib/bitcoin/storage/sequel/migrations/008_add_txin_p2sh_type.rb +0 -31
  100. data/lib/bitcoin/storage/sequel/migrations/009_add_addrs_type.rb +0 -56
  101. data/lib/bitcoin/storage/sequel/sequel_store.rb +0 -551
  102. data/lib/bitcoin/storage/storage.rb +0 -517
  103. data/lib/bitcoin/storage/utxo/migrations/001_base_schema.rb +0 -52
  104. data/lib/bitcoin/storage/utxo/migrations/002_utxo.rb +0 -18
  105. data/lib/bitcoin/storage/utxo/migrations/003_update_indices.rb +0 -14
  106. data/lib/bitcoin/storage/utxo/migrations/004_add_addrs_type.rb +0 -14
  107. data/lib/bitcoin/storage/utxo/utxo_store.rb +0 -374
  108. data/lib/bitcoin/validation.rb +0 -400
  109. data/lib/bitcoin/wallet/coinselector.rb +0 -33
  110. data/lib/bitcoin/wallet/keygenerator.rb +0 -77
  111. data/lib/bitcoin/wallet/keystore.rb +0 -207
  112. data/lib/bitcoin/wallet/txdp.rb +0 -118
  113. data/lib/bitcoin/wallet/wallet.rb +0 -281
  114. data/spec/bitcoin/fixtures/freicoin-block-000000005d231b285e63af83edae2d8f5e50e70d396468643092b9239fd3be3c.bin +0 -0
  115. data/spec/bitcoin/fixtures/freicoin-block-000000005d231b285e63af83edae2d8f5e50e70d396468643092b9239fd3be3c.json +0 -43
  116. data/spec/bitcoin/fixtures/freicoin-genesis-block-000000005b1e3d23ecfd2dd4a6e1a35238aa0392c0a8528c40df52376d7efe2c.bin +0 -0
  117. data/spec/bitcoin/fixtures/freicoin-genesis-block-000000005b1e3d23ecfd2dd4a6e1a35238aa0392c0a8528c40df52376d7efe2c.json +0 -67
  118. data/spec/bitcoin/namecoin_spec.rb +0 -182
  119. data/spec/bitcoin/node/command_api_spec.rb +0 -663
  120. data/spec/bitcoin/storage/models_spec.rb +0 -104
  121. data/spec/bitcoin/storage/reorg_spec.rb +0 -236
  122. data/spec/bitcoin/storage/storage_spec.rb +0 -387
  123. data/spec/bitcoin/storage/validation_spec.rb +0 -300
  124. data/spec/bitcoin/wallet/coinselector_spec.rb +0 -38
  125. data/spec/bitcoin/wallet/keygenerator_spec.rb +0 -69
  126. data/spec/bitcoin/wallet/keystore_spec.rb +0 -190
  127. data/spec/bitcoin/wallet/txdp_spec.rb +0 -76
  128. data/spec/bitcoin/wallet/wallet_spec.rb +0 -238
@@ -1,76 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- require_relative '../spec_helper'
4
- include Bitcoin
5
- include Bitcoin::Wallet
6
- include MiniTest
7
-
8
- describe "Bitcoin::Wallet::TxDP" do
9
-
10
- before do
11
- Bitcoin.network = :testnet
12
- end
13
-
14
- it "should parse txdp" do
15
- txt = fixtures_file("txdp-1.txt")
16
- txdp = TxDP.parse(txt)
17
- txdp.id.should == "3fX59xPj"
18
- txdp.tx.size.should == 3
19
- txdp.tx.first.hash.should ==
20
- "2aa1938705066d0f9988923000ee75d5fc728b92b9739b71f94c139e5a729527"
21
- txdp.inputs.size.should == 2
22
- end
23
-
24
- it "should parse unsigned txdp" do
25
- txt = fixtures_file("txdp-2-unsigned.txt")
26
- txdp = TxDP.parse(txt)
27
- txdp.id.should == "7Q74Wkre"
28
- txdp.tx.size.should == 2
29
- txdp.inputs.size.should == 1
30
- txdp.inputs.first[1].should == nil
31
- end
32
-
33
- it "should parse signed txdp" do
34
- txt = fixtures_file("txdp-2-signed.txt")
35
- txdp = TxDP.parse(txt)
36
- txdp.id.should == "7Q74Wkre"
37
- txdp.tx.size.should == 2
38
- txdp.inputs.size.should == 1
39
- txdp.inputs.first[1].should ==[["mnheKkGdmw8d1fUV15XZbfmLR6AjQjVthy", "49304602210087bc1ff770c6cb3c7e47b9a3acb7dce678c16350f29acaa92e4ab231692256cf0221002da46fc1f39e132e726dea46a6e87e4278e85d36ccd393e39e931b89d55fc3a2014104955ec5646652d1b5bb14b2f867ef8879bcf224f1eab01072147fdfe0992440a234b36792937a23df736e8430613da6f0466bfc5505f2ad41b056131b7af13086"]]
40
- end
41
-
42
- it "should serialize unsigned txdp" do
43
- txt = fixtures_file("txdp-2-unsigned.txt")
44
- txdp = TxDP.parse(txt)
45
- txdp.serialize.should == txt.strip
46
- end
47
-
48
- it "should serialize signed txdp" do
49
- txt = fixtures_file("txdp-2-signed.txt")
50
- txdp = TxDP.parse(txt)
51
- txdp.serialize.should == txt.strip
52
- end
53
-
54
- it "should create txdp from tx" do
55
- tx1 = Bitcoin::P::Tx.from_json(fixtures_file("rawtx-05.json"))
56
- tx2 = Bitcoin::P::Tx.from_json(fixtures_file("rawtx-04.json"))
57
- sig = tx2.in[0].script_sig
58
- tx2.in[0].script_sig_length = 0
59
- tx2.in[0].script_sig = ""
60
- txdp = TxDP.new([tx2, tx1])
61
- txdp.id.should != nil
62
- txdp.inputs.size.should == 1
63
- txdp.inputs.first[0].should == 5e9
64
- txt = txdp.serialize
65
-
66
- txt.should =~ /--BEGIN-TRANSACTION-#{txdp.id}--/
67
- txt.should =~ /^_TXDIST_fabfb5da_#{txdp.id}_00cb$/
68
- txt.should =~ /^_TXINPUT_00_50.00000000$/
69
- txt.should =~ /--END-TRANSACTION-#{txdp.id}--/
70
-
71
- txdp.add_sig(0, tx1.out[0].value, "mh8YhPYEAYs3E7EVyKtB5xrcfMExkkdEMF", sig)
72
- txt = txdp.serialize
73
- txt.should =~ /^_SIG_mh8YhPYEAYs3E7EVyKtB5xrcfMExkkdEMF_00_0048$/
74
- end
75
-
76
- end
@@ -1,238 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- require_relative '../spec_helper'
4
- require 'json'
5
- require 'fileutils'
6
- include MiniTest
7
- include Bitcoin
8
- include Bitcoin::Wallet
9
-
10
- def txout_mock(value, next_in = true, in_block = true)
11
- tx, txout = Mock.new, Mock.new
12
- tx.expect(:get_block, in_block)
13
- 4.times { txout.expect(:value, value) }
14
- 2.times { txout.expect(:get_next_in, next_in) }
15
- 6.times { txout.expect(:hash, [value, next_in].hash) }
16
- txout.expect(:eql?, false, [1])
17
- txout.expect(:==, false, [1])
18
- txout.expect(:get_tx, tx)
19
- end
20
-
21
- describe Bitcoin::Wallet::Wallet do
22
-
23
- class DummyKeyStore
24
-
25
- def initialize keys
26
- @keys = keys.map{|k| { key: k, addr: k.addr } }
27
- end
28
-
29
- def key(addr)
30
- @keys.select{|k| k[:key].addr == addr }.first
31
- end
32
-
33
- def keys
34
- @keys
35
- end
36
-
37
- def new_key
38
- k=Bitcoin::Key.generate
39
- @keys << { key: k, addr: k.addr}
40
- @keys[-1]
41
- end
42
- end
43
-
44
- before do
45
- Bitcoin.network = :bitcoin
46
- @storage = Mock.new
47
- @key = Key.from_base58('5J2hn1E8KEXmQn5gqykzKotyCcHbKrVbe8fjegsfVXRdv6wwon8')
48
- @addr = '1M89ZeWtmZmATzE3b6PHTBi8c7tGsg5xpo'
49
- #@key2 = Key.from_base58('5KK9Lw8gtNd4kcaXQJmkwcmNy8Y5rLGm49RqhcYAb7qRhWxaWMJ')
50
- #@addr2 = '134A4Bi8jN5V2KjkwmXUHjokDqdyqZ778J'
51
- #@key3 = Key.from_base58('5JFcJByQvwYnWjQ2RHTTu6LLGiBj9oPQYsHqKWuKLDVAvv4cQ7E')
52
- #@addr3 = '1EnrPVaRiRgrs1D7pujYZNN1N6iD9unZV6'
53
-
54
- @storage.expect(:add_watched_address, [], [@addr])
55
-
56
- keystore_data = [{:addr => @key.addr, :priv => @key.priv, :pub => @key.pub}]
57
- file_stub = StringIO.new
58
- file_stub.write(keystore_data.to_json); file_stub.rewind
59
- @keystore = SimpleKeyStore.new(file: file_stub)
60
- @selector = MiniTest::Mock.new
61
- @wallet = Wallet.new(@storage, @keystore, @selector)
62
- end
63
-
64
- it "should get total balance" do
65
- @storage.expect(:class, Bitcoin::Storage::Backends::SequelStore, [])
66
- @storage.expect(:get_txouts_for_address, [], [@addr])
67
- 2.times { @storage.expect(:class, Bitcoin::Storage::Backends::SequelStore, []) }
68
- @wallet.get_balance.should == 0
69
-
70
- @storage.expect(:get_txouts_for_address, [txout_mock(5000, nil)], [@addr])
71
- @wallet.get_balance.should == 5000
72
-
73
- @storage.expect(:get_txouts_for_address, [txout_mock(5000, true), txout_mock(1000, nil)],
74
- [@addr])
75
- @wallet.get_balance.should == 1000
76
- end
77
-
78
- it "should get all addrs" do
79
- @wallet.addrs.should == [@addr]
80
- @wallet.addrs.size.should == 1
81
- end
82
-
83
- it "should list all addrs with balances" do
84
- @storage.expect(:get_balance, 0, ['dcbc93494b38ae96b14b1cc080d2acb514b7e955'])
85
- list = @wallet.list
86
- list.size.should == 1
87
- list = list[0]
88
- list.size.should == 2
89
- list[0][:addr].should == "1M89ZeWtmZmATzE3b6PHTBi8c7tGsg5xpo"
90
- list[1].should == 0
91
-
92
- @storage.expect(:get_balance, 5000, ['dcbc93494b38ae96b14b1cc080d2acb514b7e955'])
93
- list = @wallet.list
94
- list.size.should == 1
95
- list = list[0]
96
- list.size.should == 2
97
- list[0][:addr].should == @addr
98
- list[1].should == 5000
99
- end
100
-
101
- it "should create new addr" do
102
- @wallet.addrs.size.should == 1
103
-
104
- @storage.expect(:add_watched_address, [], [String])
105
- a = @wallet.get_new_addr
106
- @wallet.addrs.size.should == 2
107
- @wallet.addrs[1].should == a
108
- end
109
-
110
- # describe "Bitcoin::Wallet::Wallet#tx" do
111
-
112
- # before do
113
- # txout = txout_mock(5000, nil)
114
- # tx = Mock.new
115
- # 2.times { tx.expect(:binary_hash, "foo") }
116
- # 8.times { tx.expect(:out, [txout]) }
117
- # 3.times { tx.expect(:get_block, true) }
118
- # 5.times { txout.expect(:get_tx, tx) }
119
- # 6.times { txout.expect(:get_address, @addr) }
120
- # 8.times { txout.expect(:pk_script, Script.to_address_script(@addr)) }
121
- # 2.times { @storage.expect(:get_txouts_for_address, [txout], [@addr]) }
122
- # 2.times { @storage.expect(:class, Bitcoin::Storage::Backends::SequelStore, []) }
123
- # selector = Bitcoin::Wallet::SimpleCoinSelector.new([txout])
124
- # 2.times { @selector.expect(:new, selector, [[txout]]) }
125
- # @tx = @wallet.new_tx([[:address, '1M2JjkX7KAgwMyyF5xc2sPSfE7mL1jqkE7', 1000]])
126
- # end
127
-
128
-
129
- # it "should have hash" do
130
- # @tx.hash.size.should == 64
131
- # end
132
-
133
- # it "should have correct inputs" do
134
- # @tx.in.size.should == 1
135
- # @tx.in.first.prev_out.should == ("foo" + "\x00"*29)
136
- # @tx.in.first.prev_out_index.should == 0
137
- # end
138
-
139
- # it "should have correct outputs" do
140
- # @tx.out.size.should == 2
141
- # @tx.out.first.value.should == 1000
142
- # s = Script.new(@tx.out.first.pk_script)
143
- # s.get_address.should == '1M2JjkX7KAgwMyyF5xc2sPSfE7mL1jqkE7'
144
- # end
145
-
146
- # it "should have change output" do
147
- # @tx.out.last.value.should == 4000
148
- # s = Script.new(@tx.out.last.pk_script)
149
- # s.get_address.should == @addr
150
- # end
151
-
152
- # it "should leave tx fee" do
153
- # @tx = @wallet.new_tx([[:address, '1M2JjkX7KAgwMyyF5xc2sPSfE7mL1jqkE7', 1000]], 50)
154
- # @tx.out.last.value.should == 3950
155
- # end
156
-
157
- # it "should send change to specified address" do
158
- # @tx = @wallet.new_tx([[:address, '1M2JjkX7KAgwMyyF5xc2sPSfE7mL1jqkE7', 1000]], 50,
159
- # '1EAntvSjkNeaJJTBQeQcN1ieU2mYf4wU9p')
160
- # Script.new(@tx.out.last.pk_script).get_address.should ==
161
- # '1EAntvSjkNeaJJTBQeQcN1ieU2mYf4wU9p'
162
- # end
163
-
164
- # it "should send change to new address" do
165
- # @tx = @wallet.new_tx([[:address, '1M2JjkX7KAgwMyyF5xc2sPSfE7mL1jqkE7', 1000]], 50, :new)
166
- # @wallet.addrs.size.should == 2
167
- # Script.new(@tx.out.last.pk_script).get_address.should == @wallet.addrs.last
168
- # end
169
-
170
- # it "should raise exception if insufficient balance" do
171
- # -> {@tx = @wallet.new_tx([[:address, '1M2JjkX7KAgwMyyF5xc2sPSfE7mL1jqkE7', 7000]])}
172
- # .should.raise(RuntimeError).message.should == "Insufficient funds."
173
- # end
174
-
175
-
176
- # it "should create unsigned tx" do
177
- # Bitcoin.network = :spec
178
- # @key = Bitcoin::Key.generate
179
- # @key2 = Bitcoin::Key.generate
180
- # @store = Storage.sequel(db: "sqlite:/")
181
- # @store.log.level = :debug
182
-
183
- # @keystore = SimpleKeyStore.new(file: StringIO.new("[]"))
184
- # @wallet = Wallet.new(@store, @keystore, SimpleCoinSelector)
185
-
186
- # @wallet.keystore.add_key(addr: @key.addr)
187
-
188
- # @genesis = Bitcoin::P::Block.new("0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000".htb)
189
-
190
- # @store.new_block @genesis
191
- # create_block(@genesis.hash, true, [], @key, 50e8)
192
-
193
- # list = @wallet.list
194
- # list.size.should == 1
195
- # list[0][0].should == {addr: @key.addr}
196
- # list[0][1].should == 50e8
197
-
198
- # tx = @wallet.new_tx([[:address, @key2.addr, 10e8]])
199
- # tx.in[0].sig_hash.should != nil
200
- # end
201
-
202
- # end
203
-
204
- # # TODO
205
- # describe "Bitcoin::Wallet::Wallet#tx (multisig)" do
206
-
207
-
208
- # before do
209
- # txout = txout_mock(5000, nil)
210
- # tx = Mock.new
211
- # tx.expect(:binary_hash, "foo")
212
- # 4.times { tx.expect(:out, [txout]) }
213
- # tx.expect(:get_block, true)
214
- # txout.expect(:get_tx, tx)
215
- # 2.times { txout.expect(:get_address, @addr) }
216
- # 4.times { txout.expect(:pk_script, Script.to_address_script(@addr)) }
217
- # @storage.expect(:get_txouts_for_address, [txout], [@key.addr])
218
- # @storage.expect(:get_txouts_for_address, [txout], [@key2.addr])
219
- # @storage.expect(:get_txouts_for_address, [txout], [@key3.addr])
220
- # @storage.expect(:class, Bitcoin::Storage::Backends::SequelStore, [])
221
- # @keystore = DummyKeyStore.new([@key, @key2, @key3])
222
- # selector = Mock.new
223
- # selector.expect(:select, [txout], [1000])
224
- # @selector.expect(:new, selector, [[txout]])
225
- # @wallet = Wallet.new(@storage, @keystore, @selector)
226
- # @tx = @wallet.new_tx([[:multisig, 1, @key2.pub, @key3.pub, 1000]])
227
- # end
228
-
229
- # it "should have correct outputs" do
230
- # @tx.out.size.should == 2
231
- # @tx.out.first.value.should == 1000
232
- # s = Script.new(@tx.out.first.pk_script)
233
- # s.get_addresses.should == [@addr2, @addr3]
234
- # end
235
-
236
- # end
237
-
238
- end