@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/test/bufferutils.spec.ts
CHANGED
|
@@ -1,34 +1,31 @@
|
|
|
1
1
|
import assert from 'assert';
|
|
2
2
|
import { describe, it } from 'vitest';
|
|
3
|
-
import
|
|
4
|
-
import { BufferReader, BufferWriter } from '../src/bufferutils.js';
|
|
3
|
+
import { BinaryReader, BinaryWriter, fromHex, toHex } from '../src/io/index.js';
|
|
5
4
|
|
|
6
5
|
import fixtures from './fixtures/bufferutils.json' with { type: 'json' };
|
|
7
6
|
|
|
8
7
|
import * as varuint from 'varuint-bitcoin';
|
|
9
8
|
|
|
10
|
-
describe('
|
|
11
|
-
function concatToBuffer(values: number[][]):
|
|
12
|
-
|
|
9
|
+
describe('BinaryReader/BinaryWriter', () => {
|
|
10
|
+
function concatToBuffer(values: number[][]): Uint8Array {
|
|
11
|
+
const totalLength = values.reduce((sum, arr) => sum + arr.length, 0);
|
|
12
|
+
const result = new Uint8Array(totalLength);
|
|
13
|
+
let offset = 0;
|
|
14
|
+
for (const arr of values) {
|
|
15
|
+
result.set(arr, offset);
|
|
16
|
+
offset += arr.length;
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
describe('readUInt64LE', () => {
|
|
16
22
|
fixtures.valid.forEach((f) => {
|
|
17
23
|
it('decodes ' + f.hex, () => {
|
|
18
|
-
const
|
|
19
|
-
const
|
|
24
|
+
const data = fromHex(f.hex);
|
|
25
|
+
const reader = new BinaryReader(data);
|
|
26
|
+
const num = reader.readUInt64LE();
|
|
20
27
|
|
|
21
|
-
assert.strictEqual(num, f.dec);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
fixtures.invalid.readUInt64LE.forEach((f) => {
|
|
26
|
-
it('throws on ' + f.description, () => {
|
|
27
|
-
const buffer = Buffer.from(f.hex, 'hex');
|
|
28
|
-
|
|
29
|
-
assert.throws(() => {
|
|
30
|
-
bufferutils.readUInt64LE(buffer, 0);
|
|
31
|
-
}, new RegExp(f.exception));
|
|
28
|
+
assert.strictEqual(Number(num), f.dec);
|
|
32
29
|
});
|
|
33
30
|
});
|
|
34
31
|
});
|
|
@@ -36,59 +33,48 @@ describe('bufferutils', () => {
|
|
|
36
33
|
describe('writeUInt64LE', () => {
|
|
37
34
|
fixtures.valid.forEach((f) => {
|
|
38
35
|
it('encodes ' + f.dec, () => {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
assert.strictEqual(buffer.toString('hex'), f.hex);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
fixtures.invalid.writeUInt64LE.forEach((f) => {
|
|
47
|
-
it('throws on ' + f.description, () => {
|
|
48
|
-
const buffer = Buffer.alloc(8, 0);
|
|
49
|
-
|
|
50
|
-
assert.throws(() => {
|
|
51
|
-
bufferutils.writeUInt64LE(buffer, f.dec, 0);
|
|
52
|
-
}, new RegExp(f.exception));
|
|
36
|
+
const writer = new BinaryWriter(8);
|
|
37
|
+
writer.writeUInt64LE(BigInt(f.dec));
|
|
38
|
+
assert.strictEqual(toHex(writer.finish()), f.hex);
|
|
53
39
|
});
|
|
54
40
|
});
|
|
55
41
|
});
|
|
56
42
|
|
|
57
|
-
describe('
|
|
43
|
+
describe('BinaryWriter', () => {
|
|
58
44
|
function testBuffer(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
expectedOffset: number =
|
|
45
|
+
writer: BinaryWriter,
|
|
46
|
+
expectedData: Uint8Array,
|
|
47
|
+
expectedOffset: number = expectedData.length,
|
|
62
48
|
): void {
|
|
63
|
-
assert.strictEqual(
|
|
49
|
+
assert.strictEqual(writer.offset, expectedOffset);
|
|
64
50
|
assert.deepStrictEqual(
|
|
65
|
-
|
|
66
|
-
|
|
51
|
+
writer.data.slice(0, expectedOffset),
|
|
52
|
+
expectedData.slice(0, expectedOffset),
|
|
67
53
|
);
|
|
68
54
|
}
|
|
69
55
|
|
|
70
|
-
it('
|
|
71
|
-
const
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
testBuffer(
|
|
56
|
+
it('constructor with size', () => {
|
|
57
|
+
const expectedData = fromHex('04030201');
|
|
58
|
+
const writer = new BinaryWriter(4);
|
|
59
|
+
writer.writeInt32LE(0x01020304);
|
|
60
|
+
testBuffer(writer, expectedData);
|
|
75
61
|
});
|
|
76
62
|
|
|
77
|
-
it('
|
|
63
|
+
it('writeUInt8', () => {
|
|
78
64
|
const values = [0, 1, 254, 255];
|
|
79
|
-
const
|
|
80
|
-
const
|
|
65
|
+
const expectedData = new Uint8Array([0, 1, 0xfe, 0xff]);
|
|
66
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
81
67
|
values.forEach((v: number) => {
|
|
82
|
-
const expectedOffset =
|
|
83
|
-
|
|
84
|
-
testBuffer(
|
|
68
|
+
const expectedOffset = writer.offset + 1;
|
|
69
|
+
writer.writeUInt8(v);
|
|
70
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
85
71
|
});
|
|
86
|
-
testBuffer(
|
|
72
|
+
testBuffer(writer, expectedData);
|
|
87
73
|
});
|
|
88
74
|
|
|
89
|
-
it('
|
|
75
|
+
it('writeInt32LE', () => {
|
|
90
76
|
const values = [0, 1, Math.pow(2, 31) - 2, Math.pow(2, 31) - 1, -1, -Math.pow(2, 31)];
|
|
91
|
-
const
|
|
77
|
+
const expectedData = concatToBuffer([
|
|
92
78
|
[0, 0, 0, 0],
|
|
93
79
|
[1, 0, 0, 0],
|
|
94
80
|
[0xfe, 0xff, 0xff, 0x7f],
|
|
@@ -96,48 +82,48 @@ describe('bufferutils', () => {
|
|
|
96
82
|
[0xff, 0xff, 0xff, 0xff],
|
|
97
83
|
[0x00, 0x00, 0x00, 0x80],
|
|
98
84
|
]);
|
|
99
|
-
const
|
|
85
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
100
86
|
values.forEach((value: number) => {
|
|
101
|
-
const expectedOffset =
|
|
102
|
-
|
|
103
|
-
testBuffer(
|
|
87
|
+
const expectedOffset = writer.offset + 4;
|
|
88
|
+
writer.writeInt32LE(value);
|
|
89
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
104
90
|
});
|
|
105
|
-
testBuffer(
|
|
91
|
+
testBuffer(writer, expectedData);
|
|
106
92
|
});
|
|
107
93
|
|
|
108
|
-
it('
|
|
94
|
+
it('writeUInt32LE', () => {
|
|
109
95
|
const maxUInt32 = Math.pow(2, 32) - 1;
|
|
110
96
|
const values = [0, 1, Math.pow(2, 16), maxUInt32];
|
|
111
|
-
const
|
|
97
|
+
const expectedData = concatToBuffer([
|
|
112
98
|
[0, 0, 0, 0],
|
|
113
99
|
[1, 0, 0, 0],
|
|
114
100
|
[0, 0, 1, 0],
|
|
115
101
|
[0xff, 0xff, 0xff, 0xff],
|
|
116
102
|
]);
|
|
117
|
-
const
|
|
103
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
118
104
|
values.forEach((value: number) => {
|
|
119
|
-
const expectedOffset =
|
|
120
|
-
|
|
121
|
-
testBuffer(
|
|
105
|
+
const expectedOffset = writer.offset + 4;
|
|
106
|
+
writer.writeUInt32LE(value);
|
|
107
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
122
108
|
});
|
|
123
|
-
testBuffer(
|
|
109
|
+
testBuffer(writer, expectedData);
|
|
124
110
|
});
|
|
125
111
|
|
|
126
|
-
it('
|
|
127
|
-
const values = [
|
|
128
|
-
const
|
|
112
|
+
it('writeUInt64LE', () => {
|
|
113
|
+
const values = [0n, 1n, BigInt(Math.pow(2, 32)), BigInt(Number.MAX_SAFE_INTEGER)];
|
|
114
|
+
const expectedData = concatToBuffer([
|
|
129
115
|
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
130
116
|
[1, 0, 0, 0, 0, 0, 0, 0],
|
|
131
117
|
[0, 0, 0, 0, 1, 0, 0, 0],
|
|
132
118
|
[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
|
|
133
119
|
]);
|
|
134
|
-
const
|
|
135
|
-
values.forEach((value:
|
|
136
|
-
const expectedOffset =
|
|
137
|
-
|
|
138
|
-
testBuffer(
|
|
120
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
121
|
+
values.forEach((value: bigint) => {
|
|
122
|
+
const expectedOffset = writer.offset + 8;
|
|
123
|
+
writer.writeUInt64LE(value);
|
|
124
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
139
125
|
});
|
|
140
|
-
testBuffer(
|
|
126
|
+
testBuffer(writer, expectedData);
|
|
141
127
|
});
|
|
142
128
|
|
|
143
129
|
it('writeVarInt', () => {
|
|
@@ -157,7 +143,7 @@ describe('bufferutils', () => {
|
|
|
157
143
|
Math.pow(2, 32),
|
|
158
144
|
Number.MAX_SAFE_INTEGER,
|
|
159
145
|
];
|
|
160
|
-
const
|
|
146
|
+
const expectedData = concatToBuffer([
|
|
161
147
|
[0x00],
|
|
162
148
|
[0x01],
|
|
163
149
|
[0xfc],
|
|
@@ -173,126 +159,138 @@ describe('bufferutils', () => {
|
|
|
173
159
|
[0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00],
|
|
174
160
|
[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
|
|
175
161
|
]);
|
|
176
|
-
const
|
|
162
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
177
163
|
values.forEach((value: number) => {
|
|
178
|
-
const expectedOffset =
|
|
179
|
-
|
|
180
|
-
testBuffer(
|
|
164
|
+
const expectedOffset = writer.offset + varuint.encodingLength(value);
|
|
165
|
+
writer.writeVarInt(value);
|
|
166
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
181
167
|
});
|
|
182
|
-
testBuffer(
|
|
168
|
+
testBuffer(writer, expectedData);
|
|
183
169
|
});
|
|
184
170
|
|
|
185
|
-
it('
|
|
171
|
+
it('writeBytes', () => {
|
|
186
172
|
const values = [[], [1], [1, 2, 3, 4], [254, 255]];
|
|
187
|
-
const
|
|
188
|
-
const
|
|
173
|
+
const expectedData = concatToBuffer(values);
|
|
174
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
189
175
|
values.forEach((v: number[]) => {
|
|
190
|
-
const expectedOffset =
|
|
191
|
-
|
|
192
|
-
testBuffer(
|
|
176
|
+
const expectedOffset = writer.offset + v.length;
|
|
177
|
+
writer.writeBytes(new Uint8Array(v));
|
|
178
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
193
179
|
});
|
|
194
|
-
testBuffer(
|
|
180
|
+
testBuffer(writer, expectedData);
|
|
195
181
|
assert.throws(() => {
|
|
196
|
-
|
|
197
|
-
},
|
|
182
|
+
writer.writeBytes(new Uint8Array([0, 0]));
|
|
183
|
+
}, /out of bounds|Cannot write|Write past end/);
|
|
198
184
|
});
|
|
199
185
|
|
|
200
|
-
it('
|
|
201
|
-
const values = [
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
]);
|
|
209
|
-
const
|
|
210
|
-
|
|
186
|
+
it('writeVarBytes', () => {
|
|
187
|
+
const values = [
|
|
188
|
+
new Uint8Array(1).fill(1),
|
|
189
|
+
new Uint8Array(252).fill(2),
|
|
190
|
+
new Uint8Array(253).fill(3),
|
|
191
|
+
];
|
|
192
|
+
const part1 = new Uint8Array([0x01, 0x01]);
|
|
193
|
+
const part2 = new Uint8Array([0xfc, ...new Array(252).fill(0x02)]);
|
|
194
|
+
const part3 = new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(0x03)]);
|
|
195
|
+
const expectedData = new Uint8Array(part1.length + part2.length + part3.length);
|
|
196
|
+
expectedData.set(part1, 0);
|
|
197
|
+
expectedData.set(part2, part1.length);
|
|
198
|
+
expectedData.set(part3, part1.length + part2.length);
|
|
199
|
+
|
|
200
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
201
|
+
values.forEach((value: Uint8Array) => {
|
|
211
202
|
const expectedOffset =
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
testBuffer(
|
|
203
|
+
writer.offset + varuint.encodingLength(value.length) + value.length;
|
|
204
|
+
writer.writeVarBytes(value);
|
|
205
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
215
206
|
});
|
|
216
|
-
testBuffer(
|
|
207
|
+
testBuffer(writer, expectedData);
|
|
217
208
|
});
|
|
218
209
|
|
|
219
210
|
it('writeVector', () => {
|
|
220
211
|
const values = [
|
|
221
|
-
[
|
|
222
|
-
Array(253).fill(
|
|
212
|
+
[new Uint8Array(1).fill(4), new Uint8Array(253).fill(5)],
|
|
213
|
+
Array(253).fill(new Uint8Array(1).fill(6)),
|
|
223
214
|
];
|
|
224
|
-
const expectedBuffer = Buffer.concat([
|
|
225
|
-
Buffer.from([0x02]),
|
|
226
|
-
Buffer.from([0x01, 0x04]),
|
|
227
|
-
Buffer.from([0xfd, 0xfd, 0x00]),
|
|
228
|
-
Buffer.alloc(253, 5),
|
|
229
|
-
|
|
230
|
-
Buffer.from([0xfd, 0xfd, 0x00]),
|
|
231
|
-
Buffer.concat(
|
|
232
|
-
Array(253)
|
|
233
|
-
.fill(0)
|
|
234
|
-
.map(() => Buffer.from([0x01, 0x06])),
|
|
235
|
-
),
|
|
236
|
-
]);
|
|
237
215
|
|
|
238
|
-
|
|
239
|
-
|
|
216
|
+
// Build expected data manually
|
|
217
|
+
const parts: Uint8Array[] = [];
|
|
218
|
+
// First vector: count=2, then items
|
|
219
|
+
parts.push(new Uint8Array([0x02]));
|
|
220
|
+
parts.push(new Uint8Array([0x01, 0x04]));
|
|
221
|
+
parts.push(new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(5)]));
|
|
222
|
+
// Second vector: count=253, then 253 items of [0x01, 0x06]
|
|
223
|
+
parts.push(new Uint8Array([0xfd, 0xfd, 0x00]));
|
|
224
|
+
for (let i = 0; i < 253; i++) {
|
|
225
|
+
parts.push(new Uint8Array([0x01, 0x06]));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const totalLength = parts.reduce((sum, p) => sum + p.length, 0);
|
|
229
|
+
const expectedData = new Uint8Array(totalLength);
|
|
230
|
+
let offset = 0;
|
|
231
|
+
for (const part of parts) {
|
|
232
|
+
expectedData.set(part, offset);
|
|
233
|
+
offset += part.length;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const writer = new BinaryWriter(expectedData.length);
|
|
237
|
+
values.forEach((value: Uint8Array[]) => {
|
|
240
238
|
const expectedOffset =
|
|
241
|
-
|
|
239
|
+
writer.offset +
|
|
242
240
|
varuint.encodingLength(value.length) +
|
|
243
241
|
value.reduce(
|
|
244
242
|
(sum: number, v) => sum + varuint.encodingLength(v.length) + v.length,
|
|
245
243
|
0,
|
|
246
244
|
);
|
|
247
|
-
|
|
248
|
-
testBuffer(
|
|
245
|
+
writer.writeVector(value);
|
|
246
|
+
testBuffer(writer, expectedData, expectedOffset);
|
|
249
247
|
});
|
|
250
|
-
testBuffer(
|
|
248
|
+
testBuffer(writer, expectedData);
|
|
251
249
|
});
|
|
252
250
|
|
|
253
|
-
it('
|
|
254
|
-
const expected =
|
|
255
|
-
const
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
const result =
|
|
259
|
-
testBuffer(
|
|
260
|
-
|
|
251
|
+
it('finish', () => {
|
|
252
|
+
const expected = fromHex('0403020108070605');
|
|
253
|
+
const writer = new BinaryWriter(8);
|
|
254
|
+
writer.writeUInt32LE(0x01020304);
|
|
255
|
+
writer.writeUInt32LE(0x05060708);
|
|
256
|
+
const result = writer.finish();
|
|
257
|
+
testBuffer(writer, result);
|
|
258
|
+
assert.deepStrictEqual(result, expected);
|
|
261
259
|
});
|
|
262
260
|
});
|
|
263
261
|
|
|
264
|
-
describe('
|
|
262
|
+
describe('BinaryReader', () => {
|
|
265
263
|
function testValue(
|
|
266
|
-
|
|
267
|
-
value:
|
|
268
|
-
expectedValue:
|
|
269
|
-
expectedOffset: number =
|
|
264
|
+
reader: BinaryReader,
|
|
265
|
+
value: Uint8Array | number | bigint,
|
|
266
|
+
expectedValue: Uint8Array | number | bigint,
|
|
267
|
+
expectedOffset: number = 0,
|
|
270
268
|
): void {
|
|
271
|
-
assert.strictEqual(
|
|
272
|
-
if (
|
|
269
|
+
assert.strictEqual(reader.offset, expectedOffset);
|
|
270
|
+
if (value instanceof Uint8Array && expectedValue instanceof Uint8Array) {
|
|
273
271
|
assert.deepStrictEqual(
|
|
274
|
-
|
|
272
|
+
value.slice(0, expectedOffset),
|
|
275
273
|
expectedValue.slice(0, expectedOffset),
|
|
276
274
|
);
|
|
277
275
|
} else {
|
|
278
|
-
assert.strictEqual(value
|
|
276
|
+
assert.strictEqual(value, expectedValue);
|
|
279
277
|
}
|
|
280
278
|
}
|
|
281
279
|
|
|
282
280
|
it('readUInt8', () => {
|
|
283
281
|
const values = [0, 1, 0xfe, 0xff];
|
|
284
|
-
const
|
|
285
|
-
const
|
|
282
|
+
const data = new Uint8Array([0, 1, 0xfe, 0xff]);
|
|
283
|
+
const reader = new BinaryReader(data);
|
|
286
284
|
values.forEach((v: number) => {
|
|
287
|
-
const expectedOffset =
|
|
288
|
-
const val =
|
|
289
|
-
testValue(
|
|
285
|
+
const expectedOffset = reader.offset + 1;
|
|
286
|
+
const val = reader.readUInt8();
|
|
287
|
+
testValue(reader, val, v, expectedOffset);
|
|
290
288
|
});
|
|
291
289
|
});
|
|
292
290
|
|
|
293
|
-
it('
|
|
291
|
+
it('readInt32LE', () => {
|
|
294
292
|
const values = [0, 1, Math.pow(2, 31) - 2, Math.pow(2, 31) - 1, -1, -Math.pow(2, 31)];
|
|
295
|
-
const
|
|
293
|
+
const data = concatToBuffer([
|
|
296
294
|
[0, 0, 0, 0],
|
|
297
295
|
[1, 0, 0, 0],
|
|
298
296
|
[0xfe, 0xff, 0xff, 0x7f],
|
|
@@ -300,44 +298,44 @@ describe('bufferutils', () => {
|
|
|
300
298
|
[0xff, 0xff, 0xff, 0xff],
|
|
301
299
|
[0x00, 0x00, 0x00, 0x80],
|
|
302
300
|
]);
|
|
303
|
-
const
|
|
301
|
+
const reader = new BinaryReader(data);
|
|
304
302
|
values.forEach((value: number) => {
|
|
305
|
-
const expectedOffset =
|
|
306
|
-
const val =
|
|
307
|
-
testValue(
|
|
303
|
+
const expectedOffset = reader.offset + 4;
|
|
304
|
+
const val = reader.readInt32LE();
|
|
305
|
+
testValue(reader, val, value, expectedOffset);
|
|
308
306
|
});
|
|
309
307
|
});
|
|
310
308
|
|
|
311
|
-
it('
|
|
309
|
+
it('readUInt32LE', () => {
|
|
312
310
|
const maxUInt32 = Math.pow(2, 32) - 1;
|
|
313
311
|
const values = [0, 1, Math.pow(2, 16), maxUInt32];
|
|
314
|
-
const
|
|
312
|
+
const data = concatToBuffer([
|
|
315
313
|
[0, 0, 0, 0],
|
|
316
314
|
[1, 0, 0, 0],
|
|
317
315
|
[0, 0, 1, 0],
|
|
318
316
|
[0xff, 0xff, 0xff, 0xff],
|
|
319
317
|
]);
|
|
320
|
-
const
|
|
318
|
+
const reader = new BinaryReader(data);
|
|
321
319
|
values.forEach((value: number) => {
|
|
322
|
-
const expectedOffset =
|
|
323
|
-
const val =
|
|
324
|
-
testValue(
|
|
320
|
+
const expectedOffset = reader.offset + 4;
|
|
321
|
+
const val = reader.readUInt32LE();
|
|
322
|
+
testValue(reader, val, value, expectedOffset);
|
|
325
323
|
});
|
|
326
324
|
});
|
|
327
325
|
|
|
328
|
-
it('
|
|
329
|
-
const values = [
|
|
330
|
-
const
|
|
326
|
+
it('readUInt64LE', () => {
|
|
327
|
+
const values = [0n, 1n, BigInt(Math.pow(2, 32)), BigInt(Number.MAX_SAFE_INTEGER)];
|
|
328
|
+
const data = concatToBuffer([
|
|
331
329
|
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
332
330
|
[1, 0, 0, 0, 0, 0, 0, 0],
|
|
333
331
|
[0, 0, 0, 0, 1, 0, 0, 0],
|
|
334
332
|
[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
|
|
335
333
|
]);
|
|
336
|
-
const
|
|
337
|
-
values.forEach((value:
|
|
338
|
-
const expectedOffset =
|
|
339
|
-
const val =
|
|
340
|
-
testValue(
|
|
334
|
+
const reader = new BinaryReader(data);
|
|
335
|
+
values.forEach((value: bigint) => {
|
|
336
|
+
const expectedOffset = reader.offset + 8;
|
|
337
|
+
const val = reader.readUInt64LE();
|
|
338
|
+
testValue(reader, val, value, expectedOffset);
|
|
341
339
|
});
|
|
342
340
|
});
|
|
343
341
|
|
|
@@ -358,7 +356,7 @@ describe('bufferutils', () => {
|
|
|
358
356
|
Math.pow(2, 32),
|
|
359
357
|
Number.MAX_SAFE_INTEGER,
|
|
360
358
|
];
|
|
361
|
-
const
|
|
359
|
+
const data = concatToBuffer([
|
|
362
360
|
[0x00],
|
|
363
361
|
[0x01],
|
|
364
362
|
[0xfc],
|
|
@@ -374,76 +372,92 @@ describe('bufferutils', () => {
|
|
|
374
372
|
[0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00],
|
|
375
373
|
[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
|
|
376
374
|
]);
|
|
377
|
-
const
|
|
375
|
+
const reader = new BinaryReader(data);
|
|
378
376
|
values.forEach((value: number) => {
|
|
379
|
-
const expectedOffset =
|
|
380
|
-
const val =
|
|
381
|
-
testValue(
|
|
377
|
+
const expectedOffset = reader.offset + varuint.encodingLength(value);
|
|
378
|
+
const val = reader.readVarInt();
|
|
379
|
+
testValue(reader, val, value, expectedOffset);
|
|
382
380
|
});
|
|
383
381
|
});
|
|
384
382
|
|
|
385
|
-
it('
|
|
383
|
+
it('readBytes', () => {
|
|
386
384
|
const values = [[1], [1, 2, 3, 4], [254, 255]];
|
|
387
|
-
const
|
|
388
|
-
const
|
|
385
|
+
const data = concatToBuffer(values);
|
|
386
|
+
const reader = new BinaryReader(data);
|
|
389
387
|
values.forEach((v: number[]) => {
|
|
390
|
-
const expectedOffset =
|
|
391
|
-
const val =
|
|
392
|
-
|
|
388
|
+
const expectedOffset = reader.offset + v.length;
|
|
389
|
+
const val = reader.readBytes(v.length);
|
|
390
|
+
assert.strictEqual(reader.offset, expectedOffset);
|
|
391
|
+
assert.deepStrictEqual(Array.from(val), v);
|
|
393
392
|
});
|
|
394
393
|
assert.throws(() => {
|
|
395
|
-
|
|
396
|
-
},
|
|
394
|
+
reader.readBytes(2);
|
|
395
|
+
}, /past end|out of bounds/);
|
|
397
396
|
});
|
|
398
397
|
|
|
399
|
-
it('
|
|
400
|
-
const values = [
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
]);
|
|
408
|
-
const
|
|
409
|
-
|
|
398
|
+
it('readVarBytes', () => {
|
|
399
|
+
const values = [
|
|
400
|
+
new Uint8Array(1).fill(1),
|
|
401
|
+
new Uint8Array(252).fill(2),
|
|
402
|
+
new Uint8Array(253).fill(3),
|
|
403
|
+
];
|
|
404
|
+
const part1 = new Uint8Array([0x01, 0x01]);
|
|
405
|
+
const part2 = new Uint8Array([0xfc, ...new Array(252).fill(0x02)]);
|
|
406
|
+
const part3 = new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(0x03)]);
|
|
407
|
+
const data = new Uint8Array(part1.length + part2.length + part3.length);
|
|
408
|
+
data.set(part1, 0);
|
|
409
|
+
data.set(part2, part1.length);
|
|
410
|
+
data.set(part3, part1.length + part2.length);
|
|
411
|
+
|
|
412
|
+
const reader = new BinaryReader(data);
|
|
413
|
+
values.forEach((value: Uint8Array) => {
|
|
410
414
|
const expectedOffset =
|
|
411
|
-
|
|
412
|
-
const val =
|
|
413
|
-
|
|
415
|
+
reader.offset + varuint.encodingLength(value.length) + value.length;
|
|
416
|
+
const val = reader.readVarBytes();
|
|
417
|
+
assert.strictEqual(reader.offset, expectedOffset);
|
|
418
|
+
assert.deepStrictEqual(val, value);
|
|
414
419
|
});
|
|
415
420
|
});
|
|
416
421
|
|
|
417
422
|
it('readVector', () => {
|
|
418
423
|
const values = [
|
|
419
|
-
[
|
|
420
|
-
Array(253).fill(
|
|
424
|
+
[new Uint8Array(1).fill(4), new Uint8Array(253).fill(5)],
|
|
425
|
+
Array(253).fill(new Uint8Array(1).fill(6)),
|
|
421
426
|
];
|
|
422
|
-
const buffer = Buffer.concat([
|
|
423
|
-
Buffer.from([0x02]),
|
|
424
|
-
Buffer.from([0x01, 0x04]),
|
|
425
|
-
Buffer.from([0xfd, 0xfd, 0x00]),
|
|
426
|
-
Buffer.alloc(253, 5),
|
|
427
|
-
|
|
428
|
-
Buffer.from([0xfd, 0xfd, 0x00]),
|
|
429
|
-
Buffer.concat(
|
|
430
|
-
Array(253)
|
|
431
|
-
.fill(0)
|
|
432
|
-
.map(() => Buffer.from([0x01, 0x06])),
|
|
433
|
-
),
|
|
434
|
-
]);
|
|
435
427
|
|
|
436
|
-
|
|
437
|
-
|
|
428
|
+
// Build data manually
|
|
429
|
+
const parts: Uint8Array[] = [];
|
|
430
|
+
parts.push(new Uint8Array([0x02]));
|
|
431
|
+
parts.push(new Uint8Array([0x01, 0x04]));
|
|
432
|
+
parts.push(new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(5)]));
|
|
433
|
+
parts.push(new Uint8Array([0xfd, 0xfd, 0x00]));
|
|
434
|
+
for (let i = 0; i < 253; i++) {
|
|
435
|
+
parts.push(new Uint8Array([0x01, 0x06]));
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const totalLength = parts.reduce((sum, p) => sum + p.length, 0);
|
|
439
|
+
const data = new Uint8Array(totalLength);
|
|
440
|
+
let offset = 0;
|
|
441
|
+
for (const part of parts) {
|
|
442
|
+
data.set(part, offset);
|
|
443
|
+
offset += part.length;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
const reader = new BinaryReader(data);
|
|
447
|
+
values.forEach((value: Uint8Array[]) => {
|
|
438
448
|
const expectedOffset =
|
|
439
|
-
|
|
449
|
+
reader.offset +
|
|
440
450
|
varuint.encodingLength(value.length) +
|
|
441
451
|
value.reduce(
|
|
442
452
|
(sum: number, v) => sum + varuint.encodingLength(v.length) + v.length,
|
|
443
453
|
0,
|
|
444
454
|
);
|
|
445
|
-
const val =
|
|
446
|
-
|
|
455
|
+
const val = reader.readVector();
|
|
456
|
+
assert.strictEqual(reader.offset, expectedOffset);
|
|
457
|
+
assert.strictEqual(val.length, value.length);
|
|
458
|
+
for (let i = 0; i < val.length; i++) {
|
|
459
|
+
assert.deepStrictEqual(val[i], value[i]);
|
|
460
|
+
}
|
|
447
461
|
});
|
|
448
462
|
});
|
|
449
463
|
});
|