Closed coolaj86 closed 2 months ago
My guess: less likely to be an algorithm failure, more likely to be that we're assigning the wrong pubKeyHash to the input or utxo object.
pubKeyHash
update: confirmed, DashKeys.utils.toPublicKey() returns 038c713b103b251af892529165f9a1867c3487f59e94237c080e69f43e419177e6, as expected.
DashKeys.utils.toPublicKey()
038c713b103b251af892529165f9a1867c3487f59e94237c080e69f43e419177e6
What we expect to be different:
r
s
txid
What we expect to match, that doesn't:
dashtx: 027aedc7f360ccaddac9b2e3f589c9ef5468abdfac8953b715203f9e21eaf73a4d dash-cli: 038c713b103b251af892529165f9a1867c3487f59e94237c080e69f43e419177e6
The full comparison:
diff -y bad-tx.0bGYi3S7n2Q.dashtx-signed.txt bad-tx.0bGYi3S7n2Q.cli-signed.txt
03000000 # VERSION (3) | 02000000 # VERSION (2) 01 # Inputs (1) 01 # Inputs (1) # Input 1 of 1 # Input 1 of 1 715d39efbac69c36 # Previous Output TX ID 715d39efbac69c36 # Previous Output TX ID 40ae3576d433321b 40ae3576d433321b 03160c4d13e9bcb8 03160c4d13e9bcb8 e46e7bd2ba0f2226 e46e7bd2ba0f2226 00000000 # Previous Output index (0) 00000000 # Previous Output index (0) 6a # Script Size (106 bytes) 6a # Script Size (106 bytes) 47 # Signature Script Size (71) 47 # Signature Script Size (71) 3044 # ASN.1 ECDSA Signature 3044 # ASN.1 ECDSA Signature 0220 0220 7652ae6c746568886262130a3aec5e23ad584833553ff1e895286c3 | 1f6cfe181957f89b2edcd89d87e6cf651bc63790203ea69289f54dd 0220 0220 687c8735d82ec0e3cd6dadefb6bf75b6d5de237dee5b6dfaa309577 | 53b9f1c339076abd48528735ec0d6709dbfa2a990842e07da78b166 01 # Sig Hash Type (1) 01 # Sig Hash Type (1) 21 # Public Key Size (33) 21 # Public Key Size (33) 027aedc7f360ccaddac9b2e3f589c9ef5468abdfac8953b715203f9e2 | 038c713b103b251af892529165f9a1867c3487f59e94237c080e69f43 ffffffff # Sequence (always 0xffffffff) ffffffff # Sequence (always 0xffffffff) 07 # Outputs (7) 07 # Outputs (7) # Output 1 of 7 # Output 1 of 7 a186010000000000 # Base Units (satoshis) (100001) a186010000000000 # Base Units (satoshis) (100001) 19 # Lock Script Size (25 bytes) 19 # Lock Script Size (25 bytes) 76a9 # Script 76a9 # Script 14 14 19426efe5aa2f6f48c5c 19426efe5aa2f6f48c5c c0ace775368a3ac7fe3c c0ace775368a3ac7fe3c 88ac 88ac # Output 2 of 7 # Output 2 of 7 a186010000000000 # Base Units (satoshis) (100001) a186010000000000 # Base Units (satoshis) (100001) 19 # Lock Script Size (25 bytes) 19 # Lock Script Size (25 bytes) 76a9 # Script 76a9 # Script 14 14 3ee2b3ece981714a7ed4 3ee2b3ece981714a7ed4 7870e9773702d8859624 7870e9773702d8859624 88ac 88ac # Output 3 of 7 # Output 3 of 7 a186010000000000 # Base Units (satoshis) (100001) a186010000000000 # Base Units (satoshis) (100001) 19 # Lock Script Size (25 bytes) 19 # Lock Script Size (25 bytes) 76a9 # Script 76a9 # Script 14 14 4c74fa096150560109e9 4c74fa096150560109e9 212290d6cf011711ba61 212290d6cf011711ba61 88ac 88ac # Output 4 of 7 # Output 4 of 7 a186010000000000 # Base Units (satoshis) (100001) a186010000000000 # Base Units (satoshis) (100001) 19 # Lock Script Size (25 bytes) 19 # Lock Script Size (25 bytes) 76a9 # Script 76a9 # Script 14 14 88720aaff47b8da8e0a3 88720aaff47b8da8e0a3 0ed5cc446938fe84e352 0ed5cc446938fe84e352 88ac 88ac # Output 5 of 7 # Output 5 of 7 a186010000000000 # Base Units (satoshis) (100001) a186010000000000 # Base Units (satoshis) (100001) 19 # Lock Script Size (25 bytes) 19 # Lock Script Size (25 bytes) 76a9 # Script 76a9 # Script 14 14 9cefd83f996f996398d4 9cefd83f996f996398d4 332d49fb9964ee241603 332d49fb9964ee241603 88ac 88ac # Output 6 of 7 # Output 6 of 7 e496980000000000 # Base Units (satoshis) (10000100) e496980000000000 # Base Units (satoshis) (10000100) 19 # Lock Script Size (25 bytes) 19 # Lock Script Size (25 bytes) 76a9 # Script 76a9 # Script 14 14 d869d3b45e2c9ce62241 d869d3b45e2c9ce62241 4098d26fa5d8da39711a 4098d26fa5d8da39711a 88ac 88ac # Output 7 of 7 # Output 7 of 7 e8e4f50500000000 # Base Units (satoshis) (100001000) e8e4f50500000000 # Base Units (satoshis) (100001000) 19 # Lock Script Size (25 bytes) 19 # Lock Script Size (25 bytes) 76a9 # Script 76a9 # Script 14 14 5c865d9dd1eaeb3c1be3 5c865d9dd1eaeb3c1be3 93f1ce4ce7f191a0d74e 93f1ce4ce7f191a0d74e 88ac 88ac 00000000 # LOCKTIME (0) 00000000 # LOCKTIME (0) Tx Hash: N/A Tx Hash: N/A TxID: d555e677affd724d79872d287874f623b6c202d1f953a8f3bad59e1 | TxID: 78685463d73f1865da47746eeff93280d909b77b0c43fbdb57cf865 Tx Bytes: 395 Tx Bytes: 395 Tx Outputs: 110501105 Tx Outputs: 110501105 Tx Fee: 395 Tx Fee: 395 Tx Min Cost: 110501500 Tx Min Cost: 110501500
bad-tx.0bGYi3S7n2Q.hex:
bad-tx.0bGYi3S7n2Q.hex
0300000001715d39efbac69c3640ae3576d433321b03160c4d13e9bcb8e46e7bd2ba0f2226000000006a47304402207652ae6c746568886262130a3aec5e23ad584833553ff1e895286c303d19a01f0220687c8735d82ec0e3cd6dadefb6bf75b6d5de237dee5b6dfaa3095776e49fc6f00121027aedc7f360ccaddac9b2e3f589c9ef5468abdfac8953b715203f9e21eaf73a4dffffffff07a1860100000000001976a91419426efe5aa2f6f48c5cc0ace775368a3ac7fe3c88aca1860100000000001976a9143ee2b3ece981714a7ed47870e9773702d885962488aca1860100000000001976a9144c74fa096150560109e9212290d6cf011711ba6188aca1860100000000001976a91488720aaff47b8da8e0a30ed5cc446938fe84e35288aca1860100000000001976a9149cefd83f996f996398d4332d49fb9964ee24160388ace4969800000000001976a914d869d3b45e2c9ce622414098d26fa5d8da39711a88ace8e4f505000000001976a9145c865d9dd1eaeb3c1be393f1ce4ce7f191a0d74e88ac00000000
bad-tx.0bGYi3S7n2Q.cli-signed.hex:
bad-tx.0bGYi3S7n2Q.cli-signed.hex
0200000001715d39efbac69c3640ae3576d433321b03160c4d13e9bcb8e46e7bd2ba0f2226000000006a47304402201f6cfe181957f89b2edcd89d87e6cf651bc63790203ea69289f54ddf1b236eaf022053b9f1c339076abd48528735ec0d6709dbfa2a990842e07da78b166ff2e402dc0121038c713b103b251af892529165f9a1867c3487f59e94237c080e69f43e419177e6ffffffff07a1860100000000001976a91419426efe5aa2f6f48c5cc0ace775368a3ac7fe3c88aca1860100000000001976a9143ee2b3ece981714a7ed47870e9773702d885962488aca1860100000000001976a9144c74fa096150560109e9212290d6cf011711ba6188aca1860100000000001976a91488720aaff47b8da8e0a30ed5cc446938fe84e35288aca1860100000000001976a9149cefd83f996f996398d4332d49fb9964ee24160388ace4969800000000001976a914d869d3b45e2c9ce622414098d26fa5d8da39711a88ace8e4f505000000001976a9145c865d9dd1eaeb3c1be393f1ce4ce7f191a0d74e88ac00000000
inputs.json:
inputs.json
[{"txid":"26220fbad27b6ee4b8bce9134d0c16031b3233d47635ae40369cc6baef395d71","vout":0}]
outputs.json:
outputs.json
[{"yNd1KtEKkRzmX7FYPaWPdRHaRbKEAseCrC":0.00100001},{"yS3xKgiXX3oT3dVsjhkjxz9bXnXVWc7pk4":0.00100001},{"yTHiLTzRiRefQ351YRtFq5gN52r6otx8Pz":0.00100001},{"yYkuN3wYSuoCgq88qtgLCcMGF7Rdzytdps":0.00100001},{"yadFaqCsJ3K9DDgAFzGsUSKUEwRhWT1qiy":0.00100001},{"yg3jadDgHW4sAXHEe56x5jg9LdtbP9YmY5":0.10000100},{"yUkfyk4TQxzZoyZFrXtzfmCRzH9WMpCxSP":1.00001000}]
wifs.json:
wifs.json
["cTKYtDHnr6hcPSrRjAxe8vHgaJYuGk7Dn9Sxjnoa5xEsxFy2qp7x"]
{ inputs: [ { address: 'yPsNAkedXavKBgP6Y9BC624Wqoqpp3cnYj', txid: '26220fbad27b6ee4b8bce9134d0c16031b3233d47635ae40369cc6baef395d71', outputIndex: 0, script: '76a91426f1c804b97881a8da6bcd22a14ee01840cb34bb88ac', satoshis: 110548427, height: 1255, txId: '26220fbad27b6ee4b8bce9134d0c16031b3233d47635ae40369cc6baef395d71' } ], locktime: 0, outputs: [ { walletId: '0bGYi3S7n2Q', prefix: "m/44'/1'", account: 0, usage: 0, index: 148, descriptor: "pkh([0bGYi3S7n2Q/44'/1'/0'/0/148])", address: 'yNd1KtEKkRzmX7FYPaWPdRHaRbKEAseCrC', used: false, satoshis: 100001, reserved: 1713484750031, pubKeyHash: '19426efe5aa2f6f48c5cc0ace775368a3ac7fe3c' }, { walletId: '0bGYi3S7n2Q', prefix: "m/44'/1'", account: 0, usage: 0, index: 147, descriptor: "pkh([0bGYi3S7n2Q/44'/1'/0'/0/147])", address: 'yS3xKgiXX3oT3dVsjhkjxz9bXnXVWc7pk4', used: false, satoshis: 100001, reserved: 1713484750031, pubKeyHash: '3ee2b3ece981714a7ed47870e9773702d8859624' }, { walletId: '0bGYi3S7n2Q', prefix: "m/44'/1'", account: 0, usage: 0, index: 152, descriptor: "pkh([0bGYi3S7n2Q/44'/1'/0'/0/152])", address: 'yTHiLTzRiRefQ351YRtFq5gN52r6otx8Pz', used: false, satoshis: 100001, reserved: 1713484750031, pubKeyHash: '4c74fa096150560109e9212290d6cf011711ba61' }, { walletId: '0bGYi3S7n2Q', prefix: "m/44'/1'", account: 0, usage: 0, index: 151, descriptor: "pkh([0bGYi3S7n2Q/44'/1'/0'/0/151])", address: 'yYkuN3wYSuoCgq88qtgLCcMGF7Rdzytdps', used: false, satoshis: 100001, reserved: 1713484750031, pubKeyHash: '88720aaff47b8da8e0a30ed5cc446938fe84e352' }, { walletId: '0bGYi3S7n2Q', prefix: "m/44'/1'", account: 0, usage: 0, index: 153, descriptor: "pkh([0bGYi3S7n2Q/44'/1'/0'/0/153])", address: 'yadFaqCsJ3K9DDgAFzGsUSKUEwRhWT1qiy', used: false, satoshis: 100001, reserved: 1713484750031, pubKeyHash: '9cefd83f996f996398d4332d49fb9964ee241603' }, { walletId: '0bGYi3S7n2Q', prefix: "m/44'/1'", account: 0, usage: 0, index: 150, descriptor: "pkh([0bGYi3S7n2Q/44'/1'/0'/0/150])", address: 'yg3jadDgHW4sAXHEe56x5jg9LdtbP9YmY5', used: false, satoshis: 10000100, reserved: 1713484750031, pubKeyHash: 'd869d3b45e2c9ce622414098d26fa5d8da39711a' }, { walletId: '0bGYi3S7n2Q', prefix: "m/44'/1'", account: 0, usage: 0, index: 149, descriptor: "pkh([0bGYi3S7n2Q/44'/1'/0'/0/149])", address: 'yUkfyk4TQxzZoyZFrXtzfmCRzH9WMpCxSP', used: false, satoshis: 100001000, reserved: 1713484750031, pubKeyHash: '5c865d9dd1eaeb3c1be393f1ce4ce7f191a0d74e' } ], transaction: '0300000001715d39efbac69c3640ae3576d433321b03160c4d13e9bcb8e46e7bd2ba0f2226000000006a47304402207652ae6c746568886262130a3aec5e23ad584833553ff1e895286c303d19a01f0220687c8735d82ec0e3cd6dadefb6bf75b6d5de237dee5b6dfaa3095776e49fc6f00121027aedc7f360ccaddac9b2e3f589c9ef5468abdfac8953b715203f9e21eaf73a4dffffffff07a1860100000000001976a91419426efe5aa2f6f48c5cc0ace775368a3ac7fe3c88aca1860100000000001976a9143ee2b3ece981714a7ed47870e9773702d885962488aca1860100000000001976a9144c74fa096150560109e9212290d6cf011711ba6188aca1860100000000001976a91488720aaff47b8da8e0a30ed5cc446938fe84e35288aca1860100000000001976a9149cefd83f996f996398d4332d49fb9964ee24160388ace4969800000000001976a914d869d3b45e2c9ce622414098d26fa5d8da39711a88ace8e4f505000000001976a9145c865d9dd1eaeb3c1be393f1ce4ce7f191a0d74e88ac00000000', version: 3 }
Fail: { code: -26, message: 'mandatory-script-verify-flag-failed (Script failed an OP_EQUALVERIFY operation)' }
Fixed via https://github.com/dashhive/DashTx.js/pull/46
My guess: less likely to be an algorithm failure, more likely to be that we're assigning the wrong
pubKeyHash
to the input or utxo object.update: confirmed,
DashKeys.utils.toPublicKey()
returns038c713b103b251af892529165f9a1867c3487f59e94237c080e69f43e419177e6
, as expected.What we expect to be different:
r
ands
signature values (and size bytes)\ (because we enable the optional random salt)txid
(as this depends on the signature)What we expect to match, that doesn't:
The full comparison:
bad-tx.0bGYi3S7n2Q.hex
:bad-tx.0bGYi3S7n2Q.cli-signed.hex
:inputs.json
:outputs.json
:wifs.json
:Original Log Output