@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/src/io/utils.ts
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for Uint8Array operations.
|
|
3
|
+
*
|
|
4
|
+
* No DataView allocations. No wrappers.
|
|
5
|
+
* Optimized for performance with minimal allocations.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Concatenates multiple Uint8Arrays into a single Uint8Array.
|
|
12
|
+
*
|
|
13
|
+
* Allocates exactly once for the result array.
|
|
14
|
+
*
|
|
15
|
+
* @param arrays - Arrays to concatenate
|
|
16
|
+
* @returns A new Uint8Array containing all input arrays
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { concat, fromHex } from '@btc-vision/bitcoin';
|
|
21
|
+
*
|
|
22
|
+
* const a = fromHex('deadbeef');
|
|
23
|
+
* const b = fromHex('cafebabe');
|
|
24
|
+
* const result = concat([a, b]);
|
|
25
|
+
* // result contains deadbeefcafebabe
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function concat(arrays: readonly Uint8Array[]): Uint8Array {
|
|
29
|
+
let totalLength = 0;
|
|
30
|
+
for (let i = 0; i < arrays.length; i++) {
|
|
31
|
+
totalLength += arrays[i]!.length;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const result = new Uint8Array(totalLength);
|
|
35
|
+
let offset = 0;
|
|
36
|
+
for (let i = 0; i < arrays.length; i++) {
|
|
37
|
+
const arr = arrays[i]!;
|
|
38
|
+
result.set(arr, offset);
|
|
39
|
+
offset += arr.length;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Checks if two Uint8Arrays have identical contents.
|
|
47
|
+
*
|
|
48
|
+
* @param a - First array
|
|
49
|
+
* @param b - Second array
|
|
50
|
+
* @returns True if arrays have the same length and contents
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* import { equals, fromHex } from '@btc-vision/bitcoin';
|
|
55
|
+
*
|
|
56
|
+
* const a = fromHex('deadbeef');
|
|
57
|
+
* const b = fromHex('deadbeef');
|
|
58
|
+
* const c = fromHex('cafebabe');
|
|
59
|
+
*
|
|
60
|
+
* equals(a, b); // true
|
|
61
|
+
* equals(a, c); // false
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export function equals(a: Uint8Array, b: Uint8Array): boolean {
|
|
65
|
+
if (a.length !== b.length) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
for (let i = 0; i < a.length; i++) {
|
|
69
|
+
if (a[i] !== b[i]) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Compares two Uint8Arrays lexicographically.
|
|
78
|
+
*
|
|
79
|
+
* @param a - First array
|
|
80
|
+
* @param b - Second array
|
|
81
|
+
* @returns Negative if a < b, positive if a > b, 0 if equal
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* import { compare, fromHex } from '@btc-vision/bitcoin';
|
|
86
|
+
*
|
|
87
|
+
* const a = fromHex('0001');
|
|
88
|
+
* const b = fromHex('0002');
|
|
89
|
+
*
|
|
90
|
+
* compare(a, b); // -1 (a < b)
|
|
91
|
+
* compare(b, a); // 1 (b > a)
|
|
92
|
+
* compare(a, a); // 0 (equal)
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export function compare(a: Uint8Array, b: Uint8Array): number {
|
|
96
|
+
const minLength = Math.min(a.length, b.length);
|
|
97
|
+
for (let i = 0; i < minLength; i++) {
|
|
98
|
+
const diff = a[i]! - b[i]!;
|
|
99
|
+
if (diff !== 0) {
|
|
100
|
+
return diff;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return a.length - b.length;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Checks if a Uint8Array contains only zero bytes.
|
|
108
|
+
*
|
|
109
|
+
* @param bytes - Array to check
|
|
110
|
+
* @returns True if all bytes are zero
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* import { isZero } from '@btc-vision/bitcoin';
|
|
115
|
+
*
|
|
116
|
+
* isZero(new Uint8Array(32)); // true
|
|
117
|
+
* isZero(new Uint8Array([0, 0, 1])); // false
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
export function isZero(bytes: Uint8Array): boolean {
|
|
121
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
122
|
+
if (bytes[i] !== 0) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Creates a copy of a Uint8Array.
|
|
131
|
+
*
|
|
132
|
+
* @param bytes - Array to clone
|
|
133
|
+
* @returns A new Uint8Array with the same contents
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* import { clone, fromHex } from '@btc-vision/bitcoin';
|
|
138
|
+
*
|
|
139
|
+
* const original = fromHex('deadbeef');
|
|
140
|
+
* const copy = clone(original);
|
|
141
|
+
* copy[0] = 0; // Modifying copy doesn't affect original
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export function clone(bytes: Uint8Array): Uint8Array {
|
|
145
|
+
// Create a true copy - .slice() on Buffer returns a view, not a copy
|
|
146
|
+
const copy = new Uint8Array(bytes.length);
|
|
147
|
+
copy.set(bytes);
|
|
148
|
+
return copy;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Reverses a Uint8Array in place.
|
|
153
|
+
*
|
|
154
|
+
* @param bytes - Array to reverse
|
|
155
|
+
* @returns The same array, reversed
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* import { reverse, fromHex, toHex } from '@btc-vision/bitcoin';
|
|
160
|
+
*
|
|
161
|
+
* const bytes = fromHex('01020304');
|
|
162
|
+
* reverse(bytes);
|
|
163
|
+
* toHex(bytes); // '04030201'
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export function reverse(bytes: Uint8Array): Uint8Array {
|
|
167
|
+
bytes.reverse();
|
|
168
|
+
return bytes;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Creates a reversed copy of a Uint8Array.
|
|
173
|
+
*
|
|
174
|
+
* @param bytes - Array to copy and reverse
|
|
175
|
+
* @returns A new reversed Uint8Array
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* import { reverseCopy, fromHex, toHex } from '@btc-vision/bitcoin';
|
|
180
|
+
*
|
|
181
|
+
* const bytes = fromHex('01020304');
|
|
182
|
+
* const reversed = reverseCopy(bytes);
|
|
183
|
+
* toHex(reversed); // '04030201'
|
|
184
|
+
* toHex(bytes); // '01020304' (original unchanged)
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
export function reverseCopy(bytes: Uint8Array): Uint8Array {
|
|
188
|
+
const result = new Uint8Array(bytes.length);
|
|
189
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
190
|
+
result[i] = bytes[bytes.length - 1 - i]!;
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Allocates a new Uint8Array of the specified size.
|
|
197
|
+
*
|
|
198
|
+
* @param size - Number of bytes to allocate
|
|
199
|
+
* @param fill - Optional fill value (default 0)
|
|
200
|
+
* @returns A new Uint8Array filled with the specified value
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* import { alloc, toHex } from '@btc-vision/bitcoin';
|
|
205
|
+
*
|
|
206
|
+
* const zeros = alloc(4); // 4 zero bytes
|
|
207
|
+
* const ones = alloc(4, 0xff); // 4 bytes of 0xff
|
|
208
|
+
* toHex(ones); // 'ffffffff'
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
export function alloc(size: number, fill: number = 0): Uint8Array {
|
|
212
|
+
const result = new Uint8Array(size);
|
|
213
|
+
if (fill !== 0) {
|
|
214
|
+
result.fill(fill);
|
|
215
|
+
}
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* XORs two Uint8Arrays together.
|
|
221
|
+
*
|
|
222
|
+
* @param a - First array
|
|
223
|
+
* @param b - Second array
|
|
224
|
+
* @returns A new Uint8Array with the XOR result
|
|
225
|
+
* @throws TypeError if arrays have different lengths
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* ```typescript
|
|
229
|
+
* import { xor, fromHex, toHex } from '@btc-vision/bitcoin';
|
|
230
|
+
*
|
|
231
|
+
* const a = fromHex('ff00ff00');
|
|
232
|
+
* const b = fromHex('0f0f0f0f');
|
|
233
|
+
* const result = xor(a, b);
|
|
234
|
+
* toHex(result); // 'f00ff00f'
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
export function xor(a: Uint8Array, b: Uint8Array): Uint8Array {
|
|
238
|
+
if (a.length !== b.length) {
|
|
239
|
+
throw new TypeError('Arrays must have the same length for XOR operation');
|
|
240
|
+
}
|
|
241
|
+
const result = new Uint8Array(a.length);
|
|
242
|
+
for (let i = 0; i < a.length; i++) {
|
|
243
|
+
result[i] = a[i]! ^ b[i]!;
|
|
244
|
+
}
|
|
245
|
+
return result;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Creates a Uint8Array from a UTF-8 string.
|
|
250
|
+
*
|
|
251
|
+
* @param str - String to encode
|
|
252
|
+
* @returns Uint8Array containing UTF-8 encoded bytes
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```typescript
|
|
256
|
+
* import { fromUtf8, toHex } from '@btc-vision/bitcoin';
|
|
257
|
+
*
|
|
258
|
+
* const bytes = fromUtf8('hello');
|
|
259
|
+
* toHex(bytes); // '68656c6c6f'
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
export function fromUtf8(str: string): Uint8Array {
|
|
263
|
+
return new TextEncoder().encode(str);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Decodes a Uint8Array to a UTF-8 string.
|
|
268
|
+
*
|
|
269
|
+
* @param bytes - Uint8Array to decode
|
|
270
|
+
* @returns Decoded string
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* ```typescript
|
|
274
|
+
* import { toUtf8, fromHex } from '@btc-vision/bitcoin';
|
|
275
|
+
*
|
|
276
|
+
* const bytes = fromHex('68656c6c6f');
|
|
277
|
+
* const str = toUtf8(bytes);
|
|
278
|
+
* // str is 'hello'
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
export function toUtf8(bytes: Uint8Array): string {
|
|
282
|
+
return new TextDecoder().decode(bytes);
|
|
283
|
+
}
|
package/src/merkle.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Calculates the Merkle root of an array of
|
|
2
|
+
* Calculates the Merkle root of an array of Uint8Arrays using a specified digest function.
|
|
3
3
|
*
|
|
4
|
-
* @param values - The array of
|
|
5
|
-
* @param digestFn - The digest function used to calculate the hash of the concatenated
|
|
6
|
-
* @returns The Merkle root as a
|
|
4
|
+
* @param values - The array of Uint8Arrays.
|
|
5
|
+
* @param digestFn - The digest function used to calculate the hash of the concatenated arrays.
|
|
6
|
+
* @returns The Merkle root as a Uint8Array.
|
|
7
7
|
* @throws {TypeError} If the values parameter is not an array or the digestFn parameter is not a function.
|
|
8
8
|
*/
|
|
9
|
-
export function fastMerkleRoot(
|
|
9
|
+
export function fastMerkleRoot(
|
|
10
|
+
values: Uint8Array[],
|
|
11
|
+
digestFn: (b: Uint8Array) => Uint8Array,
|
|
12
|
+
): Uint8Array {
|
|
10
13
|
if (!Array.isArray(values)) throw TypeError('Expected values Array');
|
|
11
14
|
if (typeof digestFn !== 'function') throw TypeError('Expected digest Function');
|
|
12
15
|
|
|
@@ -17,9 +20,11 @@ export function fastMerkleRoot(values: Buffer[], digestFn: (b: Buffer) => Buffer
|
|
|
17
20
|
let j = 0;
|
|
18
21
|
|
|
19
22
|
for (let i = 0; i < length; i += 2, ++j) {
|
|
20
|
-
const left = results[i]
|
|
21
|
-
const right = i + 1 === length ? left : results[i + 1]
|
|
22
|
-
const data =
|
|
23
|
+
const left = results[i]!;
|
|
24
|
+
const right = i + 1 === length ? left : results[i + 1]!;
|
|
25
|
+
const data = new Uint8Array(left.length + right.length);
|
|
26
|
+
data.set(left);
|
|
27
|
+
data.set(right, left.length);
|
|
23
28
|
|
|
24
29
|
results[j] = digestFn(data);
|
|
25
30
|
}
|
|
@@ -27,5 +32,5 @@ export function fastMerkleRoot(values: Buffer[], digestFn: (b: Buffer) => Buffer
|
|
|
27
32
|
length = j;
|
|
28
33
|
}
|
|
29
34
|
|
|
30
|
-
return results[0]
|
|
35
|
+
return results[0]!;
|
|
31
36
|
}
|
package/src/networks.ts
CHANGED
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
export interface Bip32 {
|
|
11
|
-
public: number;
|
|
12
|
-
private: number;
|
|
11
|
+
readonly public: number;
|
|
12
|
+
readonly private: number;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export interface Network {
|
|
16
|
-
wif: number;
|
|
17
|
-
bip32: Bip32;
|
|
18
|
-
messagePrefix: string;
|
|
19
|
-
bech32: string;
|
|
20
|
-
bech32Opnet?: string;
|
|
21
|
-
pubKeyHash: number;
|
|
22
|
-
scriptHash: number;
|
|
16
|
+
readonly wif: number;
|
|
17
|
+
readonly bip32: Bip32;
|
|
18
|
+
readonly messagePrefix: string;
|
|
19
|
+
readonly bech32: string;
|
|
20
|
+
readonly bech32Opnet?: string;
|
|
21
|
+
readonly pubKeyHash: number;
|
|
22
|
+
readonly scriptHash: number;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
package/src/payments/bip341.ts
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
|
-
import { Buffer as NBuffer } from 'buffer';
|
|
2
1
|
import * as bcrypto from '../crypto.js';
|
|
3
|
-
import { getEccLib } from '../
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import { isTapleaf
|
|
2
|
+
import { getEccLib } from '../ecc/context.js';
|
|
3
|
+
import { alloc, compare, concat, equals, varuint } from '../io/index.js';
|
|
4
|
+
import type { Bytes32, Tapleaf, Taptree, XOnlyPublicKey } from '../types.js';
|
|
5
|
+
import { isTapleaf } from '../types.js';
|
|
7
6
|
|
|
8
7
|
export const LEAF_VERSION_TAPSCRIPT = 0xc0;
|
|
9
8
|
export const MAX_TAPTREE_DEPTH = 128;
|
|
10
9
|
|
|
11
10
|
interface HashLeaf {
|
|
12
|
-
hash:
|
|
11
|
+
hash: Bytes32;
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
interface HashBranch {
|
|
16
|
-
hash:
|
|
15
|
+
hash: Bytes32;
|
|
17
16
|
left: HashTree;
|
|
18
17
|
right: HashTree;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
interface TweakedPublicKey {
|
|
22
21
|
parity: number;
|
|
23
|
-
x:
|
|
22
|
+
x: XOnlyPublicKey;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
const isHashBranch = (ht: HashTree): ht is HashBranch => 'left' in ht && 'right' in ht;
|
|
@@ -35,12 +34,12 @@ export type HashTree = HashLeaf | HashBranch;
|
|
|
35
34
|
|
|
36
35
|
/**
|
|
37
36
|
* Calculates the root hash from a given control block and leaf hash.
|
|
38
|
-
* @param controlBlock - The control block
|
|
39
|
-
* @param leafHash - The leaf hash
|
|
40
|
-
* @returns The root hash
|
|
37
|
+
* @param controlBlock - The control block.
|
|
38
|
+
* @param leafHash - The leaf hash.
|
|
39
|
+
* @returns The root hash.
|
|
41
40
|
* @throws {TypeError} If the control block length is less than 33.
|
|
42
41
|
*/
|
|
43
|
-
export function rootHashFromPath(controlBlock:
|
|
42
|
+
export function rootHashFromPath(controlBlock: Uint8Array, leafHash: Uint8Array): Bytes32 {
|
|
44
43
|
if (controlBlock.length < 33)
|
|
45
44
|
throw new TypeError(
|
|
46
45
|
`The control-block length is too small. Got ${controlBlock.length}, expected min 33.`,
|
|
@@ -50,14 +49,14 @@ export function rootHashFromPath(controlBlock: Buffer, leafHash: Buffer): Buffer
|
|
|
50
49
|
let kj = leafHash;
|
|
51
50
|
for (let j = 0; j < m; j++) {
|
|
52
51
|
const ej = controlBlock.subarray(33 + 32 * j, 65 + 32 * j);
|
|
53
|
-
if (
|
|
52
|
+
if (compare(kj, ej) < 0) {
|
|
54
53
|
kj = tapBranchHash(kj, ej);
|
|
55
54
|
} else {
|
|
56
55
|
kj = tapBranchHash(ej, kj);
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
return kj;
|
|
59
|
+
return kj as Bytes32;
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
/**
|
|
@@ -68,13 +67,13 @@ export function toHashTree(scriptTree: Taptree): HashTree {
|
|
|
68
67
|
if (isTapleaf(scriptTree)) return { hash: tapleafHash(scriptTree) };
|
|
69
68
|
|
|
70
69
|
const hashes = [toHashTree(scriptTree[0]), toHashTree(scriptTree[1])];
|
|
71
|
-
hashes.sort((a, b) => a.hash
|
|
70
|
+
hashes.sort((a, b) => compare(a.hash, b.hash));
|
|
72
71
|
const [left, right] = hashes;
|
|
73
72
|
|
|
74
73
|
return {
|
|
75
|
-
hash: tapBranchHash(left
|
|
76
|
-
left
|
|
77
|
-
right
|
|
74
|
+
hash: tapBranchHash(left!.hash, right!.hash),
|
|
75
|
+
left: left!,
|
|
76
|
+
right: right!,
|
|
78
77
|
};
|
|
79
78
|
}
|
|
80
79
|
|
|
@@ -86,34 +85,34 @@ export function toHashTree(scriptTree: Taptree): HashTree {
|
|
|
86
85
|
* (exclusive) needed to prove inclusion of the specified hash. undefined if no
|
|
87
86
|
* path is found
|
|
88
87
|
*/
|
|
89
|
-
export function findScriptPath(node: HashTree, hash:
|
|
88
|
+
export function findScriptPath(node: HashTree, hash: Bytes32): Bytes32[] | undefined {
|
|
90
89
|
if (isHashBranch(node)) {
|
|
91
90
|
const leftPath = findScriptPath(node.left, hash);
|
|
92
91
|
if (leftPath !== undefined) return [...leftPath, node.right.hash];
|
|
93
92
|
|
|
94
93
|
const rightPath = findScriptPath(node.right, hash);
|
|
95
94
|
if (rightPath !== undefined) return [...rightPath, node.left.hash];
|
|
96
|
-
} else if (node.hash
|
|
95
|
+
} else if (equals(node.hash, hash)) {
|
|
97
96
|
return [];
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
return undefined;
|
|
101
100
|
}
|
|
102
101
|
|
|
103
|
-
export function tapleafHash(leaf: Tapleaf):
|
|
102
|
+
export function tapleafHash(leaf: Tapleaf): Bytes32 {
|
|
104
103
|
const version = leaf.version || LEAF_VERSION_TAPSCRIPT;
|
|
105
104
|
return bcrypto.taggedHash(
|
|
106
105
|
'TapLeaf',
|
|
107
|
-
|
|
108
|
-
);
|
|
106
|
+
concat([new Uint8Array([version]), serializeScript(leaf.output)]),
|
|
107
|
+
) as Bytes32;
|
|
109
108
|
}
|
|
110
109
|
|
|
111
|
-
export function tapTweakHash(pubKey:
|
|
112
|
-
return bcrypto.taggedHash('TapTweak',
|
|
110
|
+
export function tapTweakHash(pubKey: XOnlyPublicKey, h: Bytes32 | undefined): Bytes32 {
|
|
111
|
+
return bcrypto.taggedHash('TapTweak', h ? concat([pubKey, h]) : pubKey) as Bytes32;
|
|
113
112
|
}
|
|
114
113
|
|
|
115
|
-
export function tweakKey(pubKey:
|
|
116
|
-
if (!
|
|
114
|
+
export function tweakKey(pubKey: XOnlyPublicKey, h: Bytes32 | undefined): TweakedPublicKey | null {
|
|
115
|
+
if (!(pubKey instanceof Uint8Array)) return null;
|
|
117
116
|
if (pubKey.length !== 32) return null;
|
|
118
117
|
if (h && h.length !== 32) return null;
|
|
119
118
|
|
|
@@ -124,17 +123,17 @@ export function tweakKey(pubKey: Buffer, h: Buffer | undefined): TweakedPublicKe
|
|
|
124
123
|
|
|
125
124
|
return {
|
|
126
125
|
parity: res.parity,
|
|
127
|
-
x:
|
|
126
|
+
x: new Uint8Array(res.xOnlyPubkey) as XOnlyPublicKey,
|
|
128
127
|
};
|
|
129
128
|
}
|
|
130
129
|
|
|
131
|
-
function tapBranchHash(a:
|
|
132
|
-
return bcrypto.taggedHash('TapBranch',
|
|
130
|
+
function tapBranchHash(a: Uint8Array, b: Uint8Array): Bytes32 {
|
|
131
|
+
return bcrypto.taggedHash('TapBranch', concat([a, b])) as Bytes32;
|
|
133
132
|
}
|
|
134
133
|
|
|
135
|
-
function serializeScript(s:
|
|
134
|
+
function serializeScript(s: Uint8Array): Uint8Array {
|
|
136
135
|
const varintLen = varuint.encodingLength(s.length);
|
|
137
|
-
const buffer =
|
|
136
|
+
const buffer = alloc(varintLen);
|
|
138
137
|
varuint.encode(s.length, buffer);
|
|
139
|
-
return
|
|
138
|
+
return concat([buffer, s]);
|
|
140
139
|
}
|