@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
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory pool using SharedArrayBuffer for zero-allocation operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides thread-safe memory allocation using Atomics for concurrent access.
|
|
5
|
+
* Ideal for parsing operations where temporary buffers are needed.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Thread-safe memory pool using SharedArrayBuffer.
|
|
11
|
+
*
|
|
12
|
+
* Allocates memory from a pre-allocated SharedArrayBuffer pool,
|
|
13
|
+
* eliminating garbage collection pressure from repeated allocations.
|
|
14
|
+
*
|
|
15
|
+
* Uses Atomics for thread-safe allocation when used with Workers.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { MemoryPool } from '@btc-vision/bitcoin';
|
|
20
|
+
*
|
|
21
|
+
* // Create a 1MB pool
|
|
22
|
+
* const pool = new MemoryPool(1024 * 1024);
|
|
23
|
+
*
|
|
24
|
+
* // Allocate memory for transaction parsing
|
|
25
|
+
* const txBuffer = pool.alloc(500);
|
|
26
|
+
* // ... use txBuffer ...
|
|
27
|
+
*
|
|
28
|
+
* // Reset pool when done (all allocations become invalid)
|
|
29
|
+
* pool.reset();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class MemoryPool {
|
|
33
|
+
#private;
|
|
34
|
+
/**
|
|
35
|
+
* Creates a new MemoryPool.
|
|
36
|
+
*
|
|
37
|
+
* @param size - Size of the pool in bytes (default 4MB)
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import { MemoryPool } from '@btc-vision/bitcoin';
|
|
42
|
+
*
|
|
43
|
+
* // 4MB pool (default)
|
|
44
|
+
* const pool = new MemoryPool();
|
|
45
|
+
*
|
|
46
|
+
* // 16MB pool
|
|
47
|
+
* const largePool = new MemoryPool(16 * 1024 * 1024);
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
constructor(size?: number);
|
|
51
|
+
/**
|
|
52
|
+
* Creates a MemoryPool from an existing SharedArrayBuffer.
|
|
53
|
+
*
|
|
54
|
+
* Useful for sharing a pool between Workers.
|
|
55
|
+
*
|
|
56
|
+
* @param buffer - Existing SharedArrayBuffer
|
|
57
|
+
* @returns A new MemoryPool instance wrapping the buffer
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* // Main thread
|
|
62
|
+
* const pool = new MemoryPool(1024 * 1024);
|
|
63
|
+
* worker.postMessage({ buffer: pool.sharedBuffer });
|
|
64
|
+
*
|
|
65
|
+
* // Worker thread
|
|
66
|
+
* self.onmessage = (e) => {
|
|
67
|
+
* const pool = MemoryPool.fromSharedBuffer(e.data.buffer);
|
|
68
|
+
* const mem = pool.alloc(100);
|
|
69
|
+
* };
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
static fromSharedBuffer(buffer: SharedArrayBuffer): MemoryPool;
|
|
73
|
+
/**
|
|
74
|
+
* Total capacity of the pool in bytes.
|
|
75
|
+
*/
|
|
76
|
+
get capacity(): number;
|
|
77
|
+
/**
|
|
78
|
+
* Current allocation offset (bytes used).
|
|
79
|
+
*
|
|
80
|
+
* Uses Atomics for thread-safe reading.
|
|
81
|
+
*/
|
|
82
|
+
get used(): number;
|
|
83
|
+
/**
|
|
84
|
+
* Remaining available bytes.
|
|
85
|
+
*/
|
|
86
|
+
get available(): number;
|
|
87
|
+
/**
|
|
88
|
+
* The underlying SharedArrayBuffer.
|
|
89
|
+
*
|
|
90
|
+
* Can be transferred to Workers for shared memory access.
|
|
91
|
+
*/
|
|
92
|
+
get sharedBuffer(): SharedArrayBuffer;
|
|
93
|
+
/**
|
|
94
|
+
* Allocates memory from the pool.
|
|
95
|
+
*
|
|
96
|
+
* Thread-safe using Atomics.add for concurrent access.
|
|
97
|
+
*
|
|
98
|
+
* @param size - Number of bytes to allocate
|
|
99
|
+
* @returns Uint8Array view into the pool
|
|
100
|
+
* @throws RangeError if pool is exhausted
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const pool = new MemoryPool(1024);
|
|
105
|
+
* const buf1 = pool.alloc(100); // First 100 bytes
|
|
106
|
+
* const buf2 = pool.alloc(200); // Next 200 bytes
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
alloc(size: number): Uint8Array;
|
|
110
|
+
/**
|
|
111
|
+
* Allocates memory and fills it with zeros.
|
|
112
|
+
*
|
|
113
|
+
* @param size - Number of bytes to allocate
|
|
114
|
+
* @returns Uint8Array view into the pool, filled with zeros
|
|
115
|
+
* @throws RangeError if pool is exhausted
|
|
116
|
+
*/
|
|
117
|
+
allocZeroed(size: number): Uint8Array;
|
|
118
|
+
/**
|
|
119
|
+
* Allocates memory for a specific typed array.
|
|
120
|
+
*
|
|
121
|
+
* @param length - Number of elements
|
|
122
|
+
* @param bytesPerElement - Size of each element in bytes
|
|
123
|
+
* @returns Uint8Array view (use constructor of target type on underlying buffer)
|
|
124
|
+
* @throws RangeError if pool is exhausted
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const pool = new MemoryPool(1024);
|
|
129
|
+
* const bytes = pool.allocTyped(10, 4); // 40 bytes for 10 Uint32
|
|
130
|
+
* const u32View = new Uint32Array(bytes.buffer, bytes.byteOffset, 10);
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
allocTyped(length: number, bytesPerElement: number): Uint8Array;
|
|
134
|
+
/**
|
|
135
|
+
* Resets the pool, making all memory available again.
|
|
136
|
+
*
|
|
137
|
+
* WARNING: All previously allocated views become invalid.
|
|
138
|
+
* Only call when you're sure no references are held.
|
|
139
|
+
*
|
|
140
|
+
* Thread-safe using Atomics.store.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* const pool = new MemoryPool(1024);
|
|
145
|
+
* const buf = pool.alloc(100);
|
|
146
|
+
* // ... use buf ...
|
|
147
|
+
* pool.reset(); // buf is now invalid!
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
reset(): void;
|
|
151
|
+
/**
|
|
152
|
+
* Checks if the pool can accommodate an allocation.
|
|
153
|
+
*
|
|
154
|
+
* @param size - Number of bytes needed
|
|
155
|
+
* @returns True if allocation would succeed
|
|
156
|
+
*/
|
|
157
|
+
canAlloc(size: number): boolean;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Non-shared memory pool using regular ArrayBuffer.
|
|
161
|
+
*
|
|
162
|
+
* Use when SharedArrayBuffer is not available (e.g., browsers without
|
|
163
|
+
* proper COOP/COEP headers) or when thread-safety is not needed.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* import { SimpleMemoryPool } from '@btc-vision/bitcoin';
|
|
168
|
+
*
|
|
169
|
+
* const pool = new SimpleMemoryPool(1024 * 1024);
|
|
170
|
+
* const buf = pool.alloc(100);
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export declare class SimpleMemoryPool {
|
|
174
|
+
#private;
|
|
175
|
+
/**
|
|
176
|
+
* Creates a new SimpleMemoryPool.
|
|
177
|
+
*
|
|
178
|
+
* @param size - Size of the pool in bytes
|
|
179
|
+
*/
|
|
180
|
+
constructor(size: number);
|
|
181
|
+
/**
|
|
182
|
+
* Total capacity of the pool in bytes.
|
|
183
|
+
*/
|
|
184
|
+
get capacity(): number;
|
|
185
|
+
/**
|
|
186
|
+
* Current allocation offset (bytes used).
|
|
187
|
+
*/
|
|
188
|
+
get used(): number;
|
|
189
|
+
/**
|
|
190
|
+
* Remaining available bytes.
|
|
191
|
+
*/
|
|
192
|
+
get available(): number;
|
|
193
|
+
/**
|
|
194
|
+
* Allocates memory from the pool.
|
|
195
|
+
*
|
|
196
|
+
* @param size - Number of bytes to allocate
|
|
197
|
+
* @returns Uint8Array view into the pool
|
|
198
|
+
* @throws RangeError if pool is exhausted
|
|
199
|
+
*/
|
|
200
|
+
alloc(size: number): Uint8Array;
|
|
201
|
+
/**
|
|
202
|
+
* Allocates memory and fills it with zeros.
|
|
203
|
+
*
|
|
204
|
+
* @param size - Number of bytes to allocate
|
|
205
|
+
* @returns Uint8Array view into the pool, filled with zeros
|
|
206
|
+
*/
|
|
207
|
+
allocZeroed(size: number): Uint8Array;
|
|
208
|
+
/**
|
|
209
|
+
* Resets the pool, making all memory available again.
|
|
210
|
+
*/
|
|
211
|
+
reset(): void;
|
|
212
|
+
/**
|
|
213
|
+
* Checks if the pool can accommodate an allocation.
|
|
214
|
+
*
|
|
215
|
+
* @param size - Number of bytes needed
|
|
216
|
+
* @returns True if allocation would succeed
|
|
217
|
+
*/
|
|
218
|
+
canAlloc(size: number): boolean;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=MemoryPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryPool.d.ts","sourceRoot":"","sources":["../../src/io/MemoryPool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,UAAU;;IAsBnB;;;;;;;;;;;;;;;OAeG;gBACgB,IAAI,GAAE,MAAwB;IASjD;;;;;;;;;;;;;;;;;;;;OAoBG;WACW,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU;IAarE;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;;OAIG;IACH,IAAW,YAAY,IAAI,iBAAiB,CAE3C;IAED;;;;;;;;;;;;;;;OAeG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAmBtC;;;;;;OAMG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAM5C;;;;;;;;;;;;;;OAcG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,UAAU;IAItE;;;;;;;;;;;;;;;OAeG;IACI,KAAK,IAAI,IAAI;IAIpB;;;;;OAKG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGzC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAgB;;IAIzB;;;;OAIG;gBACgB,IAAI,EAAE,MAAM;IAI/B;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;;;;OAMG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAgBtC;;;;;OAKG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAM5C;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;;;;OAKG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGzC"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory pool using SharedArrayBuffer for zero-allocation operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides thread-safe memory allocation using Atomics for concurrent access.
|
|
5
|
+
* Ideal for parsing operations where temporary buffers are needed.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Thread-safe memory pool using SharedArrayBuffer.
|
|
11
|
+
*
|
|
12
|
+
* Allocates memory from a pre-allocated SharedArrayBuffer pool,
|
|
13
|
+
* eliminating garbage collection pressure from repeated allocations.
|
|
14
|
+
*
|
|
15
|
+
* Uses Atomics for thread-safe allocation when used with Workers.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { MemoryPool } from '@btc-vision/bitcoin';
|
|
20
|
+
*
|
|
21
|
+
* // Create a 1MB pool
|
|
22
|
+
* const pool = new MemoryPool(1024 * 1024);
|
|
23
|
+
*
|
|
24
|
+
* // Allocate memory for transaction parsing
|
|
25
|
+
* const txBuffer = pool.alloc(500);
|
|
26
|
+
* // ... use txBuffer ...
|
|
27
|
+
*
|
|
28
|
+
* // Reset pool when done (all allocations become invalid)
|
|
29
|
+
* pool.reset();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export class MemoryPool {
|
|
33
|
+
/**
|
|
34
|
+
* The underlying SharedArrayBuffer.
|
|
35
|
+
*/
|
|
36
|
+
#buffer;
|
|
37
|
+
/**
|
|
38
|
+
* View for data allocations.
|
|
39
|
+
*/
|
|
40
|
+
#data;
|
|
41
|
+
/**
|
|
42
|
+
* Control array for atomic offset management.
|
|
43
|
+
* Located at the end of the buffer.
|
|
44
|
+
*/
|
|
45
|
+
#control;
|
|
46
|
+
/**
|
|
47
|
+
* Maximum allocatable size (buffer size minus control bytes).
|
|
48
|
+
*/
|
|
49
|
+
#maxSize;
|
|
50
|
+
/**
|
|
51
|
+
* Creates a new MemoryPool.
|
|
52
|
+
*
|
|
53
|
+
* @param size - Size of the pool in bytes (default 4MB)
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import { MemoryPool } from '@btc-vision/bitcoin';
|
|
58
|
+
*
|
|
59
|
+
* // 4MB pool (default)
|
|
60
|
+
* const pool = new MemoryPool();
|
|
61
|
+
*
|
|
62
|
+
* // 16MB pool
|
|
63
|
+
* const largePool = new MemoryPool(16 * 1024 * 1024);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
constructor(size = 4 * 1024 * 1024) {
|
|
67
|
+
// Add 4 bytes for atomic control (current offset)
|
|
68
|
+
const totalSize = size + 4;
|
|
69
|
+
this.#buffer = new SharedArrayBuffer(totalSize);
|
|
70
|
+
this.#data = new Uint8Array(this.#buffer, 0, size);
|
|
71
|
+
this.#control = new Int32Array(this.#buffer, size, 1);
|
|
72
|
+
this.#maxSize = size;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Creates a MemoryPool from an existing SharedArrayBuffer.
|
|
76
|
+
*
|
|
77
|
+
* Useful for sharing a pool between Workers.
|
|
78
|
+
*
|
|
79
|
+
* @param buffer - Existing SharedArrayBuffer
|
|
80
|
+
* @returns A new MemoryPool instance wrapping the buffer
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* // Main thread
|
|
85
|
+
* const pool = new MemoryPool(1024 * 1024);
|
|
86
|
+
* worker.postMessage({ buffer: pool.sharedBuffer });
|
|
87
|
+
*
|
|
88
|
+
* // Worker thread
|
|
89
|
+
* self.onmessage = (e) => {
|
|
90
|
+
* const pool = MemoryPool.fromSharedBuffer(e.data.buffer);
|
|
91
|
+
* const mem = pool.alloc(100);
|
|
92
|
+
* };
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
static fromSharedBuffer(buffer) {
|
|
96
|
+
const pool = Object.create(MemoryPool.prototype);
|
|
97
|
+
const size = buffer.byteLength - 4;
|
|
98
|
+
// Use Object.defineProperty to set private fields on the created object
|
|
99
|
+
Object.defineProperty(pool, '#buffer', { value: buffer });
|
|
100
|
+
Object.defineProperty(pool, '#data', { value: new Uint8Array(buffer, 0, size) });
|
|
101
|
+
Object.defineProperty(pool, '#control', { value: new Int32Array(buffer, size, 1) });
|
|
102
|
+
Object.defineProperty(pool, '#maxSize', { value: size });
|
|
103
|
+
return pool;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Total capacity of the pool in bytes.
|
|
107
|
+
*/
|
|
108
|
+
get capacity() {
|
|
109
|
+
return this.#maxSize;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Current allocation offset (bytes used).
|
|
113
|
+
*
|
|
114
|
+
* Uses Atomics for thread-safe reading.
|
|
115
|
+
*/
|
|
116
|
+
get used() {
|
|
117
|
+
return Atomics.load(this.#control, 0);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Remaining available bytes.
|
|
121
|
+
*/
|
|
122
|
+
get available() {
|
|
123
|
+
return this.#maxSize - this.used;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* The underlying SharedArrayBuffer.
|
|
127
|
+
*
|
|
128
|
+
* Can be transferred to Workers for shared memory access.
|
|
129
|
+
*/
|
|
130
|
+
get sharedBuffer() {
|
|
131
|
+
return this.#buffer;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Allocates memory from the pool.
|
|
135
|
+
*
|
|
136
|
+
* Thread-safe using Atomics.add for concurrent access.
|
|
137
|
+
*
|
|
138
|
+
* @param size - Number of bytes to allocate
|
|
139
|
+
* @returns Uint8Array view into the pool
|
|
140
|
+
* @throws RangeError if pool is exhausted
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* const pool = new MemoryPool(1024);
|
|
145
|
+
* const buf1 = pool.alloc(100); // First 100 bytes
|
|
146
|
+
* const buf2 = pool.alloc(200); // Next 200 bytes
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
alloc(size) {
|
|
150
|
+
if (size <= 0) {
|
|
151
|
+
throw new RangeError('Allocation size must be positive');
|
|
152
|
+
}
|
|
153
|
+
// Atomically reserve space
|
|
154
|
+
const oldOffset = Atomics.add(this.#control, 0, size);
|
|
155
|
+
if (oldOffset + size > this.#maxSize) {
|
|
156
|
+
// Undo the allocation
|
|
157
|
+
Atomics.sub(this.#control, 0, size);
|
|
158
|
+
throw new RangeError(`MemoryPool exhausted: requested ${size} bytes, only ${this.#maxSize - oldOffset} available`);
|
|
159
|
+
}
|
|
160
|
+
return this.#data.subarray(oldOffset, oldOffset + size);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Allocates memory and fills it with zeros.
|
|
164
|
+
*
|
|
165
|
+
* @param size - Number of bytes to allocate
|
|
166
|
+
* @returns Uint8Array view into the pool, filled with zeros
|
|
167
|
+
* @throws RangeError if pool is exhausted
|
|
168
|
+
*/
|
|
169
|
+
allocZeroed(size) {
|
|
170
|
+
const mem = this.alloc(size);
|
|
171
|
+
mem.fill(0);
|
|
172
|
+
return mem;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Allocates memory for a specific typed array.
|
|
176
|
+
*
|
|
177
|
+
* @param length - Number of elements
|
|
178
|
+
* @param bytesPerElement - Size of each element in bytes
|
|
179
|
+
* @returns Uint8Array view (use constructor of target type on underlying buffer)
|
|
180
|
+
* @throws RangeError if pool is exhausted
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* const pool = new MemoryPool(1024);
|
|
185
|
+
* const bytes = pool.allocTyped(10, 4); // 40 bytes for 10 Uint32
|
|
186
|
+
* const u32View = new Uint32Array(bytes.buffer, bytes.byteOffset, 10);
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
allocTyped(length, bytesPerElement) {
|
|
190
|
+
return this.alloc(length * bytesPerElement);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Resets the pool, making all memory available again.
|
|
194
|
+
*
|
|
195
|
+
* WARNING: All previously allocated views become invalid.
|
|
196
|
+
* Only call when you're sure no references are held.
|
|
197
|
+
*
|
|
198
|
+
* Thread-safe using Atomics.store.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* const pool = new MemoryPool(1024);
|
|
203
|
+
* const buf = pool.alloc(100);
|
|
204
|
+
* // ... use buf ...
|
|
205
|
+
* pool.reset(); // buf is now invalid!
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
reset() {
|
|
209
|
+
Atomics.store(this.#control, 0, 0);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Checks if the pool can accommodate an allocation.
|
|
213
|
+
*
|
|
214
|
+
* @param size - Number of bytes needed
|
|
215
|
+
* @returns True if allocation would succeed
|
|
216
|
+
*/
|
|
217
|
+
canAlloc(size) {
|
|
218
|
+
return this.available >= size;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Non-shared memory pool using regular ArrayBuffer.
|
|
223
|
+
*
|
|
224
|
+
* Use when SharedArrayBuffer is not available (e.g., browsers without
|
|
225
|
+
* proper COOP/COEP headers) or when thread-safety is not needed.
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* ```typescript
|
|
229
|
+
* import { SimpleMemoryPool } from '@btc-vision/bitcoin';
|
|
230
|
+
*
|
|
231
|
+
* const pool = new SimpleMemoryPool(1024 * 1024);
|
|
232
|
+
* const buf = pool.alloc(100);
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
export class SimpleMemoryPool {
|
|
236
|
+
#data;
|
|
237
|
+
#offset = 0;
|
|
238
|
+
/**
|
|
239
|
+
* Creates a new SimpleMemoryPool.
|
|
240
|
+
*
|
|
241
|
+
* @param size - Size of the pool in bytes
|
|
242
|
+
*/
|
|
243
|
+
constructor(size) {
|
|
244
|
+
this.#data = new Uint8Array(size);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Total capacity of the pool in bytes.
|
|
248
|
+
*/
|
|
249
|
+
get capacity() {
|
|
250
|
+
return this.#data.length;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Current allocation offset (bytes used).
|
|
254
|
+
*/
|
|
255
|
+
get used() {
|
|
256
|
+
return this.#offset;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Remaining available bytes.
|
|
260
|
+
*/
|
|
261
|
+
get available() {
|
|
262
|
+
return this.#data.length - this.#offset;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Allocates memory from the pool.
|
|
266
|
+
*
|
|
267
|
+
* @param size - Number of bytes to allocate
|
|
268
|
+
* @returns Uint8Array view into the pool
|
|
269
|
+
* @throws RangeError if pool is exhausted
|
|
270
|
+
*/
|
|
271
|
+
alloc(size) {
|
|
272
|
+
if (size <= 0) {
|
|
273
|
+
throw new RangeError('Allocation size must be positive');
|
|
274
|
+
}
|
|
275
|
+
if (this.#offset + size > this.#data.length) {
|
|
276
|
+
throw new RangeError(`SimpleMemoryPool exhausted: requested ${size} bytes, only ${this.available} available`);
|
|
277
|
+
}
|
|
278
|
+
const start = this.#offset;
|
|
279
|
+
this.#offset += size;
|
|
280
|
+
return this.#data.subarray(start, this.#offset);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Allocates memory and fills it with zeros.
|
|
284
|
+
*
|
|
285
|
+
* @param size - Number of bytes to allocate
|
|
286
|
+
* @returns Uint8Array view into the pool, filled with zeros
|
|
287
|
+
*/
|
|
288
|
+
allocZeroed(size) {
|
|
289
|
+
const mem = this.alloc(size);
|
|
290
|
+
mem.fill(0);
|
|
291
|
+
return mem;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Resets the pool, making all memory available again.
|
|
295
|
+
*/
|
|
296
|
+
reset() {
|
|
297
|
+
this.#offset = 0;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Checks if the pool can accommodate an allocation.
|
|
301
|
+
*
|
|
302
|
+
* @param size - Number of bytes needed
|
|
303
|
+
* @returns True if allocation would succeed
|
|
304
|
+
*/
|
|
305
|
+
canAlloc(size) {
|
|
306
|
+
return this.available >= size;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=MemoryPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryPool.js","sourceRoot":"","sources":["../../src/io/MemoryPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64 encoding and decoding utilities.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Decodes a base64 string to a Uint8Array.
|
|
8
|
+
*
|
|
9
|
+
* @param base64 - The base64-encoded string to decode
|
|
10
|
+
* @returns Uint8Array containing the decoded bytes
|
|
11
|
+
*/
|
|
12
|
+
export declare function fromBase64(base64: string): Uint8Array;
|
|
13
|
+
//# sourceMappingURL=base64.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/io/base64.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAOrD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64 encoding and decoding utilities.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Decodes a base64 string to a Uint8Array.
|
|
8
|
+
*
|
|
9
|
+
* @param base64 - The base64-encoded string to decode
|
|
10
|
+
* @returns Uint8Array containing the decoded bytes
|
|
11
|
+
*/
|
|
12
|
+
export function fromBase64(base64) {
|
|
13
|
+
const binaryString = atob(base64);
|
|
14
|
+
const bytes = new Uint8Array(binaryString.length);
|
|
15
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
16
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
17
|
+
}
|
|
18
|
+
return bytes;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/io/base64.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hex encoding and decoding utilities.
|
|
3
|
+
*
|
|
4
|
+
* Direct implementations with zero dependencies and no wrappers.
|
|
5
|
+
* Optimized for performance with lookup tables.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Converts a Uint8Array to a lowercase hex string.
|
|
11
|
+
*
|
|
12
|
+
* @param bytes - The byte array to convert
|
|
13
|
+
* @returns Lowercase hex string representation
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { toHex } from '@btc-vision/bitcoin';
|
|
18
|
+
*
|
|
19
|
+
* const bytes = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);
|
|
20
|
+
* const hex = toHex(bytes);
|
|
21
|
+
* console.log(hex); // 'deadbeef'
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function toHex(bytes: Uint8Array): string;
|
|
25
|
+
/**
|
|
26
|
+
* Converts a hex string to a Uint8Array.
|
|
27
|
+
*
|
|
28
|
+
* Accepts hex strings with or without '0x' prefix.
|
|
29
|
+
* Case-insensitive (accepts both 'DEADBEEF' and 'deadbeef').
|
|
30
|
+
*
|
|
31
|
+
* @param hex - The hex string to convert
|
|
32
|
+
* @returns Uint8Array containing the decoded bytes
|
|
33
|
+
* @throws TypeError if hex string has odd length
|
|
34
|
+
* @throws TypeError if hex string contains invalid characters
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* import { fromHex, toHex } from '@btc-vision/bitcoin';
|
|
39
|
+
*
|
|
40
|
+
* const bytes = fromHex('deadbeef');
|
|
41
|
+
* console.log(bytes); // Uint8Array [222, 173, 190, 239]
|
|
42
|
+
*
|
|
43
|
+
* // Also works with 0x prefix
|
|
44
|
+
* const bytes2 = fromHex('0xCAFEBABE');
|
|
45
|
+
* console.log(toHex(bytes2)); // 'cafebabe'
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function fromHex(hex: string): Uint8Array;
|
|
49
|
+
/**
|
|
50
|
+
* Checks if a string is valid hexadecimal.
|
|
51
|
+
*
|
|
52
|
+
* @param value - The string to check
|
|
53
|
+
* @returns True if the string is valid hex (even length, valid chars)
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import { isHex } from '@btc-vision/bitcoin';
|
|
58
|
+
*
|
|
59
|
+
* isHex('deadbeef'); // true
|
|
60
|
+
* isHex('0xdeadbeef'); // true
|
|
61
|
+
* isHex('DEADBEEF'); // true
|
|
62
|
+
* isHex('deadbee'); // false (odd length)
|
|
63
|
+
* isHex('deadbeeg'); // false (invalid char)
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function isHex(value: string): boolean;
|
|
67
|
+
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/io/hex.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0BH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAM/C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAsC/C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAkB5C"}
|