From 143830f0c68612ae4ab82e5e6c71b6904a42a5ce Mon Sep 17 00:00:00 2001 From: Kashif Jamil Date: Tue, 23 Dec 2025 14:36:44 +0530 Subject: [PATCH] feat(sdk-coin-flrp): implement dynamic credential ordering based Ticket: WIN-8445 --- .../src/lib/ExportInPTxBuilder.ts | 98 ++++++++++++++++--- .../src/lib/ImportInCTxBuilder.ts | 44 ++++++++- .../src/lib/ImportInPTxBuilder.ts | 83 +++++++++++++++- .../src/lib/atomicTransactionBuilder.ts | 39 +++++++- modules/sdk-coin-flrp/src/lib/transaction.ts | 15 +-- modules/sdk-coin-flrp/src/lib/utils.ts | 8 +- .../resources/transactionData/exportInC.ts | 4 +- .../resources/transactionData/exportInP.ts | 18 ++-- .../resources/transactionData/importInC.ts | 6 +- .../resources/transactionData/importInP.ts | 8 +- 10 files changed, 267 insertions(+), 56 deletions(-) diff --git a/modules/sdk-coin-flrp/src/lib/ExportInPTxBuilder.ts b/modules/sdk-coin-flrp/src/lib/ExportInPTxBuilder.ts index 3c0c72dda9..31166f307a 100644 --- a/modules/sdk-coin-flrp/src/lib/ExportInPTxBuilder.ts +++ b/modules/sdk-coin-flrp/src/lib/ExportInPTxBuilder.ts @@ -114,20 +114,57 @@ export class ExportInPTxBuilder extends AtomicTransactionBuilder { const sortedAddresses = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b)); // When credentials were extracted, use them directly to preserve existing signatures - // Otherwise, create empty credentials with embedded addresses for slot identification + // Otherwise, create empty credentials with dynamic ordering based on addressesIndex + // Match avaxp behavior: order depends on UTXO address positions const txCredentials = credentials.length > 0 ? credentials - : exportTx.baseTx.inputs.map((input) => { + : exportTx.baseTx.inputs.map((input, inputIdx) => { const transferInput = input.input as TransferInput; const inputThreshold = transferInput.sigIndicies().length || this.transaction._threshold; - // Create empty signatures with embedded addresses for slot identification - const sigSlots: ReturnType[] = []; - for (let i = 0; i < inputThreshold; i++) { - const addrHex = Buffer.from(sortedAddresses[i]).toString('hex'); - sigSlots.push(utils.createEmptySigWithAddress(addrHex)); + + // Get UTXO for this input to determine addressesIndex + const utxo = this.transaction._utxos[inputIdx]; + + // either user (0) or recovery (2) + const firstIndex = this.recoverSigner ? 2 : 0; + const bitgoIndex = 1; + + // If UTXO has addresses, compute dynamic ordering + if (utxo && utxo.addresses && utxo.addresses.length > 0) { + const utxoAddresses = utxo.addresses.map((a) => utils.parseAddress(a)); + const addressesIndex = this.transaction._fromAddresses.map((a) => + utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0) + ); + + // Dynamic ordering based on addressesIndex + let sigSlots: ReturnType[]; + if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) { + // Bitgo comes first: [zeros, userAddress] + sigSlots = [ + utils.createNewSig(''), + utils.createEmptySigWithAddress( + Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex') + ), + ]; + } else { + // User comes first: [userAddress, zeros] + sigSlots = [ + utils.createEmptySigWithAddress( + Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex') + ), + utils.createNewSig(''), + ]; + } + return new Credential(sigSlots); + } else { + // Fallback: use all zeros if no UTXO addresses available + const sigSlots: ReturnType[] = []; + for (let i = 0; i < inputThreshold; i++) { + sigSlots.push(utils.createNewSig('')); + } + return new Credential(sigSlots); } - return new Credential(sigSlots); }); // Create address maps for signing - one per input/credential @@ -277,14 +314,43 @@ export class ExportInPTxBuilder extends AtomicTransactionBuilder { inputs.push(transferableInput); - // Create credential with empty signatures that have embedded addresses for slot identification - // This allows the signing logic to determine which slot belongs to which address - const sortedAddrs = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b)); - const emptySignatures = sigIndices.map((idx) => { - const addrHex = Buffer.from(sortedAddrs[idx]).toString('hex'); - return utils.createEmptySigWithAddress(addrHex); - }); - credentials.push(new Credential(emptySignatures)); + // Create credential with empty signatures for slot identification + // Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO + const hasAddresses = + this.transaction._fromAddresses && this.transaction._fromAddresses.length >= this.transaction._threshold; + + if (!hasAddresses) { + // If addresses not available, use all zeros + const emptySignatures = sigIndices.map(() => utils.createNewSig('')); + credentials.push(new Credential(emptySignatures)); + } else { + // Compute addressesIndex: position of each _fromAddresses in UTXO's address list + const utxoAddresses = utxo.addresses.map((a) => utils.parseAddress(a)); + const addressesIndex = this.transaction._fromAddresses.map((a) => + utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0) + ); + + // either user (0) or recovery (2) + const firstIndex = this.recoverSigner ? 2 : 0; + const bitgoIndex = 1; + + // Dynamic ordering based on addressesIndex + let emptySignatures: ReturnType[]; + if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) { + // Bitgo comes first in signature order: [zeros, userAddress] + emptySignatures = [ + utils.createNewSig(''), + utils.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')), + ]; + } else { + // User comes first in signature order: [userAddress, zeros] + emptySignatures = [ + utils.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')), + utils.createNewSig(''), + ]; + } + credentials.push(new Credential(emptySignatures)); + } } // Create change output if there is remaining amount after export and fee diff --git a/modules/sdk-coin-flrp/src/lib/ImportInCTxBuilder.ts b/modules/sdk-coin-flrp/src/lib/ImportInCTxBuilder.ts index 368ed47117..aafbcab965 100644 --- a/modules/sdk-coin-flrp/src/lib/ImportInCTxBuilder.ts +++ b/modules/sdk-coin-flrp/src/lib/ImportInCTxBuilder.ts @@ -93,11 +93,12 @@ export class ImportInCTxBuilder extends AtomicInCTransactionBuilder { const addressMaps = new FlareUtils.AddressMaps([addressMap]); // When credentials were extracted, use them directly to preserve existing signatures + // For initBuilder, _fromAddresses may not be set yet, so use all zeros for credential slots let txCredentials: Credential[]; if (credentials.length > 0) { txCredentials = credentials; } else { - // Create empty credential with threshold number of signature slots + // Create empty credential with threshold number of signature slots (all zeros) const emptySignatures: ReturnType[] = []; for (let i = 0; i < inputThreshold; i++) { emptySignatures.push(utils.createNewSig('')); @@ -227,10 +228,43 @@ export class ImportInCTxBuilder extends AtomicInCTransactionBuilder { inputs.push(transferableInput); - // Create empty credential for each input with threshold signers - const emptySignatures = sigIndices.map(() => utils.createNewSig('')); - const credential = new Credential(emptySignatures); - credentials.push(credential); + // Create credential with empty signatures for slot identification + // Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO + const hasAddresses = + this.transaction._fromAddresses && this.transaction._fromAddresses.length >= this.transaction._threshold; + + if (!hasAddresses) { + // If addresses not available, use all zeros + const emptySignatures = sigIndices.map(() => utils.createNewSig('')); + credentials.push(new Credential(emptySignatures)); + } else { + // Compute addressesIndex: position of each _fromAddresses in UTXO's address list + const utxoAddresses = utxo.addresses.map((a) => utils.parseAddress(a)); + const addressesIndex = this.transaction._fromAddresses.map((a) => + utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0) + ); + + // either user (0) or recovery (2) + const firstIndex = this.recoverSigner ? 2 : 0; + const bitgoIndex = 1; + + // Dynamic ordering based on addressesIndex + let emptySignatures: ReturnType[]; + if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) { + // Bitgo comes first in signature order: [zeros, userAddress] + emptySignatures = [ + utils.createNewSig(''), + utils.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')), + ]; + } else { + // User comes first in signature order: [userAddress, zeros] + emptySignatures = [ + utils.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')), + utils.createNewSig(''), + ]; + } + credentials.push(new Credential(emptySignatures)); + } }); return { diff --git a/modules/sdk-coin-flrp/src/lib/ImportInPTxBuilder.ts b/modules/sdk-coin-flrp/src/lib/ImportInPTxBuilder.ts index 6ebd169071..2df88356c9 100644 --- a/modules/sdk-coin-flrp/src/lib/ImportInPTxBuilder.ts +++ b/modules/sdk-coin-flrp/src/lib/ImportInPTxBuilder.ts @@ -96,10 +96,51 @@ export class ImportInPTxBuilder extends AtomicTransactionBuilder { const addressMaps = sortedAddresses.map((a, i) => new FlareUtils.AddressMap([[new Address(a), i]])); // When credentials were extracted, use them directly to preserve existing signatures + // Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO const txCredentials = credentials.length > 0 ? credentials - : [new Credential(sortedAddresses.slice(0, this.transaction._threshold).map(() => utils.createNewSig('')))]; + : this.transaction._utxos.map((utxo) => { + // either user (0) or recovery (2) + const firstIndex = this.recoverSigner ? 2 : 0; + const bitgoIndex = 1; + + // If UTXO has addresses, compute dynamic ordering + if (utxo && utxo.addresses && utxo.addresses.length > 0) { + const utxoAddresses = utxo.addresses.map((a) => utils.parseAddress(a)); + const addressesIndex = this.transaction._fromAddresses.map((a) => + utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0) + ); + + // Dynamic ordering based on addressesIndex + let sigSlots: ReturnType[]; + if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) { + // Bitgo comes first: [zeros, userAddress] + sigSlots = [ + utils.createNewSig(''), + utils.createEmptySigWithAddress( + Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex') + ), + ]; + } else { + // User comes first: [userAddress, zeros] + sigSlots = [ + utils.createEmptySigWithAddress( + Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex') + ), + utils.createNewSig(''), + ]; + } + return new Credential(sigSlots); + } else { + // Fallback: use all zeros if no UTXO addresses available + const sigSlots: ReturnType[] = []; + for (let i = 0; i < this.transaction._threshold; i++) { + sigSlots.push(utils.createNewSig('')); + } + return new Credential(sigSlots); + } + }); const unsignedTx = new UnsignedTx(importTx, [], new FlareUtils.AddressMaps(addressMaps), txCredentials); @@ -221,9 +262,43 @@ export class ImportInPTxBuilder extends AtomicTransactionBuilder { inputs.push(transferableInput); - // Create credential with empty signatures for threshold signers - const emptySignatures = sigIndices.map(() => utils.createNewSig('')); - credentials.push(new Credential(emptySignatures)); + // Create credential with empty signatures for slot identification + // Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO + const hasAddresses = + this.transaction._fromAddresses && this.transaction._fromAddresses.length >= this.transaction._threshold; + + if (!hasAddresses) { + // If addresses not available, use all zeros + const emptySignatures = sigIndices.map(() => utils.createNewSig('')); + credentials.push(new Credential(emptySignatures)); + } else { + // Compute addressesIndex: position of each _fromAddresses in UTXO's address list + const utxoAddresses = utxo.addresses.map((a) => utils.parseAddress(a)); + const addressesIndex = this.transaction._fromAddresses.map((a) => + utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0) + ); + + // either user (0) or recovery (2) + const firstIndex = this.recoverSigner ? 2 : 0; + const bitgoIndex = 1; + + // Dynamic ordering based on addressesIndex + let emptySignatures: ReturnType[]; + if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) { + // Bitgo comes first in signature order: [zeros, userAddress] + emptySignatures = [ + utils.createNewSig(''), + utils.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')), + ]; + } else { + // User comes first in signature order: [userAddress, zeros] + emptySignatures = [ + utils.createEmptySigWithAddress(Buffer.from(this.transaction._fromAddresses[firstIndex]).toString('hex')), + utils.createNewSig(''), + ]; + } + credentials.push(new Credential(emptySignatures)); + } }); return { diff --git a/modules/sdk-coin-flrp/src/lib/atomicTransactionBuilder.ts b/modules/sdk-coin-flrp/src/lib/atomicTransactionBuilder.ts index 3e0d9ef25a..db25a053d0 100644 --- a/modules/sdk-coin-flrp/src/lib/atomicTransactionBuilder.ts +++ b/modules/sdk-coin-flrp/src/lib/atomicTransactionBuilder.ts @@ -97,9 +97,42 @@ export abstract class AtomicTransactionBuilder extends TransactionBuilder { Object.assign(transferableInput, { input }); inputs.push(transferableInput); - // Create empty credential for each input - const emptySignatures = sender.map(() => utils.createNewSig('')); - credentials.push(new Credential(emptySignatures)); + // Create credential with empty signatures for slot identification + // Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO + const hasAddresses = sender && sender.length >= (this.transaction as Transaction)._threshold; + + if (!hasAddresses) { + // If addresses not available, use all zeros + const emptySignatures = sender.map(() => utils.createNewSig('')); + credentials.push(new Credential(emptySignatures)); + } else { + // Compute addressesIndex: position of each _fromAddresses in UTXO's address list + const utxoAddresses = utxo.addresses.map((a: string) => utils.parseAddress(a)); + const addressesIndex = sender.map((a) => + utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0) + ); + + // either user (0) or recovery (2) + const firstIndex = this.recoverSigner ? 2 : 0; + const bitgoIndex = 1; + + // Dynamic ordering based on addressesIndex + let emptySignatures: ReturnType[]; + if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) { + // Bitgo comes first in signature order: [zeros, userAddress] + emptySignatures = [ + utils.createNewSig(''), + utils.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')), + ]; + } else { + // User comes first in signature order: [userAddress, zeros] + emptySignatures = [ + utils.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')), + utils.createNewSig(''), + ]; + } + credentials.push(new Credential(emptySignatures)); + } }); // Create output if there is change diff --git a/modules/sdk-coin-flrp/src/lib/transaction.ts b/modules/sdk-coin-flrp/src/lib/transaction.ts index 5f8eaa5945..5c131b835b 100644 --- a/modules/sdk-coin-flrp/src/lib/transaction.ts +++ b/modules/sdk-coin-flrp/src/lib/transaction.ts @@ -231,13 +231,14 @@ export class Transaction extends BaseTransaction { return FlareUtils.bufferToHex(this._rawSignedBytes); } const unsignedTx = this._flareTransaction as UnsignedTx; - // For signed transactions, return the full signed tx with credentials - // Check signature.length for robustness - if (this.signature.length > 0) { - return FlareUtils.bufferToHex(unsignedTx.getSignedTx().toBytes()); - } - // For unsigned transactions, return just the transaction bytes - return FlareUtils.bufferToHex(unsignedTx.toBytes()); + const signedTxBytes = unsignedTx.getSignedTx().toBytes(); + + // Both P-chain and C-chain transactions include checksum (matching avaxp behavior) + // avaxp P-chain: transaction.ts uses addChecksum() explicitly + // avaxp C-chain: deprecatedTransaction.ts uses Tx.toStringHex() which internally adds checksum + const rawTx = FlareUtils.bufferToHex(utils.addChecksum(signedTxBytes)); + console.log('rawTx in toBroadcastFormat:', rawTx); + return rawTx; } toJson(): TxData { diff --git a/modules/sdk-coin-flrp/src/lib/utils.ts b/modules/sdk-coin-flrp/src/lib/utils.ts index 3d374d0762..83436bfa03 100644 --- a/modules/sdk-coin-flrp/src/lib/utils.ts +++ b/modules/sdk-coin-flrp/src/lib/utils.ts @@ -308,10 +308,12 @@ export class Utils implements BaseUtils { /** * Adds a checksum to a Buffer and returns the concatenated result + * Uses last 4 bytes of SHA256 hash as checksum (matching avaxp behavior) */ - private addChecksum(buff: Buffer): Buffer { - const hashSlice = createHash('sha256').update(buff).digest().slice(28); - return Buffer.concat([buff, hashSlice]); + public addChecksum(buff: Buffer | Uint8Array): Uint8Array { + const buffer = Buffer.from(buff); + const hashSlice = createHash('sha256').update(buffer).digest().slice(28); + return new Uint8Array(Buffer.concat([buffer, hashSlice])); } // In utils.ts, add this method to the Utils class: diff --git a/modules/sdk-coin-flrp/test/resources/transactionData/exportInC.ts b/modules/sdk-coin-flrp/test/resources/transactionData/exportInC.ts index bf33f1db0f..875592926e 100644 --- a/modules/sdk-coin-flrp/test/resources/transactionData/exportInC.ts +++ b/modules/sdk-coin-flrp/test/resources/transactionData/exportInC.ts @@ -2,9 +2,9 @@ export const EXPORT_IN_C = { txhash: 'KELMR2gmYpRUeXRyuimp1xLNUoHSkwNUURwBn4v1D4aKircKR', unsignedHex: - '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000128a05933dc76e4e6c25f35d5c9b2a58769700e760000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000090000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf0800000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3', + '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000128a05933dc76e4e6c25f35d5c9b2a58769700e760000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000090000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf0800000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f300000001000000090000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f54c610', signedHex: - '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000128a05933dc76e4e6c25f35d5c9b2a58769700e760000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000090000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf0800000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f300000001000000090000000133f126dee90108c473af9513ebd9eb1591a701b5dfc69041075b303b858fee0609ca9a60208b46f6836f0baf1a9fba740d97b65d45caae10470b5fa707eb45c900', + '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000128a05933dc76e4e6c25f35d5c9b2a58769700e760000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000090000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf0800000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f300000001000000090000000133f126dee90108c473af9513ebd9eb1591a701b5dfc69041075b303b858fee0609ca9a60208b46f6836f0baf1a9fba740d97b65d45caae10470b5fa707eb45c900f9ed2052', xPrivateKey: 'xprv9s21ZrQH143K2DW9jvDoAkVpRKi5V9XhZaVdoUcqoYPPQ9wRrLNT6VGgWBbRoSYB39Lak6kXgdTM9T3QokEi5n2JJ8EdggHLkZPX8eDiBu1', signature: [ diff --git a/modules/sdk-coin-flrp/test/resources/transactionData/exportInP.ts b/modules/sdk-coin-flrp/test/resources/transactionData/exportInP.ts index 3dbc298d1a..1f2035c2c8 100644 --- a/modules/sdk-coin-flrp/test/resources/transactionData/exportInP.ts +++ b/modules/sdk-coin-flrp/test/resources/transactionData/exportInP.ts @@ -2,13 +2,13 @@ export const EXPORT_IN_P = { txhash: '2Zsejg6FXjRB5t362rBncYbNohKLEjzZYcB9NceaxSmBX323HF', unsignedHex: - '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001db5e3b0000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b878c380000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dcd6500000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91', + '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001db5e3b0000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b878c380000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dcd6500000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e15810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd38be06', halfSignedSignature: '0xbf18a744d5f43f0e412a692fbee17d042220f02c4824e13e9339853d670d2a4c0144d39e5f9e46d08055d93fcfe907d932cf2278a1a68ff64c601653dcd7b54c00', halfSigntxHex: - '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001db5e3b0000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b878c380000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dcd6500000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000010000000900000002bf18a744d5f43f0e412a692fbee17d042220f02c4824e13e9339853d670d2a4c0144d39e5f9e46d08055d93fcfe907d932cf2278a1a68ff64c601653dcd7b54c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e918a5e8083ae4c9f2f0ed77055c24bf3665001', + '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001db5e3b0000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b878c380000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dcd6500000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000010000000900000002bf18a744d5f43f0e412a692fbee17d042220f02c4824e13e9339853d670d2a4c0144d39e5f9e46d08055d93fcfe907d932cf2278a1a68ff64c601653dcd7b54c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ac9bf13e', fullSigntxHex: - '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001db5e3b0000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b878c380000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dcd6500000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000010000000900000002bf18a744d5f43f0e412a692fbee17d042220f02c4824e13e9339853d670d2a4c0144d39e5f9e46d08055d93fcfe907d932cf2278a1a68ff64c601653dcd7b54c009e36b83816e324c9c6d6e73db483a5d65046c92307e735a3e6948499a0789878060c284c5788914c94ca2b44d3b8be7944dfd84f3ea11c2e7a55d1374a5bf9df00', + '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001db5e3b0000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b878c380000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dcd6500000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000010000000900000002bf18a744d5f43f0e412a692fbee17d042220f02c4824e13e9339853d670d2a4c0144d39e5f9e46d08055d93fcfe907d932cf2278a1a68ff64c601653dcd7b54c009e36b83816e324c9c6d6e73db483a5d65046c92307e735a3e6948499a0789878060c284c5788914c94ca2b44d3b8be7944dfd84f3ea11c2e7a55d1374a5bf9df00cbf49c6b', fullSignedSignature: '0x9e36b83816e324c9c6d6e73db483a5d65046c92307e735a3e6948499a0789878060c284c5788914c94ca2b44d3b8be7944dfd84f3ea11c2e7a55d1374a5bf9df00', @@ -53,11 +53,11 @@ export const EXPORT_IN_P = { export const EXPORT_IN_P_TWO_UTXOS = { txhash: '2FEYQ3uEwREx44U96QAWmeyEsBUw4MTXxJNyFB3wScpiSouVu1', unsignedHex: - '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dc92178000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000285492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000019c48f440c6b801f4953ea908423170275eb761186be1e009cb3a6360cd18e1b60000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000059682f00000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91', + '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dc92178000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000285492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000019c48f440c6b801f4953ea908423170275eb761186be1e009cb3a6360cd18e1b60000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000059682f00000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000200000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e1581000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e15810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc00b7d1', halfSigntxHex: - '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dc92178000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000285492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000019c48f440c6b801f4953ea908423170275eb761186be1e009cb3a6360cd18e1b60000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000059682f00000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000020000000900000002377f4333c83df3f3d15d7d564ae23cce559ee7ab25a507382b7a48825654ae677da05a065bb5c2bbc32009d716b340b71cf1447b149496443af36178f721c226010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e918a5e8083ae4c9f2f0ed77055c24bf366500100000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e15810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e918a5e8083ae4c9f2f0ed77055c24bf3665001', + '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dc92178000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000285492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000019c48f440c6b801f4953ea908423170275eb761186be1e009cb3a6360cd18e1b60000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000059682f00000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000020000000900000002377f4333c83df3f3d15d7d564ae23cce559ee7ab25a507382b7a48825654ae677da05a065bb5c2bbc32009d716b340b71cf1447b149496443af36178f721c22601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e15810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019c2b68', fullSigntxHex: - '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dc92178000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000285492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000019c48f440c6b801f4953ea908423170275eb761186be1e009cb3a6360cd18e1b60000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000059682f00000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000020000000900000002377f4333c83df3f3d15d7d564ae23cce559ee7ab25a507382b7a48825654ae677da05a065bb5c2bbc32009d716b340b71cf1447b149496443af36178f721c22601cc969c605fac579e909346a02e0f6316d347612281b52d1d8ab023e699cb77005222e850e2a963fc2a9eb278d06845b586657399746bc0d9f2d08ef7f25b4e6c0100000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e15810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e918a5e8083ae4c9f2f0ed77055c24bf3665001', + '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001dc92178000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000285492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000019c48f440c6b801f4953ea908423170275eb761186be1e009cb3a6360cd18e1b60000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000059682f00000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000020000000900000002377f4333c83df3f3d15d7d564ae23cce559ee7ab25a507382b7a48825654ae677da05a065bb5c2bbc32009d716b340b71cf1447b149496443af36178f721c22601cc969c605fac579e909346a02e0f6316d347612281b52d1d8ab023e699cb77005222e850e2a963fc2a9eb278d06845b586657399746bc0d9f2d08ef7f25b4e6c0100000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e158100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c978112', outputs: [ { outputID: 0, @@ -112,11 +112,11 @@ export const EXPORT_IN_P_TWO_UTXOS = { export const EXPORT_IN_P_NO_CHANGE = { txhash: 'eg5at8mZ6EeAGj1FR5sgSRwprJLxq8Xe2yBSs53P1VwEmsRuT', unsignedHex: - '0x000000000012000000720000000000000000000000000000000000000000000000000000000000000000000000000000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000003b968678000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91', + '0x000000000012000000720000000000000000000000000000000000000000000000000000000000000000000000000000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000003b968678000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e15810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000578cb2fa', halfSigntxHex: - '0x000000000012000000720000000000000000000000000000000000000000000000000000000000000000000000000000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000003b968678000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000027e132939cbdc2a26208d15d1b67b97ed5a406db2b12f84783472f5dc9ff4bc5605c3503a9cb7216f20a50dc2d680f6e6d644c5d9aa8015236ba08a35e7c4092f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e918a5e8083ae4c9f2f0ed77055c24bf3665001', + '0x000000000012000000720000000000000000000000000000000000000000000000000000000000000000000000000000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000003b968678000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000027e132939cbdc2a26208d15d1b67b97ed5a406db2b12f84783472f5dc9ff4bc5605c3503a9cb7216f20a50dc2d680f6e6d644c5d9aa8015236ba08a35e7c4092f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000622db0e7', fullSigntxHex: - '0x000000000012000000720000000000000000000000000000000000000000000000000000000000000000000000000000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000003b968678000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000027e132939cbdc2a26208d15d1b67b97ed5a406db2b12f84783472f5dc9ff4bc5605c3503a9cb7216f20a50dc2d680f6e6d644c5d9aa8015236ba08a35e7c4092f01d3e9c2d213962cfffe69e8d40012fc147d2d445cbfd081b3d0d40252726363ec3ec6e263bc675936a62dfa17335c480281587e34461cd8f9c3a0b80e73b688ac00', + '0x000000000012000000720000000000000000000000000000000000000000000000000000000000000000000000000000000185492a9f3b2ba883350d66428a51e131ec5de24ec49ef4834961102e69fed15f0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000003b9aca000000000200000000000000010000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000003b968678000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000027e132939cbdc2a26208d15d1b67b97ed5a406db2b12f84783472f5dc9ff4bc5605c3503a9cb7216f20a50dc2d680f6e6d644c5d9aa8015236ba08a35e7c4092f01d3e9c2d213962cfffe69e8d40012fc147d2d445cbfd081b3d0d40252726363ec3ec6e263bc675936a62dfa17335c480281587e34461cd8f9c3a0b80e73b688ac0099809c8b', outputs: [ { outputID: 0, diff --git a/modules/sdk-coin-flrp/test/resources/transactionData/importInC.ts b/modules/sdk-coin-flrp/test/resources/transactionData/importInC.ts index 210e1106cc..afbf52bf05 100644 --- a/modules/sdk-coin-flrp/test/resources/transactionData/importInC.ts +++ b/modules/sdk-coin-flrp/test/resources/transactionData/importInC.ts @@ -1,13 +1,13 @@ export const IMPORT_IN_C = { txhash: '6mbzDvpNxZ6DyGxpzv6m3Q5CWBwDs8GJxsiBzf9EjprZqAoBj', unsignedHex: - '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d8119c058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd', + '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d8119c058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd0000000100000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003329be7d01cd3ebaae6654d7327dd9f17a2e158100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003452faa4', halfSignedSignature: '0xd365ef7ce45aebc4e81bc03f600867f515cebb25c4a0e8e1f06d9fe0a00d41fd2efac6c6df392e5f92e271c57486e39425537da7cafbb085cd1bd21aff06955d00', halfSigntxHex: - '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d8119c058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000010000000900000002d365ef7ce45aebc4e81bc03f600867f515cebb25c4a0e8e1f06d9fe0a00d41fd2efac6c6df392e5f92e271c57486e39425537da7cafbb085cd1bd21aff06955d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d8119c058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000010000000900000002d365ef7ce45aebc4e81bc03f600867f515cebb25c4a0e8e1f06d9fe0a00d41fd2efac6c6df392e5f92e271c57486e39425537da7cafbb085cd1bd21aff06955d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a711bae5', fullSigntxHex: - '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d8119c058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000010000000900000002d365ef7ce45aebc4e81bc03f600867f515cebb25c4a0e8e1f06d9fe0a00d41fd2efac6c6df392e5f92e271c57486e39425537da7cafbb085cd1bd21aff06955d0070d2ca9711622142610ddd347e482cbe5dc45aeafe66876bb82bfd57581300045b8457d804cc1b8f2efc10401367e5919b1912ee26d2d48c06cf82dc3f146acd00', + '0x0000000000000000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da5552479000000000000000000000000000000000000000000000000000000000000000000000001fcea1c0e2cb7e3d77c993eb74ee05d98c24325ded1918e8a0595c96a789e2f790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001dcd65000000000200000000000000010000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b5000000001d8119c058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000010000000900000002d365ef7ce45aebc4e81bc03f600867f515cebb25c4a0e8e1f06d9fe0a00d41fd2efac6c6df392e5f92e271c57486e39425537da7cafbb085cd1bd21aff06955d0070d2ca9711622142610ddd347e482cbe5dc45aeafe66876bb82bfd57581300045b8457d804cc1b8f2efc10401367e5919b1912ee26d2d48c06cf82dc3f146acd002e7749e9', fullSignedSignature: '0x70d2ca9711622142610ddd347e482cbe5dc45aeafe66876bb82bfd57581300045b8457d804cc1b8f2efc10401367e5919b1912ee26d2d48c06cf82dc3f146acd00', diff --git a/modules/sdk-coin-flrp/test/resources/transactionData/importInP.ts b/modules/sdk-coin-flrp/test/resources/transactionData/importInP.ts index 26b15290db..6830e50f3e 100644 --- a/modules/sdk-coin-flrp/test/resources/transactionData/importInP.ts +++ b/modules/sdk-coin-flrp/test/resources/transactionData/importInP.ts @@ -1,9 +1,9 @@ export const IMPORT_IN_P = { txhash: 'E9zZjFzTshfrZZv17n17gFKwj9ijyRaj6nQ1cJed3gYxSBUaX', unsignedHex: - '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf080000000020000000000000001', + '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf08000000002000000000000000100000001000000090000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012cb32eaf92553064db98d271b56cba079ec78f50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000660100a9', signedHex: - '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf080000000020000000000000001000000010000000900000002ef08753ef72f04e7f55ed806de709ebac9dae71f152c4d9dc63f4d33caaac7380ea00017b948172268ff47955dccb3812772b63c9fc0a6d6f135a968eebb2e9d01b9c7e056bac529f03cf05e2f1d3f18884546b19e59baeb9d87fe297b9fa2f6813dda416a2d19a5b13aa0b4850f0082c5cfdfd15b20069ecda47e1b5bf611c89e00', + '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf080000000020000000000000001000000010000000900000002ef08753ef72f04e7f55ed806de709ebac9dae71f152c4d9dc63f4d33caaac7380ea00017b948172268ff47955dccb3812772b63c9fc0a6d6f135a968eebb2e9d01b9c7e056bac529f03cf05e2f1d3f18884546b19e59baeb9d87fe297b9fa2f6813dda416a2d19a5b13aa0b4850f0082c5cfdfd15b20069ecda47e1b5bf611c89e008dd855d7', xPrivateKey: 'xprv9s21ZrQH143K2DW9jvDoAkVpRKi5V9XhZaVdoUcqoYPPQ9wRrLNT6VGgWBbRoSYB39Lak6kXgdTM9T3QokEi5n2JJ8EdggHLkZPX8eDiBu1', signature: [ @@ -13,9 +13,9 @@ export const IMPORT_IN_P = { halfSignedSignature: '0xef08753ef72f04e7f55ed806de709ebac9dae71f152c4d9dc63f4d33caaac7380ea00017b948172268ff47955dccb3812772b63c9fc0a6d6f135a968eebb2e9d01', halfSigntxHex: - '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf080000000020000000000000001000000010000000900000002ef08753ef72f04e7f55ed806de709ebac9dae71f152c4d9dc63f4d33caaac7380ea00017b948172268ff47955dccb3812772b63c9fc0a6d6f135a968eebb2e9d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf080000000020000000000000001000000010000000900000002ef08753ef72f04e7f55ed806de709ebac9dae71f152c4d9dc63f4d33caaac7380ea00017b948172268ff47955dccb3812772b63c9fc0a6d6f135a968eebb2e9d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087ba8d26', fullSigntxHex: - '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf080000000020000000000000001000000010000000900000002ef08753ef72f04e7f55ed806de709ebac9dae71f152c4d9dc63f4d33caaac7380ea00017b948172268ff47955dccb3812772b63c9fc0a6d6f135a968eebb2e9d01b9c7e056bac529f03cf05e2f1d3f18884546b19e59baeb9d87fe297b9fa2f6813dda416a2d19a5b13aa0b4850f0082c5cfdfd15b20069ecda47e1b5bf611c89e00', + '0x0000000000110000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002e7b2b80000000000000000000000020000000312cb32eaf92553064db98d271b56cba079ec78f5a6e0c1abd0132f70efb77e2274637ff336a29a57c386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000001836b0141f34b3f855b69a0837e8ac0ede628333a4fbb389fb6a939709b0dbfa90000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000002faf080000000020000000000000001000000010000000900000002ef08753ef72f04e7f55ed806de709ebac9dae71f152c4d9dc63f4d33caaac7380ea00017b948172268ff47955dccb3812772b63c9fc0a6d6f135a968eebb2e9d01b9c7e056bac529f03cf05e2f1d3f18884546b19e59baeb9d87fe297b9fa2f6813dda416a2d19a5b13aa0b4850f0082c5cfdfd15b20069ecda47e1b5bf611c89e008dd855d7', fullSignedSignature: '0xb9c7e056bac529f03cf05e2f1d3f18884546b19e59baeb9d87fe297b9fa2f6813dda416a2d19a5b13aa0b4850f0082c5cfdfd15b20069ecda47e1b5bf611c89e00',