@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
package/build/payments/p2pk.d.ts
CHANGED
|
@@ -1,2 +1,163 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Pay-to-Public-Key (P2PK) payment class.
|
|
3
|
+
*
|
|
4
|
+
* P2PK is one of the simplest Bitcoin payment types where the output script
|
|
5
|
+
* contains a public key directly, and spending requires a signature from that key.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { type Network } from '../networks.js';
|
|
10
|
+
import { type PublicKey, type Script, type Signature } from '../types.js';
|
|
11
|
+
import { PaymentType, type P2PKPayment, type PaymentOpts } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Pay-to-Public-Key (P2PK) payment class.
|
|
14
|
+
*
|
|
15
|
+
* Creates locking scripts of the form: `{pubKey} OP_CHECKSIG`
|
|
16
|
+
* Spending requires providing: `{signature}`
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { P2PK } from '@btc-vision/bitcoin';
|
|
21
|
+
*
|
|
22
|
+
* // Create from public key
|
|
23
|
+
* const payment = P2PK.fromPubkey(pubkey);
|
|
24
|
+
* console.log(payment.output); // scriptPubKey
|
|
25
|
+
*
|
|
26
|
+
* // Create from output script
|
|
27
|
+
* const decoded = P2PK.fromOutput(scriptPubKey);
|
|
28
|
+
* console.log(decoded.pubkey); // extracted public key
|
|
29
|
+
*
|
|
30
|
+
* // Legacy factory function still works
|
|
31
|
+
* const legacy = p2pk({ pubkey });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare class P2PK {
|
|
35
|
+
#private;
|
|
36
|
+
static readonly NAME: "p2pk";
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new P2PK payment instance.
|
|
39
|
+
*
|
|
40
|
+
* @param params - Payment parameters
|
|
41
|
+
* @param params.pubkey - The public key (33 or 65 bytes)
|
|
42
|
+
* @param params.signature - DER-encoded signature
|
|
43
|
+
* @param params.output - The scriptPubKey
|
|
44
|
+
* @param params.input - The scriptSig
|
|
45
|
+
* @param params.network - Network parameters (defaults to mainnet)
|
|
46
|
+
* @param opts - Payment options
|
|
47
|
+
* @param opts.validate - Whether to validate inputs (default: true)
|
|
48
|
+
*
|
|
49
|
+
* @throws {TypeError} If validation is enabled and data is invalid
|
|
50
|
+
*/
|
|
51
|
+
constructor(params: {
|
|
52
|
+
pubkey?: Uint8Array | undefined;
|
|
53
|
+
signature?: Uint8Array | undefined;
|
|
54
|
+
output?: Uint8Array | undefined;
|
|
55
|
+
input?: Uint8Array | undefined;
|
|
56
|
+
network?: Network | undefined;
|
|
57
|
+
}, opts?: PaymentOpts);
|
|
58
|
+
/**
|
|
59
|
+
* Payment type discriminant.
|
|
60
|
+
*/
|
|
61
|
+
get name(): typeof PaymentType.P2PK;
|
|
62
|
+
/**
|
|
63
|
+
* Network parameters.
|
|
64
|
+
*/
|
|
65
|
+
get network(): Network;
|
|
66
|
+
/**
|
|
67
|
+
* The public key (33 or 65 bytes).
|
|
68
|
+
* Computed lazily from output if not provided directly.
|
|
69
|
+
*/
|
|
70
|
+
get pubkey(): PublicKey | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* The DER-encoded signature.
|
|
73
|
+
* Computed lazily from input if not provided directly.
|
|
74
|
+
*/
|
|
75
|
+
get signature(): Signature | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* The scriptPubKey: `{pubKey} OP_CHECKSIG`
|
|
78
|
+
* Computed lazily from pubkey if not provided directly.
|
|
79
|
+
*/
|
|
80
|
+
get output(): Script | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* The scriptSig: `{signature}`
|
|
83
|
+
* Computed lazily from signature if not provided directly.
|
|
84
|
+
*/
|
|
85
|
+
get input(): Script | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* Witness stack (empty for P2PK as it's not a SegWit type).
|
|
88
|
+
*/
|
|
89
|
+
get witness(): Uint8Array[] | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Creates a P2PK payment from a public key.
|
|
92
|
+
*
|
|
93
|
+
* @param pubkey - The public key (33 or 65 bytes)
|
|
94
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
95
|
+
* @returns A new P2PK payment instance
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const payment = P2PK.fromPubkey(pubkey);
|
|
100
|
+
* const scriptPubKey = payment.output;
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
static fromPubkey(pubkey: PublicKey, network?: Network): P2PK;
|
|
104
|
+
/**
|
|
105
|
+
* Creates a P2PK payment from a scriptPubKey.
|
|
106
|
+
*
|
|
107
|
+
* @param output - The scriptPubKey
|
|
108
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
109
|
+
* @returns A new P2PK payment instance
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const payment = P2PK.fromOutput(scriptPubKey);
|
|
114
|
+
* const pubkey = payment.pubkey;
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
static fromOutput(output: Uint8Array, network?: Network): P2PK;
|
|
118
|
+
/**
|
|
119
|
+
* Creates a P2PK payment from a signature (for spending).
|
|
120
|
+
*
|
|
121
|
+
* @param signature - The DER-encoded signature
|
|
122
|
+
* @param pubkey - The public key (optional, for validation)
|
|
123
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
124
|
+
* @returns A new P2PK payment instance
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const payment = P2PK.fromSignature(signature, pubkey);
|
|
129
|
+
* const scriptSig = payment.input;
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
static fromSignature(signature: Signature, pubkey?: PublicKey, network?: Network): P2PK;
|
|
133
|
+
/**
|
|
134
|
+
* Converts to a plain P2PKPayment object for backwards compatibility.
|
|
135
|
+
*
|
|
136
|
+
* @returns A P2PKPayment object
|
|
137
|
+
*/
|
|
138
|
+
toPayment(): P2PKPayment;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Creates a Pay-to-Public-Key (P2PK) payment object.
|
|
142
|
+
*
|
|
143
|
+
* This is the legacy factory function for backwards compatibility.
|
|
144
|
+
* For new code, prefer using the P2PK class directly.
|
|
145
|
+
*
|
|
146
|
+
* @param a - The payment object containing the necessary data
|
|
147
|
+
* @param opts - Optional payment options
|
|
148
|
+
* @returns The P2PK payment object
|
|
149
|
+
* @throws {TypeError} If the required data is not provided or if the data is invalid
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* import { p2pk } from '@btc-vision/bitcoin';
|
|
154
|
+
*
|
|
155
|
+
* // Create from public key
|
|
156
|
+
* const payment = p2pk({ pubkey });
|
|
157
|
+
*
|
|
158
|
+
* // Create from output
|
|
159
|
+
* const decoded = p2pk({ output: scriptPubKey });
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
2
162
|
export declare function p2pk(a: Omit<P2PKPayment, 'name'>, opts?: PaymentOpts): P2PKPayment;
|
|
163
|
+
//# sourceMappingURL=p2pk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2pk.d.ts","sourceRoot":"","sources":["../../src/payments/p2pk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA8B,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAW,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAI7E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,IAAI;;IAEb,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAoB;IA0BxC;;;;;;;;;;;;;OAaG;gBAEC,MAAM,EAAE;QACJ,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QACnC,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QAChC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACjC,EACD,IAAI,CAAC,EAAE,WAAW;IAsBtB;;OAEG;IACH,IAAI,IAAI,IAAI,OAAO,WAAW,CAAC,IAAI,CAElC;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,SAAS,GAAG,SAAS,CAMlC;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAMrC;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAM/B;IAED;;;OAGG;IACH,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAM9B;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,UAAU,EAAE,GAAG,SAAS,CAMtC;IAID;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAI7D;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9D;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAkGvF;;;;OAIG;IACH,SAAS,IAAI,WAAW;CAW3B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,CAkBlF"}
|
package/build/payments/p2pk.js
CHANGED
|
@@ -1,73 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pay-to-Public-Key (P2PK) payment class.
|
|
3
|
+
*
|
|
4
|
+
* P2PK is one of the simplest Bitcoin payment types where the output script
|
|
5
|
+
* contains a public key directly, and spending requires a signature from that key.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
1
9
|
import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
|
|
2
10
|
import * as bscript from '../script.js';
|
|
3
|
-
import { isPoint
|
|
11
|
+
import { isPoint } from '../types.js';
|
|
12
|
+
import { equals } from '../io/index.js';
|
|
4
13
|
import { PaymentType } from './types.js';
|
|
5
|
-
import * as lazy from './lazy.js';
|
|
6
14
|
const OPS = bscript.opcodes;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Pay-to-Public-Key (P2PK) payment class.
|
|
17
|
+
*
|
|
18
|
+
* Creates locking scripts of the form: `{pubKey} OP_CHECKSIG`
|
|
19
|
+
* Spending requires providing: `{signature}`
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { P2PK } from '@btc-vision/bitcoin';
|
|
24
|
+
*
|
|
25
|
+
* // Create from public key
|
|
26
|
+
* const payment = P2PK.fromPubkey(pubkey);
|
|
27
|
+
* console.log(payment.output); // scriptPubKey
|
|
28
|
+
*
|
|
29
|
+
* // Create from output script
|
|
30
|
+
* const decoded = P2PK.fromOutput(scriptPubKey);
|
|
31
|
+
* console.log(decoded.pubkey); // extracted public key
|
|
32
|
+
*
|
|
33
|
+
* // Legacy factory function still works
|
|
34
|
+
* const legacy = p2pk({ pubkey });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class P2PK {
|
|
38
|
+
// Static public fields
|
|
39
|
+
static NAME = PaymentType.P2PK;
|
|
40
|
+
// Private instance fields
|
|
41
|
+
#network;
|
|
42
|
+
#opts;
|
|
43
|
+
// Input data (provided by user)
|
|
44
|
+
#inputPubkey;
|
|
45
|
+
#inputSignature;
|
|
46
|
+
#inputOutput;
|
|
47
|
+
#inputInput;
|
|
48
|
+
// Cached computed values
|
|
49
|
+
#pubkey;
|
|
50
|
+
#signature;
|
|
51
|
+
#output;
|
|
52
|
+
#input;
|
|
53
|
+
#witness;
|
|
54
|
+
// Cache flags
|
|
55
|
+
#pubkeyComputed = false;
|
|
56
|
+
#signatureComputed = false;
|
|
57
|
+
#outputComputed = false;
|
|
58
|
+
#inputComputed = false;
|
|
59
|
+
#witnessComputed = false;
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new P2PK payment instance.
|
|
62
|
+
*
|
|
63
|
+
* @param params - Payment parameters
|
|
64
|
+
* @param params.pubkey - The public key (33 or 65 bytes)
|
|
65
|
+
* @param params.signature - DER-encoded signature
|
|
66
|
+
* @param params.output - The scriptPubKey
|
|
67
|
+
* @param params.input - The scriptSig
|
|
68
|
+
* @param params.network - Network parameters (defaults to mainnet)
|
|
69
|
+
* @param opts - Payment options
|
|
70
|
+
* @param opts.validate - Whether to validate inputs (default: true)
|
|
71
|
+
*
|
|
72
|
+
* @throws {TypeError} If validation is enabled and data is invalid
|
|
73
|
+
*/
|
|
74
|
+
constructor(params, opts) {
|
|
75
|
+
this.#network = params.network ?? BITCOIN_NETWORK;
|
|
76
|
+
this.#opts = {
|
|
77
|
+
validate: opts?.validate ?? true,
|
|
78
|
+
allowIncomplete: opts?.allowIncomplete ?? false,
|
|
79
|
+
};
|
|
80
|
+
// Store input data
|
|
81
|
+
this.#inputPubkey = params.pubkey;
|
|
82
|
+
this.#inputSignature = params.signature;
|
|
83
|
+
this.#inputOutput = params.output;
|
|
84
|
+
this.#inputInput = params.input;
|
|
85
|
+
// Validate if requested
|
|
86
|
+
if (this.#opts.validate) {
|
|
87
|
+
this.#validate();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Public getters
|
|
91
|
+
/**
|
|
92
|
+
* Payment type discriminant.
|
|
93
|
+
*/
|
|
94
|
+
get name() {
|
|
95
|
+
return PaymentType.P2PK;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Network parameters.
|
|
99
|
+
*/
|
|
100
|
+
get network() {
|
|
101
|
+
return this.#network;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The public key (33 or 65 bytes).
|
|
105
|
+
* Computed lazily from output if not provided directly.
|
|
106
|
+
*/
|
|
107
|
+
get pubkey() {
|
|
108
|
+
if (!this.#pubkeyComputed) {
|
|
109
|
+
this.#pubkey = this.#computePubkey();
|
|
110
|
+
this.#pubkeyComputed = true;
|
|
111
|
+
}
|
|
112
|
+
return this.#pubkey;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The DER-encoded signature.
|
|
116
|
+
* Computed lazily from input if not provided directly.
|
|
117
|
+
*/
|
|
118
|
+
get signature() {
|
|
119
|
+
if (!this.#signatureComputed) {
|
|
120
|
+
this.#signature = this.#computeSignature();
|
|
121
|
+
this.#signatureComputed = true;
|
|
122
|
+
}
|
|
123
|
+
return this.#signature;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The scriptPubKey: `{pubKey} OP_CHECKSIG`
|
|
127
|
+
* Computed lazily from pubkey if not provided directly.
|
|
128
|
+
*/
|
|
129
|
+
get output() {
|
|
130
|
+
if (!this.#outputComputed) {
|
|
131
|
+
this.#output = this.#computeOutput();
|
|
132
|
+
this.#outputComputed = true;
|
|
133
|
+
}
|
|
134
|
+
return this.#output;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* The scriptSig: `{signature}`
|
|
138
|
+
* Computed lazily from signature if not provided directly.
|
|
139
|
+
*/
|
|
140
|
+
get input() {
|
|
141
|
+
if (!this.#inputComputed) {
|
|
142
|
+
this.#input = this.#computeInput();
|
|
143
|
+
this.#inputComputed = true;
|
|
144
|
+
}
|
|
145
|
+
return this.#input;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Witness stack (empty for P2PK as it's not a SegWit type).
|
|
149
|
+
*/
|
|
150
|
+
get witness() {
|
|
151
|
+
if (!this.#witnessComputed) {
|
|
152
|
+
this.#witness = this.#computeWitness();
|
|
153
|
+
this.#witnessComputed = true;
|
|
154
|
+
}
|
|
155
|
+
return this.#witness;
|
|
156
|
+
}
|
|
157
|
+
// Static factory methods
|
|
158
|
+
/**
|
|
159
|
+
* Creates a P2PK payment from a public key.
|
|
160
|
+
*
|
|
161
|
+
* @param pubkey - The public key (33 or 65 bytes)
|
|
162
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
163
|
+
* @returns A new P2PK payment instance
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* const payment = P2PK.fromPubkey(pubkey);
|
|
168
|
+
* const scriptPubKey = payment.output;
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
static fromPubkey(pubkey, network) {
|
|
172
|
+
return new P2PK({ pubkey, network });
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Creates a P2PK payment from a scriptPubKey.
|
|
176
|
+
*
|
|
177
|
+
* @param output - The scriptPubKey
|
|
178
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
179
|
+
* @returns A new P2PK payment instance
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const payment = P2PK.fromOutput(scriptPubKey);
|
|
184
|
+
* const pubkey = payment.pubkey;
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
static fromOutput(output, network) {
|
|
188
|
+
return new P2PK({ output, network });
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Creates a P2PK payment from a signature (for spending).
|
|
192
|
+
*
|
|
193
|
+
* @param signature - The DER-encoded signature
|
|
194
|
+
* @param pubkey - The public key (optional, for validation)
|
|
195
|
+
* @param network - Network parameters (defaults to mainnet)
|
|
196
|
+
* @returns A new P2PK payment instance
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* const payment = P2PK.fromSignature(signature, pubkey);
|
|
201
|
+
* const scriptSig = payment.input;
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
static fromSignature(signature, pubkey, network) {
|
|
205
|
+
return new P2PK({ signature, pubkey, network });
|
|
206
|
+
}
|
|
207
|
+
// Private computation methods
|
|
208
|
+
#computePubkey() {
|
|
209
|
+
if (this.#inputPubkey) {
|
|
210
|
+
return this.#inputPubkey;
|
|
211
|
+
}
|
|
212
|
+
if (this.#inputOutput) {
|
|
213
|
+
// Extract pubkey from output: {pubkey} OP_CHECKSIG
|
|
214
|
+
return this.#inputOutput.subarray(1, -1);
|
|
215
|
+
}
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
#computeSignature() {
|
|
219
|
+
if (this.#inputSignature) {
|
|
220
|
+
return this.#inputSignature;
|
|
221
|
+
}
|
|
222
|
+
if (this.#inputInput) {
|
|
223
|
+
const chunks = bscript.decompile(this.#inputInput);
|
|
224
|
+
if (chunks && chunks.length > 0) {
|
|
225
|
+
return chunks[0];
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
#computeOutput() {
|
|
231
|
+
if (this.#inputOutput) {
|
|
232
|
+
return this.#inputOutput;
|
|
233
|
+
}
|
|
234
|
+
const pubkey = this.#inputPubkey;
|
|
235
|
+
if (pubkey) {
|
|
236
|
+
return bscript.compile([pubkey, OPS.OP_CHECKSIG]);
|
|
237
|
+
}
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
#computeInput() {
|
|
241
|
+
if (this.#inputInput) {
|
|
242
|
+
return this.#inputInput;
|
|
243
|
+
}
|
|
244
|
+
const signature = this.#inputSignature;
|
|
245
|
+
if (signature) {
|
|
246
|
+
return bscript.compile([signature]);
|
|
247
|
+
}
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
#computeWitness() {
|
|
251
|
+
if (this.input) {
|
|
252
|
+
return [];
|
|
253
|
+
}
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
// Validation
|
|
257
|
+
#validate() {
|
|
258
|
+
if (this.#inputOutput) {
|
|
259
|
+
if (this.#inputOutput[this.#inputOutput.length - 1] !== OPS.OP_CHECKSIG) {
|
|
55
260
|
throw new TypeError('Output is invalid');
|
|
56
|
-
|
|
261
|
+
}
|
|
262
|
+
const extractedPubkey = this.pubkey;
|
|
263
|
+
if (!isPoint(extractedPubkey)) {
|
|
57
264
|
throw new TypeError('Output pubkey is invalid');
|
|
58
|
-
|
|
265
|
+
}
|
|
266
|
+
if (this.#inputPubkey &&
|
|
267
|
+
extractedPubkey &&
|
|
268
|
+
!equals(this.#inputPubkey, extractedPubkey)) {
|
|
59
269
|
throw new TypeError('Pubkey mismatch');
|
|
270
|
+
}
|
|
60
271
|
}
|
|
61
|
-
if (
|
|
62
|
-
|
|
272
|
+
if (this.#inputSignature) {
|
|
273
|
+
const computedInput = this.input;
|
|
274
|
+
if (this.#inputInput && computedInput && !equals(this.#inputInput, computedInput)) {
|
|
63
275
|
throw new TypeError('Signature mismatch');
|
|
276
|
+
}
|
|
64
277
|
}
|
|
65
|
-
if (
|
|
66
|
-
|
|
278
|
+
if (this.#inputInput) {
|
|
279
|
+
const chunks = bscript.decompile(this.#inputInput);
|
|
280
|
+
if (!chunks || chunks.length !== 1) {
|
|
67
281
|
throw new TypeError('Input is invalid');
|
|
68
|
-
|
|
282
|
+
}
|
|
283
|
+
const sig = this.signature;
|
|
284
|
+
if (!sig || !bscript.isCanonicalScriptSignature(sig)) {
|
|
69
285
|
throw new TypeError('Input has invalid signature');
|
|
286
|
+
}
|
|
70
287
|
}
|
|
71
288
|
}
|
|
72
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Converts to a plain P2PKPayment object for backwards compatibility.
|
|
291
|
+
*
|
|
292
|
+
* @returns A P2PKPayment object
|
|
293
|
+
*/
|
|
294
|
+
toPayment() {
|
|
295
|
+
return {
|
|
296
|
+
name: this.name,
|
|
297
|
+
network: this.network,
|
|
298
|
+
pubkey: this.pubkey,
|
|
299
|
+
signature: this.signature,
|
|
300
|
+
output: this.output,
|
|
301
|
+
input: this.input,
|
|
302
|
+
witness: this.witness,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Creates a Pay-to-Public-Key (P2PK) payment object.
|
|
308
|
+
*
|
|
309
|
+
* This is the legacy factory function for backwards compatibility.
|
|
310
|
+
* For new code, prefer using the P2PK class directly.
|
|
311
|
+
*
|
|
312
|
+
* @param a - The payment object containing the necessary data
|
|
313
|
+
* @param opts - Optional payment options
|
|
314
|
+
* @returns The P2PK payment object
|
|
315
|
+
* @throws {TypeError} If the required data is not provided or if the data is invalid
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
* ```typescript
|
|
319
|
+
* import { p2pk } from '@btc-vision/bitcoin';
|
|
320
|
+
*
|
|
321
|
+
* // Create from public key
|
|
322
|
+
* const payment = p2pk({ pubkey });
|
|
323
|
+
*
|
|
324
|
+
* // Create from output
|
|
325
|
+
* const decoded = p2pk({ output: scriptPubKey });
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
export function p2pk(a, opts) {
|
|
329
|
+
if (!a.input && !a.output && !a.pubkey && !a.signature) {
|
|
330
|
+
throw new TypeError('Not enough data');
|
|
331
|
+
}
|
|
332
|
+
const instance = new P2PK({
|
|
333
|
+
pubkey: a.pubkey,
|
|
334
|
+
signature: a.signature,
|
|
335
|
+
output: a.output,
|
|
336
|
+
input: a.input,
|
|
337
|
+
network: a.network,
|
|
338
|
+
}, opts);
|
|
339
|
+
// Return a merged object for backwards compatibility
|
|
340
|
+
return Object.assign(instance.toPayment(), a);
|
|
73
341
|
}
|
|
342
|
+
//# sourceMappingURL=p2pk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2pk.js","sourceRoot":"","sources":["../../src/payments/p2pk.ts"],"names":[],"mappings":"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"}
|