From 5e500910df5fdf865093528115209559446f1a1f Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Wed, 17 Jan 2018 14:18:16 +1100 Subject: [PATCH 1/6] tests: use P2* acronyms, not full-length text --- test/fixtures/transaction_builder.json | 90 +++++++++++++------------- test/transaction_builder.js | 4 +- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/test/fixtures/transaction_builder.json b/test/fixtures/transaction_builder.json index 1889363..caf0912 100644 --- a/test/fixtures/transaction_builder.json +++ b/test/fixtures/transaction_builder.json @@ -2,7 +2,7 @@ "valid": { "build": [ { - "description": "Transaction w/ pubKeyHash -> pubKeyHash", + "description": "Transaction w/ P2PKH -> P2PKH", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006b483045022100a3b254e1c10b5d039f36c05f323995d6e5a367d98dd78a13d5bbc3991b35720e022022fccea3897d594de0689601fbd486588d5bfa6915be2386db0397ee9a6e80b601210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ffffffff0110270000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000", "inputs": [ { @@ -23,7 +23,7 @@ ] }, { - "description": "Transaction w/ pubKey -> pubKeyHash", + "description": "Transaction w/ P2PK -> P2PKH", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000494830450221009833abb3ab49d7004c06bcc79eafd6905ada3eee91f3376ad388548034acd9a702202e84dda6ef2678c82256afcfc459aaa68e179b2bb0e6b2dc3f1410e132c5e6c301ffffffff0100f90295000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000", "inputs": [ { @@ -45,7 +45,7 @@ ] }, { - "description": "Transaction w/ scriptHash(pubKeyHash) -> pubKeyHash", + "description": "Transaction w/ P2SH(P2PKH) -> P2PKH", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000085483045022100a3b254e1c10b5d039f36c05f323995d6e5a367d98dd78a13d5bbc3991b35720e022022fccea3897d594de0689601fbd486588d5bfa6915be2386db0397ee9a6e80b601210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817981976a914751e76e8199196d454941c45d1b3a323f1433bd688acffffffff0110270000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000", "inputs": [ { @@ -67,7 +67,7 @@ ] }, { - "description": "Transaction w/ scriptHash(multisig 2-of-2) -> pubKeyHash", + "description": "Transaction w/ P2SH(P2MS 2/2) -> P2PKH", "network": "testnet", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000fd1b0100483045022100b7a9bab60c4307349de9571ce0bd26ebb9d68d4e9ab3f9173e1f736f1390a04a022020931ff70e87033cdd94bdf434e865993b2258065c5c222a53f29d077bcfa4480147304402206d79ad83f1ab12fc9feee9e66412de842fcbf8de0632beb4433d469f24f0fb4e022079e6df186582f2686a3292bde8e50dac36cb9bec3991995fe331e1daef7df8a4014c8752410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a52aeffffffff0110270000000000001976a914faf1d99bf040ea9c7f8cc9f14ac6733ad75ce24688ac00000000", "inputs": [ @@ -93,7 +93,7 @@ ] }, { - "description": "Transaction w/ multisig 2-of-2 -> pubKeyHash", + "description": "Transaction w/ P2MS 2/2 -> P2PKH", "network": "testnet", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009200483045022100b7a9bab60c4307349de9571ce0bd26ebb9d68d4e9ab3f9173e1f736f1390a04a022020931ff70e87033cdd94bdf434e865993b2258065c5c222a53f29d077bcfa4480147304402206d79ad83f1ab12fc9feee9e66412de842fcbf8de0632beb4433d469f24f0fb4e022079e6df186582f2686a3292bde8e50dac36cb9bec3991995fe331e1daef7df8a401ffffffff0110270000000000001976a914faf1d99bf040ea9c7f8cc9f14ac6733ad75ce24688ac00000000", "inputs": [ @@ -119,7 +119,7 @@ ] }, { - "description": "Transaction w/ multisig 2-of-3 -> pubKeyHash", + "description": "Transaction w/ P2MS 2/3 -> P2PKH", "network": "testnet", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000910047304402206b2fc7d3182e2853cab5bcffb85c3ef5470d2d05c496295538c9947af3bfd0ec0220300aa705a985c74f76c26c6d68da9b61b5c4cd5432e8c6a54623f376c8bf8cde01473044022031059c4dd6a97d84e3a4eb1ca21a9870bd1762fbd5db7c1932d75e56da78794502200f22d85be3c5f7035e89a147ee2619a066df19aff14a62e6bb3f649b6da19edf01ffffffff0110270000000000001976a914faf1d99bf040ea9c7f8cc9f14ac6733ad75ce24688ac00000000", "inputs": [ @@ -145,7 +145,7 @@ ] }, { - "description": "Transaction w/ multisig 2-of-2 (reverse order) -> pubKeyHash", + "description": "Transaction w/ P2MS 2/2 (reverse order) -> P2PKH", "network": "testnet", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009200483045022100b7a9bab60c4307349de9571ce0bd26ebb9d68d4e9ab3f9173e1f736f1390a04a022020931ff70e87033cdd94bdf434e865993b2258065c5c222a53f29d077bcfa4480147304402206d79ad83f1ab12fc9feee9e66412de842fcbf8de0632beb4433d469f24f0fb4e022079e6df186582f2686a3292bde8e50dac36cb9bec3991995fe331e1daef7df8a401ffffffff0110270000000000001976a914faf1d99bf040ea9c7f8cc9f14ac6733ad75ce24688ac00000000", "inputs": [ @@ -171,7 +171,7 @@ ] }, { - "description": "Transaction w/ scriptHash(multisig 2-of-3)", + "description": "Transaction w/ P2SH(P2MS 2/3)", "network": "testnet", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000fd5e0100483045022100eec19e061cad41610f9b42d2b06638b6b0fec3da0de9c6858e7f8c06053979900220622936dd47e202b2ad17639cda680e52334d407149252959936bb1f38e4acc52014830450221009aac215157a74a18234fd06be27448dccee809986bbf93be457a9262f0c69a9402203ff41d7c757f0e8951e4471f205087ecff499f986400ab18210eaad9a628e33c014cc952410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a4104f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e67253aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000", "inputs": [ @@ -197,7 +197,7 @@ ] }, { - "description": "Transaction w/ scriptHash(multisig 2-of-3), different hash types", + "description": "Transaction w/ P2SH(P2MS 2/3), different hash types", "network": "testnet", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000fd5e0100483045022100eec19e061cad41610f9b42d2b06638b6b0fec3da0de9c6858e7f8c06053979900220622936dd47e202b2ad17639cda680e52334d407149252959936bb1f38e4acc5201483045022100d404fb6de6cf42efb9d7948d2e8fb6618f8eba55ecd25907d18d576d9aa6f39d02205ec2e7fa7c5f8a9793732ca9d2f9aba3b2bb04ca6d467ba36940e0f695e48de5024cc952410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a4104f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e67253aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000", "inputs": [ @@ -225,7 +225,7 @@ ] }, { - "description": "Transaction w/ scriptHash(pubKey) -> pubKeyHash", + "description": "Transaction w/ P2SH(P2PK) -> P2PKH", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006c47304402201115644b134932c8a7a8e925769d130a801288d477130e2bf6fadda20b33754d02202ecefbf63844d7cb2d5868539c39f973fe019f72e5c31a707836c0d61ef317db012321033e29aea1168a835d5e386c292082db7b7807172a10ec634ad34226f36d79e70facffffffff0100f90295000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000", "inputs": [ { @@ -293,7 +293,7 @@ ] }, { - "description": "Transaction w/ nLockTime, pubKeyHash -> pubKeyHash", + "description": "Transaction w/ nLockTime, P2PKH -> P2PKH", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006b483045022100e31ef1bcc6f060cb6a53675a11606b9180f4f8b1ec823113fb4c0bf1c5b99b8e02204234690c19cd89e544002d26dbcbd49bf9d1b4cfc5a617fd8ab2607acfd869b001210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ffffffff0110270000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588acffff0000", "locktime": 65535, "inputs": [ @@ -315,7 +315,7 @@ ] }, { - "description": "Transaction w/ 1 pubKeyHash transaction input (Issue #644)", + "description": "Transaction w/ 1 P2PKH transaction input (Issue #644)", "network": "testnet", "txHex": "010000000132595835c74fccf097db4ccae9dc2de621e58e0d3f697a27b469b61c7a223b39000000006a47304402202fd41f18f1d7915bc811610236e1d708f9cd3515734abd5db7ac607f030728af02206bee7d163f04c470ce55561523824eb8b3abce80c214aabf7dfb78a073ea4a70012103f29374a4c2c218a4077db9ba0b9d674cde3719560460af4eb3190d512dd5de92ffffffff01808d5b00000000001976a914ff99e06c1a4ac394b4e1cb3d3a4b2b47749e339a88ac00000000", "inputs": [ @@ -337,7 +337,7 @@ ] }, { - "description": "Transaction w/ pubKeyHash -> P2WPKH", + "description": "Transaction w/ P2PKH -> P2WPKH", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006b4830450221009a524a3257b8bd0c77ba4cba65fc00954f2030243f2eb16571838a3b951c8c07022008f5af9de672b365fd257377db1cf6da4da1b49b9637ceb651ac0eb4181dc3ca01210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ffffffff011027000000000000160014aa4d7985c57e011a8b3dd8e0e5a73aaef41629c500000000", "inputs": [ { @@ -358,7 +358,7 @@ ] }, { - "description": "Transaction w/ pubKeyHash -> P2WSH", + "description": "Transaction w/ P2PKH -> P2WSH", "txHex": "0100000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006a473044022056c99ba23eb15b3e666b188f87b04d5ef23eeda5298939cdaec35a3bddf3835602205887a5a460f299819b0c93948fafab8b2d64d8c051934431e3bb9acebef5d1b001210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ffffffff01102700000000000022002032447752937d355ca2defddcd1f6b4fc53d182f8901cebbcff42f5e381bf0b8000000000", "inputs": [ { @@ -402,7 +402,7 @@ ] }, { - "description": "Transaction w/ P2WSH|P2PK -> P2PKH", + "description": "Transaction w/ P2WSH(P2PK) -> P2PKH", "txHex": "010000000001014533a3bc1e039bd787656068e135aaee10aee95a64776bfc047ee6a7c1ebdd2f0000000000ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac02473044022039725bb7291a14dd182dafdeaf3ea0d5c05c34f4617ccbaa46522ca913995c4e02203b170d072ed2e489e7424ad96d8fa888deb530be2d4c5d9aaddf111a7efdb2d3012321038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2bac00000000", "inputs": [ { @@ -425,7 +425,6 @@ } ] }, - { "description": "Sighash: SINGLE (random)", "txHex": "01000000012ffb29d53528ad30c37c267fbbeda3c6fce08f5f6f5d3b1eab22193599a3612a010000006b483045022100f963f1d9564075a934d7c3cfa333bd1378859b84cba947e149926fc9ec89b5ae02202b5b912e507bae65002aff972f9752e2aeb2e22c5fdbaaad672090378184df37032102f1c7eac9200f8dee7e34e59318ff2076c8b3e3ac7f43121e57569a1aec1803d4ffffffff0260a62f01000000001976a9140de1f9b92d2ab6d8ead83f9a0ff5cf518dcb03b888ac80969800000000001976a91454d0e925d5ee0ee26768a237067dee793d01a70688ac00000000", @@ -884,7 +883,7 @@ "locktime": 1170 }, { - "description": "Sighash V1: 6-of-6", + "description": "Sighash V1: P2MS 6/6", "txHex": "0100000000010136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000023220020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54ffffffff02e6312761010000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688ac583e0f00000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac0800483045022100f902f491c4df15199e584790ae8c7202569a977accac0a09fa3f4f3b6ec3517602205961a951c4a12fa966da67b6fd75975b9de156b9895f8ab5f289ecaee12b9b3501473044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502483045022100bd5294e145d729e9593f49079b74e6e4b8aeba63440408595ce0949d5c6450a702207f9c9fb45907fe0180d3f4bee499006007bb90894b5f824a26dfa5d3afec543303483045022100febf9409d7f3c091ddc4d296a483aae7b3d2a91d38f6ea2a153f7ff085fe7766022078d11972c74cd78f816152463a5e1a5d986dfb94b55cf5f7242e4f6d5df000ff81483045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a088247304402201a0e125aed6a700e45d6c86017d5a9d2264c8079319d868f3f163f5d63cb5bfe02200887608f2322ca0d82df67316275371028b0b21750417d594117963fe23b67ec83cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae00000000", "inputs": [ { @@ -977,7 +976,7 @@ "locktime": 0 }, { - "description": "P2SH P2PK", + "description": "P2SH(P2PK)", "txHex": "0100000001a30e865fa60f6c25a8b218bb5a6b9acc7cf3f1db2f2e3a7114b51af5d6ae811f000000006c473044022026d2b56b6cb0269bf4e80dd655b9e917019e2ccef57f4b858d03bb45a2da59d9022010519a7f327f03e7c9613e0694f929544af29d3682e7ec8f19147e7a86651ecd012321038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2bacffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac00000000", "inputs": [ { @@ -1004,7 +1003,7 @@ "locktime": 0 }, { - "description": "P2WSH P2PK", + "description": "P2WSH(P2PK)", "txHex": "010000000001014533a3bc1e039bd787656068e135aaee10aee95a64776bfc047ee6a7c1ebdd2f0000000000ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac02473044022039725bb7291a14dd182dafdeaf3ea0d5c05c34f4617ccbaa46522ca913995c4e02203b170d072ed2e489e7424ad96d8fa888deb530be2d4c5d9aaddf111a7efdb2d3012321038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2bac00000000", "inputs": [ { @@ -1031,7 +1030,7 @@ "locktime": 0 }, { - "description": "P2SH P2WSH P2PK", + "description": "P2SH(P2WSH(P2PK))", "txHex": "01000000000101e0779d448aaa203a96b3de14d0482e26dd75a4278ae5bb6d7cc18e6874f3866000000000232200200f9ea7bae7166c980169059e39443ed13324495b0d6678ce716262e879591210ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac024730440220014207a5f0601ed7b3c3f9d82309b32e8f76dd6776a55cb5f8684b9ff029e0850220693afd7b69471b51d9354cc1a956b68b8d48e32f6b0ad7a19bb5dd3e4499179a012321038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2bac00000000", "inputs": [ { @@ -1085,7 +1084,7 @@ "locktime": 0 }, { - "description": "P2SH P2PKH", + "description": "P2SH(P2PKH)", "txHex": "01000000014b9ffc17c3cce03ee66980bf32d36aaa13462980c3af9d9d29ec6b97ab1c91650000000084473044022003d738d855d0c54a419ac62ebe1a1c0bf2dc6993c9585adb9a8666736658107002204d57ff62ee7efae6df73430bba62494faeba8c125a4abcf2488757a4f8877dd50121038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b1976a914851a33a5ef0d4279bd5854949174e2c65b1d450088acffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac00000000", "inputs": [ { @@ -1112,7 +1111,7 @@ "locktime": 0 }, { - "description": "P2WSH P2PKH", + "description": "P2WSH(P2PKH)", "txHex": "0100000000010123539877e39a273819006de1c433e09f9e9af201fc178dd0f2cf2eaa5ad53b480000000000ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac03483045022100f02a82b0a94a5d5dc4d2127ac34be62cb066713d71d56bdf5ef7810ab57a157302205f24abdde1dab554a02edcf378e98828024e57272e5e474a5b04accdca080a030121038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b1976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac00000000", "inputs": [ { @@ -1139,7 +1138,7 @@ "locktime": 0 }, { - "description": "P2SH P2WSH P2PKH", + "description": "P2SH(P2WSH(P2PKH))", "txHex": "01000000000101363dfbfe2566db77e3b1195bedf1d0daeb9ce526cd7611ba81759b2654ce415c0000000023220020578db4b54a6961060b71385c17d3280379a557224c52b11b19a3a1c1eef606a0ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac03483045022100c8bd5ebb26ba6719158650c3e7c5e80be4c886ba025c44cc41f5149b3114705a02203ac6e1f38f6c081d506f28f1b5e38ebec9e0f0fa911d0e3f68d48d8b0e77b34b0121038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b1976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac00000000", "inputs": [ { @@ -1167,7 +1166,7 @@ "locktime": 0 }, { - "description": "Multisig", + "description": "P2MS 1/1", "txHex": "010000000179310ec46e734b3490ee839c5ae4a09d28561ee9fff2d051f733d201f958d6d2000000004a00483045022100d269531f120f377ed2f94f42bef893ff2fe6544ac97fb477fa291bc6cfb7647e02200983f6a5bbd4ce6cf97f571995634805a7324cc5d8353ed954fa62477b0fcd0901ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac00000000", "inputs": [ { @@ -1193,7 +1192,7 @@ "locktime": 0 }, { - "description": "P2SH Multisig", + "description": "P2SH(P2MS)", "txHex": "010000000152882c661c49dd2f53bd9ced7e9f44b184888ad2fe7d86737f0efaa7aecdced1000000006f00473044022025f2e161f0a97888df948f4dcc7c04fe502510b8d8260ca9920f38d55e4d17720220271b6843224b3a34542a4df31781d048da56ee46b8c5fb99043e30abd527b2d801255121038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b51aeffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac00000000", "inputs": [ { @@ -1220,7 +1219,7 @@ "locktime": 0 }, { - "description": "P2WSH Multisig", + "description": "P2WSH(P2MS)", "txHex": "01000000000101c1eced6216de0889d4629ff64a8af8e8ec6d0b414de0c57b46c02cc303d321fe0000000000ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac0300483045022100d4c0cbdb45915b8a3162362fa5f74556de919aeda5337fc44a7fb000e833460d022017742c37d7a061e2ae3a086c7c585c9c85e5d31af468d3e00045c0f35b8f8eb601255121038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b51ae00000000", "inputs": [ { @@ -1247,7 +1246,7 @@ "locktime": 0 }, { - "description": "P2SH P2WSH Multisig", + "description": "P2SH(P2WSH(P2MS))", "txHex": "010000000001013a5a2ab0223d3b504b52af76d650329750666fbf1be13d4cb08d0d9fc550a47d00000000232200201b8c0c2878c5634c3ce738cdc568c592e99783dbd28ff4c6cb5b7b4675d9ee99ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac0300483045022100c97a5e205ce0023d3d44f846abf1f0e21b6f2646bd2496bbe92e4333fe4401be02201247e047d669f713582713e35d2eba430abc3d75a924bb500362bf47d6234ed501255121038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b51ae00000000", "inputs": [ { @@ -1301,7 +1300,7 @@ "locktime": 0 }, { - "description": "P2SH P2WKH", + "description": "P2SH(P2WKH)", "txHex": "010000000001015df9a0b9ade2d835881704e0f53b51a4b19ecfc794ea1f3555783dd7f68659ce0000000017160014851a33a5ef0d4279bd5854949174e2c65b1d4500ffffffff0160ea0000000000001976a914851a33a5ef0d4279bd5854949174e2c65b1d450088ac02483045022100cb3929c128fec5108071b662e5af58e39ac8708882753a421455ca80462956f6022030c0f4738dd1a13fc7a34393002d25c6e8a6399f29c7db4b98f53a9475d94ca20121038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b00000000", "inputs": [ { @@ -1328,7 +1327,7 @@ "locktime": 0 }, { - "description": "P2SH(P2WSH(multisig 2-of-2)), incomplete", + "description": "P2SH(P2WSH(P2MS 2/2)), incomplete", "network": "testnet", "txHex": "010000000001012915794541ffa77ca795ec7c23ee989a63ccd1a71fab73e1c27ed20c4b6c69a4010000002322002024376a0a9abab599d0e028248d48ebe817bc899efcffa1cd2984d67289daf5afffffffff01b8820100000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac040047304402203b334650f1f13574a1c2edc76421867f7252950968bf0293c8b3ed086ab89e3d0220565cafab0a5044617e94756b948241525b2483a52504e1064d29f641fb18129e010047522102bbbd6eb01efcbe4bd9664b886f26f69de5afcb2e479d72596c8bf21929e352e22102d9c3f7180ef13ec5267723c9c2ffab56a4215241f837502ea8977c8532b9ea1952ae00000000", "incomplete": true, @@ -1355,7 +1354,7 @@ ] }, { - "description": "P2SH(P2WSH(multisig 2-of-2))", + "description": "P2SH(P2WSH(P2MS 2/2))", "network": "testnet", "txHex": "010000000001012915794541ffa77ca795ec7c23ee989a63ccd1a71fab73e1c27ed20c4b6c69a4010000002322002024376a0a9abab599d0e028248d48ebe817bc899efcffa1cd2984d67289daf5afffffffff01b8820100000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac040047304402203b334650f1f13574a1c2edc76421867f7252950968bf0293c8b3ed086ab89e3d0220565cafab0a5044617e94756b948241525b2483a52504e1064d29f641fb18129e0148304502210096e859827fb629b6547658c613f7c8298de151513d74b224560aa8608d521d600220736fb5564322237716ec940de44c67c428198adf5dedfda183c17aa77cd28d640147522102bbbd6eb01efcbe4bd9664b886f26f69de5afcb2e479d72596c8bf21929e352e22102d9c3f7180ef13ec5267723c9c2ffab56a4215241f837502ea8977c8532b9ea1952ae00000000", "incomplete": true, @@ -1388,7 +1387,7 @@ ] }, { - "description": "P2WSH(multisig 2-of-3) -> P2PKH", + "description": "P2WSH(P2MS 2/3) -> P2PKH", "network": "testnet", "txHex": "01000000000101ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01000000232200201b48bf145648b9492ecd6d76754ea3def4b90e22e4ef7aee9ca291b2de455701ffffffff01f07e0e00000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac0400473044022036c9ecb03cb04c09be1f52766725dcfe9a815973bd2f34ce19a345f2d925a45502207b90737852d2508db104ad17612de473687e67928c045555a1ed8d495c0570d901483045022100aec0e58e4e597b35ca5a727702a0da3d4f2ef4759914da7fc80aecb3c479a6d902201ec27ea8dcca4b73ee81e4b627f52f9e627c3497f61e4beeb98f86e02979640a0169522103c411cf39aca4395c81c35921dc832a0d1585d652ab1b52ccc619ff9fbbc5787721020636d944458a4663b75a912c37dc1cd59b11f9a00106783a65ba230d929b96b02102d1448cbf19528a1a27e5958ba73d930b5b3facdbe5c30c7094951a287fcc914953ae00000000", "stages": [ @@ -1425,7 +1424,7 @@ ], "fromTransaction": [ { - "description": "Transaction w/ scriptHash(multisig 2-of-2) -> OP_RETURN | 1 OP_0, no signatures", + "description": "Transaction w/ P2SH(P2MS 2/2) -> OP_RETURN | 1 OP_0, no signatures", "network": "testnet", "incomplete": true, "inputs": [ @@ -1444,7 +1443,7 @@ ] }, { - "description": "Transaction w/ scriptHash(multisig 2-of-2) -> OP_RETURN | missing OP_0, 1 signature", + "description": "Transaction w/ P2SH(P2MS 2/2) -> OP_RETURN | missing OP_0, 1 signature", "network": "testnet", "incomplete": true, "inputs": [ @@ -1463,7 +1462,7 @@ ] }, { - "description": "Transaction w/ scriptHash(multisig 2-of-2) -> OP_RETURN | no OP_0, 2 signatures", + "description": "Transaction w/ P2SH(P2MS 2/2) -> OP_RETURN | no OP_0, 2 signatures", "network": "testnet", "inputs": [ { @@ -1486,7 +1485,7 @@ }, "multisig": [ { - "description": "P2SH 2-of-2 multisig, signed in correct order", + "description": "P2SH(P2MS 2/2), signed in correct order", "network": "testnet", "inputs": [ { @@ -1516,7 +1515,7 @@ "txHex": "0100000001cff58855426469d0ef16442ee9c644c4fb13832467bcbc3173168a7916f0714900000000fd1c0100483045022100e37e33a4fe5fccfb87afb0e951e83fcea4820d73b327d21edc1adec3b916c437022061c5786908b674e323a1863cc2feeb60e1679f1892c10ee08ac21e51fd50ba9001483045022100aa0c323bc639d3d71591be98ccaf7b8cb8c86aa95f060aef5e36fc3f04c4d029022010e2b18de17e307a12ae7e0e88518fe814f18a0ca1ee4510ba23a65628b06576014c8752410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a52aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000" }, { - "description": "P2SH 2-of-2 multisig, signed in shuffled order", + "description": "P2SH(P2MS 2/2), signed in shuffled order", "network": "testnet", "inputs": [ { @@ -1546,7 +1545,7 @@ "txHex": "0100000001cff58855426469d0ef16442ee9c644c4fb13832467bcbc3173168a7916f0714900000000fd1c0100483045022100e37e33a4fe5fccfb87afb0e951e83fcea4820d73b327d21edc1adec3b916c437022061c5786908b674e323a1863cc2feeb60e1679f1892c10ee08ac21e51fd50ba9001483045022100aa0c323bc639d3d71591be98ccaf7b8cb8c86aa95f060aef5e36fc3f04c4d029022010e2b18de17e307a12ae7e0e88518fe814f18a0ca1ee4510ba23a65628b06576014c8752410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a52aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000" }, { - "description": "P2SH 2-of-2 multisig, manually messed up order of signatures", + "description": "P2SH(P2MS 2/2), manually messed up order of signatures", "network": "testnet", "inputs": [ { @@ -1576,7 +1575,7 @@ "txHex": "0100000001cff58855426469d0ef16442ee9c644c4fb13832467bcbc3173168a7916f0714900000000fd1c0100483045022100e37e33a4fe5fccfb87afb0e951e83fcea4820d73b327d21edc1adec3b916c437022061c5786908b674e323a1863cc2feeb60e1679f1892c10ee08ac21e51fd50ba9001483045022100aa0c323bc639d3d71591be98ccaf7b8cb8c86aa95f060aef5e36fc3f04c4d029022010e2b18de17e307a12ae7e0e88518fe814f18a0ca1ee4510ba23a65628b06576014c8752410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a52aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000" }, { - "description": "P2SH 2-of-3 multisig, signed by key 1 and 2", + "description": "P2SH(P2MS 2/3), signed by key 1 and 2", "network": "testnet", "inputs": [ { @@ -1606,7 +1605,7 @@ "txHex": "0100000001cff58855426469d0ef16442ee9c644c4fb13832467bcbc3173168a7916f0714900000000fd5e0100483045022100daf0f4f3339d9fbab42b098045c1e4958ee3b308f4ae17be80b63808558d0adb02202f07e3d1f79dc8da285ae0d7f68083d769c11f5621ebd9691d6b48c0d4283d7d01483045022100ae06d8269b79b5cfa0297d1d88261b0061e52fc2814948c3aa05fa78ee76894302206e0c79a5c90569d8c72a542ef9a06471cbbcd2c651b312339983dfba4f8ff463014cc952410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a4104f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e67253aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000" }, { - "description": "P2SH 2-of-3 multisig, signed by key 1 and 3", + "description": "P2SH(P2MS 2/3), signed by key 1 and 3", "network": "testnet", "inputs": [ { @@ -1636,7 +1635,7 @@ "txHex": "0100000001cff58855426469d0ef16442ee9c644c4fb13832467bcbc3173168a7916f0714900000000fd5e0100483045022100daf0f4f3339d9fbab42b098045c1e4958ee3b308f4ae17be80b63808558d0adb02202f07e3d1f79dc8da285ae0d7f68083d769c11f5621ebd9691d6b48c0d4283d7d01483045022100a346c61738304eac5e7702188764d19cdf68f4466196729db096d6c87ce18cdd022018c0e8ad03054b0e7e235cda6bedecf35881d7aa7d94ff425a8ace7220f38af0014cc952410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a4104f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e67253aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000" }, { - "description": "P2SH 2-of-3 multisig, signed by key 3 and 1", + "description": "P2SH(P2MS 2/3), signed by key 3 and 1", "network": "testnet", "inputs": [ { @@ -1666,7 +1665,7 @@ "txHex": "0100000001cff58855426469d0ef16442ee9c644c4fb13832467bcbc3173168a7916f0714900000000fd5e0100483045022100daf0f4f3339d9fbab42b098045c1e4958ee3b308f4ae17be80b63808558d0adb02202f07e3d1f79dc8da285ae0d7f68083d769c11f5621ebd9691d6b48c0d4283d7d01483045022100a346c61738304eac5e7702188764d19cdf68f4466196729db096d6c87ce18cdd022018c0e8ad03054b0e7e235cda6bedecf35881d7aa7d94ff425a8ace7220f38af0014cc952410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a4104f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e67253aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000" }, { - "description": "P2SH 2-of-3 multisig, signed by key 1 and 3, manually messed up order of signatures", + "description": "P2SH(P2MS 2/3), signed by key 1 and 3, manually messed up order of signatures", "network": "testnet", "inputs": [ { @@ -1696,7 +1695,7 @@ "txHex": "0100000001cff58855426469d0ef16442ee9c644c4fb13832467bcbc3173168a7916f0714900000000fd5e0100483045022100daf0f4f3339d9fbab42b098045c1e4958ee3b308f4ae17be80b63808558d0adb02202f07e3d1f79dc8da285ae0d7f68083d769c11f5621ebd9691d6b48c0d4283d7d01483045022100a346c61738304eac5e7702188764d19cdf68f4466196729db096d6c87ce18cdd022018c0e8ad03054b0e7e235cda6bedecf35881d7aa7d94ff425a8ace7220f38af0014cc952410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b84104c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a4104f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e67253aeffffffff01e8030000000000001976a914aa4d7985c57e011a8b3dd8e0e5a73aaef41629c588ac00000000" }, { - "description": "P2SH 2-of-3 multisig, signed by key 3 and 1, manually removing OP_0s", + "description": "P2SH(P2MS 2/3), signed by key 3 and 1, manually removing OP_0s", "network": "testnet", "inputs": [ { @@ -1875,7 +1874,7 @@ ] }, { - "description": "Too many signatures - pubKeyHash", + "description": "Too many signatures - P2PKH", "exception": "Signature already exists", "inputs": [ { @@ -1900,6 +1899,7 @@ ] }, { + "description": "Transaction w/ P2WPKH, signing with uncompressed public key", "exception": "BIP143 rejects uncompressed public keys in P2WPKH or P2WSH", "inputs": [ { @@ -2039,7 +2039,7 @@ ] }, { - "description": "Too many signatures - scriptHash(multisig 1-of-1)", + "description": "Too many signatures - P2SH(P2MS 1/1)", "exception": "Signature already exists", "inputs": [ { @@ -2089,7 +2089,7 @@ ] }, { - "description": "Wrong key pair for multisig redeemScript", + "description": "Wrong key pair for P2MS redeemScript", "exception": "Key pair cannot sign for this input", "inputs": [ { diff --git a/test/transaction_builder.js b/test/transaction_builder.js index b8af928..6cbd43f 100644 --- a/test/transaction_builder.js +++ b/test/transaction_builder.js @@ -308,7 +308,7 @@ describe('TransactionBuilder', function () { }) fixtures.invalid.sign.forEach(function (f) { - it('throws on ' + f.exception + (f.description ? ' (' + f.description + ')' : ''), function () { + it('throws ' + f.exception + (f.description ? ' (' + f.description + ')' : ''), function () { var txb = construct(f, true) f.inputs.forEach(function (input, index) { @@ -362,7 +362,7 @@ describe('TransactionBuilder', function () { // if throws on incomplete too, enforce that if (f.incomplete) { - it('throws if ' + f.exception, function () { + it('throws ' + f.exception, function () { assert.throws(function () { var txb if (f.txHex) { From 098188dd3afc0be786b07d7780b287ca80544eba Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Wed, 17 Jan 2018 14:25:06 +1100 Subject: [PATCH 2/6] tests: add independent error message for missing witnessScript --- src/transaction_builder.js | 7 +++++-- test/fixtures/transaction_builder.json | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/transaction_builder.js b/src/transaction_builder.js index 5760fac..12ff3c3 100644 --- a/src/transaction_builder.js +++ b/src/transaction_builder.js @@ -332,11 +332,14 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip signScript = witnessScript } else if (input.prevOutType) { // embedded scripts are not possible without a redeemScript - if (input.prevOutType === scriptTypes.P2SH || - input.prevOutType === scriptTypes.P2WSH) { + if (input.prevOutType === scriptTypes.P2SH) { throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript') } + if (input.prevOutType === scriptTypes.P2WSH) { + throw new Error('PrevOutScript is ' + input.prevOutType + ', requires witnessScript') + } + prevOutType = input.prevOutType prevOutScript = input.prevOutScript expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey) diff --git a/test/fixtures/transaction_builder.json b/test/fixtures/transaction_builder.json index caf0912..5d746a1 100644 --- a/test/fixtures/transaction_builder.json +++ b/test/fixtures/transaction_builder.json @@ -1966,6 +1966,28 @@ } ] }, + { + "exception": "PrevOutScript is witnessscripthash, requires witnessScript", + "inputs": [ + { + "txId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "vout": 1, + "prevTxScript": "OP_0 0f9ea7bae7166c980169059e39443ed13324495b0d6678ce716262e879591210", + "signs": [ + { + "keyPair": "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn", + "throws": true + } + ] + } + ], + "outputs": [ + { + "script": "OP_DUP OP_HASH160 aa4d7985c57e011a8b3dd8e0e5a73aaef41629c5 OP_EQUALVERIFY OP_CHECKSIG", + "value": 1000 + } + ] + }, { "exception": "Inconsistent redeemScript", "network": "testnet", From 9a31b894c11f977dd9aa7c8f5e73ab019290a558 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Wed, 17 Jan 2018 14:40:21 +1100 Subject: [PATCH 3/6] tests: add inconsistent redeem/witness script hash signing tests --- test/fixtures/transaction_builder.json | 50 ++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/fixtures/transaction_builder.json b/test/fixtures/transaction_builder.json index 5d746a1..b9d2969 100644 --- a/test/fixtures/transaction_builder.json +++ b/test/fixtures/transaction_builder.json @@ -2015,6 +2015,56 @@ } ] }, + { + "description": "Inconsistent RedeemScript hash", + "exception": "Inconsistent hash160", + "inputs": [ + { + "txId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "vout": 0, + "prevTxScript": "OP_HASH160 ffffffffffffffffffffffffffffffffffffffff OP_EQUAL", + "signs": [ + { + "keyPair": "5JiHJJjdufSiMxbvnyNcKtQNLYH6SvUpQnRv9yZENFDWTQKQkzC", + "redeemScript": "OP_1", + "value": 10000, + "throws": true + } + ] + } + ], + "outputs": [ + { + "script": "OP_0 aa4d7985c57e011a8b3dd8e0e5a73aaef41629c5", + "value": 10000 + } + ] + }, + { + "description": "Inconsistent WitnessScript hash", + "exception": "Inconsistent sha256", + "inputs": [ + { + "txId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "vout": 0, + "prevTxScript": "OP_0 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "signs": [ + { + "keyPair": "5JiHJJjdufSiMxbvnyNcKtQNLYH6SvUpQnRv9yZENFDWTQKQkzC", + "witnessScript": "OP_1", + "value": 10000, + "throws": true + } + ] + } + ], + "outputs": [ + { + "script": "OP_0 aa4d7985c57e011a8b3dd8e0e5a73aaef41629c5", + "value": 10000 + } + ] + }, { "exception": "RedeemScript not supported \"OP_HASH160 7f67f0521934a57d3039f77f9f32cf313f3ac74b OP_EQUAL\"", "inputs": [ From 39a681d2d3f11c5388fa85d4318ee792b28eaff8 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Wed, 17 Jan 2018 14:34:06 +1100 Subject: [PATCH 4/6] tests: add failing test for #981 --- src/transaction_builder.js | 8 ++-- test/fixtures/transaction_builder.json | 53 +++++++++++++++++++++++++- test/transaction_builder.js | 10 +++-- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/src/transaction_builder.js b/src/transaction_builder.js index 12ff3c3..f0f9efe 100644 --- a/src/transaction_builder.js +++ b/src/transaction_builder.js @@ -259,7 +259,7 @@ function checkP2SHInput (input, redeemScriptHash) { if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH') var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1] - if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)') + if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(redeemScript)') } } @@ -268,7 +268,7 @@ function checkP2WSHInput (input, witnessScriptHash) { if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH') var scriptHash = bscript.decompile(input.prevOutScript)[1] - if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)') + if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha256(witnessScript)') } } @@ -310,7 +310,7 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip checkP2SHInput(input, redeemScriptHash) expanded = expandOutput(redeemScript, undefined, kpPubKey) - if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"') + if (!expanded.pubKeys) throw new Error(expanded.scriptType + ' not supported as redeemScript (' + bscript.toASM(witnessScript) + ')') prevOutType = btemplates.types.P2SH prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash) @@ -323,7 +323,7 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip checkP2WSHInput(input, witnessScriptHash) expanded = expandOutput(witnessScript, undefined, kpPubKey) - if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"') + if (!expanded.pubKeys) throw new Error(expanded.scriptType + ' not supported as witnessScript (' + bscript.toASM(witnessScript) + ')') prevOutType = btemplates.types.P2WSH prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash) diff --git a/test/fixtures/transaction_builder.json b/test/fixtures/transaction_builder.json index b9d2969..93e135d 100644 --- a/test/fixtures/transaction_builder.json +++ b/test/fixtures/transaction_builder.json @@ -1040,8 +1040,8 @@ { "keyPair": "L2FroWqrUgsPpTMhpXcAFnVDLPTToDbveh3bhDaU4jhe7Cw6YujN", "hashType": 1, - "witnessScript": "038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b OP_CHECKSIG", "redeemScript": "OP_0 0f9ea7bae7166c980169059e39443ed13324495b0d6678ce716262e879591210", + "witnessScript": "038de63cf582d058a399a176825c045672d5ff8ea25b64d28d4375dcdb14c02b2b OP_CHECKSIG", "value": 80000 } ], @@ -1922,6 +1922,57 @@ } ] }, + { + "description": "Transaction w/ P2WSH(P2PK), signing with uncompressed public key", + "exception": "BIP143 rejects uncompressed public keys in P2WPKH or P2WSH", + "inputs": [ + { + "txId": "2fddebc1a7e67e04fc6b77645ae9ae10eeaa35e168606587d79b031ebca33345", + "vout": 0, + "prevTxScript": "OP_0 5339df4de3854c4208376443ed075014ad996aa349ad6b5abf6c4d20f604d348", + "signs": [ + { + "keyPair": "5JiHJJjdufSiMxbvnyNcKtQNLYH6SvUpQnRv9yZENFDWTQKQkzC", + "witnessScript": "04f56d09b32cefc818735150bf8560eefdaf30d2edb3fe557bf27682aedaed81bf9aaff7eeb496e088058ec548826c12b521dbb566a862d9b67677910c2b421e06 OP_CHECKSIG", + "value": 80000, + "throws": true + } + ] + } + ], + "outputs": [ + { + "script": "OP_DUP OP_HASH160 851a33a5ef0d4279bd5854949174e2c65b1d4500 OP_EQUALVERIFY OP_CHECKSIG", + "value": 60000 + } + ] + }, + { + "description": "Transaction w/ P2SH(P2WSH(P2PK)), signing with uncompressed public key", + "exception": "BIP143 rejects uncompressed public keys in P2WPKH or P2WSH", + "inputs": [ + { + "txId": "2fddebc1a7e67e04fc6b77645ae9ae10eeaa35e168606587d79b031ebca33345", + "vout": 0, + "prevTxScript": "OP_HASH160 5afe12b2827e3eac05fe3f17c59406ef262aa177 OP_EQUAL", + "signs": [ + { + "keyPair": "5JiHJJjdufSiMxbvnyNcKtQNLYH6SvUpQnRv9yZENFDWTQKQkzC", + "redeemScript": "OP_0 5339df4de3854c4208376443ed075014ad996aa349ad6b5abf6c4d20f604d348", + "witnessScript": "04f56d09b32cefc818735150bf8560eefdaf30d2edb3fe557bf27682aedaed81bf9aaff7eeb496e088058ec548826c12b521dbb566a862d9b67677910c2b421e06 OP_CHECKSIG", + "value": 80000, + "throws": true + } + ] + } + ], + "outputs": [ + { + "script": "OP_DUP OP_HASH160 851a33a5ef0d4279bd5854949174e2c65b1d4500 OP_EQUALVERIFY OP_CHECKSIG", + "value": 60000 + } + ] + }, { "exception": "RedeemScript not supported \"OP_RETURN 06deadbeef03f895a2ad89fb6d696497af486cb7c644a27aa568c7a18dd06113401115185474\"", "inputs": [ diff --git a/test/transaction_builder.js b/test/transaction_builder.js index 6cbd43f..f2325a4 100644 --- a/test/transaction_builder.js +++ b/test/transaction_builder.js @@ -315,17 +315,21 @@ describe('TransactionBuilder', function () { input.signs.forEach(function (sign) { var keyPairNetwork = NETWORKS[sign.network || f.network] var keyPair2 = ECPair.fromWIF(sign.keyPair, keyPairNetwork) - var redeemScript + var redeemScript, witnessScript if (sign.redeemScript) { redeemScript = bscript.fromASM(sign.redeemScript) } + if (sign.witnessScript) { + witnessScript = bscript.fromASM(sign.witnessScript) + } + if (!sign.throws) { - txb.sign(index, keyPair2, redeemScript, sign.hashType, sign.value) + txb.sign(index, keyPair2, redeemScript, sign.hashType, sign.value, witnessScript) } else { assert.throws(function () { - txb.sign(index, keyPair2, redeemScript, sign.hashType, sign.value) + txb.sign(index, keyPair2, redeemScript, sign.hashType, sign.value, witnessScript) }, new RegExp(f.exception)) } }) From 7be698b5a17ded3121376cfea4770ce2556c518d Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Wed, 17 Jan 2018 14:49:19 +1100 Subject: [PATCH 5/6] txb: add fixes for P2SH(P2WSH(...)) and P2WSH(...) in BIP143 compliance --- src/transaction_builder.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/transaction_builder.js b/src/transaction_builder.js index f0f9efe..e5e4b2c 100644 --- a/src/transaction_builder.js +++ b/src/transaction_builder.js @@ -708,8 +708,12 @@ TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashTy var signed = input.pubKeys.some(function (pubKey, i) { if (!kpPubKey.equals(pubKey)) return false if (input.signatures[i]) throw new Error('Signature already exists') - if (kpPubKey.length !== 33 && - input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH') + + if (kpPubKey.length !== 33 && ( + input.signType === scriptTypes.P2WPKH || + input.redeemScriptType === scriptTypes.P2WSH || + input.prevOutType === scriptTypes.P2WSH + )) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH') var signature = keyPair.sign(signatureHash) if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature) From 00bbab1a9345e4cae9357b4ad1df5088b93bcfc9 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Wed, 17 Jan 2018 14:51:36 +1100 Subject: [PATCH 6/6] txb: fix redeemScript/witnessScript is undefined when throwing unsupported --- src/transaction_builder.js | 4 ++-- test/fixtures/transaction_builder.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/transaction_builder.js b/src/transaction_builder.js index e5e4b2c..b33814b 100644 --- a/src/transaction_builder.js +++ b/src/transaction_builder.js @@ -297,7 +297,7 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script') expanded = expandOutput(witnessScript, undefined, kpPubKey) - if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"') + if (!expanded.pubKeys) throw new Error(expanded.scriptType + ' not supported as witnessScript (' + bscript.toASM(witnessScript) + ')') prevOutType = btemplates.types.P2SH prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash) @@ -310,7 +310,7 @@ function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScrip checkP2SHInput(input, redeemScriptHash) expanded = expandOutput(redeemScript, undefined, kpPubKey) - if (!expanded.pubKeys) throw new Error(expanded.scriptType + ' not supported as redeemScript (' + bscript.toASM(witnessScript) + ')') + if (!expanded.pubKeys) throw new Error(expanded.scriptType + ' not supported as redeemScript (' + bscript.toASM(redeemScript) + ')') prevOutType = btemplates.types.P2SH prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash) diff --git a/test/fixtures/transaction_builder.json b/test/fixtures/transaction_builder.json index 93e135d..1475c97 100644 --- a/test/fixtures/transaction_builder.json +++ b/test/fixtures/transaction_builder.json @@ -1974,7 +1974,7 @@ ] }, { - "exception": "RedeemScript not supported \"OP_RETURN 06deadbeef03f895a2ad89fb6d696497af486cb7c644a27aa568c7a18dd06113401115185474\"", + "exception": "nulldata not supported as redeemScript \\(OP_RETURN 06deadbeef03f895a2ad89fb6d696497af486cb7c644a27aa568c7a18dd06113401115185474\\)", "inputs": [ { "txId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -2117,7 +2117,7 @@ ] }, { - "exception": "RedeemScript not supported \"OP_HASH160 7f67f0521934a57d3039f77f9f32cf313f3ac74b OP_EQUAL\"", + "exception": "scripthash not supported as redeemScript \\(OP_HASH160 7f67f0521934a57d3039f77f9f32cf313f3ac74b OP_EQUAL\\)", "inputs": [ { "txId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",