monacoin-ruby 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.travis.yml +5 -0
- data/COPYING +18 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +33 -0
- data/README.rdoc +210 -0
- data/Rakefile +112 -0
- data/bin/monacoin_shell +12 -0
- data/bitcoin-ruby.gemspec +23 -0
- data/examples/bbe_verify_tx.rb +60 -0
- data/examples/concept-blockchain-pow.rb +151 -0
- data/examples/connect.rb +36 -0
- data/examples/generate_tx.rb +34 -0
- data/examples/simple_network_monitor_and_util.rb +195 -0
- data/spec/bitcoin/bitcoin_spec.rb +598 -0
- data/spec/bitcoin/bloom_filter_spec.rb +23 -0
- data/spec/bitcoin/builder_spec.rb +342 -0
- data/spec/bitcoin/contracthash_spec.rb +45 -0
- data/spec/bitcoin/dogecoin_spec.rb +176 -0
- data/spec/bitcoin/ext_key_spec.rb +180 -0
- data/spec/bitcoin/ffi_openssl.rb +45 -0
- data/spec/bitcoin/fixtures/000000000000056b1a3d84a1e2b33cde8915a4b61c0cae14fca6d3e1490b4f98.json +3697 -0
- data/spec/bitcoin/fixtures/03d7e1fa4d5fefa169431f24f7798552861b255cd55d377066fedcd088fb0e99.json +23 -0
- data/spec/bitcoin/fixtures/0961c660358478829505e16a1f028757e54b5bbf9758341a7546573738f31429.json +24 -0
- data/spec/bitcoin/fixtures/0f24294a1d23efbb49c1765cf443fba7930702752aba6d765870082fe4f13cae.json +37 -0
- data/spec/bitcoin/fixtures/156e6e1b84c5c3bd3a0927b25e4119fadce6e6d5186f363317511d1d680fae9a.json +24 -0
- data/spec/bitcoin/fixtures/23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63.json +23 -0
- data/spec/bitcoin/fixtures/315ac7d4c26d69668129cc352851d9389b4a6868f1509c6c8b66bead11e2619f.json +31 -0
- data/spec/bitcoin/fixtures/35e2001b428891fefa0bfb73167c7360669d3cbd7b3aa78e7cad125ddfc51131.json +27 -0
- data/spec/bitcoin/fixtures/3a17dace09ffb919ed627a93f1873220f4c975c1248558b18d16bce25d38c4b7.json +72 -0
- data/spec/bitcoin/fixtures/3e58b7eed0fdb599019af08578effea25c8666bbe8e200845453cacce6314477.json +27 -0
- data/spec/bitcoin/fixtures/514c46f0b61714092f15c8dfcb576c9f79b3f959989b98de3944b19d98832b58.json +24 -0
- data/spec/bitcoin/fixtures/51bf528ecf3c161e7c021224197dbe84f9a8564212f6207baa014c01a1668e1e.json +30 -0
- data/spec/bitcoin/fixtures/60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1.json +45 -0
- data/spec/bitcoin/fixtures/69216b8aaa35b76d6613e5f527f4858640d986e1046238583bdad79b35e938dc.json +28 -0
- data/spec/bitcoin/fixtures/7208e5edf525f04e705fb3390194e316205b8f995c8c9fcd8c6093abe04fa27d.json +27 -0
- data/spec/bitcoin/fixtures/761d8c5210fdfd505f6dff38f740ae3728eb93d7d0971fb433f685d40a4c04f6.json +27 -0
- data/spec/bitcoin/fixtures/8d0b238a06b5a70be75d543902d02d7a514d68d3252a949a513865ac3538874c.json +24 -0
- data/spec/bitcoin/fixtures/aea682d68a3ea5e3583e088dcbd699a5d44d4b083f02ad0aaf2598fe1fa4dfd4.json +27 -0
- data/spec/bitcoin/fixtures/bc179baab547b7d7c1d5d8d6f8b0cc6318eaa4b0dd0a093ad6ac7f5a1cb6b3ba.json +34 -0
- data/spec/bitcoin/fixtures/bd1715f1abfdc62bea3f605bdb461b3ba1f2cca6ec0d73a18a548b7717ca8531.json +34 -0
- data/spec/bitcoin/fixtures/block-testnet-0000000000ac85bb2530a05a4214a387e6be02b22d3348abc5e7a5d9c4ce8dab.bin +0 -0
- data/spec/bitcoin/fixtures/cd874fa8cb0e2ec2d385735d5e1fd482c4fe648533efb4c50ee53bda58e15ae2.json +24 -0
- data/spec/bitcoin/fixtures/ce5fad9b4ef094d8f4937b0707edaf0a6e6ceeaf67d5edbfd51f660eac8f398b.json +41 -0
- data/spec/bitcoin/fixtures/coinbase-toshi.json +33 -0
- data/spec/bitcoin/fixtures/coinbase.json +24 -0
- data/spec/bitcoin/fixtures/dogecoin-block-60323982f9c5ff1b5a954eac9dc1269352835f47c2c5222691d80f0d50dcf053.bin +0 -0
- data/spec/bitcoin/fixtures/f003f0c1193019db2497a675fd05d9f2edddf9b67c59e677c48d3dbd4ed5f00b.json +23 -0
- data/spec/bitcoin/fixtures/filteredblock-0.bin +0 -0
- data/spec/bitcoin/fixtures/litecoin-block-80ca095ed10b02e53d769eb6eaf92cd04e9e0759e5be4a8477b42911ba49c78f.bin +0 -0
- data/spec/bitcoin/fixtures/litecoin-block-80ca095ed10b02e53d769eb6eaf92cd04e9e0759e5be4a8477b42911ba49c78f.json +39 -0
- data/spec/bitcoin/fixtures/litecoin-genesis-block-12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2.bin +0 -0
- data/spec/bitcoin/fixtures/litecoin-genesis-block-12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2.json +39 -0
- data/spec/bitcoin/fixtures/litecoin-tx-f5aa30f574e3b6f1a3d99c07a6356ba812aabb9661e1d5f71edff828cbd5c996.json +259 -0
- data/spec/bitcoin/fixtures/rawblock-0.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-0.json +39 -0
- data/spec/bitcoin/fixtures/rawblock-1.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-1.json +39 -0
- data/spec/bitcoin/fixtures/rawblock-131025.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-131025.json +5063 -0
- data/spec/bitcoin/fixtures/rawblock-170.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-170.json +68 -0
- data/spec/bitcoin/fixtures/rawblock-9.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-9.json +39 -0
- data/spec/bitcoin/fixtures/rawblock-auxpow.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-testnet-1151351.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-testnet-26478.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-testnet-26478.json +64 -0
- data/spec/bitcoin/fixtures/rawblock-testnet-265322.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-01-toshi.json +46 -0
- data/spec/bitcoin/fixtures/rawtx-01.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-01.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-02-toshi.json +46 -0
- data/spec/bitcoin/fixtures/rawtx-02.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-02.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-03-toshi.json +73 -0
- data/spec/bitcoin/fixtures/rawtx-03.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-03.json +48 -0
- data/spec/bitcoin/fixtures/rawtx-04.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-05.json +23 -0
- data/spec/bitcoin/fixtures/rawtx-14be6fff8c6014f7c9493b4a6e4a741699173f39d74431b6b844fcb41ebb9984.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-2f4a2717ec8c9f077a87dde6cbe0274d5238793a3f3f492b63c744837285e58a.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-2f4a2717ec8c9f077a87dde6cbe0274d5238793a3f3f492b63c744837285e58a.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-406b2b06bcd34d3c8733e6b79f7a394c8a431fbf4ff5ac705c93f4076bb77602.json +23 -0
- data/spec/bitcoin/fixtures/rawtx-52250a162c7d03d2e1fbc5ebd1801a88612463314b55102171c5b5d817d2d7b2.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-b5d4e8883533f99e5903ea2cf001a133a322fa6b1370b18a16c57c946a40823d.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-ba1ff5cd66713133c062a871a8adab92416f1e38d17786b2bf56ac5f6ffdfdf5.json +37 -0
- data/spec/bitcoin/fixtures/rawtx-c99c49da4c38af669dea436d3e73780dfdb6c1ecf9958baa52960e8baee30e73.json +24 -0
- data/spec/bitcoin/fixtures/rawtx-de35d060663750b3975b7997bde7fb76307cec5b270d12fcd9c4ad98b279c28c.json +23 -0
- data/spec/bitcoin/fixtures/rawtx-f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-p2wpkh.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-p2wpkh.json +67 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-04fdc38d6722ab4b12d79113fc4b2896bdcc5169710690ee4e78541b98e467b4.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-0b294c7d11dd21bcccb8393e6744fed7d4d1981a08c00e3e88838cc421f33c9f.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-3bc52ac063291ad92d95ddda5fd776a342083b95607ad32ed8bc6f8f7d30449e.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-6f0bbdd4e71a8af4305018d738184df32dbb6f27284fdebd5b56d16947f7c181.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-a220adf1902c46a39db25a24bc4178b6a88440f977a7e2cabfdd8b5c1dd35cfb.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-a7c9b06e275e8674cc19a5f7d3e557c72c6d93576e635b33212dbe08ab7cdb60.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-e232e0055dbdca88bbaa79458683195a0b7c17c5b6c524a8d146721d4d4d652f.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-e232e0055dbdca88bbaa79458683195a0b7c17c5b6c524a8d146721d4d4d652f.json +41 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-f80acbd2f594d04ddb0e1cacba662132104909157dff526935a3c88abe9201a5.bin +0 -0
- data/spec/bitcoin/fixtures/reorg/blk_0_to_4.dat +0 -0
- data/spec/bitcoin/fixtures/reorg/blk_3A.dat +0 -0
- data/spec/bitcoin/fixtures/reorg/blk_4A.dat +0 -0
- data/spec/bitcoin/fixtures/reorg/blk_5A.dat +0 -0
- data/spec/bitcoin/fixtures/script_tests.json +1947 -0
- data/spec/bitcoin/fixtures/sighash.json +1004 -0
- data/spec/bitcoin/fixtures/testnet/block_0.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_1.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_2.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_3.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_4.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_5.bin +0 -0
- data/spec/bitcoin/fixtures/tx-0295028ef826b2a188409cb905b631faebb9bb3cdf14510571c5f4bd8591338f.json +64 -0
- data/spec/bitcoin/fixtures/tx-03339a725007a279484fb6f5361f522dd1cf4d0923d30e6b973290dba4275f92.json +64 -0
- data/spec/bitcoin/fixtures/tx-0a6a357e2f7796444e02638749d9611c008b253fb55f5dc88b739b230ed0c4c3.json +139 -0
- data/spec/bitcoin/fixtures/tx-0ce7e5238fbdb6c086cf1b384b21b827e91cc23f360417265874a5a0d86ce367.json +64 -0
- data/spec/bitcoin/fixtures/tx-0ef34c49f630aea17df0080728b0fc67bf5f87fbda936934a4b11b4a69d7821e.json +64 -0
- data/spec/bitcoin/fixtures/tx-1129d2a8bd5bb3a81e54dc96a90f1f6b2544575748caa17243470935c5dd91b7.json +28 -0
- data/spec/bitcoin/fixtures/tx-19aa42fee0fa57c45d3b16488198b27caaacc4ff5794510d0c17f173f05587ff.json +23 -0
- data/spec/bitcoin/fixtures/tx-1a4f3b9dc4494aeedeb39f30dd37e60541b2abe3ed4977992017cc0ad4f44956.json +64 -0
- data/spec/bitcoin/fixtures/tx-1f9191dcf2b1844ca28c6ef4b969e1d5fab70a5e3c56b7007949e55851cb0c4f.json +64 -0
- data/spec/bitcoin/fixtures/tx-22cd5fef23684d7b304e119bedffde6f54538d3d54a5bfa237e20dc2d9b4b5ad.json +64 -0
- data/spec/bitcoin/fixtures/tx-28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f.json +34 -0
- data/spec/bitcoin/fixtures/tx-2958fb00b4fd6fe0353503b886eb9a193d502f4fd5fc042d5e03216ba918bbd6.json +64 -0
- data/spec/bitcoin/fixtures/tx-29f277145749ad6efbed3ae6ce301f8d33c585ec26b7c044ad93c2f866e9e942.json +64 -0
- data/spec/bitcoin/fixtures/tx-2c5e5376c20e9cc78d0fb771730e5d840cc2096eff0ef045b599fe92475ace1c.json +28 -0
- data/spec/bitcoin/fixtures/tx-2c63aa814701cef5dbd4bbaddab3fea9117028f2434dddcdab8339141e9b14d1.json +30 -0
- data/spec/bitcoin/fixtures/tx-313897799b1e37e9ecae15010e56156dddde4e683c96b0e713af95272c38aee0.json +30 -0
- data/spec/bitcoin/fixtures/tx-326882a7f22b5191f1a0cc9962ca4b878cd969cf3b3a70887aece4d801a0ba5e.json +23 -0
- data/spec/bitcoin/fixtures/tx-345bed8785c3282a264ffb0dbee61cde54854f10e16f1b3e75b7f2d9f62946f2.json +64 -0
- data/spec/bitcoin/fixtures/tx-39ba7440b7103557560cc8ce258009936796485aaf8b478e66ab4cb97c66e31b.json +32 -0
- data/spec/bitcoin/fixtures/tx-3a04d57a833367f1655cc5ec3beb587888ef4977a86caa8c8ad4ba7cc717eae7.json +64 -0
- data/spec/bitcoin/fixtures/tx-3da75972766f0ad13319b0b461fd16823a731e44f6e9de4eb3c52d6a6fb6c8ae.json +23 -0
- data/spec/bitcoin/fixtures/tx-4142ee4877eb116abf955a7ec6ef2dc38133b793df762b76d75e3d7d4d8badc9.json +38 -0
- data/spec/bitcoin/fixtures/tx-44b833074e671120ba33106877b49e86ece510824b9af477a3853972bcd8d06a.json +30 -0
- data/spec/bitcoin/fixtures/tx-46224764c7870f95b58f155bce1e38d4da8e99d42dbb632d0dd7c07e092ee5aa.json +23 -0
- data/spec/bitcoin/fixtures/tx-5df1375ffe61ac35ca178ebb0cab9ea26dedbd0e96005dfcee7e379fa513232f.json +30 -0
- data/spec/bitcoin/fixtures/tx-62d9a565bd7b5344c5352e3e9e5f40fa4bbd467fa19c87357216ec8777ba1cce.json +64 -0
- data/spec/bitcoin/fixtures/tx-6327783a064d4e350c454ad5cd90201aedf65b1fc524e73709c52f0163739190.json +23 -0
- data/spec/bitcoin/fixtures/tx-6606c366a487bff9e412d0b6c09c14916319932db5954bf5d8719f43f828a3ba.json +27 -0
- data/spec/bitcoin/fixtures/tx-6aaf18b9f1283b939d8e5d40ff5f8a435229f4178372659cc3a0bce4e262bf78.json +28 -0
- data/spec/bitcoin/fixtures/tx-6b48bba6f6d2286d7ec0883c0fc3085955090813a4c94980466611c798b868cc.json +64 -0
- data/spec/bitcoin/fixtures/tx-70cfbc6690f9ab46712db44e3079ac227962b2771a9341d4233d898b521619ef.json +40 -0
- data/spec/bitcoin/fixtures/tx-7a1a9db42f065f75110fcdb1bc415549c8ef7670417ba1d35a67f1b8adc562c1.json +64 -0
- data/spec/bitcoin/fixtures/tx-9a768fc7d0c4bdc86e25154357ef7c0063ca21310e5740a2f12f90b7455184a7.json +64 -0
- data/spec/bitcoin/fixtures/tx-9cad8d523a0694f2509d092c39cebc8046adae62b4e4297102d568191d9478d8.json +64 -0
- data/spec/bitcoin/fixtures/tx-9e052eb694bd7e15906433f064dff0161a12fd325c1124537766377004023c6f.json +64 -0
- data/spec/bitcoin/fixtures/tx-9fb65b7304aaa77ac9580823c2c06b259cc42591e5cce66d76a81b6f51cc5c28.json +23 -0
- data/spec/bitcoin/fixtures/tx-a6ce7081addade7676cd2af75c4129eba6bf5e179a19c40c7d4cf6a5fe595954.json +30 -0
- data/spec/bitcoin/fixtures/tx-a955032f4d6b0c9bfe8cad8f00a8933790b9c1dc28c82e0f48e75b35da0e4944.json +23 -0
- data/spec/bitcoin/fixtures/tx-aab7ef280abbb9cc6fbaf524d2645c3daf4fcca2b3f53370e618d9cedf65f1f8.json +23 -0
- data/spec/bitcoin/fixtures/tx-ab9805c6d57d7070d9a42c5176e47bb705023e6b67249fb6760880548298e742.json +27 -0
- data/spec/bitcoin/fixtures/tx-ad4bcf3241e5d2ad140564e20db3567d41594cf4c2012433fe46a2b70e0d87b8.json +64 -0
- data/spec/bitcoin/fixtures/tx-b5b598de91787439afd5938116654e0b16b7a0d0f82742ba37564219c5afcbf9.json +27 -0
- data/spec/bitcoin/fixtures/tx-b8fd633e7713a43d5ac87266adc78444669b987a56b3a65fb92d58c2c4b0e84d.json +28 -0
- data/spec/bitcoin/fixtures/tx-bbca0628c42cb8bf7c3f4b2ad688fa56da5308dd2a10255da89fb1f46e6e413d.json +36 -0
- data/spec/bitcoin/fixtures/tx-bc7fd132fcf817918334822ee6d9bd95c889099c96e07ca2c1eb2cc70db63224.json +23 -0
- data/spec/bitcoin/fixtures/tx-c192b74844e4837a34c4a5a97b438f1c111405b01b99e2d12b7c96d07fc74c04.json +28 -0
- data/spec/bitcoin/fixtures/tx-d3d77d63709e47d9ef58f0b557800115a6b676c6a423012fbb96f45d8fcef830.json +28 -0
- data/spec/bitcoin/fixtures/tx-e335562f7e297aadeed88e5954bc4eeb8dc00b31d829eedb232e39d672b0c009.json +406 -0
- data/spec/bitcoin/fixtures/tx-eb3b82c0884e3efa6d8b0be55b4915eb20be124c9766245bcc7f34fdac32bccb.json +35 -0
- data/spec/bitcoin/fixtures/tx-fee1b9b85531c8fb6cd7831f83490c7f2aa768b6eefe29854ef5e89ce7b9ecb1.json +64 -0
- data/spec/bitcoin/fixtures/txdp-1.txt +32 -0
- data/spec/bitcoin/fixtures/txdp-2-signed.txt +19 -0
- data/spec/bitcoin/fixtures/txdp-2-unsigned.txt +14 -0
- data/spec/bitcoin/fixtures/txscript-invalid-too-many-sigops-followed-by-invalid-pushdata.bin +1 -0
- data/spec/bitcoin/helpers/fake_blockchain.rb +183 -0
- data/spec/bitcoin/key_spec.rb +326 -0
- data/spec/bitcoin/network_spec.rb +50 -0
- data/spec/bitcoin/performance/storage_spec.rb +41 -0
- data/spec/bitcoin/protocol/addr_spec.rb +82 -0
- data/spec/bitcoin/protocol/alert_spec.rb +22 -0
- data/spec/bitcoin/protocol/aux_pow_spec.rb +45 -0
- data/spec/bitcoin/protocol/bip143_spec.rb +116 -0
- data/spec/bitcoin/protocol/block_spec.rb +208 -0
- data/spec/bitcoin/protocol/getblocks_spec.rb +32 -0
- data/spec/bitcoin/protocol/inv_spec.rb +134 -0
- data/spec/bitcoin/protocol/notfound_spec.rb +31 -0
- data/spec/bitcoin/protocol/parser_spec.rb +50 -0
- data/spec/bitcoin/protocol/partial_merkle_tree_spec.rb +38 -0
- data/spec/bitcoin/protocol/ping_spec.rb +51 -0
- data/spec/bitcoin/protocol/reject.rb +17 -0
- data/spec/bitcoin/protocol/tx_spec.rb +894 -0
- data/spec/bitcoin/protocol/txin_spec.rb +45 -0
- data/spec/bitcoin/protocol/txout_spec.rb +27 -0
- data/spec/bitcoin/protocol/version_spec.rb +110 -0
- data/spec/bitcoin/script/opcodes_spec.rb +773 -0
- data/spec/bitcoin/script/script_spec.rb +971 -0
- data/spec/bitcoin/secp256k1_spec.rb +78 -0
- data/spec/bitcoin/spec_helper.rb +108 -0
- data/spec/bitcoin/trezor/mnemonic_spec.rb +161 -0
- metadata +237 -0
data/spec/bitcoin/fixtures/tx-eb3b82c0884e3efa6d8b0be55b4915eb20be124c9766245bcc7f34fdac32bccb.json
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
{
|
2
|
+
"hash": "eb3b82c0884e3efa6d8b0be55b4915eb20be124c9766245bcc7f34fdac32bccb",
|
3
|
+
"ver": 1,
|
4
|
+
"vin_sz": 2,
|
5
|
+
"vout_sz": 2,
|
6
|
+
"lock_time": 0,
|
7
|
+
"size": 376,
|
8
|
+
"in": [
|
9
|
+
{
|
10
|
+
"prev_out": {
|
11
|
+
"hash": "b8fd633e7713a43d5ac87266adc78444669b987a56b3a65fb92d58c2c4b0e84d",
|
12
|
+
"n": 0
|
13
|
+
},
|
14
|
+
"scriptSig": "304502205b282fbc9b064f3bc823a23edcc0048cbb174754e7aa742e3c9f483ebe02911c022100e4b0b3a117d36cab5a67404dddbf43db7bea3c1530e0fe128ebc15621bd69a3b01 035aa98d5f77cd9a2d88710e6fc66212aff820026f0dad8f32d1f7ce87457dde50"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"prev_out": {
|
18
|
+
"hash": "b8fd633e7713a43d5ac87266adc78444669b987a56b3a65fb92d58c2c4b0e84d",
|
19
|
+
"n": 1
|
20
|
+
},
|
21
|
+
"scriptSig": "0 30440220276d6dad3defa37b5f81add3992d510d2f44a317fd85e04f93a1e2daea64660202200f862a0da684249322ceb8ed842fb8c859c0cb94c81e1c5308b4868157a428ee01 OP_CODESEPARATOR 1 0232abdc893e7f0631364d7fd01cb33d24da45329a00357b3a7886211ab414d55a 1 OP_CHECKMULTISIG"
|
22
|
+
}
|
23
|
+
],
|
24
|
+
"out": [
|
25
|
+
{
|
26
|
+
"value": "0.01900000",
|
27
|
+
"scriptPubKey": "OP_DUP OP_HASH160 380cb3c594de4e7e9b8e18db182987bebb5a4f70 OP_EQUALVERIFY OP_CHECKSIG"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"value": "0.03000000",
|
31
|
+
"scriptPubKey": "2a9bc5447d664c1d0141392a842d23dba45c4f13 OP_NOP2 OP_DROP"
|
32
|
+
}
|
33
|
+
],
|
34
|
+
"nid": "d268093bef26d5ca68edd23ed020f46dd3c1abf068964327726463f2f8e001ee"
|
35
|
+
}
|
data/spec/bitcoin/fixtures/tx-fee1b9b85531c8fb6cd7831f83490c7f2aa768b6eefe29854ef5e89ce7b9ecb1.json
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
{
|
2
|
+
"hash": "fee1b9b85531c8fb6cd7831f83490c7f2aa768b6eefe29854ef5e89ce7b9ecb1",
|
3
|
+
"ver": 1,
|
4
|
+
"vin_sz": 1,
|
5
|
+
"vout_sz": 11,
|
6
|
+
"lock_time": 0,
|
7
|
+
"size": 357,
|
8
|
+
"in": [
|
9
|
+
{
|
10
|
+
"prev_out": {
|
11
|
+
"hash": "5619cf0ae79039401fffe9193b7de5f6236cb78ced2d17d66b0f1f6c970a3022",
|
12
|
+
"n": 5
|
13
|
+
},
|
14
|
+
"scriptSig": "3046022100b6ee15095f496a52583eaaa913f6f72e6a9340d24ada3d717cbb9752afeabeb302210089740020ee62983e68177dbbb0debaeb58a904e6f46e007ed28992931665450701 0431facc67afecd5bf3aa2e81805d1aef2912bb203e70e29dedf5d2cac3a943317e9e8eb8f329791f1b81dc15f0f44a85afb2e0bfd74d490bd059d86bb3dbb5775"
|
15
|
+
}
|
16
|
+
],
|
17
|
+
"out": [
|
18
|
+
{
|
19
|
+
"value": "0.07100000",
|
20
|
+
"scriptPubKey": "feffffff80 OP_EQUAL"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"value": "0.04100000",
|
24
|
+
"scriptPubKey": "OP_DUP 1 OP_ADD 1 OP_EQUALVERIFY 0 OP_EQUAL"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"value": "0.02100000",
|
28
|
+
"scriptPubKey": "OP_EQUAL"
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"value": "0.01100000",
|
32
|
+
"scriptPubKey": "0 OP_PICK 0:1:14 OP_EQUALVERIFY OP_DEPTH 3 OP_EQUAL"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"value": "0.06100000",
|
36
|
+
"scriptPubKey": "90 OP_NEGATE OP_EQUAL"
|
37
|
+
},
|
38
|
+
{
|
39
|
+
"value": "0.03100000",
|
40
|
+
"scriptPubKey": "OP_NOT"
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"value": "0.10100000",
|
44
|
+
"scriptPubKey": "OP_SIZE 3 OP_EQUAL"
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"value": "4.30550000",
|
48
|
+
"scriptPubKey": "OP_DUP OP_HASH160 90d66e5f44e597006a8f65767c7e1cf78fe56218 OP_EQUALVERIFY OP_CHECKSIG"
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"value": "0.08100000",
|
52
|
+
"scriptPubKey": "OP_TUCK OP_DEPTH 3 OP_EQUALVERIFY OP_SWAP OP_2DROP"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"value": "0.09100000",
|
56
|
+
"scriptPubKey": "OP_NOP"
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"value": "0.05100000",
|
60
|
+
"scriptPubKey": "OP_IF 1 OP_ELSE OP_ENDIF"
|
61
|
+
}
|
62
|
+
],
|
63
|
+
"nid": "d408e9c5639a542bd31f9a24a64d1cd38dc6db3cb222a7ae55874ca4b97bd85e"
|
64
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
-----BEGIN-TRANSACTION-3fX59xPj-------------------------------------------------
|
2
|
+
_TXDIST_fabfb5da_3fX59xPj_00a0
|
3
|
+
010000000292807c8e70a28c687daea2998d6273d074e56fa8a55a0b10556974cf2b526e61000000
|
4
|
+
0000ffffffffe3c1ee0711611b01af3dee55b1484f0d6b65d17dce4eff0e6e06242e6cf457e10000
|
5
|
+
000000ffffffff02b0feea0b000000001976a91457996661391fa4e95bed27d7e8fe47f47cb8e428
|
6
|
+
88ac00a0acb9030000001976a914dc504e07b1107110f601fb679dd3f56cee9ff71e88ac00000000
|
7
|
+
0100000001eb626e4f73d88f415a8e8cb32b8d73eed47aa1039d0ed2f013abdc741ce6828c010000
|
8
|
+
008c493046022100b0da540e4924518f8989a9da798ca2d9e761b69a173b8cc41a3e3e3c6d77cd50
|
9
|
+
022100ecfa61730e58005338420516744ef680428dcfc05022dec70a851365c8575b190141042dc5
|
10
|
+
be3afa5887aee4a377032ed014361b0b9b61eb3ea6b8a8821bfe13ee4b65cd25d9630e4f227a53e8
|
11
|
+
bf637f85452c9981bcbd64ef77e22ce97b0f547c783effffffff0200d6117e030000001976a914cf
|
12
|
+
f580fd243f64f0ad7bf69faf41c0bf42d86d8988ac00205fa0120000001976a9148d573ef6984fd9
|
13
|
+
f8847d420001f7ac49b222a24988ac000000000100000001f2782db40ae147398a31cff9c7cc3423
|
14
|
+
014a073a92e463741244330cc304168f000000008c493046022100c9311b9eef0cc69219cb96838f
|
15
|
+
dd621530a80c46269a00dccc66498bc03ccf7a0221003742ee652a0a76fd28ad81aa73bb7f7a0a6a
|
16
|
+
81850af58f62d9a184d10e5eec30014104f815e8ef4cad584e04974889d7636e8933803d2e72991d
|
17
|
+
b5288c9e953c2465533905f98b7b688898c7c1f0708f2e49f0dd0abc06859ffed5144e8a1018a4e8
|
18
|
+
63ffffffff02008c8647000000001976a914d4e211215967f8e3744693bf85f47eb4ee9567fc88ac
|
19
|
+
603d4e95010000001976a914e9a6b50901c1969d2b0fd43a3ccfa3fef3291efe88ac00000000
|
20
|
+
_TXINPUT_00_150.00000000
|
21
|
+
_SIG_mzUYGfqGpyXmppYpmWJ31Y4zTxR4ZCod22_00_008c
|
22
|
+
4930460221007699967c3ec09d072599558d2e7082fae0820206b63aa66afea124634ed11a080221
|
23
|
+
0003346f7e963e645ecae2855026dc7332eb7237012539b34cd441c3cef97fbd4d01410497d5e1a0
|
24
|
+
0e1db90e893d1f2e547e2ee83b5d6bf4ddaa3d514e6dc2d94b6bcb5a72be1fcec766b8c382502caa
|
25
|
+
9ec09fe478bad07d3f38ff47b2eb42e681c384cc
|
26
|
+
_TXINPUT_01_12.00000000
|
27
|
+
_SIG_mzvaN8JUhHLz3Gdec1zBRxs5rNaYLQnbD1_01_008c
|
28
|
+
49304602210081554f8b08a1ad8caa69e34f4794d54952dac7c5efcf2afe080985d6bd5b00770221
|
29
|
+
00dea20ca3dbae1d15ec61bec57b4b8062e7d7c47614aba032c5a32f651f471cfd014104c30936d2
|
30
|
+
456298a566aa76fefeab8a7cb7a91e8a936a11757c911b4c669f0434d12ab0936fc13986b156156f
|
31
|
+
9b389ed244bbb580112be07dbe23949a4764dffb
|
32
|
+
-------END-TRANSACTION-3fX59xPj-------------------------------------------------
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN-TRANSACTION-7Q74Wkre-------------------------------------------------
|
2
|
+
_TXDIST_fabfb5da_7Q74Wkre_0077
|
3
|
+
01000000019e2427307130506eafdda0af0f63b8e3193ca69576051176e9eb72822f9483b1000000
|
4
|
+
0000ffffffff0200943577000000001976a91419b8a1e3a0bbd0263d7a739b08e60f38dbfd7d5988
|
5
|
+
ac60a86659000000001976a9142d6b96901d5f345be776993073c4a2480f3c73a988ac0000000001
|
6
|
+
0000000107142cfa30008349f67e64a0ad4300814b27c2e264a187727f64f2bf746bce9f00000000
|
7
|
+
8c4930460221009eb7baac7ae0c161617c5ee59f6fe9c47cc11dd3472845e9268e739dfc064b6e02
|
8
|
+
210025ebb1a8f4b2136fb67ae2e737ad38667b83ceccbb3c3ca47b98a2d0cb7d916f014104e74942
|
9
|
+
d869b34395a2a75449056ac62db4209af97f34980e50f0882b9487e9bb556df5b3d6668c3e1dabdc
|
10
|
+
23e65e36a54dc7b0c8aa0ce235315b454e0cc2373affffffff02b0ff9cd0000000001976a9144ece
|
11
|
+
746ce438fb05e8482914ebd26f06bc57aac588ac002f6859000000001976a91419b8a1e3a0bbd026
|
12
|
+
3d7a739b08e60f38dbfd7d5988ac00000000
|
13
|
+
_TXINPUT_00_34.99949999
|
14
|
+
_SIG_mnheKkGdmw8d1fUV15XZbfmLR6AjQjVthy_00_008c
|
15
|
+
49304602210087bc1ff770c6cb3c7e47b9a3acb7dce678c16350f29acaa92e4ab231692256cf0221
|
16
|
+
002da46fc1f39e132e726dea46a6e87e4278e85d36ccd393e39e931b89d55fc3a2014104955ec564
|
17
|
+
6652d1b5bb14b2f867ef8879bcf224f1eab01072147fdfe0992440a234b36792937a23df736e8430
|
18
|
+
613da6f0466bfc5505f2ad41b056131b7af13086
|
19
|
+
-------END-TRANSACTION-7Q74Wkre-------------------------------------------------
|
@@ -0,0 +1,14 @@
|
|
1
|
+
-----BEGIN-TRANSACTION-7Q74Wkre-------------------------------------------------
|
2
|
+
_TXDIST_fabfb5da_7Q74Wkre_0077
|
3
|
+
01000000019e2427307130506eafdda0af0f63b8e3193ca69576051176e9eb72822f9483b1000000
|
4
|
+
0000ffffffff0200943577000000001976a91419b8a1e3a0bbd0263d7a739b08e60f38dbfd7d5988
|
5
|
+
ac60a86659000000001976a9142d6b96901d5f345be776993073c4a2480f3c73a988ac0000000001
|
6
|
+
0000000107142cfa30008349f67e64a0ad4300814b27c2e264a187727f64f2bf746bce9f00000000
|
7
|
+
8c4930460221009eb7baac7ae0c161617c5ee59f6fe9c47cc11dd3472845e9268e739dfc064b6e02
|
8
|
+
210025ebb1a8f4b2136fb67ae2e737ad38667b83ceccbb3c3ca47b98a2d0cb7d916f014104e74942
|
9
|
+
d869b34395a2a75449056ac62db4209af97f34980e50f0882b9487e9bb556df5b3d6668c3e1dabdc
|
10
|
+
23e65e36a54dc7b0c8aa0ce235315b454e0cc2373affffffff02b0ff9cd0000000001976a9144ece
|
11
|
+
746ce438fb05e8482914ebd26f06bc57aac588ac002f6859000000001976a91419b8a1e3a0bbd026
|
12
|
+
3d7a739b08e60f38dbfd7d5988ac00000000
|
13
|
+
_TXINPUT_00_34.99950000
|
14
|
+
-------END-TRANSACTION-7Q74Wkre-------------------------------------------------
|
@@ -0,0 +1 @@
|
|
1
|
+
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������N��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
|
@@ -0,0 +1,183 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
Bitcoin::NETWORKS[:fake] = {
|
5
|
+
:project => :bitcoin,
|
6
|
+
:no_difficulty => true,
|
7
|
+
:magic_head => "fake",
|
8
|
+
:address_version => "00",
|
9
|
+
:p2sh_version => "05",
|
10
|
+
:privkey_version => "80",
|
11
|
+
:default_port => 78333,
|
12
|
+
:coinbase_maturity => 0,
|
13
|
+
:protocol_version => 70001,
|
14
|
+
:max_money => 21_000_000 * 100_000_000,
|
15
|
+
:dns_seeds => [],
|
16
|
+
:genesis_hash => "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943",
|
17
|
+
:proof_of_work_limit => 553713663,
|
18
|
+
:alert_pubkeys => [],
|
19
|
+
:known_nodes => [],
|
20
|
+
:checkpoints => {},
|
21
|
+
:min_tx_fee => 10_000,
|
22
|
+
:min_relay_tx_fee => 10_000,
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
# Small utility to generate fake blocks mostly to be able to test performance
|
28
|
+
# They are full from the start, so that we don't have to import 100K blocks to check
|
29
|
+
# how performance looks when storing or validating 1K transactions
|
30
|
+
class FakeBlockchain
|
31
|
+
|
32
|
+
# Initialize fake blockchain and generate +num_blocks+ starting blocks with given
|
33
|
+
# +opts+ (see #generate).
|
34
|
+
def initialize(num = 50, opts = {})
|
35
|
+
Bitcoin.network = :fake
|
36
|
+
if File.exist? block_path(0)
|
37
|
+
genesis = Bitcoin::P::Block.new File.read block_path 0
|
38
|
+
Bitcoin.network[:genesis_hash] = genesis.hash
|
39
|
+
else
|
40
|
+
STDERR.puts "\nFake blockchain not present, generating (go take a nap)..."
|
41
|
+
depth = 0
|
42
|
+
FileUtils.mkdir_p fixtures_path "fake_chain"
|
43
|
+
generate(num, opts) do |blk|
|
44
|
+
File.open(block_path(depth),'w') {|f| f.write blk.to_payload }
|
45
|
+
depth += 1
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Generate fake blockchain with +num+ number of blocks
|
51
|
+
# Blocks are provided as an argument to the block given to the method
|
52
|
+
# fake_chain.generate(5) {|b| save_block(b) }
|
53
|
+
def generate(num = 50, opts = {})
|
54
|
+
srand 1337
|
55
|
+
|
56
|
+
default_opts = {
|
57
|
+
block_size: 950_000, # minimum block size
|
58
|
+
num_keys: 1000, # number of different keys being used
|
59
|
+
genesis_timestamp: Time.new(2009).to_i,
|
60
|
+
verbose: true, # print out debug information
|
61
|
+
}
|
62
|
+
|
63
|
+
opts = default_opts.merge(opts)
|
64
|
+
|
65
|
+
to_spend = [] # table of outputs that we can spend
|
66
|
+
lost_count = 0 # keeping track of lost coins
|
67
|
+
keys = Array.new(opts[:num_keys]) { Bitcoin::Key.generate }
|
68
|
+
timestamp = opts[:genesis_timestamp]
|
69
|
+
|
70
|
+
genesis = Bitcoin::Builder.build_block do |blk|
|
71
|
+
blk.time timestamp
|
72
|
+
blk.prev_block "00"*32
|
73
|
+
blk.tx do |t|
|
74
|
+
t.input {|i| i.coinbase }
|
75
|
+
t.output {|o| o.value 50*Bitcoin::COIN; o.script {|s| s.recipient keys[0].addr } }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
Bitcoin.network[:genesis_hash] = genesis.hash
|
79
|
+
yield(genesis)
|
80
|
+
|
81
|
+
to_spend << {tx: genesis.tx[0], tx_idx: 0, key: keys[0], value: 50e8}
|
82
|
+
|
83
|
+
prev_block = genesis
|
84
|
+
|
85
|
+
|
86
|
+
num.times do |blk_i|
|
87
|
+
|
88
|
+
timestamp += 600
|
89
|
+
t0 = Time.now
|
90
|
+
|
91
|
+
block = Bitcoin::Builder.build_block do |blk|
|
92
|
+
blk.time timestamp
|
93
|
+
blk.prev_block prev_block.hash
|
94
|
+
key0 = keys.sample
|
95
|
+
tx0 = blk.tx do |t|
|
96
|
+
t.input {|i| i.coinbase }
|
97
|
+
t.output {|o| o.value 50e8; o.script {|s| s.recipient key0.addr } }
|
98
|
+
end
|
99
|
+
|
100
|
+
# We "lose" some coins, that is we decide never to spend some outputs
|
101
|
+
# It's to keep utxo growing without making block generation time growing
|
102
|
+
lost_count += to_spend.size
|
103
|
+
to_spend = to_spend.reject.with_index {|x,i| i==0 ? false : (((to_spend.size - i) / to_spend.size.to_f)**2 * rand > rand*0.2) }
|
104
|
+
lost_count -= to_spend.size
|
105
|
+
|
106
|
+
# many txs vs many tx outputs in given block
|
107
|
+
many_outputs_prob = 0.5 * (rand ** 3)
|
108
|
+
|
109
|
+
total_tx_size = 0
|
110
|
+
|
111
|
+
# generate tranasctions
|
112
|
+
loop do
|
113
|
+
# we want utxo to keep growing so we use many inputs only with some small probability
|
114
|
+
ins = to_spend[(rand(to_spend.size)).to_i..-1].sample(rand < 0.01 ? (rand(50) + 1) : 1)
|
115
|
+
total = ins.map{|i| i[:value]}.inject(:+)
|
116
|
+
next if total < 20_000
|
117
|
+
|
118
|
+
new_outs = []
|
119
|
+
|
120
|
+
tx = blk.tx do |t|
|
121
|
+
|
122
|
+
# generate inputs
|
123
|
+
ins.map do |input|
|
124
|
+
t.input do |i|
|
125
|
+
i.prev_out input[:tx]
|
126
|
+
i.prev_out_index input[:tx_idx]
|
127
|
+
i.signature_key input[:key]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
# remove outputs that we just used
|
131
|
+
ins.each {|i| to_spend.delete i}
|
132
|
+
|
133
|
+
fee = 10_000
|
134
|
+
# helper to split value randomly in a half
|
135
|
+
half_split = ->(v) { split = [rand, 0.1].max; [v*split, v*(1-split)] }
|
136
|
+
# helper to split value randomly to many pieces
|
137
|
+
value_split = ->(v, depth=0) {(depth < 10 && rand > 0.2) ? half_split[v].map{|x| value_split[x, depth+1]} : [v] }
|
138
|
+
|
139
|
+
if rand < many_outputs_prob
|
140
|
+
# every now and then there are many outptus
|
141
|
+
out_values = value_split[total-fee].flatten.map {|x| x.round(8)}
|
142
|
+
out_values.each.with_index do |v,i|
|
143
|
+
key = keys.sample
|
144
|
+
t.output {|o| o.value v; o.script {|s| s.recipient key.addr }}
|
145
|
+
new_outs << {tx_idx: i, key: key, value: v}
|
146
|
+
end
|
147
|
+
else
|
148
|
+
# most txs seem to have 2 outputs
|
149
|
+
k1 = keys.sample
|
150
|
+
k2 = keys.sample
|
151
|
+
v1, v2 = half_split[total-fee]
|
152
|
+
t.output {|o| o.value v1; o.script {|s| s.recipient k1.addr }}
|
153
|
+
t.output {|o| o.value v2; o.script {|s| s.recipient k2.addr }}
|
154
|
+
new_outs << {tx_idx: 0, key: k1, value: v2}
|
155
|
+
new_outs << {tx_idx: 1, key: k2, value: v2}
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
new_outs.each {|o| to_spend << {tx: tx}.merge(o) } # fun fact: the opposite merge is way slower
|
160
|
+
|
161
|
+
total_tx_size += tx.to_payload.size
|
162
|
+
break if total_tx_size > opts[:block_size]
|
163
|
+
end
|
164
|
+
|
165
|
+
# coinbase
|
166
|
+
to_spend << {tx: tx0, tx_idx: 0, key: key0, value: 50e8}
|
167
|
+
end
|
168
|
+
puts "depth #{blk_i+1}/#{num} \t txcount: #{block.tx.size} \t size: #{block.to_payload.size} \t utxo count: #{to_spend.size + lost_count} (#{to_spend.size}) \t ttg: #{'%.2f' % (Time.now - t0)}s" if opts[:verbose]
|
169
|
+
yield(block)
|
170
|
+
prev_block = block
|
171
|
+
end
|
172
|
+
true
|
173
|
+
end
|
174
|
+
|
175
|
+
def block(depth)
|
176
|
+
Bitcoin::Protocol::Block.new File.read block_path depth
|
177
|
+
end
|
178
|
+
|
179
|
+
def block_path(depth)
|
180
|
+
fixtures_path "fake_chain/#{depth}.blk"
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
@@ -0,0 +1,326 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
require_relative 'spec_helper'
|
4
|
+
|
5
|
+
describe "Bitcoin::Key" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
Bitcoin.network = :bitcoin
|
9
|
+
@key_data = {
|
10
|
+
:priv => "2ebd3738f59ae4fd408d717bf325b4cb979a409b0153f6d3b4b91cdfe046fb1e",
|
11
|
+
:pub => "035fcb2fb2802b024f371cc22bc392268cc579e47e7936e0d1f05064e6e1103b8a" }
|
12
|
+
@key = Bitcoin::Key.new(@key_data[:priv], @key_data[:pub], false)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should generate a key" do
|
16
|
+
k = Bitcoin::Key.generate
|
17
|
+
k.priv.size.should == 64
|
18
|
+
k.pub.size.should == 66
|
19
|
+
k.compressed.should == true
|
20
|
+
|
21
|
+
k = Bitcoin::Key.generate(compressed: true)
|
22
|
+
k.priv.size.should == 64
|
23
|
+
k.pub.size.should == 66
|
24
|
+
k.compressed.should == true
|
25
|
+
|
26
|
+
k = Bitcoin::Key.generate(true)
|
27
|
+
k.priv.size.should == 64
|
28
|
+
k.pub.size.should == 66
|
29
|
+
k.compressed.should == true
|
30
|
+
|
31
|
+
k = Bitcoin::Key.generate(compressed: false)
|
32
|
+
k.priv.size.should == 64
|
33
|
+
k.pub.size.should == 130
|
34
|
+
k.compressed.should == false
|
35
|
+
|
36
|
+
k = Bitcoin::Key.generate(false)
|
37
|
+
k.priv.size.should == 64
|
38
|
+
k.pub.size.should == 130
|
39
|
+
k.compressed.should == false
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should create empty key" do
|
43
|
+
k = Bitcoin::Key.new
|
44
|
+
k.priv.should == nil
|
45
|
+
k.pub.should == nil
|
46
|
+
k.compressed.should == true
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should create key from priv + pub" do
|
50
|
+
k = Bitcoin::Key.new(@key_data[:priv], @key_data[:pub])
|
51
|
+
k.priv.should == @key_data[:priv]
|
52
|
+
k.pub.should == @key_data[:pub]
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should create key from only priv" do
|
56
|
+
k = Bitcoin::Key.new(@key_data[:priv])
|
57
|
+
k.priv.should == @key_data[:priv]
|
58
|
+
k.pub.should == @key_data[:pub]
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should create key from only pub" do
|
62
|
+
k = Bitcoin::Key.new(nil, @key_data[:pub])
|
63
|
+
k.pub.should == @key_data[:pub]
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should set public key" do
|
67
|
+
k = Bitcoin::Key.new
|
68
|
+
k.pub = @key_data[:pub]
|
69
|
+
k.pub.should == @key_data[:pub]
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should set private key" do
|
73
|
+
k = Bitcoin::Key.new
|
74
|
+
k.priv = @key_data[:priv]
|
75
|
+
k.priv.should == @key_data[:priv]
|
76
|
+
k.pub.should == @key_data[:pub]
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should get addr" do
|
80
|
+
@key.addr.should == "19CyxBz6CUBogxTdSXUrbRHo7T7eLCMgbr"
|
81
|
+
@key.instance_eval { @pubkey_compressed = false }
|
82
|
+
@key.addr.should == "1JbYZRKyysprVjSSBobs8LX6QVjzsscQNU"
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should sign data" do
|
86
|
+
@key.sign("foobar").size.should >= 69
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should verify signature using public key" do
|
90
|
+
sig = @key.sign("foobar")
|
91
|
+
key = Bitcoin::Key.new(nil, @key.pub)
|
92
|
+
key.verify("foobar", sig).should == true
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should verify signature using private key" do
|
96
|
+
sig = @key.sign("foobar")
|
97
|
+
key = Bitcoin::Key.new(@key.priv)
|
98
|
+
key.verify("foobar", sig).should == true
|
99
|
+
end
|
100
|
+
|
101
|
+
it "recovers public keys from compact signatures" do
|
102
|
+
tests = [
|
103
|
+
# normal
|
104
|
+
{ address: "16vqGo3KRKE9kTsTZxKoJKLzwZGTodK3ce",
|
105
|
+
signature: "HPDs1TesA48a9up4QORIuub67VHBM37X66skAYz0Esg23gdfMuCTYDFORc6XGpKZ2/flJ2h/DUF569FJxGoVZ50=",
|
106
|
+
message: "test message",
|
107
|
+
expected: true },
|
108
|
+
|
109
|
+
# different message
|
110
|
+
{ address: "16vqGo3KRKE9kTsTZxKoJKLzwZGTodK3ce",
|
111
|
+
signature: "HPDs1TesA48a9up4QORIuub67VHBM37X66skAYz0Esg23gdfMuCTYDFORc6XGpKZ2/flJ2h/DUF569FJxGoVZ50=",
|
112
|
+
message: "not what I signed",
|
113
|
+
expected: false },
|
114
|
+
|
115
|
+
# different address
|
116
|
+
{ address: "1JbYZRKyysprVjSSBobs8LX6QVjzsscQNU",
|
117
|
+
signature: "HPDs1TesA48a9up4QORIuub67VHBM37X66skAYz0Esg23gdfMuCTYDFORc6XGpKZ2/flJ2h/DUF569FJxGoVZ50=",
|
118
|
+
message: "test message",
|
119
|
+
expected: false },
|
120
|
+
|
121
|
+
# compressed
|
122
|
+
{ address: "18uitB5ARAhyxmkN2Sa9TbEuoGN1he83BX",
|
123
|
+
signature: "IMAtT1SjRyP6bz6vm5tKDTTTNYS6D8w2RQQyKD3VGPq2i2txGd2ar18L8/nvF1+kAMo5tNc4x0xAOGP0HRjKLjc=",
|
124
|
+
message: "testtest",
|
125
|
+
expected: true },
|
126
|
+
]
|
127
|
+
tests.each do |test|
|
128
|
+
key = Bitcoin::Key.recover_compact_signature_to_key(test[:message], test[:signature])
|
129
|
+
test[:expected].should == (key.addr == test[:address])
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should export private key in base58 format" do
|
134
|
+
Bitcoin.network = :bitcoin
|
135
|
+
str = Bitcoin::Key.new("e9873d79c6d87dc0fb6a5778633389f4453213303da61f20bd67fc233aa33262", nil, false).to_base58
|
136
|
+
str.should == "5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hWXMssSzNydYXYB9KF"
|
137
|
+
Bitcoin.network = :testnet
|
138
|
+
str = Bitcoin::Key.new("d21fa2c7ad710ffcd9bcc22a9f96357bda1a2521ca7181dd610140ecea2cecd8", nil, false).to_base58
|
139
|
+
str.should == "93BTVFoqffueSaC5fqjLjLyn29S41JzvAZm2hC35SYMoYDXT1bY"
|
140
|
+
Bitcoin.network = :bitcoin
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should import private key in base58 format" do
|
144
|
+
Bitcoin.network = :bitcoin
|
145
|
+
key = Bitcoin::Key.from_base58("5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hWXMssSzNydYXYB9KF")
|
146
|
+
key.priv.should == "e9873d79c6d87dc0fb6a5778633389f4453213303da61f20bd67fc233aa33262"
|
147
|
+
key.addr.should == "1CC3X2gu58d6wXUWMffpuzN9JAfTUWu4Kj"
|
148
|
+
Bitcoin.network = :testnet
|
149
|
+
key = Bitcoin::Key.from_base58("93BTVFoqffueSaC5fqjLjLyn29S41JzvAZm2hC35SYMoYDXT1bY")
|
150
|
+
key.priv.should == "d21fa2c7ad710ffcd9bcc22a9f96357bda1a2521ca7181dd610140ecea2cecd8"
|
151
|
+
key.addr.should == "n3eH91H14mSnGx4Va2ngtLFCeLPRyYymRg"
|
152
|
+
Bitcoin.network = :bitcoin
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should export private key in compressed base58 format" do
|
156
|
+
Bitcoin.network = :bitcoin
|
157
|
+
Bitcoin::Key.new("98e4483a197fb686fe9afb51389f329aabc67964b1d0e0a5340c962a0d63c44a",
|
158
|
+
nil, true).to_base58.should == "L2LusdhGSagfUVvNWrUuPDygn5mdAhxUDEANfABvBj36Twn1mKgQ"
|
159
|
+
Bitcoin.network = :testnet3
|
160
|
+
Bitcoin::Key.new("e3ff5d7e592669d0c1714f1496b260815edd0c3a00186e896dc7f36ede914dd2",
|
161
|
+
nil, true).to_base58.should == "cVDu6aXUWHTM2vpztZW14BMnKkCcd5th6177VnCsa8XozoMyp73C"
|
162
|
+
Bitcoin.network = :bitcoin
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should import private key in compressed base58 format" do
|
166
|
+
Bitcoin.network = :bitcoin
|
167
|
+
key = Bitcoin::Key.from_base58("L2LusdhGSagfUVvNWrUuPDygn5mdAhxUDEANfABvBj36Twn1mKgQ")
|
168
|
+
key.priv.should == "98e4483a197fb686fe9afb51389f329aabc67964b1d0e0a5340c962a0d63c44a"
|
169
|
+
key.pub.should == "02e054ee811165ac294c992ff410067db6491228725fe09db2a415493c897973a8"
|
170
|
+
key.compressed.should == true
|
171
|
+
key.addr.should == "1C7Ni4zuV3zfLs8T1S7s29wNAtRoDHHnpw"
|
172
|
+
Bitcoin.network = :testnet3
|
173
|
+
key = Bitcoin::Key.from_base58("cVDu6aXUWHTM2vpztZW14BMnKkCcd5th6177VnCsa8XozoMyp73C")
|
174
|
+
key.priv.should == "e3ff5d7e592669d0c1714f1496b260815edd0c3a00186e896dc7f36ede914dd2"
|
175
|
+
key.pub.should == "0390bb61c062266a1e8460ec902379749ae30f569013d82bd448a61591f20b8ee2"
|
176
|
+
key.addr.should == "mjh9RgZh14FfJQ2pFpRSqEQ5BH1nHo5To7"
|
177
|
+
Bitcoin.network = :bitcoin
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should handle compressed and uncompressed pubkeys" do
|
181
|
+
compressed = "0351efb6e91a31221652105d032a2508275f374cea63939ad72f1b1e02f477da78"
|
182
|
+
uncompressed = "0451efb6e91a31221652105d032a2508275f374cea63939ad72f1b1e02f477da787f71a2e8ac5aacedab47904d4bd42f636429e9ce069ebcb99f675aad31306a53"
|
183
|
+
Bitcoin::Key.new(nil, compressed).compressed.should == true
|
184
|
+
Bitcoin::Key.new(nil, compressed).pub.should == compressed
|
185
|
+
Bitcoin::Key.new(nil, compressed).addr.should == "1NdB761LmTmrJixxp93nz7pEiCx5cKPW44"
|
186
|
+
Bitcoin::Key.new(nil, uncompressed).compressed.should == false
|
187
|
+
Bitcoin::Key.new(nil, uncompressed).pub.should == uncompressed
|
188
|
+
Bitcoin::Key.new(nil, uncompressed).addr.should == "19FBCg9295EBQ4P6bSLTGyz2BdbbPcqQD"
|
189
|
+
|
190
|
+
key = Bitcoin::Key.new(nil, compressed)
|
191
|
+
key.pub_compressed.should == compressed
|
192
|
+
key.pub_uncompressed.should == uncompressed
|
193
|
+
|
194
|
+
sig = @key.sign(msg="foobar")
|
195
|
+
Bitcoin::Key.new(nil, @key.pub_compressed ).verify(msg, sig).should == true
|
196
|
+
Bitcoin::Key.new(nil, @key.pub_uncompressed).verify(msg, sig).should == true
|
197
|
+
|
198
|
+
compressed = "02f01984446a994a9e422c9ba9c6f33f1f40c01d9d872064a49679d702fae33064"
|
199
|
+
Bitcoin::Key.new(nil, compressed).pub.should == compressed
|
200
|
+
Bitcoin::Key.new(nil, compressed).addr.should == "18TWywxjESkg4pzJqBYNDo39S2QMPaWWJ5"
|
201
|
+
|
202
|
+
k = Bitcoin::Key.new(nil, nil)
|
203
|
+
k.instance_eval{ set_pub("02f01984446a994a9e422c9ba9c6f33f1f40c01d9d872064a49679d702fae33064") }
|
204
|
+
k.compressed.should == true
|
205
|
+
|
206
|
+
k = Bitcoin::Key.new(nil, nil)
|
207
|
+
k.instance_eval{ set_pub("0351efb6e91a31221652105d032a2508275f374cea63939ad72f1b1e02f477da78") }
|
208
|
+
k.compressed.should == true
|
209
|
+
|
210
|
+
k = Bitcoin::Key.new(nil, nil)
|
211
|
+
k.instance_eval{ set_pub("0451efb6e91a31221652105d032a2508275f374cea63939ad72f1b1e02f477da787f71a2e8ac5aacedab47904d4bd42f636429e9ce069ebcb99f675aad31306a53") }
|
212
|
+
k.compressed.should == false
|
213
|
+
end
|
214
|
+
|
215
|
+
it "should handle private key in bip38 (non-ec-multiply) format" do
|
216
|
+
k = Bitcoin::Key.from_base58("5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR")
|
217
|
+
k.to_bip38("TestingOneTwoThree").should == "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEbn2Nh2ZoGg"
|
218
|
+
|
219
|
+
k = Bitcoin::Key.from_bip38("6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEbn2Nh2ZoGg", "TestingOneTwoThree")
|
220
|
+
k.to_base58.should == "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR"
|
221
|
+
|
222
|
+
k = Bitcoin::Key.from_base58("5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5")
|
223
|
+
k.to_bip38("Satoshi").should == "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq"
|
224
|
+
|
225
|
+
k = Bitcoin::Key.from_bip38("6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq", "Satoshi")
|
226
|
+
k.to_base58.should == "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5"
|
227
|
+
|
228
|
+
k = Bitcoin::Key.from_base58("L44B5gGEpqEDRS9vVPz7QT35jcBG2r3CZwSwQ4fCewXAhAhqGVpP")
|
229
|
+
k.to_bip38("TestingOneTwoThree").should == "6PYNKZ1EAgYgmQfmNVamxyXVWHzK5s6DGhwP4J5o44cvXdoY7sRzhtpUeo"
|
230
|
+
|
231
|
+
k = Bitcoin::Key.from_bip38("6PYNKZ1EAgYgmQfmNVamxyXVWHzK5s6DGhwP4J5o44cvXdoY7sRzhtpUeo", "TestingOneTwoThree")
|
232
|
+
k.to_base58.should == "L44B5gGEpqEDRS9vVPz7QT35jcBG2r3CZwSwQ4fCewXAhAhqGVpP"
|
233
|
+
|
234
|
+
k = Bitcoin::Key.from_base58("KwYgW8gcxj1JWJXhPSu4Fqwzfhp5Yfi42mdYmMa4XqK7NJxXUSK7")
|
235
|
+
k.to_bip38("Satoshi").should == "6PYLtMnXvfG3oJde97zRyLYFZCYizPU5T3LwgdYJz1fRhh16bU7u6PPmY7"
|
236
|
+
|
237
|
+
k = Bitcoin::Key.from_bip38("6PYLtMnXvfG3oJde97zRyLYFZCYizPU5T3LwgdYJz1fRhh16bU7u6PPmY7", "Satoshi")
|
238
|
+
k.to_base58.should == "KwYgW8gcxj1JWJXhPSu4Fqwzfhp5Yfi42mdYmMa4XqK7NJxXUSK7"
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should generate private key from warp format" do
|
242
|
+
k = Bitcoin::Key.from_warp("ER8FT+HFjk0", "7DpniYifN6c")
|
243
|
+
k.addr.should == "1J32CmwScqhwnNQ77cKv9q41JGwoZe2JYQ"
|
244
|
+
k.to_base58.should == "5JfEekYcaAexqcigtFAy4h2ZAY95vjKCvS1khAkSG8ATo1veQAD"
|
245
|
+
|
246
|
+
k = Bitcoin::Key.from_warp("YqIDBApDYME", "G34HqIgjrIc")
|
247
|
+
k.addr.should == "19aKBeXe2mi4NbQRpYUrCLZtRDHDUs9J7J"
|
248
|
+
k.to_base58.should == "5KUJA5iZ2zS7AXkU2S8BiBVY3xj6F8GspLfWWqL9V7CajXumBQV"
|
249
|
+
|
250
|
+
k = Bitcoin::Key.from_warp("FPdAxCygMJg", "X+qaSwhUYXw")
|
251
|
+
k.addr.should == "14Pqeo9XNRxjtKFFYd6TvRrJuZxVpciS81"
|
252
|
+
k.to_base58.should == "5JBAonQ4iGKFJxENExZghDtAS6YB8BsCw5mwpHSvZvP3Q2UxmT1"
|
253
|
+
end
|
254
|
+
|
255
|
+
it "should raise error for private key out of range." do
|
256
|
+
proc{Bitcoin::Key.new('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141')}.should.raise(Exception)
|
257
|
+
proc{Bitcoin::Key.new('00')}.should.raise(Exception)
|
258
|
+
proc{Bitcoin::Key.new('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140')}.should.not.raise(Exception)
|
259
|
+
proc{Bitcoin::Key.new('01')}.should.not.raise(Exception)
|
260
|
+
end
|
261
|
+
|
262
|
+
end
|
263
|
+
|
264
|
+
begin
|
265
|
+
describe "Bitcoin::OpenSSL_EC" do
|
266
|
+
Bitcoin::OpenSSL_EC
|
267
|
+
|
268
|
+
it 'resolves public from private key' do
|
269
|
+
privkey = ["56e28a425a7b588973b5db962a09b1aca7bdc4a7268cdd671d03c52a997255dc"].pack("H*")
|
270
|
+
pubkey = ["04324c6ebdcf079db6c9209a6b715b955622561262cde13a8a1df8ae0ef030eaa1552e31f8be90c385e27883a9d82780283d19507d7fa2e1e71a1d11bc3a52caf3"].pack("H*")
|
271
|
+
|
272
|
+
Bitcoin::OpenSSL_EC.regenerate_key(privkey).should == [privkey, pubkey].map{|i| i.unpack("H*")[0] }
|
273
|
+
|
274
|
+
[
|
275
|
+
["b51386f8275d49d8d30287d7b1afa805790bdd1fe8b13d22d25928c67ea55d02", "0470305ae5278a22499980286d9c513861d89e7b7317c8b891c554d5c8fdd256b03daa0340be4104f8c84cfa98f0da8f16567fcdd3a00fd993adbbe91695671a56"],
|
276
|
+
["d8ebece51adc5fb99dd6994bcb8fa1221d01576fd76af9134ab36f8d4698b55c", "047503421850d3a6eecb7c9de33b367c4d3f96a34ff257ad0c34e234e29f3672525c6b4353ce6fdc9de3f885fdea798982e2252e610065dbdb62cd8cab1fe45822"],
|
277
|
+
["c95c79fb0cc1fe47b384751df0627be40bbe481ec94eeafeb6dc40e94c40de43", "04b746ca07e718c7ca26d4eeec037492777f48bb5c750e972621698f699f530535c0ffa96dad581102d0471add88e691af85955d1fd42f68506f8092fddfe0c47a"],
|
278
|
+
["5b61f807cc938b0fd3ec8f6006737d0002ceca09f296204138c4459de8a856f6", "0487357bf30c13d47d955666f42f87690cfd18be96cc74cda711da74bf76b08ebc6055aba30680e6288df14bda68c781cbf71eaad096c3639e9724c5e26f3acf54"]
|
279
|
+
].each{|key|
|
280
|
+
privkey, pubkey = [ key.first ].pack("H*")
|
281
|
+
Bitcoin::OpenSSL_EC.regenerate_key(privkey).should == key
|
282
|
+
}
|
283
|
+
|
284
|
+
250.times.map{
|
285
|
+
keypair = Bitcoin.generate_key;
|
286
|
+
Bitcoin::OpenSSL_EC.regenerate_key(keypair.first) == keypair
|
287
|
+
}.all?.should == true
|
288
|
+
end
|
289
|
+
|
290
|
+
it 'recover public key from compact signature' do
|
291
|
+
args = [
|
292
|
+
"\x12&\x17\x9D\xDFc\x83\xFB\xCFQ\x02\xC9I%8\xB7 ls\x9A\xE7\x9E\xB0d@\x8C*\xBDg\xD3\x9B\xED",
|
293
|
+
"\x1C\xF0\xEC\xD57\xAC\x03\x8F\x1A\xF6\xEAx@\xE4H\xBA\xE6\xFA\xEDQ\xC13~\xD7\xEB\xAB$\x01\x8C\xF4\x12\xC86\xDE\a_2\xE0\x93`1NE\xCE\x97\x1A\x92\x99\xDB\xF7\xE5'h\x7F\rAy\xEB\xD1I\xC4j\x15g\x9D",
|
294
|
+
1, false
|
295
|
+
]
|
296
|
+
expected = "047840b97f46d4c32c62119f9e069172272592ec7741a3aec81e339b87387350740dce89837c8332910f349818060b66070b94e8bb11442d49d3f6c0d7f31ba6a6"
|
297
|
+
|
298
|
+
# 10_000.times{|n| # enable for memory leak testing
|
299
|
+
# puts 'RAM USAGE: ' + `pmap #{Process.pid} | tail -1`[10,40].strip if (n % 1_000) == 0
|
300
|
+
Bitcoin::OpenSSL_EC.recover_public_key_from_signature(*args).should == expected
|
301
|
+
# }
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'sign and verify text messages' do
|
305
|
+
[
|
306
|
+
["5HxWvvfubhXpYYpS3tJkw6fq9jE9j18THftkZjHHfmFiWtmAbrj", false],
|
307
|
+
["5KC4ejrDjv152FGwP386VD1i2NYc5KkfSMyv1nGy1VGDxGHqVY3", false],
|
308
|
+
["Kwr371tjA9u2rFSMZjTNun2PXXP3WPZu2afRHTcta6KxEUdm1vEw", true],
|
309
|
+
["L3Hq7a8FEQwJkW1M2GNKDW28546Vp5miewcCzSqUD9kCAXrJdS3g", true],
|
310
|
+
].each{|privkey_base58,expected_compression|
|
311
|
+
k = Bitcoin::Key.from_base58(privkey_base58)
|
312
|
+
k.compressed.should == expected_compression
|
313
|
+
k2 = Bitcoin::Key.new(nil, k.pub)
|
314
|
+
k2.compressed.should == expected_compression
|
315
|
+
16.times{|n|
|
316
|
+
msg = "Very secret message %d: 11" % n
|
317
|
+
signature = k.sign_message(msg)
|
318
|
+
k2.verify_message(signature, msg).should == true
|
319
|
+
Bitcoin::Key.verify_message(k.addr, signature, msg).should == true
|
320
|
+
}
|
321
|
+
}
|
322
|
+
end
|
323
|
+
|
324
|
+
end
|
325
|
+
rescue LoadError
|
326
|
+
end
|