@btc-vision/bitcoin 6.5.6 → 7.0.0-alpha.1
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 +57 -10
- 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 +12477 -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 +58 -11
- package/build/address.d.ts.map +1 -0
- package/build/address.js +82 -25
- 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 +202 -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 +35 -9
- package/build/payments/bip341.d.ts.map +1 -0
- package/build/payments/bip341.js +34 -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 -150
- 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 +428 -103
- 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 +465 -143
- 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 +117 -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 +406 -413
- 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 +101 -37
- 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 +169 -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 +68 -9
- package/scripts/bundle-ecc.ts +111 -0
- package/src/address.ts +91 -45
- package/src/bech32utils.ts +3 -3
- package/src/bip66.ts +34 -24
- package/src/block.ts +205 -86
- package/src/branded.ts +18 -0
- package/src/crypto.ts +64 -26
- package/src/ecc/context.ts +280 -0
- package/src/ecc/index.ts +14 -0
- package/src/ecc/types.ts +147 -0
- package/src/ecpair.d.ts +99 -0
- package/src/errors.ts +163 -0
- package/src/index.ts +112 -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 +32 -33
- package/src/payments/embed.ts +244 -41
- package/src/payments/index.ts +12 -10
- package/src/payments/p2ms.ts +497 -118
- package/src/payments/p2op.ts +432 -134
- package/src/payments/p2pk.ts +370 -72
- package/src/payments/p2pkh.ts +524 -130
- package/src/payments/p2sh.ts +572 -169
- package/src/payments/p2tr.ts +686 -194
- package/src/payments/p2wpkh.ts +482 -105
- package/src/payments/p2wsh.ts +524 -162
- package/src/payments/types.ts +80 -66
- package/src/psbt/bip371.ts +72 -51
- package/src/psbt/psbtutils.ts +39 -40
- package/src/psbt/types.ts +324 -0
- package/src/psbt/utils.ts +188 -0
- package/src/psbt/validation.ts +185 -0
- package/src/psbt.ts +608 -827
- package/src/pubkey.ts +22 -23
- package/src/push_data.ts +18 -16
- package/src/script.ts +81 -66
- package/src/script_number.ts +6 -6
- package/src/script_signature.ts +33 -36
- package/src/transaction.ts +462 -239
- package/src/types.ts +229 -100
- package/src/workers/WorkerSigningPool.node.ts +887 -0
- package/src/workers/WorkerSigningPool.ts +666 -0
- package/src/workers/ecc-bundle.ts +26 -0
- package/src/workers/index.ts +165 -0
- package/src/workers/psbt-parallel.ts +327 -0
- package/src/workers/signing-worker.ts +353 -0
- package/src/workers/types.ts +417 -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/typedoc.json +29 -0
- 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/script.js
CHANGED
|
@@ -1,23 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script tools, including decompile, compile, toASM, fromASM, toStack, isCanonicalPubKey, isCanonicalScriptSignature
|
|
3
|
+
* @packageDocumentation
|
|
4
|
+
*/
|
|
1
5
|
import * as bip66 from './bip66.js';
|
|
6
|
+
import { alloc, fromHex, toHex } from './io/index.js';
|
|
2
7
|
import { opcodes, REVERSE_OPS } from './opcodes.js';
|
|
3
8
|
import * as pushdata from './push_data.js';
|
|
4
9
|
import * as scriptNumber from './script_number.js';
|
|
5
10
|
import * as scriptSignature from './script_signature.js';
|
|
11
|
+
import { isDefinedHashType } from './script_signature.js';
|
|
6
12
|
import * as types from './types.js';
|
|
7
|
-
const
|
|
8
|
-
const OP_INT_BASE = opcodes.OP_RESERVED;
|
|
13
|
+
const OP_INT_BASE = opcodes.OP_RESERVED; // OP_1 - 1
|
|
9
14
|
export { opcodes };
|
|
10
15
|
function isOPInt(value) {
|
|
11
|
-
return (types.
|
|
16
|
+
return (types.isNumber(value) &&
|
|
12
17
|
(value === opcodes.OP_0 ||
|
|
13
18
|
(value >= opcodes.OP_1 && value <= opcodes.OP_16) ||
|
|
14
19
|
value === opcodes.OP_1NEGATE));
|
|
15
20
|
}
|
|
16
21
|
function isPushOnlyChunk(value) {
|
|
17
|
-
|
|
22
|
+
if (value instanceof Uint8Array)
|
|
23
|
+
return true;
|
|
24
|
+
return isOPInt(value);
|
|
18
25
|
}
|
|
19
26
|
export function isPushOnly(value) {
|
|
20
|
-
return types.
|
|
27
|
+
return types.isArray(value) && value.every(isPushOnlyChunk);
|
|
21
28
|
}
|
|
22
29
|
export function countNonPushOnlyOPs(value) {
|
|
23
30
|
return value.length - value.filter(isPushOnlyChunk).length;
|
|
@@ -26,50 +33,67 @@ function asMinimalOP(buffer) {
|
|
|
26
33
|
if (buffer.length === 0)
|
|
27
34
|
return opcodes.OP_0;
|
|
28
35
|
if (buffer.length !== 1)
|
|
29
|
-
return;
|
|
36
|
+
return undefined;
|
|
30
37
|
if (buffer[0] >= 1 && buffer[0] <= 16)
|
|
31
38
|
return OP_INT_BASE + buffer[0];
|
|
32
39
|
if (buffer[0] === 0x81)
|
|
33
40
|
return opcodes.OP_1NEGATE;
|
|
41
|
+
return undefined;
|
|
34
42
|
}
|
|
35
|
-
function
|
|
36
|
-
return
|
|
43
|
+
function chunksIsUint8Array(buf) {
|
|
44
|
+
return buf instanceof Uint8Array;
|
|
37
45
|
}
|
|
38
46
|
function chunksIsArray(buf) {
|
|
39
|
-
return types.
|
|
47
|
+
return types.isArray(buf);
|
|
40
48
|
}
|
|
41
|
-
function
|
|
42
|
-
return
|
|
49
|
+
function singleChunkIsUint8Array(buf) {
|
|
50
|
+
return buf instanceof Uint8Array;
|
|
43
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Compiles an array of chunks into a Uint8Array.
|
|
54
|
+
*
|
|
55
|
+
* @param chunks - The array of chunks to compile.
|
|
56
|
+
* @returns The compiled Uint8Array.
|
|
57
|
+
* @throws Error if the compilation fails.
|
|
58
|
+
*/
|
|
44
59
|
export function compile(chunks) {
|
|
45
|
-
|
|
60
|
+
// Already compiled - return as-is
|
|
61
|
+
if (chunksIsUint8Array(chunks))
|
|
46
62
|
return chunks;
|
|
47
|
-
|
|
63
|
+
if (!types.isArray(chunks)) {
|
|
64
|
+
throw new TypeError('Expected an array');
|
|
65
|
+
}
|
|
48
66
|
const bufferSize = chunks.reduce((accum, chunk) => {
|
|
49
|
-
|
|
67
|
+
// data chunk
|
|
68
|
+
if (singleChunkIsUint8Array(chunk)) {
|
|
69
|
+
// adhere to BIP62.3, minimal push policy
|
|
50
70
|
if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
|
|
51
71
|
return accum + 1;
|
|
52
72
|
}
|
|
53
73
|
return accum + pushdata.encodingLength(chunk.length) + chunk.length;
|
|
54
74
|
}
|
|
75
|
+
// opcode
|
|
55
76
|
return accum + 1;
|
|
56
77
|
}, 0.0);
|
|
57
|
-
const buffer =
|
|
78
|
+
const buffer = new Uint8Array(bufferSize);
|
|
58
79
|
let offset = 0;
|
|
59
80
|
chunks.forEach((chunk) => {
|
|
60
|
-
|
|
81
|
+
// data chunk
|
|
82
|
+
if (singleChunkIsUint8Array(chunk)) {
|
|
83
|
+
// adhere to BIP62.3, minimal push policy
|
|
61
84
|
const opcode = asMinimalOP(chunk);
|
|
62
85
|
if (opcode !== undefined) {
|
|
63
|
-
buffer
|
|
86
|
+
buffer[offset] = opcode;
|
|
64
87
|
offset += 1;
|
|
65
88
|
return;
|
|
66
89
|
}
|
|
67
90
|
offset += pushdata.encode(buffer, chunk.length, offset);
|
|
68
|
-
|
|
91
|
+
buffer.set(chunk, offset);
|
|
69
92
|
offset += chunk.length;
|
|
93
|
+
// opcode
|
|
70
94
|
}
|
|
71
95
|
else {
|
|
72
|
-
buffer
|
|
96
|
+
buffer[offset] = chunk;
|
|
73
97
|
offset += 1;
|
|
74
98
|
}
|
|
75
99
|
});
|
|
@@ -78,22 +102,29 @@ export function compile(chunks) {
|
|
|
78
102
|
return buffer;
|
|
79
103
|
}
|
|
80
104
|
export function decompile(buffer) {
|
|
105
|
+
// Already decompiled - return as-is
|
|
81
106
|
if (chunksIsArray(buffer))
|
|
82
107
|
return buffer;
|
|
83
|
-
|
|
108
|
+
if (!(buffer instanceof Uint8Array)) {
|
|
109
|
+
throw new TypeError('Expected a Uint8Array');
|
|
110
|
+
}
|
|
84
111
|
const chunks = [];
|
|
85
112
|
let i = 0;
|
|
86
113
|
while (i < buffer.length) {
|
|
87
114
|
const opcode = buffer[i];
|
|
115
|
+
// data chunk
|
|
88
116
|
if (opcode > opcodes.OP_0 && opcode <= opcodes.OP_PUSHDATA4) {
|
|
89
117
|
const d = pushdata.decode(buffer, i);
|
|
118
|
+
// did reading a pushDataInt fail?
|
|
90
119
|
if (d === null)
|
|
91
120
|
return null;
|
|
92
121
|
i += d.size;
|
|
122
|
+
// attempt to read too much data?
|
|
93
123
|
if (i + d.number > buffer.length)
|
|
94
124
|
return null;
|
|
95
125
|
const data = buffer.subarray(i, i + d.number);
|
|
96
126
|
i += d.number;
|
|
127
|
+
// decompile minimally
|
|
97
128
|
const op = asMinimalOP(data);
|
|
98
129
|
if (op !== undefined) {
|
|
99
130
|
chunks.push(op);
|
|
@@ -101,6 +132,7 @@ export function decompile(buffer) {
|
|
|
101
132
|
else {
|
|
102
133
|
chunks.push(data);
|
|
103
134
|
}
|
|
135
|
+
// opcode
|
|
104
136
|
}
|
|
105
137
|
else {
|
|
106
138
|
chunks.push(opcode);
|
|
@@ -109,52 +141,83 @@ export function decompile(buffer) {
|
|
|
109
141
|
}
|
|
110
142
|
return chunks;
|
|
111
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Converts the given chunks into an ASM (Assembly) string representation.
|
|
146
|
+
* If the chunks parameter is a Uint8Array, it will be decompiled into a Stack before conversion.
|
|
147
|
+
* @param chunks - The chunks to convert into ASM.
|
|
148
|
+
* @returns The ASM string representation of the chunks.
|
|
149
|
+
*/
|
|
112
150
|
export function toASM(chunks) {
|
|
113
|
-
|
|
114
|
-
|
|
151
|
+
let resolved;
|
|
152
|
+
if (chunksIsUint8Array(chunks)) {
|
|
153
|
+
const decompiled = decompile(chunks);
|
|
154
|
+
if (!decompiled) {
|
|
155
|
+
throw new Error('Could not convert invalid chunks to ASM');
|
|
156
|
+
}
|
|
157
|
+
resolved = decompiled;
|
|
115
158
|
}
|
|
116
|
-
|
|
117
|
-
|
|
159
|
+
else {
|
|
160
|
+
resolved = chunks;
|
|
118
161
|
}
|
|
119
|
-
return
|
|
162
|
+
return resolved
|
|
120
163
|
.map((chunk) => {
|
|
121
|
-
|
|
164
|
+
// data?
|
|
165
|
+
if (singleChunkIsUint8Array(chunk)) {
|
|
122
166
|
const op = asMinimalOP(chunk);
|
|
123
167
|
if (op === undefined)
|
|
124
|
-
return chunk
|
|
168
|
+
return toHex(chunk);
|
|
125
169
|
chunk = op;
|
|
126
170
|
}
|
|
171
|
+
// opcode!
|
|
127
172
|
return REVERSE_OPS[chunk];
|
|
128
173
|
})
|
|
129
174
|
.join(' ');
|
|
130
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Converts an ASM string to a Uint8Array.
|
|
178
|
+
* @param asm The ASM string to convert.
|
|
179
|
+
* @returns The converted Uint8Array.
|
|
180
|
+
*/
|
|
131
181
|
export function fromASM(asm) {
|
|
132
|
-
|
|
182
|
+
if (typeof asm !== 'string') {
|
|
183
|
+
throw new TypeError('Expected a string');
|
|
184
|
+
}
|
|
133
185
|
return compile(asm.split(' ').map((chunkStr) => {
|
|
186
|
+
// opcode?
|
|
134
187
|
if (opcodes[chunkStr] !== undefined) {
|
|
135
188
|
return opcodes[chunkStr];
|
|
136
189
|
}
|
|
137
|
-
|
|
138
|
-
|
|
190
|
+
if (!types.isHex(chunkStr)) {
|
|
191
|
+
throw new TypeError('Expected hex string');
|
|
192
|
+
}
|
|
193
|
+
// data!
|
|
194
|
+
return fromHex(chunkStr);
|
|
139
195
|
}));
|
|
140
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Converts the given chunks into a stack of Uint8Arrays.
|
|
199
|
+
*
|
|
200
|
+
* @param chunks - The chunks to convert.
|
|
201
|
+
* @returns The stack of Uint8Arrays.
|
|
202
|
+
*/
|
|
141
203
|
export function toStack(chunks) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
204
|
+
const resolved = chunksIsUint8Array(chunks) ? decompile(chunks) : chunks;
|
|
205
|
+
if (!resolved || !isPushOnly(resolved)) {
|
|
206
|
+
throw new TypeError('Expected push-only script');
|
|
207
|
+
}
|
|
208
|
+
return resolved.map((op) => {
|
|
209
|
+
if (singleChunkIsUint8Array(op))
|
|
146
210
|
return op;
|
|
147
211
|
if (op === opcodes.OP_0)
|
|
148
|
-
return
|
|
212
|
+
return alloc(0);
|
|
149
213
|
return scriptNumber.encode(op - OP_INT_BASE);
|
|
150
214
|
});
|
|
151
215
|
}
|
|
152
216
|
export function isCanonicalPubKey(buffer) {
|
|
153
217
|
return types.isPoint(buffer);
|
|
154
218
|
}
|
|
155
|
-
import { isDefinedHashType } from './script_signature.js';
|
|
156
219
|
export function isCanonicalScriptSignature(buffer) {
|
|
157
|
-
if (!
|
|
220
|
+
if (!(buffer instanceof Uint8Array))
|
|
158
221
|
return false;
|
|
159
222
|
if (!isDefinedHashType(buffer[buffer.length - 1]))
|
|
160
223
|
return false;
|
|
@@ -162,3 +225,4 @@ export function isCanonicalScriptSignature(buffer) {
|
|
|
162
225
|
}
|
|
163
226
|
export const number = scriptNumber;
|
|
164
227
|
export const signature = scriptSignature;
|
|
228
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../src/script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW;AACpD,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,SAAS,OAAO,CAAC,KAAa;IAC1B,OAAO,CACH,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI;YACnB,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;YACjD,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,CACpC,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,KAA0B;IAC/C,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC5C,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;AAC/D,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,IAAI,EAAE;QAAE,OAAO,WAAW,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;IACzE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC;IAClD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAuB;IAC/C,OAAO,GAAG,YAAY,UAAU,CAAC;AACrC,CAAC;AAED,SAAS,aAAa,CAAC,GAAuB;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAwB;IACrD,OAAO,GAAG,YAAY,UAAU,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,MAA0B;IAC9C,kCAAkC;IAClC,IAAI,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,MAAgB,CAAC;IAExD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,KAAK,EAAE,EAAE;QACtD,aAAa;QACb,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,yCAAyC;YACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;gBACzD,OAAO,KAAK,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,OAAO,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACxE,CAAC;QAED,SAAS;QACT,OAAO,KAAK,GAAG,CAAC,CAAC;IACrB,CAAC,EAAE,GAAG,CAAC,CAAC;IAER,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,aAAa;QACb,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,yCAAyC;YACzC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;gBACxB,MAAM,IAAI,CAAC,CAAC;gBACZ,OAAO;YACX,CAAC;YAED,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;YAEvB,SAAS;QACb,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;YACvB,MAAM,IAAI,CAAC,CAAC;QAChB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACzE,OAAO,MAAgB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAA0B;IAChD,oCAAoC;IACpC,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,MAAoC,CAAC;IAEvE,IAAI,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QAE1B,aAAa;QACb,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC1D,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAErC,kCAAkC;YAClC,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC5B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAEZ,iCAAiC;YACjC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAE9C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAEd,sBAAsB;YACtB,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAED,SAAS;QACb,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEpB,CAAC,IAAI,CAAC,CAAC;QACX,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,MAA0B;IAC5C,IAAI,QAAe,CAAC;IACpB,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QACD,QAAQ,GAAG,UAAU,CAAC;IAC1B,CAAC;SAAM,CAAC;QACJ,QAAQ,GAAG,MAAM,CAAC;IACtB,CAAC;IACD,OAAO,QAAQ;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACX,QAAQ;QACR,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,EAAE,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,GAAG,EAAE,CAAC;QACf,CAAC;QAED,UAAU;QACV,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,OAAO,CACV,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5B,UAAU;QACV,IAAI,OAAO,CAAC,QAAyB,CAAC,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,OAAO,CAAC,QAAyB,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC/C,CAAC;QAED,QAAQ;QACR,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC,CACL,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,MAA0B;IAC9C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzE,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACvB,IAAI,uBAAuB,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzC,OAAO,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAChD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAkB;IACzD,IAAI,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAEjE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC"}
|
package/build/script_number.d.ts
CHANGED
|
@@ -1,2 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decodes a script number from a buffer.
|
|
3
|
+
*
|
|
4
|
+
* @param buffer - The buffer containing the script number.
|
|
5
|
+
* @param maxLength - The maximum length of the script number. Defaults to 4.
|
|
6
|
+
* @param minimal - Whether the script number should be minimal. Defaults to true.
|
|
7
|
+
* @returns The decoded script number.
|
|
8
|
+
* @throws {TypeError} If the script number overflows the maximum length.
|
|
9
|
+
* @throws {Error} If the script number is not minimally encoded when minimal is true.
|
|
10
|
+
*/
|
|
1
11
|
export declare function decode(buffer: Buffer, maxLength?: number, minimal?: boolean): number;
|
|
12
|
+
/**
|
|
13
|
+
* Encodes a number into a Buffer using a specific format.
|
|
14
|
+
*
|
|
15
|
+
* @param _number - The number to encode.
|
|
16
|
+
* @returns The encoded number as a Buffer.
|
|
17
|
+
*/
|
|
2
18
|
export declare function encode(_number: number): Buffer;
|
|
19
|
+
//# sourceMappingURL=script_number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script_number.d.ts","sourceRoot":"","sources":["../src/script_number.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CA+BpF;AAMD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB9C"}
|
package/build/script_number.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decodes a script number from a buffer.
|
|
3
|
+
*
|
|
4
|
+
* @param buffer - The buffer containing the script number.
|
|
5
|
+
* @param maxLength - The maximum length of the script number. Defaults to 4.
|
|
6
|
+
* @param minimal - Whether the script number should be minimal. Defaults to true.
|
|
7
|
+
* @returns The decoded script number.
|
|
8
|
+
* @throws {TypeError} If the script number overflows the maximum length.
|
|
9
|
+
* @throws {Error} If the script number is not minimally encoded when minimal is true.
|
|
10
|
+
*/
|
|
1
11
|
export function decode(buffer, maxLength, minimal) {
|
|
2
12
|
maxLength = maxLength || 4;
|
|
3
13
|
minimal = minimal === undefined ? true : minimal;
|
|
@@ -12,6 +22,7 @@ export function decode(buffer, maxLength, minimal) {
|
|
|
12
22
|
throw new Error('Non-minimally encoded script number');
|
|
13
23
|
}
|
|
14
24
|
}
|
|
25
|
+
// 40-bit
|
|
15
26
|
if (length === 5) {
|
|
16
27
|
const a = buffer.readUInt32LE(0);
|
|
17
28
|
const b = buffer.readUInt8(4);
|
|
@@ -19,6 +30,7 @@ export function decode(buffer, maxLength, minimal) {
|
|
|
19
30
|
return -((b & ~0x80) * 0x100000000 + a);
|
|
20
31
|
return b * 0x100000000 + a;
|
|
21
32
|
}
|
|
33
|
+
// 32-bit / 24-bit / 16-bit / 8-bit
|
|
22
34
|
let result = 0;
|
|
23
35
|
for (let i = 0; i < length; ++i) {
|
|
24
36
|
result |= buffer[i] << (8 * i);
|
|
@@ -30,6 +42,12 @@ export function decode(buffer, maxLength, minimal) {
|
|
|
30
42
|
function scriptNumSize(i) {
|
|
31
43
|
return i > 0x7fffffff ? 5 : i > 0x7fffff ? 4 : i > 0x7fff ? 3 : i > 0x7f ? 2 : i > 0x00 ? 1 : 0;
|
|
32
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Encodes a number into a Buffer using a specific format.
|
|
47
|
+
*
|
|
48
|
+
* @param _number - The number to encode.
|
|
49
|
+
* @returns The encoded number as a Buffer.
|
|
50
|
+
*/
|
|
33
51
|
export function encode(_number) {
|
|
34
52
|
let value = Math.abs(_number);
|
|
35
53
|
const size = scriptNumSize(value);
|
|
@@ -47,3 +65,4 @@ export function encode(_number) {
|
|
|
47
65
|
}
|
|
48
66
|
return buffer;
|
|
49
67
|
}
|
|
68
|
+
//# sourceMappingURL=script_number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script_number.js","sourceRoot":"","sources":["../src/script_number.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if a hash type is defined (valid for Bitcoin signatures).
|
|
3
|
+
* @param hashType - The hash type to check.
|
|
4
|
+
* @returns True if the hash type is valid, false otherwise.
|
|
5
|
+
*/
|
|
1
6
|
export declare function isDefinedHashType(hashType: number): boolean;
|
|
2
|
-
interface ScriptSignature {
|
|
3
|
-
signature:
|
|
7
|
+
export interface ScriptSignature {
|
|
8
|
+
signature: Uint8Array;
|
|
4
9
|
hashType: number;
|
|
5
10
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Decodes a Uint8Array into a ScriptSignature object.
|
|
13
|
+
* @param buffer - The Uint8Array to decode.
|
|
14
|
+
* @returns The decoded ScriptSignature object.
|
|
15
|
+
* @throws Error if the hashType is invalid.
|
|
16
|
+
*/
|
|
17
|
+
export declare function decode(buffer: Uint8Array): ScriptSignature;
|
|
18
|
+
/**
|
|
19
|
+
* Encodes a signature and hash type into a Uint8Array.
|
|
20
|
+
* @param signature - The signature to encode.
|
|
21
|
+
* @param hashType - The hash type to encode.
|
|
22
|
+
* @returns The encoded Uint8Array.
|
|
23
|
+
* @throws Error if the hashType is invalid.
|
|
24
|
+
*/
|
|
25
|
+
export declare function encode(signature: Uint8Array, hashType: number): Uint8Array;
|
|
26
|
+
//# sourceMappingURL=script_signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script_signature.d.ts","sourceRoot":"","sources":["../src/script_signature.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG3D;AA+BD,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAGD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,CAY1D;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAkB1E"}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import * as bip66 from './bip66.js';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
const ZERO =
|
|
2
|
+
import { alloc, concat } from './io/index.js';
|
|
3
|
+
import { isUInt8, isUint8ArrayN } from './types.js';
|
|
4
|
+
const ZERO = new Uint8Array([0]);
|
|
5
|
+
/**
|
|
6
|
+
* Checks if a hash type is defined (valid for Bitcoin signatures).
|
|
7
|
+
* @param hashType - The hash type to check.
|
|
8
|
+
* @returns True if the hash type is valid, false otherwise.
|
|
9
|
+
*/
|
|
5
10
|
export function isDefinedHashType(hashType) {
|
|
6
11
|
const hashTypeMod = hashType & ~0x80;
|
|
7
12
|
return hashTypeMod > 0x00 && hashTypeMod < 0x04;
|
|
8
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Converts a Uint8Array to a DER-encoded Uint8Array.
|
|
16
|
+
* @param x - The Uint8Array to be converted.
|
|
17
|
+
* @returns The DER-encoded Uint8Array.
|
|
18
|
+
*/
|
|
9
19
|
function toDER(x) {
|
|
10
20
|
let i = 0;
|
|
11
21
|
while (x[i] === 0)
|
|
@@ -14,39 +24,62 @@ function toDER(x) {
|
|
|
14
24
|
return ZERO;
|
|
15
25
|
x = x.subarray(i);
|
|
16
26
|
if (x[0] & 0x80)
|
|
17
|
-
return
|
|
27
|
+
return concat([ZERO, x]);
|
|
18
28
|
return x;
|
|
19
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Converts a DER-encoded signature to a Uint8Array.
|
|
32
|
+
* If the first byte of the input is 0x00, it is skipped.
|
|
33
|
+
* The resulting Uint8Array is 32 bytes long, filled with zeros if necessary.
|
|
34
|
+
* @param x - The DER-encoded signature.
|
|
35
|
+
* @returns The converted Uint8Array.
|
|
36
|
+
*/
|
|
20
37
|
function fromDER(x) {
|
|
21
38
|
if (x[0] === 0x00)
|
|
22
39
|
x = x.subarray(1);
|
|
23
|
-
const buffer =
|
|
40
|
+
const buffer = alloc(32);
|
|
24
41
|
const bstart = Math.max(0, 32 - x.length);
|
|
25
|
-
|
|
42
|
+
buffer.set(x, bstart);
|
|
26
43
|
return buffer;
|
|
27
44
|
}
|
|
45
|
+
// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
|
|
46
|
+
/**
|
|
47
|
+
* Decodes a Uint8Array into a ScriptSignature object.
|
|
48
|
+
* @param buffer - The Uint8Array to decode.
|
|
49
|
+
* @returns The decoded ScriptSignature object.
|
|
50
|
+
* @throws Error if the hashType is invalid.
|
|
51
|
+
*/
|
|
28
52
|
export function decode(buffer) {
|
|
29
|
-
const hashType = buffer
|
|
53
|
+
const hashType = buffer[buffer.length - 1];
|
|
30
54
|
if (!isDefinedHashType(hashType)) {
|
|
31
55
|
throw new Error(`Invalid hashType ${hashType}`);
|
|
32
56
|
}
|
|
33
57
|
const decoded = bip66.decode(buffer.subarray(0, -1));
|
|
34
58
|
const r = fromDER(decoded.r);
|
|
35
59
|
const s = fromDER(decoded.s);
|
|
36
|
-
const signature =
|
|
60
|
+
const signature = concat([r, s]);
|
|
37
61
|
return { signature, hashType };
|
|
38
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Encodes a signature and hash type into a Uint8Array.
|
|
65
|
+
* @param signature - The signature to encode.
|
|
66
|
+
* @param hashType - The hash type to encode.
|
|
67
|
+
* @returns The encoded Uint8Array.
|
|
68
|
+
* @throws Error if the hashType is invalid.
|
|
69
|
+
*/
|
|
39
70
|
export function encode(signature, hashType) {
|
|
40
|
-
|
|
41
|
-
signature
|
|
42
|
-
|
|
43
|
-
|
|
71
|
+
if (!isUint8ArrayN(signature, 64)) {
|
|
72
|
+
throw new TypeError('Expected signature to be a 64-byte Uint8Array');
|
|
73
|
+
}
|
|
74
|
+
if (!isUInt8(hashType)) {
|
|
75
|
+
throw new TypeError('Expected hashType to be a UInt8');
|
|
76
|
+
}
|
|
44
77
|
if (!isDefinedHashType(hashType)) {
|
|
45
78
|
throw new Error(`Invalid hashType ${hashType}`);
|
|
46
79
|
}
|
|
47
|
-
const hashTypeBuffer =
|
|
48
|
-
hashTypeBuffer.writeUInt8(hashType, 0);
|
|
80
|
+
const hashTypeBuffer = new Uint8Array([hashType]);
|
|
49
81
|
const r = toDER(signature.subarray(0, 32));
|
|
50
82
|
const s = toDER(signature.subarray(32, 64));
|
|
51
|
-
return
|
|
83
|
+
return concat([bip66.encode(r, s), hashTypeBuffer]);
|
|
52
84
|
}
|
|
85
|
+
//# sourceMappingURL=script_signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script_signature.js","sourceRoot":"","sources":["../src/script_signature.ts"],"names":[],"mappings":"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"}
|