@btc-vision/bitcoin 6.5.5 → 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/AUDIT/README.md +9 -0
- package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
- package/SECURITY.md +27 -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 +37 -13
- 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 +83 -25
- 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 +24 -25
- 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 +11 -0
- package/browser/bufferutils.d.ts +0 -34
- package/browser/chunks/crypto-BhCpKpek.js +0 -2033
- package/browser/chunks/payments-yjA0Evsv.js +0 -1089
- package/browser/chunks/psbt-URK2hBFc.js +0 -4039
- 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/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type {
|
|
2
2
|
PsbtInput as _PsbtInput,
|
|
3
3
|
PsbtInputUpdate as _PsbtInputUpdate,
|
|
4
4
|
PsbtOutput as _PsbtOutput,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
TapMerkleRoot as _TapMerkleRoot,
|
|
11
11
|
TapScriptSig as _TapScriptSig,
|
|
12
12
|
TapTree as _TapTree,
|
|
13
|
-
} from 'bip174
|
|
13
|
+
} from 'bip174';
|
|
14
14
|
import * as networks from './networks.js';
|
|
15
15
|
import * as address from './address.js';
|
|
16
16
|
import * as payments from './payments/index.js';
|
|
@@ -31,10 +31,12 @@ export * from './psbt.js';
|
|
|
31
31
|
/** @hidden */
|
|
32
32
|
export { opcodes } from './opcodes.js';
|
|
33
33
|
export { Transaction } from './transaction.js';
|
|
34
|
+
export type { TaprootHashCache } from './transaction.js';
|
|
34
35
|
/** @hidden */
|
|
35
36
|
export type { Network } from './networks.js';
|
|
36
37
|
/** @hidden */
|
|
37
|
-
export { initEccLib } from './
|
|
38
|
+
export { initEccLib, getEccLib, EccContext } from './ecc/context.js';
|
|
39
|
+
export type { EccLib } from './ecc/types.js';
|
|
38
40
|
export { PaymentType } from './payments/index.js';
|
|
39
41
|
export type {
|
|
40
42
|
Payment,
|
|
@@ -79,18 +81,120 @@ export interface PsbtInputUpdate extends _PsbtInputUpdate {}
|
|
|
79
81
|
|
|
80
82
|
export * from './psbt/bip371.js';
|
|
81
83
|
export * from './address.js';
|
|
82
|
-
export
|
|
84
|
+
export {
|
|
85
|
+
toHex,
|
|
86
|
+
fromHex,
|
|
87
|
+
isHex,
|
|
88
|
+
concat,
|
|
89
|
+
equals,
|
|
90
|
+
compare,
|
|
91
|
+
isZero,
|
|
92
|
+
clone,
|
|
93
|
+
reverse,
|
|
94
|
+
reverseCopy,
|
|
95
|
+
alloc,
|
|
96
|
+
xor,
|
|
97
|
+
fromUtf8,
|
|
98
|
+
toUtf8,
|
|
99
|
+
MemoryPool,
|
|
100
|
+
SimpleMemoryPool,
|
|
101
|
+
varuint,
|
|
102
|
+
} from './io/index.js';
|
|
83
103
|
export * from './payments/bip341.js';
|
|
84
104
|
export * from './psbt/psbtutils.js';
|
|
85
|
-
export {
|
|
105
|
+
export {
|
|
106
|
+
toXOnly,
|
|
107
|
+
decompressPublicKey,
|
|
108
|
+
pubkeysMatch,
|
|
109
|
+
type UncompressedPublicKey,
|
|
110
|
+
} from './pubkey.js';
|
|
86
111
|
|
|
87
112
|
export { TAPLEAF_VERSION_MASK } from './types.js';
|
|
113
|
+
export type { Taptree, Tapleaf } from './types.js';
|
|
88
114
|
export type {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
115
|
+
Bytes32,
|
|
116
|
+
Bytes20,
|
|
117
|
+
PublicKey,
|
|
118
|
+
XOnlyPublicKey,
|
|
119
|
+
Satoshi,
|
|
120
|
+
PrivateKey,
|
|
121
|
+
Signature,
|
|
122
|
+
SchnorrSignature,
|
|
123
|
+
Script,
|
|
124
|
+
} from './types.js';
|
|
125
|
+
export {
|
|
126
|
+
isPrivateKey,
|
|
127
|
+
isSchnorrSignature,
|
|
128
|
+
isSignature,
|
|
129
|
+
isScript,
|
|
130
|
+
isBytes32,
|
|
131
|
+
isBytes20,
|
|
132
|
+
isPoint,
|
|
133
|
+
isXOnlyPublicKey,
|
|
134
|
+
isSatoshi,
|
|
135
|
+
assertXOnlyPublicKey,
|
|
136
|
+
assertPrivateKey,
|
|
137
|
+
toBytes32,
|
|
138
|
+
toBytes20,
|
|
139
|
+
toSatoshi,
|
|
93
140
|
} from './types.js';
|
|
141
|
+
export type { XOnlyPointAddTweakResult } from './ecc/types.js';
|
|
142
|
+
|
|
143
|
+
// Custom error types
|
|
144
|
+
import {
|
|
145
|
+
BitcoinError,
|
|
146
|
+
ValidationError,
|
|
147
|
+
InvalidInputError,
|
|
148
|
+
InvalidOutputError,
|
|
149
|
+
ScriptError,
|
|
150
|
+
PsbtError,
|
|
151
|
+
EccError,
|
|
152
|
+
AddressError,
|
|
153
|
+
SignatureError,
|
|
154
|
+
} from './errors.js';
|
|
155
|
+
|
|
156
|
+
export {
|
|
157
|
+
BitcoinError,
|
|
158
|
+
ValidationError,
|
|
159
|
+
InvalidInputError,
|
|
160
|
+
InvalidOutputError,
|
|
161
|
+
ScriptError,
|
|
162
|
+
PsbtError,
|
|
163
|
+
EccError,
|
|
164
|
+
AddressError,
|
|
165
|
+
SignatureError,
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/** All error classes grouped as a namespace */
|
|
169
|
+
export const errors = {
|
|
170
|
+
BitcoinError,
|
|
171
|
+
ValidationError,
|
|
172
|
+
InvalidInputError,
|
|
173
|
+
InvalidOutputError,
|
|
174
|
+
ScriptError,
|
|
175
|
+
PsbtError,
|
|
176
|
+
EccError,
|
|
177
|
+
AddressError,
|
|
178
|
+
SignatureError,
|
|
179
|
+
} as const;
|
|
180
|
+
|
|
181
|
+
// Worker-based parallel signing
|
|
182
|
+
export * as workers from './workers/index.js';
|
|
183
|
+
export {
|
|
184
|
+
WorkerSigningPool,
|
|
185
|
+
getSigningPool,
|
|
186
|
+
SignatureType,
|
|
187
|
+
createSigningPool,
|
|
188
|
+
signPsbtParallel,
|
|
189
|
+
} from './workers/index.js';
|
|
190
|
+
export type {
|
|
191
|
+
WorkerPoolConfig,
|
|
192
|
+
SigningTask,
|
|
193
|
+
ParallelSignerKeyPair,
|
|
194
|
+
ParallelSigningResult,
|
|
195
|
+
ParallelSignOptions,
|
|
196
|
+
PsbtParallelKeyPair,
|
|
197
|
+
} from './workers/index.js';
|
|
94
198
|
|
|
95
199
|
const bitcoin = {
|
|
96
200
|
networks,
|
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateful binary reader with a single DataView instance.
|
|
3
|
+
*
|
|
4
|
+
* Zero allocations during read operations. The DataView is created once
|
|
5
|
+
* in the constructor and reused for all reads.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { fromHex } from './hex.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* High-performance binary reader for parsing binary data.
|
|
14
|
+
*
|
|
15
|
+
* Creates exactly ONE DataView instance that is reused for all read operations.
|
|
16
|
+
* This eliminates garbage collection pressure from repeated DataView allocations.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
|
|
21
|
+
*
|
|
22
|
+
* // Parse a Bitcoin transaction
|
|
23
|
+
* const data = fromHex('01000000...');
|
|
24
|
+
* const reader = new BinaryReader(data);
|
|
25
|
+
*
|
|
26
|
+
* const version = reader.readInt32LE();
|
|
27
|
+
* const inputCount = reader.readVarInt();
|
|
28
|
+
*
|
|
29
|
+
* for (let i = 0; i < inputCount; i++) {
|
|
30
|
+
* const txid = reader.readBytes(32);
|
|
31
|
+
* const vout = reader.readUInt32LE();
|
|
32
|
+
* const script = reader.readVarBytes();
|
|
33
|
+
* const sequence = reader.readUInt32LE();
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class BinaryReader {
|
|
38
|
+
/**
|
|
39
|
+
* The underlying byte array.
|
|
40
|
+
*/
|
|
41
|
+
readonly #data: Uint8Array;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Single DataView instance reused for all reads.
|
|
45
|
+
*/
|
|
46
|
+
readonly #view: DataView;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Current read position.
|
|
50
|
+
*/
|
|
51
|
+
#offset: number;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Creates a new BinaryReader.
|
|
55
|
+
*
|
|
56
|
+
* @param data - The byte array to read from
|
|
57
|
+
* @param offset - Initial read position (default 0)
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
|
|
62
|
+
*
|
|
63
|
+
* const data = fromHex('01020304');
|
|
64
|
+
* const reader = new BinaryReader(data);
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
public constructor(data: Uint8Array, offset: number = 0) {
|
|
68
|
+
this.#data = data;
|
|
69
|
+
this.#view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
70
|
+
this.#offset = offset;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Creates a BinaryReader from a hex string.
|
|
75
|
+
*
|
|
76
|
+
* @param hex - Hex string (with or without 0x prefix)
|
|
77
|
+
* @returns A new BinaryReader instance
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* import { BinaryReader } from '@btc-vision/bitcoin';
|
|
82
|
+
*
|
|
83
|
+
* const reader = BinaryReader.fromHex('01000000');
|
|
84
|
+
* const version = reader.readInt32LE(); // 1
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
public static fromHex(hex: string): BinaryReader {
|
|
88
|
+
return new BinaryReader(fromHex(hex));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Current read position in the buffer.
|
|
93
|
+
*/
|
|
94
|
+
public get offset(): number {
|
|
95
|
+
return this.#offset;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Sets the read position.
|
|
100
|
+
*
|
|
101
|
+
* @param value - New offset value
|
|
102
|
+
* @throws RangeError if offset is negative or beyond buffer length
|
|
103
|
+
*/
|
|
104
|
+
public set offset(value: number) {
|
|
105
|
+
if (value < 0 || value > this.#data.length) {
|
|
106
|
+
throw new RangeError(`Offset ${value} is out of bounds [0, ${this.#data.length}]`);
|
|
107
|
+
}
|
|
108
|
+
this.#offset = value;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Total length of the underlying buffer.
|
|
113
|
+
*/
|
|
114
|
+
public get length(): number {
|
|
115
|
+
return this.#data.length;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Number of bytes remaining to be read.
|
|
120
|
+
*/
|
|
121
|
+
public get remaining(): number {
|
|
122
|
+
return this.#data.length - this.#offset;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The underlying data buffer.
|
|
127
|
+
*/
|
|
128
|
+
public get data(): Uint8Array {
|
|
129
|
+
return this.#data;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Reads an 8-bit unsigned integer.
|
|
134
|
+
*
|
|
135
|
+
* @returns The value (0-255)
|
|
136
|
+
* @throws RangeError if reading past end of buffer
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* const reader = BinaryReader.fromHex('ff');
|
|
141
|
+
* reader.readUInt8(); // 255
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
public readUInt8(): number {
|
|
145
|
+
if (this.#offset >= this.#data.length) {
|
|
146
|
+
throw new RangeError('Read past end of buffer');
|
|
147
|
+
}
|
|
148
|
+
return this.#data[this.#offset++]!;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Reads an 8-bit signed integer.
|
|
153
|
+
*
|
|
154
|
+
* @returns The value (-128 to 127)
|
|
155
|
+
* @throws RangeError if reading past end of buffer
|
|
156
|
+
*/
|
|
157
|
+
public readInt8(): number {
|
|
158
|
+
const value = this.readUInt8();
|
|
159
|
+
return value > 127 ? value - 256 : value;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Reads a 16-bit unsigned integer in little-endian format.
|
|
164
|
+
*
|
|
165
|
+
* @returns The value (0-65535)
|
|
166
|
+
* @throws RangeError if reading past end of buffer
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const reader = BinaryReader.fromHex('0100'); // 1 in LE
|
|
171
|
+
* reader.readUInt16LE(); // 1
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
public readUInt16LE(): number {
|
|
175
|
+
if (this.#offset + 2 > this.#data.length) {
|
|
176
|
+
throw new RangeError('Read past end of buffer');
|
|
177
|
+
}
|
|
178
|
+
const value = this.#view.getUint16(this.#offset, true);
|
|
179
|
+
this.#offset += 2;
|
|
180
|
+
return value;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Reads a 16-bit signed integer in little-endian format.
|
|
185
|
+
*
|
|
186
|
+
* @returns The value (-32768 to 32767)
|
|
187
|
+
* @throws RangeError if reading past end of buffer
|
|
188
|
+
*/
|
|
189
|
+
public readInt16LE(): number {
|
|
190
|
+
if (this.#offset + 2 > this.#data.length) {
|
|
191
|
+
throw new RangeError('Read past end of buffer');
|
|
192
|
+
}
|
|
193
|
+
const value = this.#view.getInt16(this.#offset, true);
|
|
194
|
+
this.#offset += 2;
|
|
195
|
+
return value;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Reads a 32-bit unsigned integer in little-endian format.
|
|
200
|
+
*
|
|
201
|
+
* @returns The value (0 to 4294967295)
|
|
202
|
+
* @throws RangeError if reading past end of buffer
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```typescript
|
|
206
|
+
* const reader = BinaryReader.fromHex('01000000'); // 1 in LE
|
|
207
|
+
* reader.readUInt32LE(); // 1
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
public readUInt32LE(): number {
|
|
211
|
+
if (this.#offset + 4 > this.#data.length) {
|
|
212
|
+
throw new RangeError('Read past end of buffer');
|
|
213
|
+
}
|
|
214
|
+
const value = this.#view.getUint32(this.#offset, true);
|
|
215
|
+
this.#offset += 4;
|
|
216
|
+
return value;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Reads a 32-bit signed integer in little-endian format.
|
|
221
|
+
*
|
|
222
|
+
* @returns The value (-2147483648 to 2147483647)
|
|
223
|
+
* @throws RangeError if reading past end of buffer
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* const reader = BinaryReader.fromHex('ffffffff'); // -1 in LE signed
|
|
228
|
+
* reader.readInt32LE(); // -1
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
public readInt32LE(): number {
|
|
232
|
+
if (this.#offset + 4 > this.#data.length) {
|
|
233
|
+
throw new RangeError('Read past end of buffer');
|
|
234
|
+
}
|
|
235
|
+
const value = this.#view.getInt32(this.#offset, true);
|
|
236
|
+
this.#offset += 4;
|
|
237
|
+
return value;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Reads a 64-bit unsigned integer in little-endian format as bigint.
|
|
242
|
+
*
|
|
243
|
+
* @returns The value as bigint
|
|
244
|
+
* @throws RangeError if reading past end of buffer
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```typescript
|
|
248
|
+
* const reader = BinaryReader.fromHex('0100000000000000'); // 1 in LE 64-bit
|
|
249
|
+
* reader.readUInt64LE(); // 1n
|
|
250
|
+
* ```
|
|
251
|
+
*/
|
|
252
|
+
public readUInt64LE(): bigint {
|
|
253
|
+
if (this.#offset + 8 > this.#data.length) {
|
|
254
|
+
throw new RangeError('Read past end of buffer');
|
|
255
|
+
}
|
|
256
|
+
const value = this.#view.getBigUint64(this.#offset, true);
|
|
257
|
+
this.#offset += 8;
|
|
258
|
+
return value;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Reads a 64-bit signed integer in little-endian format as bigint.
|
|
263
|
+
*
|
|
264
|
+
* @returns The value as bigint
|
|
265
|
+
* @throws RangeError if reading past end of buffer
|
|
266
|
+
*/
|
|
267
|
+
public readInt64LE(): bigint {
|
|
268
|
+
if (this.#offset + 8 > this.#data.length) {
|
|
269
|
+
throw new RangeError('Read past end of buffer');
|
|
270
|
+
}
|
|
271
|
+
const value = this.#view.getBigInt64(this.#offset, true);
|
|
272
|
+
this.#offset += 8;
|
|
273
|
+
return value;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Reads a specified number of bytes.
|
|
278
|
+
*
|
|
279
|
+
* Returns a subarray view (no copy) for performance.
|
|
280
|
+
* Use readBytesCopy() if you need an independent copy.
|
|
281
|
+
*
|
|
282
|
+
* @param length - Number of bytes to read
|
|
283
|
+
* @returns Uint8Array view into the buffer
|
|
284
|
+
* @throws RangeError if reading past end of buffer
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```typescript
|
|
288
|
+
* const reader = BinaryReader.fromHex('deadbeefcafebabe');
|
|
289
|
+
* const first4 = reader.readBytes(4); // deadbeef
|
|
290
|
+
* const next4 = reader.readBytes(4); // cafebabe
|
|
291
|
+
* ```
|
|
292
|
+
*/
|
|
293
|
+
public readBytes(length: number): Uint8Array {
|
|
294
|
+
if (this.#offset + length > this.#data.length) {
|
|
295
|
+
throw new RangeError('Read past end of buffer');
|
|
296
|
+
}
|
|
297
|
+
const value = this.#data.subarray(this.#offset, this.#offset + length);
|
|
298
|
+
this.#offset += length;
|
|
299
|
+
return value;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Reads a specified number of bytes as an independent copy.
|
|
304
|
+
*
|
|
305
|
+
* @param length - Number of bytes to read
|
|
306
|
+
* @returns New Uint8Array with copied data
|
|
307
|
+
* @throws RangeError if reading past end of buffer
|
|
308
|
+
*/
|
|
309
|
+
public readBytesCopy(length: number): Uint8Array {
|
|
310
|
+
if (this.#offset + length > this.#data.length) {
|
|
311
|
+
throw new RangeError('Read past end of buffer');
|
|
312
|
+
}
|
|
313
|
+
const value = this.#data.slice(this.#offset, this.#offset + length);
|
|
314
|
+
this.#offset += length;
|
|
315
|
+
return value;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Reads a Bitcoin CompactSize variable-length integer.
|
|
320
|
+
*
|
|
321
|
+
* CompactSize encoding:
|
|
322
|
+
* - 0x00-0xFC: 1 byte (value as-is)
|
|
323
|
+
* - 0xFD: 3 bytes (0xFD + 2-byte LE uint16)
|
|
324
|
+
* - 0xFE: 5 bytes (0xFE + 4-byte LE uint32)
|
|
325
|
+
* - 0xFF: 9 bytes (0xFF + 8-byte LE uint64)
|
|
326
|
+
*
|
|
327
|
+
* @returns The decoded integer value
|
|
328
|
+
* @throws RangeError if reading past end of buffer
|
|
329
|
+
* @throws RangeError if value exceeds MAX_SAFE_INTEGER
|
|
330
|
+
*
|
|
331
|
+
* @example
|
|
332
|
+
* ```typescript
|
|
333
|
+
* const reader = BinaryReader.fromHex('fd0302'); // 515 encoded
|
|
334
|
+
* reader.readVarInt(); // 515
|
|
335
|
+
* ```
|
|
336
|
+
*/
|
|
337
|
+
public readVarInt(): number {
|
|
338
|
+
const first = this.readUInt8();
|
|
339
|
+
|
|
340
|
+
if (first < 0xfd) {
|
|
341
|
+
return first;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
if (first === 0xfd) {
|
|
345
|
+
return this.readUInt16LE();
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
if (first === 0xfe) {
|
|
349
|
+
return this.readUInt32LE();
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// first === 0xff
|
|
353
|
+
const value = this.readUInt64LE();
|
|
354
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
355
|
+
throw new RangeError('VarInt value exceeds MAX_SAFE_INTEGER');
|
|
356
|
+
}
|
|
357
|
+
return Number(value);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Reads a Bitcoin CompactSize variable-length integer as bigint.
|
|
362
|
+
*
|
|
363
|
+
* Use this when you need the full 64-bit range.
|
|
364
|
+
*
|
|
365
|
+
* @returns The decoded integer value as bigint
|
|
366
|
+
* @throws RangeError if reading past end of buffer
|
|
367
|
+
*/
|
|
368
|
+
public readVarIntBig(): bigint {
|
|
369
|
+
const first = this.readUInt8();
|
|
370
|
+
|
|
371
|
+
if (first < 0xfd) {
|
|
372
|
+
return BigInt(first);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (first === 0xfd) {
|
|
376
|
+
return BigInt(this.readUInt16LE());
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (first === 0xfe) {
|
|
380
|
+
return BigInt(this.readUInt32LE());
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// first === 0xff
|
|
384
|
+
return this.readUInt64LE();
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Reads a length-prefixed byte array (VarInt length + bytes).
|
|
389
|
+
*
|
|
390
|
+
* @returns Uint8Array view into the buffer
|
|
391
|
+
* @throws RangeError if reading past end of buffer
|
|
392
|
+
*
|
|
393
|
+
* @example
|
|
394
|
+
* ```typescript
|
|
395
|
+
* const reader = BinaryReader.fromHex('04deadbeef');
|
|
396
|
+
* reader.readVarBytes(); // Uint8Array [0xde, 0xad, 0xbe, 0xef]
|
|
397
|
+
* ```
|
|
398
|
+
*/
|
|
399
|
+
public readVarBytes(): Uint8Array {
|
|
400
|
+
const length = this.readVarInt();
|
|
401
|
+
return this.readBytes(length);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Reads an array of length-prefixed byte arrays.
|
|
406
|
+
*
|
|
407
|
+
* Format: VarInt count + (VarInt length + bytes) for each item.
|
|
408
|
+
*
|
|
409
|
+
* @returns Array of Uint8Array views
|
|
410
|
+
* @throws RangeError if reading past end of buffer
|
|
411
|
+
*/
|
|
412
|
+
public readVector(): Uint8Array[] {
|
|
413
|
+
const count = this.readVarInt();
|
|
414
|
+
const result: Uint8Array[] = [];
|
|
415
|
+
for (let i = 0; i < count; i++) {
|
|
416
|
+
result.push(this.readVarBytes());
|
|
417
|
+
}
|
|
418
|
+
return result;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Peeks at the next byte without advancing the position.
|
|
423
|
+
*
|
|
424
|
+
* @returns The next byte value, or undefined if at end
|
|
425
|
+
*/
|
|
426
|
+
public peek(): number | undefined {
|
|
427
|
+
if (this.#offset >= this.#data.length) {
|
|
428
|
+
return undefined;
|
|
429
|
+
}
|
|
430
|
+
return this.#data[this.#offset];
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Skips a specified number of bytes.
|
|
435
|
+
*
|
|
436
|
+
* @param length - Number of bytes to skip
|
|
437
|
+
* @throws RangeError if skipping past end of buffer
|
|
438
|
+
*/
|
|
439
|
+
public skip(length: number): void {
|
|
440
|
+
if (this.#offset + length > this.#data.length) {
|
|
441
|
+
throw new RangeError('Skip past end of buffer');
|
|
442
|
+
}
|
|
443
|
+
this.#offset += length;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Resets the read position to the beginning.
|
|
448
|
+
*/
|
|
449
|
+
public reset(): void {
|
|
450
|
+
this.#offset = 0;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Checks if there are more bytes to read.
|
|
455
|
+
*
|
|
456
|
+
* @returns True if there are remaining bytes
|
|
457
|
+
*/
|
|
458
|
+
public hasMore(): boolean {
|
|
459
|
+
return this.#offset < this.#data.length;
|
|
460
|
+
}
|
|
461
|
+
}
|