@btc-vision/bitcoin 6.5.6 → 7.0.0-alpha.0
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/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
- package/benchmark/psbt-2000-inputs.bench.ts +178 -0
- package/benchmark/signing.bench.ts +147 -0
- package/browser/address.d.ts +56 -9
- package/browser/address.d.ts.map +1 -0
- package/browser/bech32utils.d.ts +9 -1
- package/browser/bech32utils.d.ts.map +1 -0
- package/browser/bip66.d.ts +11 -6
- package/browser/bip66.d.ts.map +1 -0
- package/browser/block.d.ts +117 -11
- package/browser/block.d.ts.map +1 -0
- package/browser/branded.d.ts +20 -0
- package/browser/branded.d.ts.map +1 -0
- package/browser/crypto/crypto.d.ts +1 -0
- package/browser/crypto/crypto.d.ts.map +1 -0
- package/browser/crypto.d.ts +46 -7
- package/browser/crypto.d.ts.map +1 -0
- package/browser/ecc/context.d.ts +129 -0
- package/browser/ecc/context.d.ts.map +1 -0
- package/browser/ecc/index.d.ts +11 -0
- package/browser/ecc/index.d.ts.map +1 -0
- package/browser/ecc/types.d.ts +128 -0
- package/browser/ecc/types.d.ts.map +1 -0
- package/browser/ecpair.d.ts +99 -0
- package/browser/errors.d.ts +124 -0
- package/browser/errors.d.ts.map +1 -0
- package/browser/index.d.ts +32 -5
- package/browser/index.d.ts.map +1 -0
- package/browser/index.js +12482 -101
- package/browser/io/BinaryReader.d.ts +276 -0
- package/browser/io/BinaryReader.d.ts.map +1 -0
- package/browser/io/BinaryWriter.d.ts +391 -0
- package/browser/io/BinaryWriter.d.ts.map +1 -0
- package/browser/io/MemoryPool.d.ts +220 -0
- package/browser/io/MemoryPool.d.ts.map +1 -0
- package/browser/io/base64.d.ts +13 -0
- package/browser/io/base64.d.ts.map +1 -0
- package/browser/io/hex.d.ts +67 -0
- package/browser/io/hex.d.ts.map +1 -0
- package/browser/io/index.d.ts +17 -0
- package/browser/io/index.d.ts.map +1 -0
- package/browser/io/utils.d.ts +199 -0
- package/browser/io/utils.d.ts.map +1 -0
- package/browser/merkle.d.ts +10 -1
- package/browser/merkle.d.ts.map +1 -0
- package/browser/networks.d.ts +70 -9
- package/browser/networks.d.ts.map +1 -0
- package/browser/opcodes.d.ts +1 -0
- package/browser/opcodes.d.ts.map +1 -0
- package/browser/payments/bip341.d.ts +35 -9
- package/browser/payments/bip341.d.ts.map +1 -0
- package/browser/payments/embed.d.ts +112 -1
- package/browser/payments/embed.d.ts.map +1 -0
- package/browser/payments/index.d.ts +17 -10
- package/browser/payments/index.d.ts.map +1 -0
- package/browser/payments/p2ms.d.ts +150 -0
- package/browser/payments/p2ms.d.ts.map +1 -0
- package/browser/payments/p2op.d.ts +150 -24
- package/browser/payments/p2op.d.ts.map +1 -0
- package/browser/payments/p2pk.d.ts +154 -1
- package/browser/payments/p2pk.d.ts.map +1 -0
- package/browser/payments/p2pkh.d.ts +176 -1
- package/browser/payments/p2pkh.d.ts.map +1 -0
- package/browser/payments/p2sh.d.ts +150 -1
- package/browser/payments/p2sh.d.ts.map +1 -0
- package/browser/payments/p2tr.d.ts +185 -1
- package/browser/payments/p2tr.d.ts.map +1 -0
- package/browser/payments/p2wpkh.d.ts +161 -1
- package/browser/payments/p2wpkh.d.ts.map +1 -0
- package/browser/payments/p2wsh.d.ts +146 -1
- package/browser/payments/p2wsh.d.ts.map +1 -0
- package/browser/payments/types.d.ts +94 -64
- package/browser/payments/types.d.ts.map +1 -0
- package/browser/psbt/bip371.d.ts +34 -8
- package/browser/psbt/bip371.d.ts.map +1 -0
- package/browser/psbt/psbtutils.d.ts +56 -16
- package/browser/psbt/psbtutils.d.ts.map +1 -0
- package/browser/psbt/types.d.ts +245 -0
- package/browser/psbt/types.d.ts.map +1 -0
- package/browser/psbt/utils.d.ts +64 -0
- package/browser/psbt/utils.d.ts.map +1 -0
- package/browser/psbt/validation.d.ts +84 -0
- package/browser/psbt/validation.d.ts.map +1 -0
- package/browser/psbt.d.ts +82 -118
- package/browser/psbt.d.ts.map +1 -0
- package/browser/pubkey.d.ts +27 -6
- package/browser/pubkey.d.ts.map +1 -0
- package/browser/push_data.d.ts +24 -2
- package/browser/push_data.d.ts.map +1 -0
- package/browser/script.d.ts +33 -8
- package/browser/script.d.ts.map +1 -0
- package/browser/script_number.d.ts +17 -0
- package/browser/script_number.d.ts.map +1 -0
- package/browser/script_signature.d.ts +23 -5
- package/browser/script_signature.d.ts.map +1 -0
- package/browser/transaction.d.ts +160 -18
- package/browser/transaction.d.ts.map +1 -0
- package/browser/types.d.ts +36 -38
- package/browser/types.d.ts.map +1 -0
- package/browser/workers/WorkerSigningPool.d.ts +143 -0
- package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
- package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
- package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
- package/browser/workers/ecc-bundle.d.ts +25 -0
- package/browser/workers/ecc-bundle.d.ts.map +1 -0
- package/browser/workers/index.d.ts +91 -0
- package/browser/workers/index.d.ts.map +1 -0
- package/browser/workers/psbt-parallel.d.ts +88 -0
- package/browser/workers/psbt-parallel.d.ts.map +1 -0
- package/browser/workers/signing-worker.d.ts +37 -0
- package/browser/workers/signing-worker.d.ts.map +1 -0
- package/browser/workers/types.d.ts +365 -0
- package/browser/workers/types.d.ts.map +1 -0
- package/build/address.d.ts +57 -10
- package/build/address.d.ts.map +1 -0
- package/build/address.js +80 -24
- package/build/address.js.map +1 -0
- package/build/bech32utils.d.ts +9 -1
- package/build/bech32utils.d.ts.map +1 -0
- package/build/bech32utils.js +10 -2
- package/build/bech32utils.js.map +1 -0
- package/build/bip66.d.ts +11 -6
- package/build/bip66.d.ts.map +1 -0
- package/build/bip66.js +32 -3
- package/build/bip66.js.map +1 -0
- package/build/block.d.ts +117 -11
- package/build/block.d.ts.map +1 -0
- package/build/block.js +204 -72
- package/build/block.js.map +1 -0
- package/build/branded.d.ts +20 -0
- package/build/branded.d.ts.map +1 -0
- package/build/branded.js +7 -0
- package/build/branded.js.map +1 -0
- package/build/crypto/crypto.d.ts +1 -0
- package/build/crypto/crypto.d.ts.map +1 -0
- package/build/crypto/crypto.js +1 -0
- package/build/crypto/crypto.js.map +1 -0
- package/build/crypto.d.ts +46 -7
- package/build/crypto.d.ts.map +1 -0
- package/build/crypto.js +65 -20
- package/build/crypto.js.map +1 -0
- package/build/ecc/context.d.ts +135 -0
- package/build/ecc/context.d.ts.map +1 -0
- package/build/ecc/context.js +232 -0
- package/build/ecc/context.js.map +1 -0
- package/build/ecc/index.d.ts +11 -0
- package/build/ecc/index.d.ts.map +1 -0
- package/build/ecc/index.js +11 -0
- package/build/ecc/index.js.map +1 -0
- package/build/ecc/types.d.ts +134 -0
- package/build/ecc/types.d.ts.map +1 -0
- package/build/ecc/types.js +8 -0
- package/build/ecc/types.js.map +1 -0
- package/build/errors.d.ts +124 -0
- package/build/errors.d.ts.map +1 -0
- package/build/errors.js +155 -0
- package/build/errors.js.map +1 -0
- package/build/index.d.ts +32 -5
- package/build/index.d.ts.map +1 -0
- package/build/index.js +26 -3
- package/build/index.js.map +1 -0
- package/build/io/BinaryReader.d.ts +276 -0
- package/build/io/BinaryReader.d.ts.map +1 -0
- package/build/io/BinaryReader.js +425 -0
- package/build/io/BinaryReader.js.map +1 -0
- package/build/io/BinaryWriter.d.ts +391 -0
- package/build/io/BinaryWriter.d.ts.map +1 -0
- package/build/io/BinaryWriter.js +611 -0
- package/build/io/BinaryWriter.js.map +1 -0
- package/build/io/MemoryPool.d.ts +220 -0
- package/build/io/MemoryPool.d.ts.map +1 -0
- package/build/io/MemoryPool.js +309 -0
- package/build/io/MemoryPool.js.map +1 -0
- package/build/io/base64.d.ts +13 -0
- package/build/io/base64.d.ts.map +1 -0
- package/build/io/base64.js +20 -0
- package/build/io/base64.js.map +1 -0
- package/build/io/hex.d.ts +67 -0
- package/build/io/hex.d.ts.map +1 -0
- package/build/io/hex.js +138 -0
- package/build/io/hex.js.map +1 -0
- package/build/io/index.d.ts +17 -0
- package/build/io/index.d.ts.map +1 -0
- package/build/io/index.js +23 -0
- package/build/io/index.js.map +1 -0
- package/build/io/utils.d.ts +199 -0
- package/build/io/utils.d.ts.map +1 -0
- package/build/io/utils.js +271 -0
- package/build/io/utils.js.map +1 -0
- package/build/merkle.d.ts +10 -1
- package/build/merkle.d.ts.map +1 -0
- package/build/merkle.js +12 -1
- package/build/merkle.js.map +1 -0
- package/build/networks.d.ts +70 -9
- package/build/networks.d.ts.map +1 -0
- package/build/networks.js +90 -4
- package/build/networks.js.map +1 -0
- package/build/opcodes.d.ts +1 -0
- package/build/opcodes.d.ts.map +1 -0
- package/build/opcodes.js +1 -0
- package/build/opcodes.js.map +1 -0
- package/build/payments/bip341.d.ts +36 -9
- package/build/payments/bip341.d.ts.map +1 -0
- package/build/payments/bip341.js +35 -15
- package/build/payments/bip341.js.map +1 -0
- package/build/payments/embed.d.ts +120 -1
- package/build/payments/embed.d.ts.map +1 -0
- package/build/payments/embed.js +215 -34
- package/build/payments/embed.js.map +1 -0
- package/build/payments/index.d.ts +17 -10
- package/build/payments/index.d.ts.map +1 -0
- package/build/payments/index.js +20 -10
- package/build/payments/index.js.map +1 -0
- package/build/payments/p2ms.d.ts +159 -1
- package/build/payments/p2ms.d.ts.map +1 -0
- package/build/payments/p2ms.js +427 -108
- package/build/payments/p2ms.js.map +1 -0
- package/build/payments/p2op.d.ts +158 -24
- package/build/payments/p2op.d.ts.map +1 -0
- package/build/payments/p2op.js +379 -93
- package/build/payments/p2op.js.map +1 -0
- package/build/payments/p2pk.d.ts +162 -1
- package/build/payments/p2pk.d.ts.map +1 -0
- package/build/payments/p2pk.js +327 -58
- package/build/payments/p2pk.js.map +1 -0
- package/build/payments/p2pkh.d.ts +185 -1
- package/build/payments/p2pkh.d.ts.map +1 -0
- package/build/payments/p2pkh.js +467 -114
- package/build/payments/p2pkh.js.map +1 -0
- package/build/payments/p2sh.d.ts +159 -1
- package/build/payments/p2sh.d.ts.map +1 -0
- package/build/payments/p2sh.js +500 -152
- package/build/payments/p2sh.js.map +1 -0
- package/build/payments/p2tr.d.ts +193 -1
- package/build/payments/p2tr.d.ts.map +1 -0
- package/build/payments/p2tr.js +592 -174
- package/build/payments/p2tr.js.map +1 -0
- package/build/payments/p2wpkh.d.ts +170 -1
- package/build/payments/p2wpkh.d.ts.map +1 -0
- package/build/payments/p2wpkh.js +429 -104
- package/build/payments/p2wpkh.js.map +1 -0
- package/build/payments/p2wsh.d.ts +155 -1
- package/build/payments/p2wsh.d.ts.map +1 -0
- package/build/payments/p2wsh.js +466 -144
- package/build/payments/p2wsh.js.map +1 -0
- package/build/payments/types.d.ts +98 -64
- package/build/payments/types.d.ts.map +1 -0
- package/build/payments/types.js +17 -13
- package/build/payments/types.js.map +1 -0
- package/build/psbt/bip371.d.ts +35 -9
- package/build/psbt/bip371.d.ts.map +1 -0
- package/build/psbt/bip371.js +113 -28
- package/build/psbt/bip371.js.map +1 -0
- package/build/psbt/psbtutils.d.ts +56 -16
- package/build/psbt/psbtutils.d.ts.map +1 -0
- package/build/psbt/psbtutils.js +71 -16
- package/build/psbt/psbtutils.js.map +1 -0
- package/build/psbt/types.d.ts +249 -0
- package/build/psbt/types.d.ts.map +1 -0
- package/build/psbt/types.js +6 -0
- package/build/psbt/types.js.map +1 -0
- package/build/psbt/utils.d.ts +68 -0
- package/build/psbt/utils.d.ts.map +1 -0
- package/build/psbt/utils.js +171 -0
- package/build/psbt/utils.js.map +1 -0
- package/build/psbt/validation.d.ts +88 -0
- package/build/psbt/validation.d.ts.map +1 -0
- package/build/psbt/validation.js +149 -0
- package/build/psbt/validation.js.map +1 -0
- package/build/psbt.d.ts +84 -120
- package/build/psbt.d.ts.map +1 -0
- package/build/psbt.js +411 -412
- package/build/psbt.js.map +1 -0
- package/build/pubkey.d.ts +27 -6
- package/build/pubkey.d.ts.map +1 -0
- package/build/pubkey.js +36 -12
- package/build/pubkey.js.map +1 -0
- package/build/push_data.d.ts +24 -2
- package/build/push_data.d.ts.map +1 -0
- package/build/push_data.js +44 -12
- package/build/push_data.js.map +1 -0
- package/build/script.d.ts +33 -8
- package/build/script.d.ts.map +1 -0
- package/build/script.js +100 -36
- package/build/script.js.map +1 -0
- package/build/script_number.d.ts +17 -0
- package/build/script_number.d.ts.map +1 -0
- package/build/script_number.js +19 -0
- package/build/script_number.js.map +1 -0
- package/build/script_signature.d.ts +23 -5
- package/build/script_signature.d.ts.map +1 -0
- package/build/script_signature.js +48 -15
- package/build/script_signature.js.map +1 -0
- package/build/transaction.d.ts +160 -18
- package/build/transaction.d.ts.map +1 -0
- package/build/transaction.js +443 -176
- package/build/transaction.js.map +1 -0
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/types.d.ts +36 -38
- package/build/types.d.ts.map +1 -0
- package/build/types.js +175 -57
- package/build/types.js.map +1 -0
- package/build/workers/WorkerSigningPool.d.ts +174 -0
- package/build/workers/WorkerSigningPool.d.ts.map +1 -0
- package/build/workers/WorkerSigningPool.js +553 -0
- package/build/workers/WorkerSigningPool.js.map +1 -0
- package/build/workers/WorkerSigningPool.node.d.ts +124 -0
- package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
- package/build/workers/WorkerSigningPool.node.js +753 -0
- package/build/workers/WorkerSigningPool.node.js.map +1 -0
- package/build/workers/ecc-bundle.d.ts +25 -0
- package/build/workers/ecc-bundle.d.ts.map +1 -0
- package/build/workers/ecc-bundle.js +25 -0
- package/build/workers/ecc-bundle.js.map +1 -0
- package/build/workers/index.d.ts +91 -0
- package/build/workers/index.d.ts.map +1 -0
- package/build/workers/index.js +114 -0
- package/build/workers/index.js.map +1 -0
- package/build/workers/psbt-parallel.d.ts +117 -0
- package/build/workers/psbt-parallel.d.ts.map +1 -0
- package/build/workers/psbt-parallel.js +233 -0
- package/build/workers/psbt-parallel.js.map +1 -0
- package/build/workers/signing-worker.d.ts +37 -0
- package/build/workers/signing-worker.d.ts.map +1 -0
- package/build/workers/signing-worker.js +350 -0
- package/build/workers/signing-worker.js.map +1 -0
- package/build/workers/types.d.ts +365 -0
- package/build/workers/types.d.ts.map +1 -0
- package/build/workers/types.js +60 -0
- package/build/workers/types.js.map +1 -0
- package/package.json +66 -8
- package/scripts/bundle-ecc.ts +111 -0
- package/src/address.ts +81 -44
- package/src/bech32utils.ts +3 -3
- package/src/bip66.ts +34 -24
- package/src/block.ts +196 -84
- package/src/branded.ts +18 -0
- package/src/crypto.ts +64 -26
- package/src/ecc/context.ts +277 -0
- package/src/ecc/index.ts +14 -0
- package/src/ecc/types.ts +154 -0
- package/src/ecpair.d.ts +99 -0
- package/src/errors.ts +163 -0
- package/src/index.ts +113 -9
- package/src/io/BinaryReader.ts +461 -0
- package/src/io/BinaryWriter.ts +696 -0
- package/src/io/MemoryPool.ts +343 -0
- package/src/io/base64.ts +20 -0
- package/src/io/hex.ts +155 -0
- package/src/io/index.ts +41 -0
- package/src/io/utils.ts +283 -0
- package/src/merkle.ts +14 -9
- package/src/networks.ts +9 -9
- package/src/payments/bip341.ts +34 -33
- package/src/payments/embed.ts +244 -41
- package/src/payments/index.ts +12 -10
- package/src/payments/p2ms.ts +490 -118
- package/src/payments/p2op.ts +431 -133
- package/src/payments/p2pk.ts +370 -72
- package/src/payments/p2pkh.ts +524 -130
- package/src/payments/p2sh.ts +572 -172
- package/src/payments/p2tr.ts +686 -194
- package/src/payments/p2wpkh.ts +484 -107
- package/src/payments/p2wsh.ts +526 -164
- package/src/payments/types.ts +80 -66
- package/src/psbt/bip371.ts +68 -51
- package/src/psbt/psbtutils.ts +39 -40
- package/src/psbt/types.ts +331 -0
- package/src/psbt/utils.ts +188 -0
- package/src/psbt/validation.ts +192 -0
- package/src/psbt.ts +566 -809
- package/src/pubkey.ts +22 -23
- package/src/push_data.ts +18 -16
- package/src/script.ts +82 -64
- package/src/script_number.ts +6 -6
- package/src/script_signature.ts +33 -36
- package/src/transaction.ts +458 -238
- package/src/types.ts +231 -100
- package/src/workers/WorkerSigningPool.node.ts +887 -0
- package/src/workers/WorkerSigningPool.ts +670 -0
- package/src/workers/ecc-bundle.ts +26 -0
- package/src/workers/index.ts +165 -0
- package/src/workers/psbt-parallel.ts +332 -0
- package/src/workers/signing-worker.ts +353 -0
- package/src/workers/types.ts +413 -0
- package/test/address.spec.ts +9 -6
- package/test/bitcoin.core.spec.ts +16 -17
- package/test/block.spec.ts +8 -7
- package/test/bufferutils.spec.ts +228 -214
- package/test/crypto.spec.ts +19 -11
- package/test/fixtures/p2pk.json +0 -8
- package/test/fixtures/p2pkh.json +1 -1
- package/test/fixtures/p2sh.json +1 -1
- package/test/fixtures/script.json +1 -1
- package/test/fixtures/transaction.json +2 -2
- package/test/integration/_regtest.ts +25 -0
- package/test/integration/addresses.spec.ts +4 -3
- package/test/integration/bip32.spec.ts +2 -1
- package/test/integration/blocks.spec.ts +1 -1
- package/test/integration/cltv.spec.ts +18 -16
- package/test/integration/csv.spec.ts +37 -64
- package/test/integration/payments.spec.ts +5 -3
- package/test/integration/taproot.spec.ts +76 -83
- package/test/integration/transactions.spec.ts +38 -35
- package/test/payments.spec.ts +35 -13
- package/test/payments.utils.ts +17 -16
- package/test/psbt.spec.ts +111 -100
- package/test/script.spec.ts +11 -10
- package/test/script_signature.spec.ts +9 -11
- package/test/taproot-cache.spec.ts +694 -0
- package/test/transaction.spec.ts +32 -40
- package/test/types.spec.ts +74 -29
- package/test/workers-pool.spec.ts +963 -0
- package/test/workers-signing.spec.ts +635 -0
- package/test/workers.spec.ts +1390 -0
- package/tsconfig.base.json +34 -18
- package/tsconfig.browser.json +15 -0
- package/tsconfig.build.json +5 -0
- package/tsconfig.json +5 -14
- package/vite.config.browser.ts +3 -42
- package/vitest.config.integration.ts +2 -0
- package/browser/bufferutils.d.ts +0 -34
- package/browser/chunks/crypto-BhCpKpek.js +0 -2033
- package/browser/chunks/payments-B1wlSccx.js +0 -1089
- package/browser/chunks/psbt-BCNk7JUx.js +0 -4055
- package/browser/chunks/script-DyPItFEl.js +0 -318
- package/browser/chunks/transaction-C_UbhMGn.js +0 -432
- package/browser/chunks/utils-DNZi-T5W.js +0 -761
- package/browser/ecc_lib.d.ts +0 -3
- package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
- package/browser/hooks/HookedSigner.d.ts +0 -4
- package/browser/hooks/SignatureManager.d.ts +0 -13
- package/browser/payments/lazy.d.ts +0 -2
- package/browser/typeforce.d.ts +0 -38
- package/build/bufferutils.d.ts +0 -34
- package/build/bufferutils.js +0 -141
- package/build/ecc_lib.d.ts +0 -3
- package/build/ecc_lib.js +0 -61
- package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
- package/build/hooks/AdvancedSignatureManager.js +0 -52
- package/build/hooks/HookedSigner.d.ts +0 -4
- package/build/hooks/HookedSigner.js +0 -64
- package/build/hooks/SignatureManager.d.ts +0 -13
- package/build/hooks/SignatureManager.js +0 -45
- package/build/payments/lazy.d.ts +0 -2
- package/build/payments/lazy.js +0 -28
- package/build/tsconfig.tsbuildinfo +0 -1
- package/src/bufferutils.ts +0 -188
- package/src/ecc_lib.ts +0 -94
- package/src/hooks/AdvancedSignatureManager.ts +0 -104
- package/src/hooks/HookedSigner.ts +0 -108
- package/src/hooks/SignatureManager.ts +0 -84
- package/src/payments/lazy.ts +0 -28
- package/src/typeforce.d.ts +0 -38
- package/tsconfig.webpack.json +0 -18
|
@@ -4,7 +4,10 @@ import * as ecc from 'tiny-secp256k1';
|
|
|
4
4
|
import { ECPairFactory } from 'ecpair';
|
|
5
5
|
import { describe, it } from 'vitest';
|
|
6
6
|
import * as bitcoin from '../../src/index.js';
|
|
7
|
-
import {
|
|
7
|
+
import { fromHex, compare } from '../../src/index.js';
|
|
8
|
+
import type { Satoshi, PublicKey } from '../../src/index.js';
|
|
9
|
+
import type { HDSigner } from '../../src/psbt/types.js';
|
|
10
|
+
import { regtestUtils, broadcastAndVerify } from './_regtest.js';
|
|
8
11
|
|
|
9
12
|
import rng from 'randombytes';
|
|
10
13
|
|
|
@@ -12,7 +15,7 @@ const ECPair = ECPairFactory(ecc);
|
|
|
12
15
|
const regtest = { ...regtestUtils.network, bech32Opnet: 'opreg' };
|
|
13
16
|
const bip32 = BIP32Factory(ecc);
|
|
14
17
|
|
|
15
|
-
const validator = (pubkey:
|
|
18
|
+
const validator = (pubkey: Uint8Array, msghash: Uint8Array, signature: Uint8Array): boolean =>
|
|
16
19
|
ECPair.fromPublicKey(pubkey).verify(msghash, signature);
|
|
17
20
|
|
|
18
21
|
// See bottom of file for some helper functions used to make the payment objects needed.
|
|
@@ -29,8 +32,8 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
29
32
|
index: 0,
|
|
30
33
|
sequence: 0xffffffff, // These are defaults. This line is not needed.
|
|
31
34
|
|
|
32
|
-
// non-segwit inputs now require passing the whole previous tx as
|
|
33
|
-
nonWitnessUtxo:
|
|
35
|
+
// non-segwit inputs now require passing the whole previous tx as Uint8Array
|
|
36
|
+
nonWitnessUtxo: fromHex(
|
|
34
37
|
'0200000001f9f34e95b9d5c8abcd20fc5bd4a825d1517be62f0f775e5f36da944d9' +
|
|
35
38
|
'452e550000000006b483045022100c86e9a111afc90f64b4904bd609e9eaed80d48' +
|
|
36
39
|
'ca17c162b1aca0a788ac3526f002207bb79b60d4fc6526329bf18a77135dc566020' +
|
|
@@ -44,7 +47,6 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
44
47
|
'76a9148bbc95d2709c71607c60ee3f097c1217482f518d88ac' +
|
|
45
48
|
// locktime
|
|
46
49
|
'00000000',
|
|
47
|
-
'hex',
|
|
48
50
|
),
|
|
49
51
|
|
|
50
52
|
// // If this input was segwit, instead of nonWitnessUtxo, you would add
|
|
@@ -63,7 +65,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
63
65
|
});
|
|
64
66
|
psbt.addOutput({
|
|
65
67
|
address: '1KRMKfeZcmosxALVYESdPNez1AP1mEtywp',
|
|
66
|
-
value:
|
|
68
|
+
value: 80000n as Satoshi,
|
|
67
69
|
});
|
|
68
70
|
psbt.signInput(0, alice);
|
|
69
71
|
psbt.validateSignaturesOfInput(0, validator);
|
|
@@ -103,11 +105,11 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
103
105
|
.addInput(inputData2) // alice2 unspent
|
|
104
106
|
.addOutput({
|
|
105
107
|
address: 'mwCwTceJvYV27KXBc3NJZys6CjsgsoeHmf',
|
|
106
|
-
value:
|
|
108
|
+
value: 80000n as Satoshi,
|
|
107
109
|
}) // the actual "spend"
|
|
108
110
|
.addOutput({
|
|
109
111
|
address: alice2.payment.address, // OR script, which is a Buffer.
|
|
110
|
-
value:
|
|
112
|
+
value: 10000n as Satoshi,
|
|
111
113
|
}); // Alice's change
|
|
112
114
|
// (in)(5e4 + 7e4) - (out)(8e4 + 1e4) = (fee)3e4 = 30000, this is the miner fee
|
|
113
115
|
|
|
@@ -199,7 +201,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
199
201
|
.addInput(inputData1)
|
|
200
202
|
.addOutput({
|
|
201
203
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
202
|
-
value:
|
|
204
|
+
value: 10000n as Satoshi,
|
|
203
205
|
})
|
|
204
206
|
.signInput(0, multisig.keys[0])
|
|
205
207
|
.signInput(0, multisig.keys[2]);
|
|
@@ -243,11 +245,11 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
243
245
|
const keyPair = p2sh.keys[0];
|
|
244
246
|
const outputData = {
|
|
245
247
|
script: p2sh.payment.output, // sending to myself for fun
|
|
246
|
-
value:
|
|
248
|
+
value: 20000n as Satoshi,
|
|
247
249
|
};
|
|
248
250
|
const outputData2 = {
|
|
249
251
|
script: p2sh.payment.output, // sending to myself for fun
|
|
250
|
-
value:
|
|
252
|
+
value: 70000n as Satoshi,
|
|
251
253
|
};
|
|
252
254
|
|
|
253
255
|
const tx = new bitcoin.Psbt()
|
|
@@ -277,11 +279,11 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
277
279
|
const keyPair = p2sh.keys[0];
|
|
278
280
|
const outputData = {
|
|
279
281
|
script: p2sh.payment.output,
|
|
280
|
-
value:
|
|
282
|
+
value: 20000n as Satoshi,
|
|
281
283
|
};
|
|
282
284
|
const outputData2 = {
|
|
283
285
|
script: p2sh.payment.output,
|
|
284
|
-
value:
|
|
286
|
+
value: 70000n as Satoshi,
|
|
285
287
|
};
|
|
286
288
|
const tx = new bitcoin.Psbt()
|
|
287
289
|
.addInputs([inputData, inputData2])
|
|
@@ -312,7 +314,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
312
314
|
.addInput(inputData)
|
|
313
315
|
.addOutput({
|
|
314
316
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
315
|
-
value:
|
|
317
|
+
value: 20000n as Satoshi,
|
|
316
318
|
})
|
|
317
319
|
.signInput(0, p2wpkh.keys[0]);
|
|
318
320
|
|
|
@@ -341,18 +343,19 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
341
343
|
.addInput(inputData)
|
|
342
344
|
.addOutput({
|
|
343
345
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
344
|
-
value:
|
|
346
|
+
value: 20000n as Satoshi,
|
|
345
347
|
})
|
|
346
348
|
.signInput(0, p2wpkh.keys[0]);
|
|
347
349
|
psbt.finalizeAllInputs();
|
|
348
350
|
const tx = psbt.extractTransaction();
|
|
349
|
-
await
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
351
|
+
await broadcastAndVerify(tx.toHex(), () =>
|
|
352
|
+
regtestUtils.verify({
|
|
353
|
+
txId: tx.getId(),
|
|
354
|
+
address: regtestUtils.RANDOM_ADDRESS,
|
|
355
|
+
vout: 0,
|
|
356
|
+
value: 2e4,
|
|
357
|
+
}),
|
|
358
|
+
);
|
|
356
359
|
});
|
|
357
360
|
|
|
358
361
|
it('can create (and broadcast via 3PBP) a Transaction, w/ a P2WSH(P2PK) input', async () => {
|
|
@@ -372,7 +375,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
372
375
|
.addInput(inputData)
|
|
373
376
|
.addOutput({
|
|
374
377
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
375
|
-
value:
|
|
378
|
+
value: 20000n as Satoshi,
|
|
376
379
|
})
|
|
377
380
|
.signInput(0, p2wsh.keys[0]);
|
|
378
381
|
|
|
@@ -401,7 +404,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
401
404
|
.addInput(inputData)
|
|
402
405
|
.addOutput({
|
|
403
406
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
404
|
-
value:
|
|
407
|
+
value: 20000n as Satoshi,
|
|
405
408
|
})
|
|
406
409
|
.signInput(0, p2wsh.keys[0]);
|
|
407
410
|
psbt.finalizeAllInputs();
|
|
@@ -433,7 +436,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
433
436
|
.addInput(inputData)
|
|
434
437
|
.addOutput({
|
|
435
438
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
436
|
-
value:
|
|
439
|
+
value: 20000n as Satoshi,
|
|
437
440
|
})
|
|
438
441
|
.signInput(0, p2sh.keys[0])
|
|
439
442
|
.signInput(0, p2sh.keys[2])
|
|
@@ -475,7 +478,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
475
478
|
.addInput(inputData)
|
|
476
479
|
.addOutput({
|
|
477
480
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
478
|
-
value:
|
|
481
|
+
value: 20000n as Satoshi,
|
|
479
482
|
})
|
|
480
483
|
.signInput(0, p2sh.keys[0])
|
|
481
484
|
.signInput(0, p2sh.keys[2])
|
|
@@ -504,7 +507,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
504
507
|
.addInput(inputData)
|
|
505
508
|
.addOutput({
|
|
506
509
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
507
|
-
value:
|
|
510
|
+
value: 20000n as Satoshi,
|
|
508
511
|
})
|
|
509
512
|
.signInput(0, p2sh.keys[0]);
|
|
510
513
|
psbt.finalizeAllInputs();
|
|
@@ -558,12 +561,12 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
|
|
|
558
561
|
// .updateInput(0, updateData) // if you didn't merge the bip32Derivation with inputData
|
|
559
562
|
.addOutput({
|
|
560
563
|
address: regtestUtils.RANDOM_ADDRESS,
|
|
561
|
-
value:
|
|
564
|
+
value: 20000n as Satoshi,
|
|
562
565
|
})
|
|
563
|
-
.signInputHD(0, hdRoot); // must sign with root!!!
|
|
566
|
+
.signInputHD(0, hdRoot as unknown as HDSigner); // must sign with root!!!
|
|
564
567
|
|
|
565
568
|
assert.strictEqual(psbt.validateSignaturesOfInput(0, validator), true);
|
|
566
|
-
assert.strictEqual(psbt.validateSignaturesOfInput(0, validator, childNode.publicKey), true);
|
|
569
|
+
assert.strictEqual(psbt.validateSignaturesOfInput(0, validator, childNode.publicKey as PublicKey), true);
|
|
567
570
|
psbt.finalizeAllInputs();
|
|
568
571
|
|
|
569
572
|
const tx = psbt.extractTransaction();
|
|
@@ -605,7 +608,7 @@ function createPayment(_type: string, myKeys?: any[], network?: any): any {
|
|
|
605
608
|
if (type.slice(0, 4) === 'p2ms') {
|
|
606
609
|
payment = bitcoin.payments.p2ms({
|
|
607
610
|
m,
|
|
608
|
-
pubkeys: keys.map((key) => key.publicKey).sort((a, b) =>
|
|
611
|
+
pubkeys: keys.map((key) => key.publicKey).sort((a, b) => compare(a, b)),
|
|
609
612
|
network,
|
|
610
613
|
});
|
|
611
614
|
} else if (['p2sh', 'p2wsh'].indexOf(type) > -1) {
|
|
@@ -629,7 +632,7 @@ function createPayment(_type: string, myKeys?: any[], network?: any): any {
|
|
|
629
632
|
|
|
630
633
|
function getWitnessUtxo(out: any): any {
|
|
631
634
|
delete out.address;
|
|
632
|
-
out.script =
|
|
635
|
+
out.script = fromHex(out.script);
|
|
633
636
|
return out;
|
|
634
637
|
}
|
|
635
638
|
|
|
@@ -639,10 +642,10 @@ async function getInputData(
|
|
|
639
642
|
isSegwit: boolean,
|
|
640
643
|
redeemType: string,
|
|
641
644
|
): Promise<any> {
|
|
642
|
-
const unspent = await regtestUtils.faucetComplex(payment.output, amount);
|
|
645
|
+
const unspent = await regtestUtils.faucetComplex(Buffer.from(payment.output), amount);
|
|
643
646
|
const utx = await regtestUtils.fetch(unspent.txId);
|
|
644
|
-
// for non segwit inputs, you must pass the full transaction
|
|
645
|
-
const nonWitnessUtxo =
|
|
647
|
+
// for non segwit inputs, you must pass the full transaction as Uint8Array
|
|
648
|
+
const nonWitnessUtxo = fromHex(utx.txHex);
|
|
646
649
|
// for segwit inputs, you only need the output script and value as an object.
|
|
647
650
|
const witnessUtxo = getWitnessUtxo(utx.outs[unspent.vout]);
|
|
648
651
|
const mixin = isSegwit ? { witnessUtxo } : { nonWitnessUtxo };
|
package/test/payments.spec.ts
CHANGED
|
@@ -2,28 +2,51 @@ import assert from 'assert';
|
|
|
2
2
|
import * as ecc from 'tiny-secp256k1';
|
|
3
3
|
import { beforeEach, describe, it } from 'vitest';
|
|
4
4
|
import { initEccLib } from '../src/index.js';
|
|
5
|
+
import type { EccLib } from '../src/index.js';
|
|
5
6
|
import type { P2SHPayment, PaymentCreator } from '../src/payments/index.js';
|
|
6
7
|
import { p2pk, p2wsh } from '../src/payments/index.js';
|
|
7
8
|
import * as u from './payments.utils.js';
|
|
8
9
|
import fs from 'node:fs';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
import { fromHex } from '../src/io/index.js';
|
|
11
|
+
import type { PublicKey } from '../src/types.js';
|
|
12
|
+
|
|
13
|
+
// Pre-load all payment modules synchronously-like at import time
|
|
14
|
+
import * as embedModule from '../src/payments/embed.js';
|
|
15
|
+
import * as p2msModule from '../src/payments/p2ms.js';
|
|
16
|
+
import * as p2pkModule from '../src/payments/p2pk.js';
|
|
17
|
+
import * as p2pkhModule from '../src/payments/p2pkh.js';
|
|
18
|
+
import * as p2shModule from '../src/payments/p2sh.js';
|
|
19
|
+
import * as p2wpkhModule from '../src/payments/p2wpkh.js';
|
|
20
|
+
import * as p2wshModule from '../src/payments/p2wsh.js';
|
|
21
|
+
import * as p2trModule from '../src/payments/p2tr.js';
|
|
22
|
+
|
|
23
|
+
const paymentModules: Record<string, { [key: string]: PaymentCreator }> = {
|
|
24
|
+
embed: embedModule as any,
|
|
25
|
+
p2ms: p2msModule as any,
|
|
26
|
+
p2pk: p2pkModule as any,
|
|
27
|
+
p2pkh: p2pkhModule as any,
|
|
28
|
+
p2sh: p2shModule as any,
|
|
29
|
+
p2wpkh: p2wpkhModule as any,
|
|
30
|
+
p2wsh: p2wshModule as any,
|
|
31
|
+
p2tr: p2trModule as any,
|
|
14
32
|
};
|
|
15
33
|
|
|
34
|
+
// Initialize ECC library at module load time
|
|
35
|
+
initEccLib(ecc as unknown as EccLib);
|
|
36
|
+
|
|
16
37
|
['embed', 'p2ms', 'p2pk', 'p2pkh', 'p2sh', 'p2wpkh', 'p2wsh', 'p2tr'].forEach((p) => {
|
|
17
|
-
describe(p,
|
|
38
|
+
describe(p, () => {
|
|
39
|
+
// Ensure ECC library is initialized before each test
|
|
18
40
|
beforeEach(() => {
|
|
19
|
-
initEccLib(
|
|
41
|
+
initEccLib(ecc as unknown as EccLib);
|
|
20
42
|
});
|
|
43
|
+
|
|
44
|
+
const payment = paymentModules[p]!;
|
|
21
45
|
let fn: PaymentCreator;
|
|
22
|
-
const payment = await require('../src/payments/' + p);
|
|
23
46
|
if (p === 'embed') {
|
|
24
|
-
fn = payment
|
|
47
|
+
fn = payment['p2data']!;
|
|
25
48
|
} else {
|
|
26
|
-
fn = payment[p]
|
|
49
|
+
fn = payment[p]!;
|
|
27
50
|
}
|
|
28
51
|
|
|
29
52
|
const fixtures = JSON.parse(fs.readFileSync('test/fixtures/' + p + '.json', 'utf8'));
|
|
@@ -63,10 +86,9 @@ const require = async (name: string) => {
|
|
|
63
86
|
const actual = fn({
|
|
64
87
|
redeem: p2wsh({
|
|
65
88
|
redeem: p2pk({
|
|
66
|
-
pubkey:
|
|
89
|
+
pubkey: fromHex(
|
|
67
90
|
'03e15819590382a9dd878f01e2f0cbce541564eb415e43b440472d883ecd283058',
|
|
68
|
-
|
|
69
|
-
),
|
|
91
|
+
) as PublicKey,
|
|
70
92
|
}),
|
|
71
93
|
}),
|
|
72
94
|
} as P2SHPayment);
|
package/test/payments.utils.ts
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import * as t from 'assert';
|
|
2
2
|
import * as BNETWORKS from '../src/networks.js';
|
|
3
3
|
import * as bscript from '../src/script.js';
|
|
4
|
+
import { toHex, fromHex as ioFromHex } from '../src/io/index.js';
|
|
4
5
|
|
|
5
|
-
function tryHex(x:
|
|
6
|
-
if (
|
|
6
|
+
function tryHex(x: Uint8Array | Uint8Array[]): string | string[] {
|
|
7
|
+
if (x instanceof Uint8Array) return toHex(x);
|
|
7
8
|
if (Array.isArray(x)) return x.map(tryHex) as string[];
|
|
8
9
|
return x;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
function fromHex(x: string | string[]):
|
|
12
|
-
if (typeof x === 'string') return
|
|
13
|
-
if (Array.isArray(x)) return x.map(fromHex) as
|
|
12
|
+
function fromHex(x: string | string[]): Uint8Array | Uint8Array[] {
|
|
13
|
+
if (typeof x === 'string') return ioFromHex(x);
|
|
14
|
+
if (Array.isArray(x)) return x.map(fromHex) as Uint8Array[];
|
|
14
15
|
return x;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
function tryASM(x:
|
|
18
|
-
if (
|
|
18
|
+
function tryASM(x: Uint8Array): string {
|
|
19
|
+
if (x instanceof Uint8Array) return bscript.toASM(x);
|
|
19
20
|
return x;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
function asmToBuffer(x: string):
|
|
23
|
-
if (x === '') return
|
|
23
|
+
function asmToBuffer(x: string): Uint8Array {
|
|
24
|
+
if (x === '') return new Uint8Array(0);
|
|
24
25
|
return bscript.fromASM(x);
|
|
25
26
|
}
|
|
26
27
|
|
|
@@ -99,11 +100,11 @@ export function preform(x: any): any {
|
|
|
99
100
|
|
|
100
101
|
if (x.network) x.network = (BNETWORKS as any)[x.network];
|
|
101
102
|
if (typeof x.inputHex === 'string') {
|
|
102
|
-
x.input =
|
|
103
|
+
x.input = ioFromHex(x.inputHex);
|
|
103
104
|
delete x.inputHex;
|
|
104
105
|
}
|
|
105
106
|
if (typeof x.outputHex === 'string') {
|
|
106
|
-
x.output =
|
|
107
|
+
x.output = ioFromHex(x.outputHex);
|
|
107
108
|
delete x.outputHex;
|
|
108
109
|
}
|
|
109
110
|
if (typeof x.output === 'string') x.output = asmToBuffer(x.output);
|
|
@@ -111,14 +112,14 @@ export function preform(x: any): any {
|
|
|
111
112
|
if (Array.isArray(x.witness)) x.witness = x.witness.map(fromHex);
|
|
112
113
|
|
|
113
114
|
if (x.data) x.data = x.data.map(fromHex);
|
|
114
|
-
if (x.hash) x.hash =
|
|
115
|
-
if (x.pubkey) x.pubkey =
|
|
116
|
-
if (x.internalPubkey) x.internalPubkey =
|
|
117
|
-
if (x.signature) x.signature =
|
|
115
|
+
if (x.hash) x.hash = ioFromHex(x.hash);
|
|
116
|
+
if (x.pubkey) x.pubkey = ioFromHex(x.pubkey);
|
|
117
|
+
if (x.internalPubkey) x.internalPubkey = ioFromHex(x.internalPubkey);
|
|
118
|
+
if (x.signature) x.signature = ioFromHex(x.signature);
|
|
118
119
|
if (x.pubkeys) x.pubkeys = x.pubkeys.map(fromHex);
|
|
119
120
|
if (x.signatures)
|
|
120
121
|
x.signatures = x.signatures.map((y: any) => {
|
|
121
|
-
return Number.isFinite(y) ? y :
|
|
122
|
+
return Number.isFinite(y) ? y : ioFromHex(y);
|
|
122
123
|
});
|
|
123
124
|
if (x.redeem) {
|
|
124
125
|
x.redeem = Object.assign({}, x.redeem);
|