@bitgo-beta/utxo-core 1.8.1-beta.61 → 1.8.1-beta.611
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/Output.d.ts.map +1 -0
- package/dist/cjs/src/Output.js +60 -0
- package/dist/cjs/src/bip322/index.d.ts +5 -0
- package/dist/cjs/src/bip322/index.d.ts.map +1 -0
- package/dist/cjs/src/bip322/index.js +21 -0
- package/dist/cjs/src/bip322/toSign.d.ts +25 -0
- package/dist/cjs/src/bip322/toSign.d.ts.map +1 -0
- package/dist/cjs/src/bip322/toSign.js +126 -0
- package/dist/cjs/src/bip322/toSpend.d.ts +22 -0
- package/dist/cjs/src/bip322/toSpend.d.ts.map +1 -0
- package/dist/cjs/src/bip322/toSpend.js +72 -0
- package/dist/cjs/src/bip322/utils.d.ts +18 -0
- package/dist/cjs/src/bip322/utils.d.ts.map +1 -0
- package/dist/cjs/src/bip322/utils.js +115 -0
- package/dist/cjs/src/bip322/verify.d.ts +12 -0
- package/dist/cjs/src/bip322/verify.d.ts.map +1 -0
- package/dist/cjs/src/bip322/verify.js +115 -0
- package/dist/cjs/src/bip32utils.d.ts +16 -0
- package/dist/cjs/src/bip32utils.d.ts.map +1 -0
- package/dist/cjs/src/bip32utils.js +71 -0
- package/dist/cjs/src/bip65/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/bip65/index.js +1 -1
- package/dist/cjs/src/bip65/locktime.d.ts.map +1 -0
- package/dist/cjs/src/bip65/locktime.js +37 -0
- package/dist/{src → cjs/src}/descriptor/DescriptorMap.d.ts +1 -1
- package/dist/cjs/src/descriptor/DescriptorMap.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/DescriptorMap.js +9 -0
- package/dist/{src → cjs/src}/descriptor/Output.d.ts +1 -1
- package/dist/cjs/src/descriptor/Output.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/Output.js +41 -0
- package/dist/{src → cjs/src}/descriptor/VirtualSize.d.ts +1 -1
- package/dist/cjs/src/descriptor/VirtualSize.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/VirtualSize.js +100 -0
- package/dist/{src → cjs/src}/descriptor/address.d.ts +1 -1
- package/dist/cjs/src/descriptor/address.d.ts.map +1 -0
- package/dist/{src → cjs/src}/descriptor/address.js +1 -1
- package/dist/{src → cjs/src}/descriptor/derive.d.ts +1 -1
- package/dist/cjs/src/descriptor/derive.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/derive.js +45 -0
- package/dist/{src → cjs/src}/descriptor/fromFixedScriptWallet.d.ts +1 -1
- package/dist/cjs/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/fromFixedScriptWallet.js +88 -0
- package/dist/{src → cjs/src}/descriptor/index.d.ts +1 -0
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/descriptor/index.js +2 -1
- package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts +14 -0
- package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/parse/PatternMatcher.js +60 -0
- package/dist/{src → cjs/src}/descriptor/psbt/assertSatisfiable.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/assertSatisfiable.js +74 -0
- package/dist/{src → cjs/src}/descriptor/psbt/createPsbt.d.ts +4 -0
- package/dist/cjs/src/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/createPsbt.js +107 -0
- package/dist/{src → cjs/src}/descriptor/psbt/findDescriptors.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/findDescriptors.js +98 -0
- package/dist/cjs/src/descriptor/psbt/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/descriptor/psbt/index.js +1 -1
- package/dist/{src → cjs/src}/descriptor/psbt/parse.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/parse.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/parse.js +87 -0
- package/dist/{src → cjs/src}/descriptor/psbt/sign.d.ts +4 -4
- package/dist/cjs/src/descriptor/psbt/sign.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/sign.js +42 -0
- package/dist/{src → cjs/src}/descriptor/psbt/wrap.d.ts +1 -1
- package/dist/cjs/src/descriptor/psbt/wrap.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/psbt/wrap.js +76 -0
- package/dist/cjs/src/dustThreshold.d.ts.map +1 -0
- package/dist/cjs/src/dustThreshold.js +134 -0
- package/dist/{src → cjs/src}/index.d.ts +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +3 -2
- package/dist/cjs/src/paygo/attestation.d.ts +11 -0
- package/dist/cjs/src/paygo/attestation.d.ts.map +1 -0
- package/dist/cjs/src/paygo/attestation.js +58 -0
- package/dist/cjs/src/paygo/index.d.ts +3 -0
- package/dist/cjs/src/paygo/index.d.ts.map +1 -0
- package/dist/cjs/src/paygo/index.js +19 -0
- package/dist/{src/paygo/ExtractAddressPayGoAttestation.d.ts → cjs/src/paygo/parsePayGoAttestation.d.ts} +8 -3
- package/dist/cjs/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
- package/dist/cjs/src/paygo/parsePayGoAttestation.js +50 -0
- package/dist/cjs/src/paygo/psbt/Errors.d.ts +22 -0
- package/dist/cjs/src/paygo/psbt/Errors.d.ts.map +1 -0
- package/dist/cjs/src/paygo/psbt/Errors.js +44 -0
- package/dist/cjs/src/paygo/psbt/index.d.ts +2 -0
- package/dist/cjs/src/paygo/psbt/index.d.ts.map +1 -0
- package/dist/{src/paygo → cjs/src/paygo/psbt}/index.js +2 -2
- package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
- package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
- package/dist/cjs/src/paygo/psbt/payGoAddressProof.js +124 -0
- package/dist/{src → cjs/src}/testutil/descriptor/descriptors.d.ts +4 -1
- package/dist/cjs/src/testutil/descriptor/descriptors.d.ts.map +1 -0
- package/dist/cjs/src/testutil/descriptor/descriptors.js +162 -0
- package/dist/cjs/src/testutil/descriptor/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/testutil/descriptor/index.js +1 -1
- package/dist/{src → cjs/src}/testutil/descriptor/mock.utils.d.ts +3 -1
- package/dist/cjs/src/testutil/descriptor/mock.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/descriptor/mock.utils.js +92 -0
- package/dist/cjs/src/testutil/descriptor/psbt.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/descriptor/psbt.utils.js +21 -0
- package/dist/cjs/src/testutil/fixtures.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/fixtures.utils.js +127 -0
- package/dist/{src → cjs/src}/testutil/generatePayGoAttestationProof.utils.d.ts +1 -1
- package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
- package/dist/{src → cjs/src}/testutil/index.d.ts +1 -0
- package/dist/cjs/src/testutil/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/testutil/index.js +2 -1
- package/dist/{src → cjs/src}/testutil/key.utils.d.ts +1 -1
- package/dist/cjs/src/testutil/key.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/key.utils.js +60 -0
- package/dist/cjs/src/testutil/toPlainObject.utils.d.ts.map +1 -0
- package/dist/cjs/src/testutil/toPlainObject.utils.js +89 -0
- package/dist/cjs/src/testutil/trimMessagePrefix.d.ts +11 -0
- package/dist/cjs/src/testutil/trimMessagePrefix.d.ts.map +1 -0
- package/dist/cjs/src/testutil/trimMessagePrefix.js +60 -0
- package/dist/cjs/src/xOnlyPubkey.d.ts.map +1 -0
- package/dist/cjs/src/xOnlyPubkey.js +18 -0
- package/dist/cjs/test/Output.d.ts +2 -0
- package/dist/cjs/test/Output.d.ts.map +1 -0
- package/dist/cjs/test/Output.js +70 -0
- package/dist/cjs/test/bip322/bip322.utils.d.ts +7 -0
- package/dist/cjs/test/bip322/bip322.utils.d.ts.map +1 -0
- package/dist/cjs/test/bip322/bip322.utils.js +16 -0
- package/dist/cjs/test/bip322/toSign.d.ts +2 -0
- package/dist/cjs/test/bip322/toSign.d.ts.map +1 -0
- package/dist/cjs/test/bip322/toSign.js +133 -0
- package/dist/cjs/test/bip322/toSpend.d.ts +2 -0
- package/dist/cjs/test/bip322/toSpend.d.ts.map +1 -0
- package/dist/cjs/test/bip322/toSpend.js +70 -0
- package/dist/cjs/test/bip322/utils.d.ts +2 -0
- package/dist/cjs/test/bip322/utils.d.ts.map +1 -0
- package/dist/cjs/test/bip322/utils.js +79 -0
- package/dist/cjs/test/bip322/verify.d.ts +2 -0
- package/dist/cjs/test/bip322/verify.d.ts.map +1 -0
- package/dist/cjs/test/bip322/verify.js +293 -0
- package/dist/cjs/test/bip32utils.d.ts +2 -0
- package/dist/cjs/test/bip32utils.d.ts.map +1 -0
- package/dist/cjs/test/bip32utils.js +62 -0
- package/dist/cjs/test/bip65/locktime.d.ts +2 -0
- package/dist/cjs/test/bip65/locktime.d.ts.map +1 -0
- package/dist/cjs/test/bip65/locktime.js +22 -0
- package/dist/cjs/test/descriptor/Output.d.ts +2 -0
- package/dist/cjs/test/descriptor/Output.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/Output.js +44 -0
- package/dist/cjs/test/descriptor/derive.d.ts +2 -0
- package/dist/cjs/test/descriptor/derive.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/derive.js +27 -0
- package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts +2 -0
- package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/fromFixedScriptWallet.js +145 -0
- package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts +2 -0
- package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/parse/PatternMatcher.js +120 -0
- package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/VirtualSize.js +71 -0
- package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/assertSatisfiable.js +56 -0
- package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/findDescriptors.js +70 -0
- package/dist/cjs/test/descriptor/psbt/psbt.d.ts +2 -0
- package/dist/cjs/test/descriptor/psbt/psbt.d.ts.map +1 -0
- package/dist/cjs/test/descriptor/psbt/psbt.js +211 -0
- package/dist/cjs/test/dustThreshold.d.ts +2 -0
- package/dist/cjs/test/dustThreshold.d.ts.map +1 -0
- package/dist/cjs/test/dustThreshold.js +110 -0
- package/dist/cjs/test/paygo/attestation.d.ts +2 -0
- package/dist/cjs/test/paygo/attestation.d.ts.map +1 -0
- package/dist/cjs/test/paygo/attestation.js +23 -0
- package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts +2 -0
- package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts.map +1 -0
- package/dist/cjs/test/paygo/parsePayGoAttestation.js +75 -0
- package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts +9 -0
- package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
- package/dist/cjs/test/paygo/psbt/payGoAddressProof.js +163 -0
- package/dist/cjs/test/xOnlyPubkey.d.ts +2 -0
- package/dist/cjs/test/xOnlyPubkey.d.ts.map +1 -0
- package/dist/cjs/test/xOnlyPubkey.js +18 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/Output.d.ts +43 -0
- package/dist/esm/Output.js +53 -0
- package/dist/esm/bip322/index.d.ts +5 -0
- package/dist/esm/bip322/index.d.ts.map +1 -0
- package/dist/esm/bip322/index.js +5 -0
- package/dist/esm/bip322/toSign.d.ts +25 -0
- package/dist/esm/bip322/toSign.d.ts.map +1 -0
- package/dist/esm/bip322/toSign.js +120 -0
- package/dist/esm/bip322/toSpend.d.ts +22 -0
- package/dist/esm/bip322/toSpend.d.ts.map +1 -0
- package/dist/esm/bip322/toSpend.js +66 -0
- package/dist/esm/bip322/utils.d.ts +18 -0
- package/dist/esm/bip322/utils.d.ts.map +1 -0
- package/dist/esm/bip322/utils.js +77 -0
- package/dist/esm/bip322/verify.d.ts +12 -0
- package/dist/esm/bip322/verify.d.ts.map +1 -0
- package/dist/esm/bip322/verify.js +76 -0
- package/dist/esm/bip32utils.d.ts +16 -0
- package/dist/esm/bip32utils.d.ts.map +1 -0
- package/dist/esm/bip32utils.js +34 -0
- package/dist/esm/bip65/index.d.ts +2 -0
- package/dist/esm/bip65/index.js +2 -0
- package/dist/esm/bip65/locktime.d.ts +8 -0
- package/dist/esm/bip65/locktime.js +34 -0
- package/dist/esm/descriptor/DescriptorMap.d.ts +9 -0
- package/dist/{src → esm}/descriptor/DescriptorMap.d.ts.map +1 -1
- package/dist/esm/descriptor/DescriptorMap.js +6 -0
- package/dist/esm/descriptor/Output.d.ts +23 -0
- package/dist/{src → esm}/descriptor/Output.d.ts.map +1 -1
- package/dist/esm/descriptor/Output.js +32 -0
- package/dist/esm/descriptor/VirtualSize.d.ts +23 -0
- package/dist/{src → esm}/descriptor/VirtualSize.d.ts.map +1 -1
- package/dist/esm/descriptor/VirtualSize.js +94 -0
- package/dist/esm/descriptor/address.d.ts +5 -0
- package/dist/{src → esm}/descriptor/address.d.ts.map +1 -1
- package/dist/esm/descriptor/address.js +11 -0
- package/dist/esm/descriptor/derive.d.ts +13 -0
- package/dist/{src → esm}/descriptor/derive.d.ts.map +1 -1
- package/dist/esm/descriptor/derive.js +38 -0
- package/dist/esm/descriptor/fromFixedScriptWallet.d.ts +16 -0
- package/dist/{src → esm}/descriptor/fromFixedScriptWallet.d.ts.map +1 -1
- package/dist/esm/descriptor/fromFixedScriptWallet.js +51 -0
- package/dist/esm/descriptor/index.d.ts +11 -0
- package/dist/{src → esm}/descriptor/index.d.ts.map +1 -1
- package/dist/esm/descriptor/index.js +11 -0
- package/dist/esm/descriptor/parse/PatternMatcher.d.ts +14 -0
- package/dist/esm/descriptor/parse/PatternMatcher.d.ts.map +1 -0
- package/dist/esm/descriptor/parse/PatternMatcher.js +56 -0
- package/dist/esm/descriptor/psbt/assertSatisfiable.d.ts +20 -0
- package/dist/{src → esm}/descriptor/psbt/assertSatisfiable.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/assertSatisfiable.js +69 -0
- package/dist/esm/descriptor/psbt/createPsbt.d.ts +23 -0
- package/dist/esm/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/esm/descriptor/psbt/createPsbt.js +69 -0
- package/dist/esm/descriptor/psbt/findDescriptors.d.ts +26 -0
- package/dist/{src → esm}/descriptor/psbt/findDescriptors.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/findDescriptors.js +94 -0
- package/dist/esm/descriptor/psbt/index.d.ts +7 -0
- package/dist/esm/descriptor/psbt/index.js +7 -0
- package/dist/esm/descriptor/psbt/parse.d.ts +27 -0
- package/dist/{src → esm}/descriptor/psbt/parse.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/parse.js +51 -0
- package/dist/esm/descriptor/psbt/sign.d.ts +26 -0
- package/dist/esm/descriptor/psbt/sign.d.ts.map +1 -0
- package/dist/esm/descriptor/psbt/sign.js +34 -0
- package/dist/esm/descriptor/psbt/wrap.d.ts +12 -0
- package/dist/{src → esm}/descriptor/psbt/wrap.d.ts.map +1 -1
- package/dist/esm/descriptor/psbt/wrap.js +38 -0
- package/dist/esm/dustThreshold.d.ts +4 -0
- package/dist/esm/dustThreshold.js +97 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/{src → esm}/index.d.ts.map +1 -1
- package/dist/esm/index.js +10 -0
- package/dist/esm/paygo/attestation.d.ts +11 -0
- package/dist/esm/paygo/attestation.d.ts.map +1 -0
- package/dist/esm/paygo/attestation.js +18 -0
- package/dist/esm/paygo/index.d.ts +3 -0
- package/dist/esm/paygo/index.d.ts.map +1 -0
- package/dist/esm/paygo/index.js +3 -0
- package/dist/esm/paygo/parsePayGoAttestation.d.ts +16 -0
- package/dist/esm/paygo/parsePayGoAttestation.d.ts.map +1 -0
- package/dist/esm/paygo/parsePayGoAttestation.js +43 -0
- package/dist/esm/paygo/psbt/Errors.d.ts +22 -0
- package/dist/esm/paygo/psbt/Errors.d.ts.map +1 -0
- package/dist/esm/paygo/psbt/Errors.js +35 -0
- package/dist/esm/paygo/psbt/index.d.ts +2 -0
- package/dist/esm/paygo/psbt/index.d.ts.map +1 -0
- package/dist/esm/paygo/psbt/index.js +2 -0
- package/dist/esm/paygo/psbt/payGoAddressProof.d.ts +29 -0
- package/dist/esm/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
- package/dist/esm/paygo/psbt/payGoAddressProof.js +85 -0
- package/dist/esm/testutil/descriptor/descriptors.d.ts +13 -0
- package/dist/esm/testutil/descriptor/descriptors.d.ts.map +1 -0
- package/dist/esm/testutil/descriptor/descriptors.js +150 -0
- package/dist/esm/testutil/descriptor/index.d.ts +4 -0
- package/dist/esm/testutil/descriptor/index.js +4 -0
- package/dist/esm/testutil/descriptor/mock.utils.d.ts +36 -0
- package/dist/esm/testutil/descriptor/mock.utils.d.ts.map +1 -0
- package/dist/esm/testutil/descriptor/mock.utils.js +53 -0
- package/dist/esm/testutil/descriptor/psbt.utils.d.ts +4 -0
- package/dist/{src → esm}/testutil/descriptor/psbt.utils.d.ts.map +1 -1
- package/dist/esm/testutil/descriptor/psbt.utils.js +17 -0
- package/dist/esm/testutil/fixtures.utils.d.ts +15 -0
- package/dist/{src → esm}/testutil/fixtures.utils.js +5 -42
- package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
- package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
- package/dist/esm/testutil/generatePayGoAttestationProof.utils.js +32 -0
- package/dist/esm/testutil/index.d.ts +6 -0
- package/dist/{src → esm}/testutil/index.d.ts.map +1 -1
- package/dist/esm/testutil/index.js +6 -0
- package/dist/esm/testutil/key.utils.d.ts +16 -0
- package/dist/{src → esm}/testutil/key.utils.d.ts.map +1 -1
- package/dist/esm/testutil/key.utils.js +22 -0
- package/dist/esm/testutil/toPlainObject.utils.d.ts +11 -0
- package/dist/{src → esm}/testutil/toPlainObject.utils.d.ts.map +1 -1
- package/dist/esm/testutil/toPlainObject.utils.js +85 -0
- package/dist/esm/testutil/trimMessagePrefix.d.ts +11 -0
- package/dist/esm/testutil/trimMessagePrefix.d.ts.map +1 -0
- package/dist/esm/testutil/trimMessagePrefix.js +24 -0
- package/dist/esm/xOnlyPubkey.d.ts +2 -0
- package/dist/esm/xOnlyPubkey.js +15 -0
- package/package.json +50 -25
- package/dist/src/Output.js +0 -60
- package/dist/src/bip32utils.d.ts +0 -16
- package/dist/src/bip32utils.d.ts.map +0 -1
- package/dist/src/bip32utils.js +0 -72
- package/dist/src/bip65/locktime.js +0 -37
- package/dist/src/descriptor/DescriptorMap.js +0 -9
- package/dist/src/descriptor/Output.js +0 -41
- package/dist/src/descriptor/VirtualSize.js +0 -100
- package/dist/src/descriptor/derive.js +0 -45
- package/dist/src/descriptor/fromFixedScriptWallet.js +0 -88
- package/dist/src/descriptor/psbt/assertSatisfiable.js +0 -74
- package/dist/src/descriptor/psbt/createPsbt.d.ts.map +0 -1
- package/dist/src/descriptor/psbt/createPsbt.js +0 -82
- package/dist/src/descriptor/psbt/findDescriptors.js +0 -98
- package/dist/src/descriptor/psbt/parse.js +0 -87
- package/dist/src/descriptor/psbt/sign.d.ts.map +0 -1
- package/dist/src/descriptor/psbt/sign.js +0 -42
- package/dist/src/descriptor/psbt/wrap.js +0 -76
- package/dist/src/dustThreshold.js +0 -134
- package/dist/src/paygo/ExtractAddressPayGoAttestation.d.ts.map +0 -1
- package/dist/src/paygo/ExtractAddressPayGoAttestation.js +0 -44
- package/dist/src/paygo/index.d.ts +0 -2
- package/dist/src/paygo/index.d.ts.map +0 -1
- package/dist/src/testutil/descriptor/descriptors.d.ts.map +0 -1
- package/dist/src/testutil/descriptor/descriptors.js +0 -125
- package/dist/src/testutil/descriptor/mock.utils.d.ts.map +0 -1
- package/dist/src/testutil/descriptor/mock.utils.js +0 -91
- package/dist/src/testutil/descriptor/psbt.utils.js +0 -20
- package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +0 -1
- package/dist/src/testutil/generatePayGoAttestationProof.utils.js +0 -43
- package/dist/src/testutil/key.utils.js +0 -59
- package/dist/src/testutil/toPlainObject.utils.js +0 -75
- package/dist/src/xOnlyPubkey.js +0 -18
- /package/dist/{src → cjs/src}/Output.d.ts +0 -0
- /package/dist/{src → cjs/src}/bip65/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/bip65/locktime.d.ts +0 -0
- /package/dist/{src → cjs/src}/descriptor/psbt/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/dustThreshold.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/descriptor/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/descriptor/psbt.utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/fixtures.utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/testutil/toPlainObject.utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/xOnlyPubkey.d.ts +0 -0
- /package/dist/{src → esm}/Output.d.ts.map +0 -0
- /package/dist/{src → esm}/bip65/index.d.ts.map +0 -0
- /package/dist/{src → esm}/bip65/locktime.d.ts.map +0 -0
- /package/dist/{src → esm}/descriptor/psbt/index.d.ts.map +0 -0
- /package/dist/{src → esm}/dustThreshold.d.ts.map +0 -0
- /package/dist/{src → esm}/testutil/descriptor/index.d.ts.map +0 -0
- /package/dist/{src → esm}/testutil/fixtures.utils.d.ts.map +0 -0
- /package/dist/{src → esm}/xOnlyPubkey.d.ts.map +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export class PatternMatcher {
|
|
2
|
+
match(node, pattern) {
|
|
3
|
+
const vars = {};
|
|
4
|
+
return this.matchNode(node, pattern, vars) ? vars : null;
|
|
5
|
+
}
|
|
6
|
+
matchNode(node, pattern, vars) {
|
|
7
|
+
// Variable placeholder
|
|
8
|
+
if (this.isPatternVar(pattern)) {
|
|
9
|
+
const varName = pattern.$var;
|
|
10
|
+
if (varName in vars) {
|
|
11
|
+
return this.deepEqual(vars[varName], node);
|
|
12
|
+
}
|
|
13
|
+
vars[varName] = node;
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
// Primitive values
|
|
17
|
+
if (typeof node !== typeof pattern)
|
|
18
|
+
return false;
|
|
19
|
+
if (typeof node === 'string' || typeof node === 'number') {
|
|
20
|
+
return node === pattern;
|
|
21
|
+
}
|
|
22
|
+
// Arrays
|
|
23
|
+
if (Array.isArray(node) && Array.isArray(pattern)) {
|
|
24
|
+
return node.length === pattern.length && node.every((item, i) => this.matchNode(item, pattern[i], vars));
|
|
25
|
+
}
|
|
26
|
+
// Objects
|
|
27
|
+
if (typeof node === 'object' && typeof pattern === 'object' && node !== null && pattern !== null) {
|
|
28
|
+
const nodeKeys = Object.keys(node);
|
|
29
|
+
const patternKeys = Object.keys(pattern);
|
|
30
|
+
return (nodeKeys.length === patternKeys.length &&
|
|
31
|
+
nodeKeys.every((key) => patternKeys.includes(key) &&
|
|
32
|
+
this.matchNode(node[key], pattern[key], vars)));
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
isPatternVar(value) {
|
|
37
|
+
return value !== null && typeof value === 'object' && '$var' in value;
|
|
38
|
+
}
|
|
39
|
+
deepEqual(a, b) {
|
|
40
|
+
if (a === b)
|
|
41
|
+
return true;
|
|
42
|
+
if (typeof a !== typeof b)
|
|
43
|
+
return false;
|
|
44
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
45
|
+
return a.length === b.length && a.every((item, i) => this.deepEqual(item, b[i]));
|
|
46
|
+
}
|
|
47
|
+
if (typeof a === 'object' && a !== null && typeof b === 'object' && b !== null) {
|
|
48
|
+
const keysA = Object.keys(a);
|
|
49
|
+
const keysB = Object.keys(b);
|
|
50
|
+
return (keysA.length === keysB.length &&
|
|
51
|
+
keysA.every((key) => this.deepEqual(a[key], b[key])));
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0dGVybk1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wYXJzZS9QYXR0ZXJuTWF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLE9BQU8sY0FBYztJQUN6QixLQUFLLENBQUMsSUFBYSxFQUFFLE9BQWdCO1FBQ25DLE1BQU0sSUFBSSxHQUFrQixFQUFFLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNELENBQUM7SUFFTyxTQUFTLENBQUMsSUFBYSxFQUFFLE9BQWdCLEVBQUUsSUFBbUI7UUFDcEUsdUJBQXVCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDN0IsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLElBQUksT0FBTyxJQUFJLEtBQUssT0FBTyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDakQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQzFCLENBQUM7UUFFRCxTQUFTO1FBQ1QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0csQ0FBQztRQUVELFVBQVU7UUFDVixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakcsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXpDLE9BQU8sQ0FDTCxRQUFRLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxNQUFNO2dCQUN0QyxRQUFRLENBQUMsS0FBSyxDQUNaLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBRSxJQUFnQyxDQUFDLEdBQUcsQ0FBQyxFQUFHLE9BQW1DLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQzFHLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYztRQUNqQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUM7SUFDeEUsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFVLEVBQUUsQ0FBVTtRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsSUFBSSxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDL0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FDTCxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNO2dCQUM3QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFFLENBQTZCLENBQUMsR0FBRyxDQUFDLEVBQUcsQ0FBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQy9HLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQYXR0ZXJuIG1hdGNoaW5nIHR5cGVzXG5leHBvcnQgdHlwZSBQYXR0ZXJuVmFyID0geyAkdmFyOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIFBhdHRlcm4gPSBQYXR0ZXJuVmFyIHwgc3RyaW5nIHwgbnVtYmVyIHwgeyBba2V5OiBzdHJpbmddOiBQYXR0ZXJuIHwgUGF0dGVybltdIH0gfCBQYXR0ZXJuW107XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RlZFZhcnMgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IGNsYXNzIFBhdHRlcm5NYXRjaGVyIHtcbiAgbWF0Y2gobm9kZTogdW5rbm93biwgcGF0dGVybjogUGF0dGVybik6IEV4dHJhY3RlZFZhcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YXJzOiBFeHRyYWN0ZWRWYXJzID0ge307XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hOb2RlKG5vZGUsIHBhdHRlcm4sIHZhcnMpID8gdmFycyA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoTm9kZShub2RlOiB1bmtub3duLCBwYXR0ZXJuOiBQYXR0ZXJuLCB2YXJzOiBFeHRyYWN0ZWRWYXJzKTogYm9vbGVhbiB7XG4gICAgLy8gVmFyaWFibGUgcGxhY2Vob2xkZXJcbiAgICBpZiAodGhpcy5pc1BhdHRlcm5WYXIocGF0dGVybikpIHtcbiAgICAgIGNvbnN0IHZhck5hbWUgPSBwYXR0ZXJuLiR2YXI7XG4gICAgICBpZiAodmFyTmFtZSBpbiB2YXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBFcXVhbCh2YXJzW3Zhck5hbWVdLCBub2RlKTtcbiAgICAgIH1cbiAgICAgIHZhcnNbdmFyTmFtZV0gPSBub2RlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUHJpbWl0aXZlIHZhbHVlc1xuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gdHlwZW9mIHBhdHRlcm4pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG5vZGUgPT09IHBhdHRlcm47XG4gICAgfVxuXG4gICAgLy8gQXJyYXlzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkgJiYgQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIG5vZGUubGVuZ3RoID09PSBwYXR0ZXJuLmxlbmd0aCAmJiBub2RlLmV2ZXJ5KChpdGVtLCBpKSA9PiB0aGlzLm1hdGNoTm9kZShpdGVtLCBwYXR0ZXJuW2ldLCB2YXJzKSk7XG4gICAgfVxuXG4gICAgLy8gT2JqZWN0c1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBhdHRlcm4gPT09ICdvYmplY3QnICYmIG5vZGUgIT09IG51bGwgJiYgcGF0dGVybiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9kZUtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcbiAgICAgIGNvbnN0IHBhdHRlcm5LZXlzID0gT2JqZWN0LmtleXMocGF0dGVybik7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIG5vZGVLZXlzLmxlbmd0aCA9PT0gcGF0dGVybktleXMubGVuZ3RoICYmXG4gICAgICAgIG5vZGVLZXlzLmV2ZXJ5KFxuICAgICAgICAgIChrZXkpID0+XG4gICAgICAgICAgICBwYXR0ZXJuS2V5cy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICB0aGlzLm1hdGNoTm9kZSgobm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSwgKHBhdHRlcm4gYXMgUmVjb3JkPHN0cmluZywgUGF0dGVybj4pW2tleV0sIHZhcnMpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhdHRlcm5WYXIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXR0ZXJuVmFyIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAnJHZhcicgaW4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGRlZXBFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKGl0ZW0sIGkpID0+IHRoaXMuZGVlcEVxdWFsKGl0ZW0sIGJbaV0pKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhICE9PSBudWxsICYmIHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJiBiICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmXG4gICAgICAgIGtleXNBLmV2ZXJ5KChrZXkpID0+IHRoaXMuZGVlcEVxdWFsKChhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLCAoYiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSkpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* These are some helpers for testing satisfiability of descriptors in PSBTs.
|
|
3
|
+
*
|
|
4
|
+
* They are mostly a debugging aid - if an input cannot be satisified, the `finalizePsbt()` method will fail, but
|
|
5
|
+
* the error message is pretty vague.
|
|
6
|
+
*
|
|
7
|
+
* The methods here have the goal of catching certain cases earlier and with a better error message.
|
|
8
|
+
*
|
|
9
|
+
* The goal is not an exhaustive check, but to catch common mistakes.
|
|
10
|
+
*/
|
|
11
|
+
import { Descriptor } from '@bitgo/wasm-utxo';
|
|
12
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
13
|
+
export declare const FINAL_SEQUENCE = 4294967295;
|
|
14
|
+
/**
|
|
15
|
+
* Get the required locktime for a descriptor.
|
|
16
|
+
* @param descriptor
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRequiredLocktime(descriptor: Descriptor | unknown): number | undefined;
|
|
19
|
+
export declare function assertSatisfiable(psbt: utxolib.Psbt, inputIndex: number, descriptor: Descriptor): void;
|
|
20
|
+
//# sourceMappingURL=assertSatisfiable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertSatisfiable.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/assertSatisfiable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"assertSatisfiable.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/assertSatisfiable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAsCxF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAYtG"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* These are some helpers for testing satisfiability of descriptors in PSBTs.
|
|
3
|
+
*
|
|
4
|
+
* They are mostly a debugging aid - if an input cannot be satisified, the `finalizePsbt()` method will fail, but
|
|
5
|
+
* the error message is pretty vague.
|
|
6
|
+
*
|
|
7
|
+
* The methods here have the goal of catching certain cases earlier and with a better error message.
|
|
8
|
+
*
|
|
9
|
+
* The goal is not an exhaustive check, but to catch common mistakes.
|
|
10
|
+
*/
|
|
11
|
+
import { Descriptor } from '@bitgo/wasm-utxo';
|
|
12
|
+
export const FINAL_SEQUENCE = 0xffffffff;
|
|
13
|
+
/**
|
|
14
|
+
* Get the required locktime for a descriptor.
|
|
15
|
+
* @param descriptor
|
|
16
|
+
*/
|
|
17
|
+
export function getRequiredLocktime(descriptor) {
|
|
18
|
+
if (descriptor instanceof Descriptor) {
|
|
19
|
+
return getRequiredLocktime(descriptor.node());
|
|
20
|
+
}
|
|
21
|
+
if (typeof descriptor !== 'object' || descriptor === null) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
if ('Wsh' in descriptor) {
|
|
25
|
+
return getRequiredLocktime(descriptor.Wsh);
|
|
26
|
+
}
|
|
27
|
+
if ('Sh' in descriptor) {
|
|
28
|
+
return getRequiredLocktime(descriptor.Sh);
|
|
29
|
+
}
|
|
30
|
+
if ('Ms' in descriptor) {
|
|
31
|
+
return getRequiredLocktime(descriptor.Ms);
|
|
32
|
+
}
|
|
33
|
+
if ('AndV' in descriptor) {
|
|
34
|
+
if (!Array.isArray(descriptor.AndV)) {
|
|
35
|
+
throw new Error('Expected an array');
|
|
36
|
+
}
|
|
37
|
+
if (descriptor.AndV.length !== 2) {
|
|
38
|
+
throw new Error('Expected exactly two elements');
|
|
39
|
+
}
|
|
40
|
+
const [a, b] = descriptor.AndV;
|
|
41
|
+
return getRequiredLocktime(a) ?? getRequiredLocktime(b);
|
|
42
|
+
}
|
|
43
|
+
if ('Drop' in descriptor) {
|
|
44
|
+
return getRequiredLocktime(descriptor.Drop);
|
|
45
|
+
}
|
|
46
|
+
if ('Verify' in descriptor) {
|
|
47
|
+
return getRequiredLocktime(descriptor.Verify);
|
|
48
|
+
}
|
|
49
|
+
if ('After' in descriptor && typeof descriptor.After === 'object' && descriptor.After !== null) {
|
|
50
|
+
if ('absLockTime' in descriptor.After && typeof descriptor.After.absLockTime === 'number') {
|
|
51
|
+
return descriptor.After.absLockTime;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
export function assertSatisfiable(psbt, inputIndex, descriptor) {
|
|
57
|
+
// If the descriptor requires a locktime, the input must have a non-final sequence number
|
|
58
|
+
const requiredLocktime = getRequiredLocktime(descriptor);
|
|
59
|
+
if (requiredLocktime !== undefined) {
|
|
60
|
+
const input = psbt.txInputs[inputIndex];
|
|
61
|
+
if (input.sequence === FINAL_SEQUENCE) {
|
|
62
|
+
throw new Error(`Input ${inputIndex} has a non-final sequence number, but requires a timelock`);
|
|
63
|
+
}
|
|
64
|
+
if (psbt.locktime !== requiredLocktime) {
|
|
65
|
+
throw new Error(`psbt locktime (${psbt.locktime}) does not match required locktime (${requiredLocktime})`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0U2F0aXNmaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L2Fzc2VydFNhdGlzZmlhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc5QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRXpDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxVQUFnQztJQUNsRSxJQUFJLFVBQVUsWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUNyQyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN2QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkIsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUMvQixPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDM0IsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0YsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLEtBQUssSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFGLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQWtCLEVBQUUsVUFBa0IsRUFBRSxVQUFzQjtJQUM5Rix5RkFBeUY7SUFDekYsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RCxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxVQUFVLDJEQUEyRCxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxRQUFRLHVDQUF1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGVzZSBhcmUgc29tZSBoZWxwZXJzIGZvciB0ZXN0aW5nIHNhdGlzZmlhYmlsaXR5IG9mIGRlc2NyaXB0b3JzIGluIFBTQlRzLlxuICpcbiAqIFRoZXkgYXJlIG1vc3RseSBhIGRlYnVnZ2luZyBhaWQgLSBpZiBhbiBpbnB1dCBjYW5ub3QgYmUgc2F0aXNpZmllZCwgdGhlIGBmaW5hbGl6ZVBzYnQoKWAgbWV0aG9kIHdpbGwgZmFpbCwgYnV0XG4gKiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBwcmV0dHkgdmFndWUuXG4gKlxuICogVGhlIG1ldGhvZHMgaGVyZSBoYXZlIHRoZSBnb2FsIG9mIGNhdGNoaW5nIGNlcnRhaW4gY2FzZXMgZWFybGllciBhbmQgd2l0aCBhIGJldHRlciBlcnJvciBtZXNzYWdlLlxuICpcbiAqIFRoZSBnb2FsIGlzIG5vdCBhbiBleGhhdXN0aXZlIGNoZWNrLCBidXQgdG8gY2F0Y2ggY29tbW9uIG1pc3Rha2VzLlxuICovXG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuZXhwb3J0IGNvbnN0IEZJTkFMX1NFUVVFTkNFID0gMHhmZmZmZmZmZjtcblxuLyoqXG4gKiBHZXQgdGhlIHJlcXVpcmVkIGxvY2t0aW1lIGZvciBhIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0gZGVzY3JpcHRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yOiBEZXNjcmlwdG9yIHwgdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3Iubm9kZSgpKTtcbiAgfVxuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgIT09ICdvYmplY3QnIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICgnV3NoJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Xc2gpO1xuICB9XG4gIGlmICgnU2gnIGluIGRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yLlNoKTtcbiAgfVxuICBpZiAoJ01zJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Ncyk7XG4gIH1cbiAgaWYgKCdBbmRWJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRlc2NyaXB0b3IuQW5kVikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0b3IuQW5kVi5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXhhY3RseSB0d28gZWxlbWVudHMnKTtcbiAgICB9XG4gICAgY29uc3QgW2EsIGJdID0gZGVzY3JpcHRvci5BbmRWO1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGEpID8/IGdldFJlcXVpcmVkTG9ja3RpbWUoYik7XG4gIH1cbiAgaWYgKCdEcm9wJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Ecm9wKTtcbiAgfVxuICBpZiAoJ1ZlcmlmeScgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuVmVyaWZ5KTtcbiAgfVxuICBpZiAoJ0FmdGVyJyBpbiBkZXNjcmlwdG9yICYmIHR5cGVvZiBkZXNjcmlwdG9yLkFmdGVyID09PSAnb2JqZWN0JyAmJiBkZXNjcmlwdG9yLkFmdGVyICE9PSBudWxsKSB7XG4gICAgaWYgKCdhYnNMb2NrVGltZScgaW4gZGVzY3JpcHRvci5BZnRlciAmJiB0eXBlb2YgZGVzY3JpcHRvci5BZnRlci5hYnNMb2NrVGltZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLkFmdGVyLmFic0xvY2tUaW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2F0aXNmaWFibGUocHNidDogdXR4b2xpYi5Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiB2b2lkIHtcbiAgLy8gSWYgdGhlIGRlc2NyaXB0b3IgcmVxdWlyZXMgYSBsb2NrdGltZSwgdGhlIGlucHV0IG11c3QgaGF2ZSBhIG5vbi1maW5hbCBzZXF1ZW5jZSBudW1iZXJcbiAgY29uc3QgcmVxdWlyZWRMb2NrdGltZSA9IGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvcik7XG4gIGlmIChyZXF1aXJlZExvY2t0aW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBpbnB1dCA9IHBzYnQudHhJbnB1dHNbaW5wdXRJbmRleF07XG4gICAgaWYgKGlucHV0LnNlcXVlbmNlID09PSBGSU5BTF9TRVFVRU5DRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAke2lucHV0SW5kZXh9IGhhcyBhIG5vbi1maW5hbCBzZXF1ZW5jZSBudW1iZXIsIGJ1dCByZXF1aXJlcyBhIHRpbWVsb2NrYCk7XG4gICAgfVxuICAgIGlmIChwc2J0LmxvY2t0aW1lICE9PSByZXF1aXJlZExvY2t0aW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHBzYnQgbG9ja3RpbWUgKCR7cHNidC5sb2NrdGltZX0pIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIGxvY2t0aW1lICgke3JlcXVpcmVkTG9ja3RpbWV9KWApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TapLeafScript } from 'bip174/src/lib/interfaces';
|
|
2
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
3
|
+
import { Miniscript } from '@bitgo/wasm-utxo';
|
|
4
|
+
import { DerivedDescriptorWalletOutput, WithOptDescriptor } from '../Output';
|
|
5
|
+
import { Output } from '../../Output';
|
|
6
|
+
/**
|
|
7
|
+
* Non-Final (Replaceable)
|
|
8
|
+
* Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
|
|
9
|
+
* */
|
|
10
|
+
export declare const MAX_BIP125_RBF_SEQUENCE: number;
|
|
11
|
+
export declare function findTapLeafScript(input: TapLeafScript[], script: Buffer | Miniscript): TapLeafScript;
|
|
12
|
+
export type PsbtParams = {
|
|
13
|
+
network: utxolib.Network;
|
|
14
|
+
version?: number;
|
|
15
|
+
locktime?: number;
|
|
16
|
+
sequence?: number;
|
|
17
|
+
};
|
|
18
|
+
export type DerivedDescriptorTransactionInput = DerivedDescriptorWalletOutput & {
|
|
19
|
+
selectTapLeafScript?: Miniscript;
|
|
20
|
+
sequence?: number;
|
|
21
|
+
};
|
|
22
|
+
export declare function createPsbt(params: PsbtParams, inputs: DerivedDescriptorTransactionInput[], outputs: WithOptDescriptor<Output>[]): utxolib.bitgo.UtxoPsbt;
|
|
23
|
+
//# sourceMappingURL=createPsbt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPsbt.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/createPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAc,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC;;;KAGK;AACL,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,CAcpG;AAuCD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,GAAG;IAC9E,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,iCAAiC,EAAE,EAC3C,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,GACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAexB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { toUtxoPsbt, toWrappedPsbt } from './wrap';
|
|
3
|
+
import { assertSatisfiable } from './assertSatisfiable';
|
|
4
|
+
/**
|
|
5
|
+
* Non-Final (Replaceable)
|
|
6
|
+
* Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
|
|
7
|
+
* */
|
|
8
|
+
export const MAX_BIP125_RBF_SEQUENCE = 0xffffffff - 2;
|
|
9
|
+
export function findTapLeafScript(input, script) {
|
|
10
|
+
if (!Buffer.isBuffer(script)) {
|
|
11
|
+
script = Buffer.from(script.encode());
|
|
12
|
+
}
|
|
13
|
+
const matches = input.filter((leaf) => {
|
|
14
|
+
return leaf.script.equals(script);
|
|
15
|
+
});
|
|
16
|
+
if (matches.length === 0) {
|
|
17
|
+
throw new Error(`No tapLeafScript found for script: ${script.toString('hex')}`);
|
|
18
|
+
}
|
|
19
|
+
if (matches.length > 1) {
|
|
20
|
+
throw new Error(`Multiple tapLeafScripts found for script: ${script.toString('hex')}`);
|
|
21
|
+
}
|
|
22
|
+
return matches[0];
|
|
23
|
+
}
|
|
24
|
+
function updateInputsWithDescriptors(psbt, inputParams) {
|
|
25
|
+
if (psbt.txInputs.length !== inputParams.length) {
|
|
26
|
+
throw new Error(`Input count mismatch (psbt=${psbt.txInputs.length}, inputParams=${inputParams.length})`);
|
|
27
|
+
}
|
|
28
|
+
const wrappedPsbt = toWrappedPsbt(psbt);
|
|
29
|
+
for (const [inputIndex, v] of inputParams.entries()) {
|
|
30
|
+
assertSatisfiable(psbt, inputIndex, v.descriptor);
|
|
31
|
+
wrappedPsbt.updateInputWithDescriptor(inputIndex, v.descriptor);
|
|
32
|
+
}
|
|
33
|
+
const unwrappedPsbt = toUtxoPsbt(wrappedPsbt, psbt.network);
|
|
34
|
+
for (const inputIndex in psbt.txInputs) {
|
|
35
|
+
const preparedInput = unwrappedPsbt.data.inputs[inputIndex];
|
|
36
|
+
const v = inputParams[inputIndex];
|
|
37
|
+
if (v.selectTapLeafScript && preparedInput.tapLeafScript) {
|
|
38
|
+
const selected = findTapLeafScript(preparedInput.tapLeafScript, v.selectTapLeafScript);
|
|
39
|
+
preparedInput.tapLeafScript = [selected];
|
|
40
|
+
}
|
|
41
|
+
psbt.data.inputs[inputIndex] = preparedInput;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function updateOutputsWithDescriptors(psbt, descriptors) {
|
|
45
|
+
const wrappedPsbt = toWrappedPsbt(psbt);
|
|
46
|
+
for (const [outputIndex, { descriptor }] of descriptors.entries()) {
|
|
47
|
+
if (descriptor) {
|
|
48
|
+
wrappedPsbt.updateOutputWithDescriptor(outputIndex, descriptor);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const unwrappedPsbt = toUtxoPsbt(wrappedPsbt, psbt.network);
|
|
52
|
+
for (const outputIndex in psbt.txOutputs) {
|
|
53
|
+
psbt.data.outputs[outputIndex] = unwrappedPsbt.data.outputs[outputIndex];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function createPsbt(params, inputs, outputs) {
|
|
57
|
+
const psbt = utxolib.bitgo.UtxoPsbt.createPsbt({ network: params.network });
|
|
58
|
+
psbt.setVersion(params.version ?? 2);
|
|
59
|
+
psbt.setLocktime(params.locktime ?? 0);
|
|
60
|
+
psbt.addInputs(inputs.map((i) => ({ ...i, sequence: i.sequence ?? params.sequence ?? MAX_BIP125_RBF_SEQUENCE })));
|
|
61
|
+
psbt.addOutputs(outputs);
|
|
62
|
+
updateInputsWithDescriptors(psbt, inputs.map(({ descriptor, selectTapLeafScript }) => ({
|
|
63
|
+
descriptor,
|
|
64
|
+
selectTapLeafScript,
|
|
65
|
+
})));
|
|
66
|
+
updateOutputsWithDescriptors(psbt, outputs);
|
|
67
|
+
return psbt;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL3BzYnQvY3JlYXRlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBTWhELE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhEOzs7S0FHSztBQUNMLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFdEQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQXNCLEVBQUUsTUFBMkI7SUFDbkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMs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QUFRLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsMkJBQTJCLENBQ3pCLElBQUksRUFDSixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxVQUFVO1FBQ1YsbUJBQW1CO0tBQ3BCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDRiw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFwTGVhZlNjcmlwdCB9IGZyb20gJ2JpcDE3NC9zcmMvbGliL2ludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBEZXNjcmlwdG9yLCBNaW5pc2NyaXB0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IERlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0LCBXaXRoT3B0RGVzY3JpcHRvciB9IGZyb20gJy4uL091dHB1dCc7XG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tICcuLi8uLi9PdXRwdXQnO1xuXG5pbXBvcnQgeyB0b1V0eG9Qc2J0LCB0b1dyYXBwZWRQc2J0IH0gZnJvbSAnLi93cmFwJztcbmltcG9ydCB7IGFzc2VydFNhdGlzZmlhYmxlIH0gZnJvbSAnLi9hc3NlcnRTYXRpc2ZpYWJsZSc7XG5cbi8qKlxuICogTm9uLUZpbmFsIChSZXBsYWNlYWJsZSlcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYml0Y29pbi9ibG9iL3YyNS4xL3NyYy9ycGMvcmF3dHJhbnNhY3Rpb25fdXRpbC5jcHAjTDQ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9CSVAxMjVfUkJGX1NFUVVFTkNFID0gMHhmZmZmZmZmZiAtIDI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVGFwTGVhZlNjcmlwdChpbnB1dDogVGFwTGVhZlNjcmlwdFtdLCBzY3JpcHQ6IEJ1ZmZlciB8IE1pbmlzY3JpcHQpOiBUYXBMZWFmU2NyaXB0IHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2NyaXB0KSkge1xuICAgIHNjcmlwdCA9IEJ1ZmZlci5mcm9tKHNjcmlwdC5lbmNvZGUoKSk7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IGlucHV0LmZpbHRlcigobGVhZikgPT4ge1xuICAgIHJldHVybiBsZWFmLnNjcmlwdC5lcXVhbHMoc2NyaXB0KTtcbiAgfSk7XG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gdGFwTGVhZlNjcmlwdCBmb3VuZCBmb3Igc2NyaXB0OiAke3NjcmlwdC50b1N0cmluZygnaGV4Jyl9YCk7XG4gIH1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgdGFwTGVhZlNjcmlwdHMgZm91bmQgZm9yIHNjcmlwdDogJHtzY3JpcHQudG9TdHJpbmcoJ2hleCcpfWApO1xuICB9XG4gIHJldHVybiBtYXRjaGVzWzBdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbnB1dHNXaXRoRGVzY3JpcHRvcnMoXG4gIHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gIGlucHV0UGFyYW1zOiBBcnJheTx7IGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7IHNlbGVjdFRhcExlYWZTY3JpcHQ/OiBNaW5pc2NyaXB0IH0+XG4pIHtcbiAgaWYgKHBzYnQudHhJbnB1dHMubGVuZ3RoICE9PSBpbnB1dFBhcmFtcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0IGNvdW50IG1pc21hdGNoIChwc2J0PSR7cHNidC50eElucHV0cy5sZW5ndGh9LCBpbnB1dFBhcmFtcz0ke2lucHV0UGFyYW1zLmxlbmd0aH0pYCk7XG4gIH1cbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICBmb3IgKGNvbnN0IFtpbnB1dEluZGV4LCB2XSBvZiBpbnB1dFBhcmFtcy5lbnRyaWVzKCkpIHtcbiAgICBhc3NlcnRTYXRpc2ZpYWJsZShwc2J0LCBpbnB1dEluZGV4LCB2LmRlc2NyaXB0b3IpO1xuICAgIHdyYXBwZWRQc2J0LnVwZGF0ZUlucHV0V2l0aERlc2NyaXB0b3IoaW5wdXRJbmRleCwgdi5kZXNjcmlwdG9yKTtcbiAgfVxuICBjb25zdCB1bndyYXBwZWRQc2J0ID0gdG9VdHhvUHNidCh3cmFwcGVkUHNidCwgcHNidC5uZXR3b3JrKTtcbiAgZm9yIChjb25zdCBpbnB1dEluZGV4IGluIHBzYnQudHhJbnB1dHMpIHtcbiAgICBjb25zdCBwcmVwYXJlZElucHV0ID0gdW53cmFwcGVkUHNidC5kYXRhLmlucHV0c1tpbnB1dEluZGV4XTtcbiAgICBjb25zdCB2ID0gaW5wdXRQYXJhbXNbaW5wdXRJbmRleF07XG4gICAgaWYgKHYuc2VsZWN0VGFwTGVhZlNjcmlwdCAmJiBwcmVwYXJlZElucHV0LnRhcExlYWZTY3JpcHQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gZmluZFRhcExlYWZTY3JpcHQocHJlcGFyZWRJbnB1dC50YXBMZWFmU2NyaXB0LCB2LnNlbGVjdFRhcExlYWZTY3JpcHQpO1xuICAgICAgcHJlcGFyZWRJbnB1dC50YXBMZWFmU2NyaXB0ID0gW3NlbGVjdGVkXTtcbiAgICB9XG4gICAgcHNidC5kYXRhLmlucHV0c1tpbnB1dEluZGV4XSA9IHByZXBhcmVkSW5wdXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3V0cHV0c1dpdGhEZXNjcmlwdG9ycyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCBkZXNjcmlwdG9yczogV2l0aE9wdERlc2NyaXB0b3I8T3V0cHV0PltdKSB7XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gdG9XcmFwcGVkUHNidChwc2J0KTtcbiAgZm9yIChjb25zdCBbb3V0cHV0SW5kZXgsIHsgZGVzY3JpcHRvciB9XSBvZiBkZXNjcmlwdG9ycy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgd3JhcHBlZFBzYnQudXBkYXRlT3V0cHV0V2l0aERlc2NyaXB0b3Iob3V0cHV0SW5kZXgsIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuICBjb25zdCB1bndyYXBwZWRQc2J0ID0gdG9VdHhvUHNidCh3cmFwcGVkUHNidCwgcHNidC5uZXR3b3JrKTtcbiAgZm9yIChjb25zdCBvdXRwdXRJbmRleCBpbiBwc2J0LnR4T3V0cHV0cykge1xuICAgIHBzYnQuZGF0YS5vdXRwdXRzW291dHB1dEluZGV4XSA9IHVud3JhcHBlZFBzYnQuZGF0YS5vdXRwdXRzW291dHB1dEluZGV4XTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBQc2J0UGFyYW1zID0ge1xuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIGxvY2t0aW1lPzogbnVtYmVyO1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIERlcml2ZWREZXNjcmlwdG9yVHJhbnNhY3Rpb25JbnB1dCA9IERlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0ICYge1xuICBzZWxlY3RUYXBMZWFmU2NyaXB0PzogTWluaXNjcmlwdDtcbiAgc2VxdWVuY2U/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHNidChcbiAgcGFyYW1zOiBQc2J0UGFyYW1zLFxuICBpbnB1dHM6IERlcml2ZWREZXNjcmlwdG9yVHJhbnNhY3Rpb25JbnB1dFtdLFxuICBvdXRwdXRzOiBXaXRoT3B0RGVzY3JpcHRvcjxPdXRwdXQ+W11cbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQge1xuICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5VdHhvUHNidC5jcmVhdGVQc2J0KHsgbmV0d29yazogcGFyYW1zLm5ldHdvcmsgfSk7XG4gIHBzYnQuc2V0VmVyc2lvbihwYXJhbXMudmVyc2lvbiA/PyAyKTtcbiAgcHNidC5zZXRMb2NrdGltZShwYXJhbXMubG9ja3RpbWUgPz8gMCk7XG4gIHBzYnQuYWRkSW5wdXRzKGlucHV0cy5tYXAoKGkpID0+ICh7IC4uLmksIHNlcXVlbmNlOiBpLnNlcXVlbmNlID8/IHBhcmFtcy5zZXF1ZW5jZSA/PyBNQVhfQklQMTI1X1JCRl9TRVFVRU5DRSB9KSkpO1xuICBwc2J0LmFkZE91dHB1dHMob3V0cHV0cyk7XG4gIHVwZGF0ZUlucHV0c1dpdGhEZXNjcmlwdG9ycyhcbiAgICBwc2J0LFxuICAgIGlucHV0cy5tYXAoKHsgZGVzY3JpcHRvciwgc2VsZWN0VGFwTGVhZlNjcmlwdCB9KSA9PiAoe1xuICAgICAgZGVzY3JpcHRvcixcbiAgICAgIHNlbGVjdFRhcExlYWZTY3JpcHQsXG4gICAgfSkpXG4gICk7XG4gIHVwZGF0ZU91dHB1dHNXaXRoRGVzY3JpcHRvcnMocHNidCwgb3V0cHV0cyk7XG4gIHJldHVybiBwc2J0O1xufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { PsbtInput, PsbtOutput } from 'bip174/src/lib/interfaces';
|
|
2
|
+
import { Descriptor } from '@bitgo/wasm-utxo';
|
|
3
|
+
import { DescriptorMap } from '../DescriptorMap';
|
|
4
|
+
type DescriptorWithoutIndex = {
|
|
5
|
+
descriptor: Descriptor;
|
|
6
|
+
index: undefined;
|
|
7
|
+
};
|
|
8
|
+
type DescriptorWithIndex = {
|
|
9
|
+
descriptor: Descriptor;
|
|
10
|
+
index: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* @param input
|
|
14
|
+
* @param descriptorMap
|
|
15
|
+
* @returns DescriptorWithIndex for the input if found, undefined otherwise
|
|
16
|
+
*/
|
|
17
|
+
export declare function findDescriptorForInput(input: PsbtInput, descriptorMap: DescriptorMap): DescriptorWithIndex | DescriptorWithoutIndex | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* @param script - the output script
|
|
20
|
+
* @param output - the PSBT output
|
|
21
|
+
* @param descriptorMap
|
|
22
|
+
* @returns DescriptorWithIndex for the output if found, undefined otherwise
|
|
23
|
+
*/
|
|
24
|
+
export declare function findDescriptorForOutput(script: Buffer, output: PsbtOutput, descriptorMap: DescriptorMap): DescriptorWithIndex | DescriptorWithoutIndex | undefined;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=findDescriptors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/findDescriptors.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"findDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/findDescriptors.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,sBAAsB,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAsB3E,KAAK,mBAAmB,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsErE;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,sBAAsB,GAAG,SAAS,CAU1D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,sBAAsB,GAAG,SAAS,CAQ1D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find a definite descriptor in the descriptor map that matches the given script.
|
|
3
|
+
* @param script
|
|
4
|
+
* @param descriptorMap
|
|
5
|
+
*/
|
|
6
|
+
function findDescriptorWithoutDerivation(script, descriptorMap) {
|
|
7
|
+
for (const descriptor of descriptorMap.values()) {
|
|
8
|
+
if (!descriptor.hasWildcard()) {
|
|
9
|
+
if (Buffer.from(descriptor.scriptPubkey()).equals(script)) {
|
|
10
|
+
return { descriptor, index: undefined };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Find a descriptor in the descriptor map that matches the given script and derivation index.
|
|
18
|
+
* @param script
|
|
19
|
+
* @param index
|
|
20
|
+
* @param descriptorMap
|
|
21
|
+
* @returns DescriptorWithIndex if found, undefined otherwise
|
|
22
|
+
*/
|
|
23
|
+
function findDescriptorForDerivationIndex(script, index, descriptorMap) {
|
|
24
|
+
for (const descriptor of descriptorMap.values()) {
|
|
25
|
+
if (descriptor.hasWildcard() && Buffer.from(descriptor.atDerivationIndex(index).scriptPubkey()).equals(script)) {
|
|
26
|
+
return { descriptor, index };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
function getDerivationIndexFromPath(path) {
|
|
32
|
+
const indexStr = path.split('/').pop();
|
|
33
|
+
if (!indexStr) {
|
|
34
|
+
throw new Error(`Invalid derivation path ${path}`);
|
|
35
|
+
}
|
|
36
|
+
const index = parseInt(indexStr, 10);
|
|
37
|
+
if (index.toString() !== indexStr) {
|
|
38
|
+
throw new Error(`Invalid derivation path ${path}`);
|
|
39
|
+
}
|
|
40
|
+
return index;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wrapper around findDescriptorForDerivationPath that tries multiple derivation paths.
|
|
44
|
+
* @param script
|
|
45
|
+
* @param derivationPaths
|
|
46
|
+
* @param descriptorMap
|
|
47
|
+
*/
|
|
48
|
+
function findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap) {
|
|
49
|
+
const derivationIndexSet = new Set(derivationPaths.map((p) => getDerivationIndexFromPath(p)));
|
|
50
|
+
for (const index of [...derivationIndexSet]) {
|
|
51
|
+
const desc = findDescriptorForDerivationIndex(script, index, descriptorMap);
|
|
52
|
+
if (desc) {
|
|
53
|
+
return desc;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
function getDerivationPaths(v) {
|
|
59
|
+
if ('bip32Derivation' in v && v.bip32Derivation) {
|
|
60
|
+
return v.bip32Derivation.map((v) => v.path);
|
|
61
|
+
}
|
|
62
|
+
if ('tapBip32Derivation' in v && v.tapBip32Derivation) {
|
|
63
|
+
return v.tapBip32Derivation.map((v) => v.path).filter((v) => v !== '' && v !== 'm');
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @param input
|
|
69
|
+
* @param descriptorMap
|
|
70
|
+
* @returns DescriptorWithIndex for the input if found, undefined otherwise
|
|
71
|
+
*/
|
|
72
|
+
export function findDescriptorForInput(input, descriptorMap) {
|
|
73
|
+
const script = input.witnessUtxo?.script;
|
|
74
|
+
if (!script) {
|
|
75
|
+
throw new Error('Missing script');
|
|
76
|
+
}
|
|
77
|
+
const derivationPaths = getDerivationPaths(input) ?? [];
|
|
78
|
+
return (findDescriptorWithoutDerivation(script, descriptorMap) ??
|
|
79
|
+
findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* @param script - the output script
|
|
83
|
+
* @param output - the PSBT output
|
|
84
|
+
* @param descriptorMap
|
|
85
|
+
* @returns DescriptorWithIndex for the output if found, undefined otherwise
|
|
86
|
+
*/
|
|
87
|
+
export function findDescriptorForOutput(script, output, descriptorMap) {
|
|
88
|
+
const derivationPaths = getDerivationPaths(output);
|
|
89
|
+
return (findDescriptorWithoutDerivation(script, descriptorMap) ??
|
|
90
|
+
(derivationPaths === undefined
|
|
91
|
+
? undefined
|
|
92
|
+
: findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap)));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZERlc2NyaXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvcHNidC9maW5kRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBOzs7O0dBSUc7QUFDSCxTQUFTLCtCQUErQixDQUN0QyxNQUFjLEVBQ2QsYUFBNEI7SUFFNUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDOUIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBSUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxnQ0FBZ0MsQ0FDdkMsTUFBYyxFQUNkLEtBQWEsRUFDYixhQUE0QjtJQUU1QixLQUFLLE1BQU0sVUFBVSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2hELElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0csT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLElBQVk7SUFDOUMsTUFBTSxR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QUFTO1lBQ1gsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FDaEYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXG5VdGlsaXRpZXMgZm9yIG1hcHBpbmcgYmFjayBmcm9tIFBTQlQgaW5wdXRzIHRvIGRlc2NyaXB0b3JzLlxuXG5UaGlzIGlzIGEgc29tZXdoYXQgYnJ1dGUtZm9yY2UgYXR0ZW1wdCB0aGF0IHJlbGllcyBvbiB0aGUgYGJpcDMyRGVyaXZhdGlvbmAgZmllbGQgdG8gYmUgc2V0LlxuXG5JdCB3aWxsIHByb2JhYmx5IG9ubHkgd29yayBjb3JyZWN0bHkgaWYgYWxsIHhwdWJzIGluIHRoZSBkZXNjcmlwdG9yIGFyZSBkZXJpdmFibGUuXG5cbldlIHNob3VsZCB0YWtlIGEgbG9vayBhdCBhIG1vcmUgcm9idXN0IGFuZCBzdGFuZGFyZCBhcHByb2FjaCBsaWtlIHRoaXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvcHVsbC8xNTQ4XG5cbiAqL1xuaW1wb3J0IHsgUHNidElucHV0LCBQc2J0T3V0cHV0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IERlc2NyaXB0b3JNYXAgfSBmcm9tICcuLi9EZXNjcmlwdG9yTWFwJztcblxudHlwZSBEZXNjcmlwdG9yV2l0aG91dEluZGV4ID0geyBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yOyBpbmRleDogdW5kZWZpbmVkIH07XG5cbi8qKlxuICogRmluZCBhIGRlZmluaXRlIGRlc2NyaXB0b3IgaW4gdGhlIGRlc2NyaXB0b3IgbWFwIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2NyaXB0LlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqL1xuZnVuY3Rpb24gZmluZERlc2NyaXB0b3JXaXRob3V0RGVyaXZhdGlvbihcbiAgc2NyaXB0OiBCdWZmZXIsXG4gIGRlc2NyaXB0b3JNYXA6IERlc2NyaXB0b3JNYXBcbik6IERlc2NyaXB0b3JXaXRob3V0SW5kZXggfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgZGVzY3JpcHRvck1hcC52YWx1ZXMoKSkge1xuICAgIGlmICghZGVzY3JpcHRvci5oYXNXaWxkY2FyZCgpKSB7XG4gICAgICBpZiAoQnVmZmVyLmZyb20oZGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKSkuZXF1YWxzKHNjcmlwdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgZGVzY3JpcHRvciwgaW5kZXg6IHVuZGVmaW5lZCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnR5cGUgRGVzY3JpcHRvcldpdGhJbmRleCA9IHsgZGVzY3JpcHRvcjogRGVzY3JpcHRvcjsgaW5kZXg6IG51bWJlciB9O1xuXG4vKipcbiAqIEZpbmQgYSBkZXNjcmlwdG9yIGluIHRoZSBkZXNjcmlwdG9yIG1hcCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHNjcmlwdCBhbmQgZGVyaXZhdGlvbiBpbmRleC5cbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEBwYXJhbSBpbmRleFxuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqIEByZXR1cm5zIERlc2NyaXB0b3JXaXRoSW5kZXggaWYgZm91bmQsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gZmluZERlc2NyaXB0b3JGb3JEZXJpdmF0aW9uSW5kZXgoXG4gIHNjcmlwdDogQnVmZmVyLFxuICBpbmRleDogbnVtYmVyLFxuICBkZXNjcmlwdG9yTWFwOiBEZXNjcmlwdG9yTWFwXG4pOiBEZXNjcmlwdG9yV2l0aEluZGV4IHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIGRlc2NyaXB0b3JNYXAudmFsdWVzKCkpIHtcbiAgICBpZiAoZGVzY3JpcHRvci5oYXNXaWxkY2FyZCgpICYmIEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoaW5kZXgpLnNjcmlwdFB1YmtleSgpKS5lcXVhbHMoc2NyaXB0KSkge1xuICAgICAgcmV0dXJuIHsgZGVzY3JpcHRvciwgaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmF0aW9uSW5kZXhGcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBpbmRleFN0ciA9IHBhdGguc3BsaXQoJy8nKS5wb3AoKTtcbiAgaWYgKCFpbmRleFN0cikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZXJpdmF0aW9uIHBhdGggJHtwYXRofWApO1xuICB9XG4gIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgaWYgKGluZGV4LnRvU3RyaW5nKCkgIT09IGluZGV4U3RyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlcml2YXRpb24gcGF0aCAke3BhdGh9YCk7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGZpbmREZXNjcmlwdG9yRm9yRGVyaXZhdGlvblBhdGggdGhhdCB0cmllcyBtdWx0aXBsZSBkZXJpdmF0aW9uIHBhdGhzLlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIGRlcml2YXRpb25QYXRoc1xuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqL1xuZnVuY3Rpb24gZmluZERlc2NyaXB0b3JGb3JBbnlEZXJpdmF0aW9uUGF0aChcbiAgc2NyaXB0OiBCdWZmZXIsXG4gIGRlcml2YXRpb25QYXRoczogc3RyaW5nW10sXG4gIGRlc2NyaXB0b3JNYXA6IERlc2NyaXB0b3JNYXBcbik6IERlc2NyaXB0b3JXaXRoSW5kZXggfCB1bmRlZmluZWQge1xuICBjb25zdCBkZXJpdmF0aW9uSW5kZXhTZXQgPSBuZXcgU2V0KGRlcml2YXRpb25QYXRocy5tYXAoKHApID0+IGdldERlcml2YXRpb25JbmRleEZyb21QYXRoKHApKSk7XG4gIGZvciAoY29uc3QgaW5kZXggb2YgWy4uLmRlcml2YXRpb25JbmRleFNldF0pIHtcbiAgICBjb25zdCBkZXNjID0gZmluZERlc2NyaXB0b3JGb3JEZXJpdmF0aW9uSW5kZXgoc2NyaXB0LCBpbmRleCwgZGVzY3JpcHRvck1hcCk7XG4gICAgaWYgKGRlc2MpIHtcbiAgICAgIHJldHVybiBkZXNjO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnR5cGUgV2l0aEJpcDMyRGVyaXZhdGlvbiA9IHsgYmlwMzJEZXJpdmF0aW9uPzogeyBwYXRoOiBzdHJpbmcgfVtdIH07XG50eXBlIFdpdGhUYXBCaXAzMkRlcml2YXRpb24gPSB7IHRhcEJpcDMyRGVyaXZhdGlvbj86IHsgcGF0aDogc3RyaW5nIH1bXSB9O1xuXG5mdW5jdGlvbiBnZXREZXJpdmF0aW9uUGF0aHModjogV2l0aEJpcDMyRGVyaXZhdGlvbiB8IFdpdGhUYXBCaXAzMkRlcml2YXRpb24pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICgnYmlwMzJEZXJpdmF0aW9uJyBpbiB2ICYmIHYuYmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgcmV0dXJuIHYuYmlwMzJEZXJpdmF0aW9uLm1hcCgodikgPT4gdi5wYXRoKTtcbiAgfVxuICBpZiAoJ3RhcEJpcDMyRGVyaXZhdGlvbicgaW4gdiAmJiB2LnRhcEJpcDMyRGVyaXZhdGlvbikge1xuICAgIHJldHVybiB2LnRhcEJpcDMyRGVyaXZhdGlvbi5tYXAoKHYpID0+IHYucGF0aCkuZmlsdGVyKCh2KSA9PiB2ICE9PSAnJyAmJiB2ICE9PSAnbScpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHBhcmFtIGlucHV0XG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICogQHJldHVybnMgRGVzY3JpcHRvcldpdGhJbmRleCBmb3IgdGhlIGlucHV0IGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVzY3JpcHRvckZvcklucHV0KFxuICBpbnB1dDogUHNidElucHV0LFxuICBkZXNjcmlwdG9yTWFwOiBEZXNjcmlwdG9yTWFwXG4pOiBEZXNjcmlwdG9yV2l0aEluZGV4IHwgRGVzY3JpcHRvcldpdGhvdXRJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNjcmlwdCA9IGlucHV0LndpdG5lc3NVdHhvPy5zY3JpcHQ7XG4gIGlmICghc2NyaXB0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHNjcmlwdCcpO1xuICB9XG4gIGNvbnN0IGRlcml2YXRpb25QYXRocyA9IGdldERlcml2YXRpb25QYXRocyhpbnB1dCkgPz8gW107XG4gIHJldHVybiAoXG4gICAgZmluZERlc2NyaXB0b3JXaXRob3V0RGVyaXZhdGlvbihzY3JpcHQsIGRlc2NyaXB0b3JNYXApID8/XG4gICAgZmluZERlc2NyaXB0b3JGb3JBbnlEZXJpdmF0aW9uUGF0aChzY3JpcHQsIGRlcml2YXRpb25QYXRocywgZGVzY3JpcHRvck1hcClcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gc2NyaXB0IC0gdGhlIG91dHB1dCBzY3JpcHRcbiAqIEBwYXJhbSBvdXRwdXQgLSB0aGUgUFNCVCBvdXRwdXRcbiAqIEBwYXJhbSBkZXNjcmlwdG9yTWFwXG4gKiBAcmV0dXJucyBEZXNjcmlwdG9yV2l0aEluZGV4IGZvciB0aGUgb3V0cHV0IGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVzY3JpcHRvckZvck91dHB1dChcbiAgc2NyaXB0OiBCdWZmZXIsXG4gIG91dHB1dDogUHNidE91dHB1dCxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVzY3JpcHRvcldpdGhJbmRleCB8IERlc2NyaXB0b3JXaXRob3V0SW5kZXggfCB1bmRlZmluZWQge1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aHMgPSBnZXREZXJpdmF0aW9uUGF0aHMob3V0cHV0KTtcbiAgcmV0dXJuIChcbiAgICBmaW5kRGVzY3JpcHRvcldpdGhvdXREZXJpdmF0aW9uKHNjcmlwdCwgZGVzY3JpcHRvck1hcCkgPz9cbiAgICAoZGVyaXZhdGlvblBhdGhzID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IGZpbmREZXNjcmlwdG9yRm9yQW55RGVyaXZhdGlvblBhdGgoc2NyaXB0LCBkZXJpdmF0aW9uUGF0aHMsIGRlc2NyaXB0b3JNYXApKVxuICApO1xufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './assertSatisfiable';
|
|
2
|
+
export * from './createPsbt';
|
|
3
|
+
export * from './parse';
|
|
4
|
+
export * from './findDescriptors';
|
|
5
|
+
export * from './wrap';
|
|
6
|
+
export * from './sign';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXNzZXJ0U2F0aXNmaWFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGVQc2J0JztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9maW5kRGVzY3JpcHRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi93cmFwJztcbmV4cG9ydCAqIGZyb20gJy4vc2lnbic7XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-utxo';
|
|
2
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
3
|
+
import { DescriptorMap } from '../DescriptorMap';
|
|
4
|
+
export type ScriptId = {
|
|
5
|
+
descriptor: Descriptor;
|
|
6
|
+
index: number | undefined;
|
|
7
|
+
};
|
|
8
|
+
export type ParsedInput = {
|
|
9
|
+
address: string;
|
|
10
|
+
value: bigint;
|
|
11
|
+
scriptId: ScriptId;
|
|
12
|
+
};
|
|
13
|
+
export type ParsedOutput = {
|
|
14
|
+
address?: string;
|
|
15
|
+
script: Buffer;
|
|
16
|
+
value: bigint;
|
|
17
|
+
scriptId?: ScriptId;
|
|
18
|
+
};
|
|
19
|
+
export type ParsedDescriptorTransaction = {
|
|
20
|
+
inputs: ParsedInput[];
|
|
21
|
+
outputs: ParsedOutput[];
|
|
22
|
+
spendAmount: bigint;
|
|
23
|
+
minerFee: bigint;
|
|
24
|
+
virtualSize: number;
|
|
25
|
+
};
|
|
26
|
+
export declare function parse(psbt: utxolib.Psbt, descriptorMap: DescriptorMap, network: utxolib.Network): ParsedDescriptorTransaction;
|
|
27
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,MAAM,MAAM,QAAQ,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAMF,wBAAgB,KAAK,CACnB,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,2BAA2B,CA0C7B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { getVirtualSize } from '../VirtualSize';
|
|
3
|
+
import { findDescriptorForInput, findDescriptorForOutput } from './findDescriptors';
|
|
4
|
+
import { assertSatisfiable } from './assertSatisfiable';
|
|
5
|
+
function sum(...values) {
|
|
6
|
+
return values.reduce((a, b) => a + b, BigInt(0));
|
|
7
|
+
}
|
|
8
|
+
export function parse(psbt, descriptorMap, network) {
|
|
9
|
+
const inputs = psbt.data.inputs.map((input, inputIndex) => {
|
|
10
|
+
if (!input.witnessUtxo) {
|
|
11
|
+
throw new Error('invalid input: no witnessUtxo');
|
|
12
|
+
}
|
|
13
|
+
if (!input.witnessUtxo.value) {
|
|
14
|
+
throw new Error('invalid input: no value');
|
|
15
|
+
}
|
|
16
|
+
const scriptId = findDescriptorForInput(input, descriptorMap);
|
|
17
|
+
if (!scriptId) {
|
|
18
|
+
throw new Error('invalid input: no descriptor found');
|
|
19
|
+
}
|
|
20
|
+
assertSatisfiable(psbt, inputIndex, scriptId.descriptor);
|
|
21
|
+
return {
|
|
22
|
+
address: utxolib.address.fromOutputScript(input.witnessUtxo.script, network),
|
|
23
|
+
value: input.witnessUtxo.value,
|
|
24
|
+
scriptId,
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
const outputs = psbt.txOutputs.map((output, i) => {
|
|
28
|
+
if (output.value === undefined) {
|
|
29
|
+
throw new Error('invalid output: no value');
|
|
30
|
+
}
|
|
31
|
+
const scriptId = findDescriptorForOutput(output.script, psbt.data.outputs[i], descriptorMap);
|
|
32
|
+
return {
|
|
33
|
+
address: output.address,
|
|
34
|
+
script: output.script,
|
|
35
|
+
value: output.value,
|
|
36
|
+
scriptId,
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
const inputAmount = sum(...inputs.map((input) => input.value));
|
|
40
|
+
const outputSum = sum(...outputs.map((output) => output.value));
|
|
41
|
+
const spendAmount = sum(...outputs.filter((output) => !output.scriptId).map((output) => output.value));
|
|
42
|
+
const minerFee = inputAmount - outputSum;
|
|
43
|
+
return {
|
|
44
|
+
inputs,
|
|
45
|
+
outputs,
|
|
46
|
+
spendAmount,
|
|
47
|
+
minerFee,
|
|
48
|
+
virtualSize: getVirtualSize({ inputs: inputs.map((i) => i.scriptId.descriptor), outputs }),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L3BhcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0sc0JBQXNCLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBeUJ4RCxTQUFTLEdBQUcsQ0FBQyxHQUFHLE1BQWdCO0lBQzlCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQ25CLElBQWtCLEVBQ2xCLGFBQTRCLEVBQzVCLE9BQXdCO0lBRXhCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQWUsRUFBRTtRQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQzVFLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFDOUIsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBZ0IsRUFBRTtRQUM3RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzdGLE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RyxNQUFNLFFBQVEsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQ3pDLE9BQU87UUFDTCxNQUFNO1FBQ04sT0FBTztRQUNQLFdBQVc7UUFDWCxRQUFRO1FBQ1IsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0tBQzNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCB7IERlc2NyaXB0b3JNYXAgfSBmcm9tICcuLi9EZXNjcmlwdG9yTWFwJztcbmltcG9ydCB7IGdldFZpcnR1YWxTaXplIH0gZnJvbSAnLi4vVmlydHVhbFNpemUnO1xuXG5pbXBvcnQgeyBmaW5kRGVzY3JpcHRvckZvcklucHV0LCBmaW5kRGVzY3JpcHRvckZvck91dHB1dCB9IGZyb20gJy4vZmluZERlc2NyaXB0b3JzJztcbmltcG9ydCB7IGFzc2VydFNhdGlzZmlhYmxlIH0gZnJvbSAnLi9hc3NlcnRTYXRpc2ZpYWJsZSc7XG5cbmV4cG9ydCB0eXBlIFNjcmlwdElkID0geyBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yOyBpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkIH07XG5cbmV4cG9ydCB0eXBlIFBhcnNlZElucHV0ID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHZhbHVlOiBiaWdpbnQ7XG4gIHNjcmlwdElkOiBTY3JpcHRJZDtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnNlZE91dHB1dCA9IHtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgc2NyaXB0OiBCdWZmZXI7XG4gIHZhbHVlOiBiaWdpbnQ7XG4gIHNjcmlwdElkPzogU2NyaXB0SWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb24gPSB7XG4gIGlucHV0czogUGFyc2VkSW5wdXRbXTtcbiAgb3V0cHV0czogUGFyc2VkT3V0cHV0W107XG4gIHNwZW5kQW1vdW50OiBiaWdpbnQ7XG4gIG1pbmVyRmVlOiBiaWdpbnQ7XG4gIHZpcnR1YWxTaXplOiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBzdW0oLi4udmFsdWVzOiBiaWdpbnRbXSk6IGJpZ2ludCB7XG4gIHJldHVybiB2YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgQmlnSW50KDApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKFxuICBwc2J0OiB1dHhvbGliLlBzYnQsXG4gIGRlc2NyaXB0b3JNYXA6IERlc2NyaXB0b3JNYXAsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uIHtcbiAgY29uc3QgaW5wdXRzID0gcHNidC5kYXRhLmlucHV0cy5tYXAoKGlucHV0LCBpbnB1dEluZGV4KTogUGFyc2VkSW5wdXQgPT4ge1xuICAgIGlmICghaW5wdXQud2l0bmVzc1V0eG8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dDogbm8gd2l0bmVzc1V0eG8nKTtcbiAgICB9XG4gICAgaWYgKCFpbnB1dC53aXRuZXNzVXR4by52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlucHV0OiBubyB2YWx1ZScpO1xuICAgIH1cbiAgICBjb25zdCBzY3JpcHRJZCA9IGZpbmREZXNjcmlwdG9yRm9ySW5wdXQoaW5wdXQsIGRlc2NyaXB0b3JNYXApO1xuICAgIGlmICghc2NyaXB0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dDogbm8gZGVzY3JpcHRvciBmb3VuZCcpO1xuICAgIH1cbiAgICBhc3NlcnRTYXRpc2ZpYWJsZShwc2J0LCBpbnB1dEluZGV4LCBzY3JpcHRJZC5kZXNjcmlwdG9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoaW5wdXQud2l0bmVzc1V0eG8uc2NyaXB0LCBuZXR3b3JrKSxcbiAgICAgIHZhbHVlOiBpbnB1dC53aXRuZXNzVXR4by52YWx1ZSxcbiAgICAgIHNjcmlwdElkLFxuICAgIH07XG4gIH0pO1xuICBjb25zdCBvdXRwdXRzID0gcHNidC50eE91dHB1dHMubWFwKChvdXRwdXQsIGkpOiBQYXJzZWRPdXRwdXQgPT4ge1xuICAgIGlmIChvdXRwdXQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG91dHB1dDogbm8gdmFsdWUnKTtcbiAgICB9XG4gICAgY29uc3Qgc2NyaXB0SWQgPSBmaW5kRGVzY3JpcHRvckZvck91dHB1dChvdXRwdXQuc2NyaXB0LCBwc2J0LmRhdGEub3V0cHV0c1tpXSwgZGVzY3JpcHRvck1hcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgc2NyaXB0OiBvdXRwdXQuc2NyaXB0LFxuICAgICAgdmFsdWU6IG91dHB1dC52YWx1ZSxcbiAgICAgIHNjcmlwdElkLFxuICAgIH07XG4gIH0pO1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHN1bSguLi5pbnB1dHMubWFwKChpbnB1dCkgPT4gaW5wdXQudmFsdWUpKTtcbiAgY29uc3Qgb3V0cHV0U3VtID0gc3VtKC4uLm91dHB1dHMubWFwKChvdXRwdXQpID0+IG91dHB1dC52YWx1ZSkpO1xuICBjb25zdCBzcGVuZEFtb3VudCA9IHN1bSguLi5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiAhb3V0cHV0LnNjcmlwdElkKS5tYXAoKG91dHB1dCkgPT4gb3V0cHV0LnZhbHVlKSk7XG4gIGNvbnN0IG1pbmVyRmVlID0gaW5wdXRBbW91bnQgLSBvdXRwdXRTdW07XG4gIHJldHVybiB7XG4gICAgaW5wdXRzLFxuICAgIG91dHB1dHMsXG4gICAgc3BlbmRBbW91bnQsXG4gICAgbWluZXJGZWUsXG4gICAgdmlydHVhbFNpemU6IGdldFZpcnR1YWxTaXplKHsgaW5wdXRzOiBpbnB1dHMubWFwKChpKSA9PiBpLnNjcmlwdElkLmRlc2NyaXB0b3IpLCBvdXRwdXRzIH0pLFxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BIP32Interface, ECPairInterface } from '@bitgo-beta/secp256k1';
|
|
2
|
+
import { Psbt as WasmPsbt } from '@bitgo/wasm-utxo';
|
|
3
|
+
/** These can be replaced when @bitgo/wasm-utxo is updated */
|
|
4
|
+
export type SignPsbtInputResult = {
|
|
5
|
+
Schnorr: string[];
|
|
6
|
+
} | {
|
|
7
|
+
Ecdsa: string[];
|
|
8
|
+
};
|
|
9
|
+
export type SignPsbtResult = {
|
|
10
|
+
[inputIndex: number]: SignPsbtInputResult;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* @param signResult
|
|
14
|
+
* @return the number of new signatures created by the signResult for a single input
|
|
15
|
+
*/
|
|
16
|
+
export declare function getNewSignatureCountForInput(signResult: SignPsbtInputResult): number;
|
|
17
|
+
/**
|
|
18
|
+
* @param signResult
|
|
19
|
+
* @return the number of new signatures created by the signResult
|
|
20
|
+
*/
|
|
21
|
+
export declare function getNewSignatureCount(signResult: SignPsbtResult): number;
|
|
22
|
+
type Key = Buffer | BIP32Interface | ECPairInterface;
|
|
23
|
+
/** Convenience function to sign a PSBT with a key */
|
|
24
|
+
export declare function signWithKey(psbt: WasmPsbt, key: Key): SignPsbtResult;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/sign.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEpD,6DAA6D;AAC7D,MAAM,MAAM,mBAAmB,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAAC;CAC3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAQpF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAEvE;AAED,KAAK,GAAG,GAAG,MAAM,GAAG,cAAc,GAAG,eAAe,CAAC;AAErD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,cAAc,CAUpE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import assert from 'assert';
|
|
2
|
+
/**
|
|
3
|
+
* @param signResult
|
|
4
|
+
* @return the number of new signatures created by the signResult for a single input
|
|
5
|
+
*/
|
|
6
|
+
export function getNewSignatureCountForInput(signResult) {
|
|
7
|
+
if ('Schnorr' in signResult) {
|
|
8
|
+
return signResult.Schnorr.length;
|
|
9
|
+
}
|
|
10
|
+
if ('Ecdsa' in signResult) {
|
|
11
|
+
return signResult.Ecdsa.length;
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`Unknown signature type ${Object.keys(signResult).join(', ')}`);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @param signResult
|
|
17
|
+
* @return the number of new signatures created by the signResult
|
|
18
|
+
*/
|
|
19
|
+
export function getNewSignatureCount(signResult) {
|
|
20
|
+
return Object.values(signResult).reduce((sum, signatures) => sum + getNewSignatureCountForInput(signatures), 0);
|
|
21
|
+
}
|
|
22
|
+
/** Convenience function to sign a PSBT with a key */
|
|
23
|
+
export function signWithKey(psbt, key) {
|
|
24
|
+
// we need to do casting here because the type definitions in wasm-miniscript are a little bit buggy
|
|
25
|
+
if (Buffer.isBuffer(key)) {
|
|
26
|
+
return psbt.signWithPrv(key);
|
|
27
|
+
}
|
|
28
|
+
if ('toBase58' in key) {
|
|
29
|
+
return psbt.signWithXprv(key.toBase58());
|
|
30
|
+
}
|
|
31
|
+
assert(key.privateKey);
|
|
32
|
+
return psbt.signWithPrv(key.privateKey);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL3BzYnQvc2lnbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFXNUI7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLFVBQStCO0lBQzFFLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVCLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQTBCO0lBQzdELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsNEJBQTRCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEgsQ0FBQztBQUlELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWMsRUFBRSxHQUFRO0lBQ2xELG9HQUFvRztJQUNwRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUE4QixDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUE4QixDQUFDO0lBQ3hFLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUE4QixDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBFQ1BhaXJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgUHNidCBhcyBXYXNtUHNidCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG4vKiogVGhlc2UgY2FuIGJlIHJlcGxhY2VkIHdoZW4gQGJpdGdvL3dhc20tdXR4byBpcyB1cGRhdGVkICovXG5leHBvcnQgdHlwZSBTaWduUHNidElucHV0UmVzdWx0ID0geyBTY2hub3JyOiBzdHJpbmdbXSB9IHwgeyBFY2RzYTogc3RyaW5nW10gfTtcbmV4cG9ydCB0eXBlIFNpZ25Qc2J0UmVzdWx0ID0ge1xuICBbaW5wdXRJbmRleDogbnVtYmVyXTogU2lnblBzYnRJbnB1dFJlc3VsdDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHNpZ25SZXN1bHRcbiAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBuZXcgc2lnbmF0dXJlcyBjcmVhdGVkIGJ5IHRoZSBzaWduUmVzdWx0IGZvciBhIHNpbmdsZSBpbnB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3U2lnbmF0dXJlQ291bnRGb3JJbnB1dChzaWduUmVzdWx0OiBTaWduUHNidElucHV0UmVzdWx0KTogbnVtYmVyIHtcbiAgaWYgKCdTY2hub3JyJyBpbiBzaWduUmVzdWx0KSB7XG4gICAgcmV0dXJuIHNpZ25SZXN1bHQuU2Nobm9yci5sZW5ndGg7XG4gIH1cbiAgaWYgKCdFY2RzYScgaW4gc2lnblJlc3VsdCkge1xuICAgIHJldHVybiBzaWduUmVzdWx0LkVjZHNhLmxlbmd0aDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc2lnbmF0dXJlIHR5cGUgJHtPYmplY3Qua2V5cyhzaWduUmVzdWx0KS5qb2luKCcsICcpfWApO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzaWduUmVzdWx0XG4gKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbmV3IHNpZ25hdHVyZXMgY3JlYXRlZCBieSB0aGUgc2lnblJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3U2lnbmF0dXJlQ291bnQoc2lnblJlc3VsdDogU2lnblBzYnRSZXN1bHQpOiBudW1iZXIge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzaWduUmVzdWx0KS5yZWR1Y2UoKHN1bSwgc2lnbmF0dXJlcykgPT4gc3VtICsgZ2V0TmV3U2lnbmF0dXJlQ291bnRGb3JJbnB1dChzaWduYXR1cmVzKSwgMCk7XG59XG5cbnR5cGUgS2V5ID0gQnVmZmVyIHwgQklQMzJJbnRlcmZhY2UgfCBFQ1BhaXJJbnRlcmZhY2U7XG5cbi8qKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzaWduIGEgUFNCVCB3aXRoIGEga2V5ICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbldpdGhLZXkocHNidDogV2FzbVBzYnQsIGtleTogS2V5KTogU2lnblBzYnRSZXN1bHQge1xuICAvLyB3ZSBuZWVkIHRvIGRvIGNhc3RpbmcgaGVyZSBiZWNhdXNlIHRoZSB0eXBlIGRlZmluaXRpb25zIGluIHdhc20tbWluaXNjcmlwdCBhcmUgYSBsaXR0bGUgYml0IGJ1Z2d5XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoa2V5KSkge1xuICAgIHJldHVybiBwc2J0LnNpZ25XaXRoUHJ2KGtleSkgYXMgdW5rbm93biBhcyBTaWduUHNidFJlc3VsdDtcbiAgfVxuICBpZiAoJ3RvQmFzZTU4JyBpbiBrZXkpIHtcbiAgICByZXR1cm4gcHNidC5zaWduV2l0aFhwcnYoa2V5LnRvQmFzZTU4KCkpIGFzIHVua25vd24gYXMgU2lnblBzYnRSZXN1bHQ7XG4gIH1cbiAgYXNzZXJ0KGtleS5wcml2YXRlS2V5KTtcbiAgcmV0dXJuIHBzYnQuc2lnbldpdGhQcnYoa2V5LnByaXZhdGVLZXkpIGFzIHVua25vd24gYXMgU2lnblBzYnRSZXN1bHQ7XG59XG4iXX0=
|