@bsv/sdk 1.0.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/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/discussion.md +24 -0
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +23 -0
- package/CHANGELOG.md +72 -0
- package/CONTRIBUTING.md +85 -0
- package/LICENSE.txt +28 -0
- package/README.md +87 -0
- package/ROADMAP.md +3 -0
- package/dist/cjs/mod.js +25 -0
- package/dist/cjs/mod.js.map +1 -0
- package/dist/cjs/package.json +42 -0
- package/dist/cjs/src/compat/BIP39.js +272 -0
- package/dist/cjs/src/compat/BIP39.js.map +1 -0
- package/dist/cjs/src/compat/BSM.js +77 -0
- package/dist/cjs/src/compat/BSM.js.map +1 -0
- package/dist/cjs/src/compat/ECIES.js +483 -0
- package/dist/cjs/src/compat/ECIES.js.map +1 -0
- package/dist/cjs/src/compat/HD.js +326 -0
- package/dist/cjs/src/compat/HD.js.map +1 -0
- package/dist/cjs/src/compat/Mnemonic.js +298 -0
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -0
- package/dist/cjs/src/compat/bip-39-wordlist-en.js +2057 -0
- package/dist/cjs/src/compat/bip-39-wordlist-en.js.map +1 -0
- package/dist/cjs/src/compat/index.js +37 -0
- package/dist/cjs/src/compat/index.js.map +1 -0
- package/dist/cjs/src/messages/EncryptedMessage.js +69 -0
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -0
- package/dist/cjs/src/messages/SignedMessage.js +85 -0
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -0
- package/dist/cjs/src/messages/index.js +29 -0
- package/dist/cjs/src/messages/index.js.map +1 -0
- package/dist/cjs/src/primitives/AESGCM.js +384 -0
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -0
- package/dist/cjs/src/primitives/BasePoint.js +19 -0
- package/dist/cjs/src/primitives/BasePoint.js.map +1 -0
- package/dist/cjs/src/primitives/BigNumber.js +4269 -0
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -0
- package/dist/cjs/src/primitives/Curve.js +1126 -0
- package/dist/cjs/src/primitives/Curve.js.map +1 -0
- package/dist/cjs/src/primitives/DRBG.js +99 -0
- package/dist/cjs/src/primitives/DRBG.js.map +1 -0
- package/dist/cjs/src/primitives/ECDSA.js +169 -0
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -0
- package/dist/cjs/src/primitives/Hash.js +1332 -0
- package/dist/cjs/src/primitives/Hash.js.map +1 -0
- package/dist/cjs/src/primitives/JacobianPoint.js +400 -0
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -0
- package/dist/cjs/src/primitives/K256.js +111 -0
- package/dist/cjs/src/primitives/K256.js.map +1 -0
- package/dist/cjs/src/primitives/Mersenne.js +118 -0
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -0
- package/dist/cjs/src/primitives/MontgomoryMethod.js +150 -0
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -0
- package/dist/cjs/src/primitives/Point.js +819 -0
- package/dist/cjs/src/primitives/Point.js.map +1 -0
- package/dist/cjs/src/primitives/PrivateKey.js +190 -0
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -0
- package/dist/cjs/src/primitives/PublicKey.js +151 -0
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -0
- package/dist/cjs/src/primitives/Random.js +57 -0
- package/dist/cjs/src/primitives/Random.js.map +1 -0
- package/dist/cjs/src/primitives/ReductionContext.js +490 -0
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -0
- package/dist/cjs/src/primitives/Signature.js +220 -0
- package/dist/cjs/src/primitives/Signature.js.map +1 -0
- package/dist/cjs/src/primitives/SymmetricKey.js +69 -0
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -0
- package/dist/cjs/src/primitives/TransactionSignature.js +172 -0
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -0
- package/dist/cjs/src/primitives/index.js +45 -0
- package/dist/cjs/src/primitives/index.js.map +1 -0
- package/dist/cjs/src/primitives/utils.js +615 -0
- package/dist/cjs/src/primitives/utils.js.map +1 -0
- package/dist/cjs/src/script/LockingScript.js +35 -0
- package/dist/cjs/src/script/LockingScript.js.map +1 -0
- package/dist/cjs/src/script/OP.js +208 -0
- package/dist/cjs/src/script/OP.js.map +1 -0
- package/dist/cjs/src/script/Script.js +429 -0
- package/dist/cjs/src/script/Script.js.map +1 -0
- package/dist/cjs/src/script/ScriptChunk.js +3 -0
- package/dist/cjs/src/script/ScriptChunk.js.map +1 -0
- package/dist/cjs/src/script/ScriptTemplate.js +3 -0
- package/dist/cjs/src/script/ScriptTemplate.js.map +1 -0
- package/dist/cjs/src/script/Spend.js +1252 -0
- package/dist/cjs/src/script/Spend.js.map +1 -0
- package/dist/cjs/src/script/UnlockingScript.js +35 -0
- package/dist/cjs/src/script/UnlockingScript.js.map +1 -0
- package/dist/cjs/src/script/index.js +32 -0
- package/dist/cjs/src/script/index.js.map +1 -0
- package/dist/cjs/src/script/templates/P2PKH.js +98 -0
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -0
- package/dist/cjs/src/script/templates/RPuzzle.js +125 -0
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -0
- package/dist/cjs/src/script/templates/index.js +11 -0
- package/dist/cjs/src/script/templates/index.js.map +1 -0
- package/dist/cjs/src/transaction/Broadcaster.js +3 -0
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -0
- package/dist/cjs/src/transaction/ChainTracker.js +3 -0
- package/dist/cjs/src/transaction/ChainTracker.js.map +1 -0
- package/dist/cjs/src/transaction/FeeModel.js +3 -0
- package/dist/cjs/src/transaction/FeeModel.js.map +1 -0
- package/dist/cjs/src/transaction/MerklePath.js +239 -0
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -0
- package/dist/cjs/src/transaction/Transaction.js +557 -0
- package/dist/cjs/src/transaction/Transaction.js.map +1 -0
- package/dist/cjs/src/transaction/TransactionInput.js +3 -0
- package/dist/cjs/src/transaction/TransactionInput.js.map +1 -0
- package/dist/cjs/src/transaction/TransactionOutput.js +3 -0
- package/dist/cjs/src/transaction/TransactionOutput.js.map +1 -0
- package/dist/cjs/src/transaction/broadcasters/ARC.js +101 -0
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -0
- package/dist/cjs/src/transaction/broadcasters/index.js +9 -0
- package/dist/cjs/src/transaction/broadcasters/index.js.map +1 -0
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +69 -0
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -0
- package/dist/cjs/src/transaction/fee-models/index.js +9 -0
- package/dist/cjs/src/transaction/fee-models/index.js.map +1 -0
- package/dist/cjs/src/transaction/index.js +11 -0
- package/dist/cjs/src/transaction/index.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/esm/mod.js +9 -0
- package/dist/esm/mod.js.map +1 -0
- package/dist/esm/src/compat/BIP39.js +272 -0
- package/dist/esm/src/compat/BIP39.js.map +1 -0
- package/dist/esm/src/compat/BSM.js +45 -0
- package/dist/esm/src/compat/BSM.js.map +1 -0
- package/dist/esm/src/compat/ECIES.js +454 -0
- package/dist/esm/src/compat/ECIES.js.map +1 -0
- package/dist/esm/src/compat/HD.js +304 -0
- package/dist/esm/src/compat/HD.js.map +1 -0
- package/dist/esm/src/compat/Mnemonic.js +272 -0
- package/dist/esm/src/compat/Mnemonic.js.map +1 -0
- package/dist/esm/src/compat/bip-39-wordlist-en.js +2054 -0
- package/dist/esm/src/compat/bip-39-wordlist-en.js.map +1 -0
- package/dist/esm/src/compat/index.js +5 -0
- package/dist/esm/src/compat/index.js.map +1 -0
- package/dist/esm/src/messages/EncryptedMessage.js +61 -0
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -0
- package/dist/esm/src/messages/SignedMessage.js +77 -0
- package/dist/esm/src/messages/SignedMessage.js.map +1 -0
- package/dist/esm/src/messages/index.js +3 -0
- package/dist/esm/src/messages/index.js.map +1 -0
- package/dist/esm/src/primitives/AESGCM.js +371 -0
- package/dist/esm/src/primitives/AESGCM.js.map +1 -0
- package/dist/esm/src/primitives/BasePoint.js +16 -0
- package/dist/esm/src/primitives/BasePoint.js.map +1 -0
- package/dist/esm/src/primitives/BigNumber.js +4304 -0
- package/dist/esm/src/primitives/BigNumber.js.map +1 -0
- package/dist/esm/src/primitives/Curve.js +1141 -0
- package/dist/esm/src/primitives/Curve.js.map +1 -0
- package/dist/esm/src/primitives/DRBG.js +98 -0
- package/dist/esm/src/primitives/DRBG.js.map +1 -0
- package/dist/esm/src/primitives/ECDSA.js +161 -0
- package/dist/esm/src/primitives/ECDSA.js.map +1 -0
- package/dist/esm/src/primitives/Hash.js +1336 -0
- package/dist/esm/src/primitives/Hash.js.map +1 -0
- package/dist/esm/src/primitives/JacobianPoint.js +398 -0
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -0
- package/dist/esm/src/primitives/K256.js +105 -0
- package/dist/esm/src/primitives/K256.js.map +1 -0
- package/dist/esm/src/primitives/Mersenne.js +117 -0
- package/dist/esm/src/primitives/Mersenne.js.map +1 -0
- package/dist/esm/src/primitives/MontgomoryMethod.js +149 -0
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -0
- package/dist/esm/src/primitives/Point.js +816 -0
- package/dist/esm/src/primitives/Point.js.map +1 -0
- package/dist/esm/src/primitives/PrivateKey.js +184 -0
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -0
- package/dist/esm/src/primitives/PublicKey.js +145 -0
- package/dist/esm/src/primitives/PublicKey.js.map +1 -0
- package/dist/esm/src/primitives/Random.js +56 -0
- package/dist/esm/src/primitives/Random.js.map +1 -0
- package/dist/esm/src/primitives/ReductionContext.js +486 -0
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -0
- package/dist/esm/src/primitives/Signature.js +223 -0
- package/dist/esm/src/primitives/Signature.js.map +1 -0
- package/dist/esm/src/primitives/SymmetricKey.js +63 -0
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -0
- package/dist/esm/src/primitives/TransactionSignature.js +144 -0
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -0
- package/dist/esm/src/primitives/index.js +9 -0
- package/dist/esm/src/primitives/index.js.map +1 -0
- package/dist/esm/src/primitives/utils.js +601 -0
- package/dist/esm/src/primitives/utils.js.map +1 -0
- package/dist/esm/src/script/LockingScript.js +29 -0
- package/dist/esm/src/script/LockingScript.js.map +1 -0
- package/dist/esm/src/script/OP.js +206 -0
- package/dist/esm/src/script/OP.js.map +1 -0
- package/dist/esm/src/script/Script.js +424 -0
- package/dist/esm/src/script/Script.js.map +1 -0
- package/dist/esm/src/script/ScriptChunk.js +2 -0
- package/dist/esm/src/script/ScriptChunk.js.map +1 -0
- package/dist/esm/src/script/ScriptTemplate.js +2 -0
- package/dist/esm/src/script/ScriptTemplate.js.map +1 -0
- package/dist/esm/src/script/Spend.js +1240 -0
- package/dist/esm/src/script/Spend.js.map +1 -0
- package/dist/esm/src/script/UnlockingScript.js +29 -0
- package/dist/esm/src/script/UnlockingScript.js.map +1 -0
- package/dist/esm/src/script/index.js +7 -0
- package/dist/esm/src/script/index.js.map +1 -0
- package/dist/esm/src/script/templates/P2PKH.js +92 -0
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -0
- package/dist/esm/src/script/templates/RPuzzle.js +119 -0
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -0
- package/dist/esm/src/script/templates/index.js +3 -0
- package/dist/esm/src/script/templates/index.js.map +1 -0
- package/dist/esm/src/transaction/Broadcaster.js +2 -0
- package/dist/esm/src/transaction/Broadcaster.js.map +1 -0
- package/dist/esm/src/transaction/ChainTracker.js +2 -0
- package/dist/esm/src/transaction/ChainTracker.js.map +1 -0
- package/dist/esm/src/transaction/FeeModel.js +2 -0
- package/dist/esm/src/transaction/FeeModel.js.map +1 -0
- package/dist/esm/src/transaction/MerklePath.js +237 -0
- package/dist/esm/src/transaction/MerklePath.js.map +1 -0
- package/dist/esm/src/transaction/Transaction.js +557 -0
- package/dist/esm/src/transaction/Transaction.js.map +1 -0
- package/dist/esm/src/transaction/TransactionInput.js +2 -0
- package/dist/esm/src/transaction/TransactionInput.js.map +1 -0
- package/dist/esm/src/transaction/TransactionOutput.js +2 -0
- package/dist/esm/src/transaction/TransactionOutput.js.map +1 -0
- package/dist/esm/src/transaction/broadcasters/ARC.js +100 -0
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -0
- package/dist/esm/src/transaction/broadcasters/index.js +2 -0
- package/dist/esm/src/transaction/broadcasters/index.js.map +1 -0
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +71 -0
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -0
- package/dist/esm/src/transaction/fee-models/index.js +2 -0
- package/dist/esm/src/transaction/fee-models/index.js.map +1 -0
- package/dist/esm/src/transaction/index.js +3 -0
- package/dist/esm/src/transaction/index.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/types/mod.d.ts +9 -0
- package/dist/types/mod.d.ts.map +1 -0
- package/dist/types/src/compat/BIP39.d.ts +132 -0
- package/dist/types/src/compat/BIP39.d.ts.map +1 -0
- package/dist/types/src/compat/BSM.d.ts +28 -0
- package/dist/types/src/compat/BSM.d.ts.map +1 -0
- package/dist/types/src/compat/ECIES.d.ts +62 -0
- package/dist/types/src/compat/ECIES.d.ts.map +1 -0
- package/dist/types/src/compat/HD.d.ts +117 -0
- package/dist/types/src/compat/HD.d.ts.map +1 -0
- package/dist/types/src/compat/Mnemonic.d.ts +132 -0
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -0
- package/dist/types/src/compat/bip-39-wordlist-en.d.ts +5 -0
- package/dist/types/src/compat/bip-39-wordlist-en.d.ts.map +1 -0
- package/dist/types/src/compat/index.d.ts +5 -0
- package/dist/types/src/compat/index.d.ts.map +1 -0
- package/dist/types/src/messages/EncryptedMessage.d.ts +20 -0
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -0
- package/dist/types/src/messages/SignedMessage.d.ts +21 -0
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -0
- package/dist/types/src/messages/index.d.ts +3 -0
- package/dist/types/src/messages/index.d.ts.map +1 -0
- package/dist/types/src/primitives/AESGCM.d.ts +14 -0
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -0
- package/dist/types/src/primitives/BasePoint.d.ts +22 -0
- package/dist/types/src/primitives/BasePoint.d.ts.map +1 -0
- package/dist/types/src/primitives/BigNumber.d.ts +1895 -0
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -0
- package/dist/types/src/primitives/Curve.d.ts +55 -0
- package/dist/types/src/primitives/Curve.d.ts.map +1 -0
- package/dist/types/src/primitives/DRBG.d.ts +54 -0
- package/dist/types/src/primitives/DRBG.d.ts.map +1 -0
- package/dist/types/src/primitives/ECDSA.d.ts +39 -0
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -0
- package/dist/types/src/primitives/Hash.d.ts +411 -0
- package/dist/types/src/primitives/Hash.d.ts.map +1 -0
- package/dist/types/src/primitives/JacobianPoint.d.ts +164 -0
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -0
- package/dist/types/src/primitives/K256.d.ts +53 -0
- package/dist/types/src/primitives/K256.d.ts.map +1 -0
- package/dist/types/src/primitives/Mersenne.d.ts +72 -0
- package/dist/types/src/primitives/Mersenne.d.ts.map +1 -0
- package/dist/types/src/primitives/MontgomoryMethod.d.ts +96 -0
- package/dist/types/src/primitives/MontgomoryMethod.d.ts.map +1 -0
- package/dist/types/src/primitives/Point.d.ts +303 -0
- package/dist/types/src/primitives/Point.d.ts.map +1 -0
- package/dist/types/src/primitives/PrivateKey.d.ts +143 -0
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -0
- package/dist/types/src/primitives/PublicKey.d.ts +108 -0
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -0
- package/dist/types/src/primitives/Random.d.ts +14 -0
- package/dist/types/src/primitives/Random.d.ts.map +1 -0
- package/dist/types/src/primitives/ReductionContext.d.ts +308 -0
- package/dist/types/src/primitives/ReductionContext.d.ts.map +1 -0
- package/dist/types/src/primitives/Signature.d.ts +100 -0
- package/dist/types/src/primitives/Signature.d.ts.map +1 -0
- package/dist/types/src/primitives/SymmetricKey.d.ts +44 -0
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -0
- package/dist/types/src/primitives/TransactionSignature.d.ts +36 -0
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -0
- package/dist/types/src/primitives/index.d.ts +9 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -0
- package/dist/types/src/primitives/utils.d.ts +118 -0
- package/dist/types/src/primitives/utils.d.ts.map +1 -0
- package/dist/types/src/script/LockingScript.d.ts +25 -0
- package/dist/types/src/script/LockingScript.d.ts.map +1 -0
- package/dist/types/src/script/OP.d.ts +193 -0
- package/dist/types/src/script/OP.d.ts.map +1 -0
- package/dist/types/src/script/Script.d.ts +148 -0
- package/dist/types/src/script/Script.d.ts.map +1 -0
- package/dist/types/src/script/ScriptChunk.d.ts +8 -0
- package/dist/types/src/script/ScriptChunk.d.ts.map +1 -0
- package/dist/types/src/script/ScriptTemplate.d.ts +33 -0
- package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -0
- package/dist/types/src/script/Spend.d.ts +103 -0
- package/dist/types/src/script/Spend.d.ts.map +1 -0
- package/dist/types/src/script/UnlockingScript.d.ts +25 -0
- package/dist/types/src/script/UnlockingScript.d.ts.map +1 -0
- package/dist/types/src/script/index.d.ts +8 -0
- package/dist/types/src/script/index.d.ts.map +1 -0
- package/dist/types/src/script/templates/P2PKH.d.ts +37 -0
- package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -0
- package/dist/types/src/script/templates/RPuzzle.d.ts +47 -0
- package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -0
- package/dist/types/src/script/templates/index.d.ts +3 -0
- package/dist/types/src/script/templates/index.d.ts.map +1 -0
- package/dist/types/src/transaction/Broadcaster.d.ts +39 -0
- package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -0
- package/dist/types/src/transaction/ChainTracker.d.ts +23 -0
- package/dist/types/src/transaction/ChainTracker.d.ts.map +1 -0
- package/dist/types/src/transaction/FeeModel.d.ts +12 -0
- package/dist/types/src/transaction/FeeModel.d.ts.map +1 -0
- package/dist/types/src/transaction/MerklePath.d.ts +91 -0
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -0
- package/dist/types/src/transaction/Transaction.d.ts +181 -0
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -0
- package/dist/types/src/transaction/TransactionInput.d.ts +63 -0
- package/dist/types/src/transaction/TransactionInput.d.ts.map +1 -0
- package/dist/types/src/transaction/TransactionOutput.d.ts +36 -0
- package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -0
- package/dist/types/src/transaction/broadcasters/ARC.d.ts +28 -0
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -0
- package/dist/types/src/transaction/broadcasters/index.d.ts +2 -0
- package/dist/types/src/transaction/broadcasters/index.d.ts.map +1 -0
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts +26 -0
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -0
- package/dist/types/src/transaction/fee-models/index.d.ts +2 -0
- package/dist/types/src/transaction/fee-models/index.d.ts.map +1 -0
- package/dist/types/src/transaction/index.d.ts +7 -0
- package/dist/types/src/transaction/index.d.ts.map +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -0
- package/docs/README.md +9 -0
- package/docs/compat.md +2856 -0
- package/docs/getting-started/COMMONJS.md +94 -0
- package/docs/getting-started/REACT-TS.md +131 -0
- package/docs/getting-started/TS-NODE.md +106 -0
- package/docs/getting-started/VUE.md +103 -0
- package/docs/messages.md +146 -0
- package/docs/primitives.md +7440 -0
- package/docs/script.md +766 -0
- package/docs/transaction.md +741 -0
- package/jest.config.js +6 -0
- package/mod.ts +8 -0
- package/package.json +137 -0
- package/src/compat/BSM.ts +51 -0
- package/src/compat/ECIES.ts +557 -0
- package/src/compat/HD.ts +348 -0
- package/src/compat/Mnemonic.ts +295 -0
- package/src/compat/__tests/BSM.test.ts +38 -0
- package/src/compat/__tests/ECIES.test.ts +90 -0
- package/src/compat/__tests/HD.test.ts +405 -0
- package/src/compat/__tests/Mnemonic.test.ts +177 -0
- package/src/compat/__tests/Mnemonic.vectors.ts +172 -0
- package/src/compat/bip-39-wordlist-en.ts +2053 -0
- package/src/compat/index.ts +4 -0
- package/src/messages/EncryptedMessage.ts +70 -0
- package/src/messages/SignedMessage.ts +87 -0
- package/src/messages/__tests/EncryptedMessage.test.ts +36 -0
- package/src/messages/__tests/SignedMessage.test.ts +53 -0
- package/src/messages/index.ts +2 -0
- package/src/primitives/AESGCM.ts +479 -0
- package/src/primitives/BasePoint.ts +21 -0
- package/src/primitives/BigNumber.ts +4619 -0
- package/src/primitives/Curve.ts +1163 -0
- package/src/primitives/DRBG.ts +102 -0
- package/src/primitives/ECDSA.ts +164 -0
- package/src/primitives/Hash.ts +1420 -0
- package/src/primitives/JacobianPoint.ts +410 -0
- package/src/primitives/K256.ts +116 -0
- package/src/primitives/Mersenne.ts +123 -0
- package/src/primitives/MontgomoryMethod.ts +160 -0
- package/src/primitives/Point.ts +852 -0
- package/src/primitives/PrivateKey.ts +195 -0
- package/src/primitives/PublicKey.ts +154 -0
- package/src/primitives/Random.ts +55 -0
- package/src/primitives/ReductionContext.ts +528 -0
- package/src/primitives/Signature.ts +235 -0
- package/src/primitives/SymmetricKey.ts +75 -0
- package/src/primitives/TransactionSignature.ts +189 -0
- package/src/primitives/__tests/AESGCM.test.ts +338 -0
- package/src/primitives/__tests/BRC42.private.vectors.ts +33 -0
- package/src/primitives/__tests/BRC42.public.vectors.ts +33 -0
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +572 -0
- package/src/primitives/__tests/BigNumber.binary.test.ts +203 -0
- package/src/primitives/__tests/BigNumber.constructor.test.ts +176 -0
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +18 -0
- package/src/primitives/__tests/BigNumber.fixtures.ts +264 -0
- package/src/primitives/__tests/BigNumber.serializers.test.ts +157 -0
- package/src/primitives/__tests/BigNumber.utils.test.ts +347 -0
- package/src/primitives/__tests/Curve.unit.test.ts +192 -0
- package/src/primitives/__tests/DRBG.test.ts +18 -0
- package/src/primitives/__tests/DRBG.vectors.ts +167 -0
- package/src/primitives/__tests/ECDH.test.ts +31 -0
- package/src/primitives/__tests/ECDSA.test.ts +58 -0
- package/src/primitives/__tests/HMAC.test.ts +59 -0
- package/src/primitives/__tests/Hash.test.ts +121 -0
- package/src/primitives/__tests/PBKDF2.vectors.ts +119 -0
- package/src/primitives/__tests/PrivateKey.test.ts +17 -0
- package/src/primitives/__tests/PublicKey.test.ts +66 -0
- package/src/primitives/__tests/Random.test.ts +14 -0
- package/src/primitives/__tests/Reader.test.ts +296 -0
- package/src/primitives/__tests/ReductionContext.test.ts +279 -0
- package/src/primitives/__tests/SymmetricKey.test.ts +58 -0
- package/src/primitives/__tests/SymmetricKey.vectors.ts +40 -0
- package/src/primitives/__tests/Writer.test.ts +198 -0
- package/src/primitives/__tests/sighash.vectors.ts +3503 -0
- package/src/primitives/__tests/utils.test.ts +108 -0
- package/src/primitives/index.ts +8 -0
- package/src/primitives/utils.ts +665 -0
- package/src/script/LockingScript.ts +30 -0
- package/src/script/OP.ts +219 -0
- package/src/script/Script.ts +426 -0
- package/src/script/ScriptChunk.ts +7 -0
- package/src/script/ScriptTemplate.ts +36 -0
- package/src/script/Spend.ts +1379 -0
- package/src/script/UnlockingScript.ts +30 -0
- package/src/script/__tests/Script.test.ts +369 -0
- package/src/script/__tests/Spend.test.ts +248 -0
- package/src/script/__tests/script.invalid.vectors.ts +925 -0
- package/src/script/__tests/script.valid.vectors.ts +1120 -0
- package/src/script/__tests/scriptFromVector.ts +42 -0
- package/src/script/__tests/spend.valid.vectors.ts +2288 -0
- package/src/script/index.ts +7 -0
- package/src/script/templates/P2PKH.ts +109 -0
- package/src/script/templates/RPuzzle.ts +140 -0
- package/src/script/templates/index.ts +2 -0
- package/src/transaction/Broadcaster.ts +42 -0
- package/src/transaction/ChainTracker.ts +22 -0
- package/src/transaction/FeeModel.ts +13 -0
- package/src/transaction/MerklePath.ts +259 -0
- package/src/transaction/Transaction.ts +602 -0
- package/src/transaction/TransactionInput.ts +63 -0
- package/src/transaction/TransactionOutput.ts +37 -0
- package/src/transaction/__tests/MerklePath.test.ts +181 -0
- package/src/transaction/__tests/Transaction.test.ts +413 -0
- package/src/transaction/__tests/bigtx.vectors.ts +4 -0
- package/src/transaction/__tests/bump.invalid.vectors.ts +8 -0
- package/src/transaction/__tests/bump.valid.vectors.ts +4 -0
- package/src/transaction/__tests/tx.invalid.vectors.ts +281 -0
- package/src/transaction/__tests/tx.valid.vectors.ts +364 -0
- package/src/transaction/broadcasters/ARC.ts +106 -0
- package/src/transaction/broadcasters/__tests/ARC.test.ts +115 -0
- package/src/transaction/broadcasters/index.ts +1 -0
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +71 -0
- package/src/transaction/fee-models/index.ts +1 -0
- package/src/transaction/index.ts +6 -0
- package/ts2md.json +5 -0
- package/tsconfig.base.json +26 -0
- package/tsconfig.cjs.json +11 -0
- package/tsconfig.eslint.json +12 -0
- package/tsconfig.esm.json +9 -0
- package/tsconfig.json +17 -0
- package/tsconfig.types.json +11 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
2
|
+
import { toArray, encode } from '../../../dist/cjs/src/primitives/utils'
|
|
3
|
+
|
|
4
|
+
describe('BigNumber/Serializers', () => {
|
|
5
|
+
describe('#fromJSON', () => {
|
|
6
|
+
it('should make Bn from a string', () => {
|
|
7
|
+
expect(BigNumber.fromJSON('5').toString()).toEqual('5')
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
describe('#toJSON', () => {
|
|
12
|
+
it('should make string from a Bn', () => {
|
|
13
|
+
expect(new BigNumber(5).toJSON()).toEqual('5')
|
|
14
|
+
expect(BigNumber.fromJSON('5').toJSON()).toEqual('5')
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
describe('#fromString', () => {
|
|
19
|
+
it('should make Bn from a string', () => {
|
|
20
|
+
expect(BigNumber.fromString('5').toString()).toEqual('5')
|
|
21
|
+
})
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
describe('#toString', () => {
|
|
25
|
+
it('should make a string', () => {
|
|
26
|
+
expect(new BigNumber(5).toString()).toEqual('5')
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
describe('#fromHex', () => {
|
|
31
|
+
it('should create bn from known hex', () => {
|
|
32
|
+
const bn = BigNumber.fromHex('0100', 'little')
|
|
33
|
+
expect(bn.toString()).toEqual('1')
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
describe('#toHex', () => {
|
|
38
|
+
it('should create a hex string of 4 byte buffer', () => {
|
|
39
|
+
const bn = new BigNumber(1)
|
|
40
|
+
expect(bn.toHex(4)).toEqual('00000001')
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
describe('#toBits', () => {
|
|
45
|
+
it('should convert these known Bns to bits', () => {
|
|
46
|
+
expect(BigNumber.fromHex('00').toBits()).toEqual(0x00000000)
|
|
47
|
+
expect(BigNumber.fromHex('01').toBits()).toEqual(0x01000001)
|
|
48
|
+
expect(BigNumber.fromHex('0101').toBits()).toEqual(0x02000101)
|
|
49
|
+
expect(BigNumber.fromHex('010101').toBits()).toEqual(0x03010101)
|
|
50
|
+
expect(BigNumber.fromHex('01010101').toBits()).toEqual(0x04010101)
|
|
51
|
+
expect(BigNumber.fromHex('0101010101').toBits()).toEqual(0x05010101)
|
|
52
|
+
expect(BigNumber.fromHex('010101010101').toBits()).toEqual(0x06010101)
|
|
53
|
+
expect(BigNumber.fromNumber(-1).toBits()).toEqual(0x01800001)
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
describe('#fromBits', () => {
|
|
58
|
+
it('should convert these known bits to Bns', () => {
|
|
59
|
+
expect(BigNumber.fromBits(0x01003456).toHex()).toEqual('')
|
|
60
|
+
expect(BigNumber.fromBits(0x02003456).toHex()).toEqual('34')
|
|
61
|
+
expect(BigNumber.fromBits(0x03003456).toHex()).toEqual('3456')
|
|
62
|
+
expect(BigNumber.fromBits(0x04003456).toHex()).toEqual('345600')
|
|
63
|
+
expect(BigNumber.fromBits(0x05003456).toHex()).toEqual('34560000')
|
|
64
|
+
expect(BigNumber.fromBits(0x05f03456).ltn(0)).toEqual(true) // sign bit set
|
|
65
|
+
expect(() => BigNumber.fromBits(0x05f03456, true)).toThrow('negative bit set')
|
|
66
|
+
expect(BigNumber.fromBits(0x04923456).ltn(0)).toEqual(true)
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
describe('#toSm', () => {
|
|
71
|
+
it('should convert to Sm', () => {
|
|
72
|
+
let num: number[]
|
|
73
|
+
num = new BigNumber().toSm()
|
|
74
|
+
expect(encode(num, 'hex')).toEqual('')
|
|
75
|
+
num = new BigNumber(5).toSm()
|
|
76
|
+
expect(encode(num, 'hex')).toEqual('05')
|
|
77
|
+
num = new BigNumber(-5).toSm()
|
|
78
|
+
expect(encode(num, 'hex')).toEqual('85')
|
|
79
|
+
num = new BigNumber(128).toSm()
|
|
80
|
+
expect(encode(num, 'hex')).toEqual('0080')
|
|
81
|
+
num = new BigNumber(-128).toSm()
|
|
82
|
+
expect(encode(num, 'hex')).toEqual('8080')
|
|
83
|
+
num = new BigNumber(127).toSm()
|
|
84
|
+
expect(encode(num, 'hex')).toEqual('7f')
|
|
85
|
+
num = new BigNumber(-127).toSm()
|
|
86
|
+
expect(encode(num, 'hex')).toEqual('ff')
|
|
87
|
+
num = new BigNumber(128).toSm('little')
|
|
88
|
+
expect(encode(num, 'hex')).toEqual('8000')
|
|
89
|
+
num = new BigNumber(-128).toSm('little')
|
|
90
|
+
expect(encode(num, 'hex')).toEqual('8080')
|
|
91
|
+
})
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
describe('#fromSm', () => {
|
|
95
|
+
it('should convert from Sm', () => {
|
|
96
|
+
let buf
|
|
97
|
+
buf = [0]
|
|
98
|
+
expect(BigNumber.fromSm(buf).cmpn(0)).toEqual(0)
|
|
99
|
+
buf = toArray('05', 'hex')
|
|
100
|
+
expect(BigNumber.fromSm(buf).cmpn(5)).toEqual(0)
|
|
101
|
+
buf = toArray('85', 'hex')
|
|
102
|
+
expect(BigNumber.fromSm(buf).cmpn(-5)).toEqual(0)
|
|
103
|
+
buf = toArray('0080', 'hex')
|
|
104
|
+
expect(BigNumber.fromSm(buf).cmpn(128)).toEqual(0)
|
|
105
|
+
buf = toArray('8080', 'hex')
|
|
106
|
+
expect(BigNumber.fromSm(buf).cmpn(-128)).toEqual(0)
|
|
107
|
+
buf = toArray('8000', 'hex')
|
|
108
|
+
expect(BigNumber.fromSm(buf, 'little').cmpn(128)).toEqual(0)
|
|
109
|
+
buf = toArray('8080', 'hex')
|
|
110
|
+
expect(BigNumber.fromSm(buf, 'little').cmpn(-128)).toEqual(0)
|
|
111
|
+
buf = toArray('0080', 'hex') // negative zero
|
|
112
|
+
expect(BigNumber.fromSm(buf, 'little').cmpn(0)).toEqual(0)
|
|
113
|
+
})
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
describe('#toScriptNumBuffer', () => {
|
|
117
|
+
it('should output a little endian Sm number', () => {
|
|
118
|
+
const bn = new BigNumber(-23434234)
|
|
119
|
+
expect(bn.toScriptNum()).toEqual(bn.toSm('little'))
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
describe('#fromScriptNum', () => {
|
|
124
|
+
it('should parse this normal number', () => {
|
|
125
|
+
expect(BigNumber.fromScriptNum(toArray('01', 'hex')).toNumber()).toEqual(1)
|
|
126
|
+
expect(BigNumber.fromScriptNum(toArray('0080', 'hex')).toNumber()).toEqual(0)
|
|
127
|
+
expect(BigNumber.fromScriptNum(toArray('0180', 'hex')).toNumber()).toEqual(-1)
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
it('should throw an error for a number over 4 bytes', () => {
|
|
131
|
+
expect(() => BigNumber.fromScriptNum(toArray('8100000000', 'hex'))).toThrow('script number overflow')
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('should throw an error for number that is not a minimal size representation', () => {
|
|
135
|
+
expect(() => BigNumber.fromScriptNum(toArray('80000000', 'hex'), true)).toThrow('non-minimally encoded script number')
|
|
136
|
+
expect(() => BigNumber.fromScriptNum(toArray('800000', 'hex'), true)).toThrow('non-minimally encoded script number')
|
|
137
|
+
expect(() => BigNumber.fromScriptNum(toArray('00', 'hex'), true)).toThrow('non-minimally encoded script number')
|
|
138
|
+
expect(BigNumber.fromScriptNum(toArray('8000', 'hex'), true).toString()).toEqual('128')
|
|
139
|
+
expect(BigNumber.fromScriptNum(toArray('0081', 'hex'), true).toString()).toEqual('-256')
|
|
140
|
+
expect(BigNumber.fromScriptNum(toArray('', 'hex'), true).toString()).toEqual('0')
|
|
141
|
+
expect(BigNumber.fromScriptNum(toArray('01', 'hex'), true).toString()).toEqual('1')
|
|
142
|
+
expect(BigNumber.fromScriptNum(toArray('00000000', 'hex')).toString()).toEqual('0')
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
describe('#fromNumber', () => {
|
|
147
|
+
it('should convert from a number', () => {
|
|
148
|
+
expect(BigNumber.fromNumber(5).toNumber()).toEqual(5)
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
describe('#toNumber', () => {
|
|
153
|
+
it('it should convert to a number', () => {
|
|
154
|
+
expect(new BigNumber(5).toNumber()).toEqual(5)
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
})
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/* eslint-env jest */
|
|
2
|
+
import BigNumber from '../../../dist/cjs/src/primitives/BigNumber'
|
|
3
|
+
|
|
4
|
+
describe('BN.js/Utils', () => {
|
|
5
|
+
describe('.toString()', () => {
|
|
6
|
+
describe('hex no padding', () => {
|
|
7
|
+
it('should have same length as input', () => {
|
|
8
|
+
let hex = '1'
|
|
9
|
+
for (let i = 1; i <= 128; i++) {
|
|
10
|
+
const n = new BigNumber(hex, 16)
|
|
11
|
+
expect(n.toString(16).length).toEqual(i)
|
|
12
|
+
hex = hex + '0'
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
describe('binary padding', () => {
|
|
17
|
+
it('should have a length of 256', () => {
|
|
18
|
+
const a = new BigNumber(0)
|
|
19
|
+
|
|
20
|
+
expect(a.toString(2, 256).length).toEqual(256)
|
|
21
|
+
})
|
|
22
|
+
})
|
|
23
|
+
describe('hex padding', () => {
|
|
24
|
+
it('should have length of 8 from leading 15', () => {
|
|
25
|
+
const a = new BigNumber('ffb9602', 16)
|
|
26
|
+
|
|
27
|
+
expect(a.toString('hex', 2).length).toEqual(8)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
it('should have length of 8 from leading zero', () => {
|
|
31
|
+
const a = new BigNumber('fb9604', 16)
|
|
32
|
+
|
|
33
|
+
expect(a.toString('hex', 8).length).toEqual(8)
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
it('should have length of 8 from leading zeros', () => {
|
|
37
|
+
const a = new BigNumber(0)
|
|
38
|
+
|
|
39
|
+
expect(a.toString('hex', 8).length).toEqual(8)
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('should have length of 64 from leading 15', () => {
|
|
43
|
+
const a = new BigNumber(
|
|
44
|
+
'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003',
|
|
45
|
+
16)
|
|
46
|
+
|
|
47
|
+
expect(a.toString('hex', 2).length).toEqual(64)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('should have length of 64 from leading zero', () => {
|
|
51
|
+
const a = new BigNumber(
|
|
52
|
+
'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003',
|
|
53
|
+
16)
|
|
54
|
+
|
|
55
|
+
expect(a.toString('hex', 64).length).toEqual(64)
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
describe('.isNeg()', () => {
|
|
61
|
+
it('should return true for negative numbers', () => {
|
|
62
|
+
expect(new BigNumber(-1).isNeg()).toEqual(true)
|
|
63
|
+
expect(new BigNumber(1).isNeg()).toEqual(false)
|
|
64
|
+
expect(new BigNumber(0).isNeg()).toEqual(false)
|
|
65
|
+
expect(new BigNumber('-0', 10).isNeg()).toEqual(false)
|
|
66
|
+
})
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
describe('.isOdd()', () => {
|
|
70
|
+
it('should return true for odd numbers', () => {
|
|
71
|
+
expect(new BigNumber(0).isOdd()).toEqual(false)
|
|
72
|
+
expect(new BigNumber(1).isOdd()).toEqual(true)
|
|
73
|
+
expect(new BigNumber(2).isOdd()).toEqual(false)
|
|
74
|
+
expect(new BigNumber('-0', 10).isOdd()).toEqual(false)
|
|
75
|
+
expect(new BigNumber('-1', 10).isOdd()).toEqual(true)
|
|
76
|
+
expect(new BigNumber('-2', 10).isOdd()).toEqual(false)
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
describe('.isEven()', () => {
|
|
81
|
+
it('should return true for even numbers', () => {
|
|
82
|
+
expect(new BigNumber(0).isEven()).toEqual(true)
|
|
83
|
+
expect(new BigNumber(1).isEven()).toEqual(false)
|
|
84
|
+
expect(new BigNumber(2).isEven()).toEqual(true)
|
|
85
|
+
expect(new BigNumber('-0', 10).isEven()).toEqual(true)
|
|
86
|
+
expect(new BigNumber('-1', 10).isEven()).toEqual(false)
|
|
87
|
+
expect(new BigNumber('-2', 10).isEven()).toEqual(true)
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
describe('.isZero()', () => {
|
|
92
|
+
it('should return true for zero', () => {
|
|
93
|
+
expect(new BigNumber(0).isZero()).toEqual(true)
|
|
94
|
+
expect(new BigNumber(1).isZero()).toEqual(false)
|
|
95
|
+
expect(new BigNumber(0xffffffff).isZero()).toEqual(false)
|
|
96
|
+
})
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
describe('.bitLength()', () => {
|
|
100
|
+
it('should return proper bitLength', () => {
|
|
101
|
+
expect(new BigNumber(0).bitLength()).toEqual(0)
|
|
102
|
+
expect(new BigNumber(0x1).bitLength()).toEqual(1)
|
|
103
|
+
expect(new BigNumber(0x2).bitLength()).toEqual(2)
|
|
104
|
+
expect(new BigNumber(0x3).bitLength()).toEqual(2)
|
|
105
|
+
expect(new BigNumber(0x4).bitLength()).toEqual(3)
|
|
106
|
+
expect(new BigNumber(0x8).bitLength()).toEqual(4)
|
|
107
|
+
expect(new BigNumber(0x10).bitLength()).toEqual(5)
|
|
108
|
+
expect(new BigNumber(0x100).bitLength()).toEqual(9)
|
|
109
|
+
expect(new BigNumber(0x123456).bitLength()).toEqual(21)
|
|
110
|
+
expect(new BigNumber('123456789', 16).bitLength()).toEqual(33)
|
|
111
|
+
expect(new BigNumber('8023456789', 16).bitLength()).toEqual(40)
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
describe('.byteLength()', () => {
|
|
116
|
+
it('should return proper byteLength', () => {
|
|
117
|
+
expect(new BigNumber(0).byteLength()).toEqual(0)
|
|
118
|
+
expect(new BigNumber(0x1).byteLength()).toEqual(1)
|
|
119
|
+
expect(new BigNumber(0x2).byteLength()).toEqual(1)
|
|
120
|
+
expect(new BigNumber(0x3).byteLength()).toEqual(1)
|
|
121
|
+
expect(new BigNumber(0x4).byteLength()).toEqual(1)
|
|
122
|
+
expect(new BigNumber(0x8).byteLength()).toEqual(1)
|
|
123
|
+
expect(new BigNumber(0x10).byteLength()).toEqual(1)
|
|
124
|
+
expect(new BigNumber(0x100).byteLength()).toEqual(2)
|
|
125
|
+
expect(new BigNumber(0x123456).byteLength()).toEqual(3)
|
|
126
|
+
expect(new BigNumber('123456789', 16).byteLength()).toEqual(5)
|
|
127
|
+
expect(new BigNumber('8023456789', 16).byteLength()).toEqual(5)
|
|
128
|
+
})
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
describe('.toArray()', () => {
|
|
132
|
+
it('should return [ 0 ] for `0`', () => {
|
|
133
|
+
const n = new BigNumber(0)
|
|
134
|
+
expect(n.toArray('be')).toEqual([0])
|
|
135
|
+
expect(n.toArray('le')).toEqual([0])
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
it('should zero pad to desired lengths', () => {
|
|
139
|
+
const n = new BigNumber(0x123456)
|
|
140
|
+
expect(n.toArray('be', 5)).toEqual([0x00, 0x00, 0x12, 0x34, 0x56])
|
|
141
|
+
expect(n.toArray('le', 5)).toEqual([0x56, 0x34, 0x12, 0x00, 0x00])
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
it('should throw when naturally larger than desired length', () => {
|
|
145
|
+
const n = new BigNumber(0x123456)
|
|
146
|
+
expect(() => {
|
|
147
|
+
n.toArray('be', 2)
|
|
148
|
+
}).toThrow(new Error('byte array longer than desired length'))
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
describe('.toNumber()', () => {
|
|
153
|
+
it('should return proper Number if below the limit', () => {
|
|
154
|
+
expect(new BigNumber(0x123456).toNumber()).toEqual(0x123456)
|
|
155
|
+
expect(new BigNumber(0x3ffffff).toNumber()).toEqual(0x3ffffff)
|
|
156
|
+
expect(new BigNumber(0x4000000).toNumber()).toEqual(0x4000000)
|
|
157
|
+
expect(new BigNumber(0x10000000000000).toNumber()).toEqual(0x10000000000000)
|
|
158
|
+
expect(new BigNumber(0x10040004004000).toNumber()).toEqual(0x10040004004000)
|
|
159
|
+
expect(new BigNumber(-0x123456).toNumber()).toEqual(-0x123456)
|
|
160
|
+
expect(new BigNumber(-0x3ffffff).toNumber()).toEqual(-0x3ffffff)
|
|
161
|
+
expect(new BigNumber(-0x4000000).toNumber()).toEqual(-0x4000000)
|
|
162
|
+
expect(new BigNumber(-0x10000000000000).toNumber()).toEqual(-0x10000000000000)
|
|
163
|
+
expect(new BigNumber(-0x10040004004000).toNumber()).toEqual(-0x10040004004000)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('should throw when number exceeds 53 bits', () => {
|
|
167
|
+
const n = new BigNumber(1).iushln(54)
|
|
168
|
+
expect(() => {
|
|
169
|
+
n.toNumber()
|
|
170
|
+
}).toThrow(new Error('Number can only safely store up to 53 bits'))
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
describe('.zeroBits()', () => {
|
|
175
|
+
it('should return proper zeroBits', () => {
|
|
176
|
+
expect(new BigNumber(0).zeroBits()).toEqual(0)
|
|
177
|
+
expect(new BigNumber(0x1).zeroBits()).toEqual(0)
|
|
178
|
+
expect(new BigNumber(0x2).zeroBits()).toEqual(1)
|
|
179
|
+
expect(new BigNumber(0x3).zeroBits()).toEqual(0)
|
|
180
|
+
expect(new BigNumber(0x4).zeroBits()).toEqual(2)
|
|
181
|
+
expect(new BigNumber(0x8).zeroBits()).toEqual(3)
|
|
182
|
+
expect(new BigNumber(0x10).zeroBits()).toEqual(4)
|
|
183
|
+
expect(new BigNumber(0x100).zeroBits()).toEqual(8)
|
|
184
|
+
expect(new BigNumber(0x1000000).zeroBits()).toEqual(24)
|
|
185
|
+
expect(new BigNumber(0x123456).zeroBits()).toEqual(1)
|
|
186
|
+
})
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
describe('.toJSON', () => {
|
|
190
|
+
it('should return hex string', () => {
|
|
191
|
+
expect(new BigNumber(0x123).toJSON()).toEqual('123')
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
describe('.cmpn', () => {
|
|
196
|
+
it('should return -1, 0, 1 correctly', () => {
|
|
197
|
+
expect(new BigNumber(42).cmpn(42)).toEqual(0)
|
|
198
|
+
expect(new BigNumber(42).cmpn(43)).toEqual(-1)
|
|
199
|
+
expect(new BigNumber(42).cmpn(41)).toEqual(1)
|
|
200
|
+
expect(new BigNumber(0x3fffffe).cmpn(0x3fffffe)).toEqual(0)
|
|
201
|
+
expect(new BigNumber(0x3fffffe).cmpn(0x3ffffff)).toEqual(-1)
|
|
202
|
+
expect(new BigNumber(0x3fffffe).cmpn(0x3fffffd)).toEqual(1)
|
|
203
|
+
expect(() => {
|
|
204
|
+
new BigNumber(0x3fffffe).cmpn(0x4000000)
|
|
205
|
+
}).toThrow(new Error('Number is too big'))
|
|
206
|
+
expect(new BigNumber(42).cmpn(-42)).toEqual(1)
|
|
207
|
+
expect(new BigNumber(-42).cmpn(42)).toEqual(-1)
|
|
208
|
+
expect(new BigNumber(-42).cmpn(-42)).toEqual(0)
|
|
209
|
+
expect(1 / new BigNumber(-42).cmpn(-42)).toEqual(Infinity)
|
|
210
|
+
})
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
describe('.cmp', () => {
|
|
214
|
+
it('should return -1, 0, 1 correctly', () => {
|
|
215
|
+
expect(new BigNumber(42).cmp(new BigNumber(42))).toEqual(0)
|
|
216
|
+
expect(new BigNumber(42).cmp(new BigNumber(43))).toEqual(-1)
|
|
217
|
+
expect(new BigNumber(42).cmp(new BigNumber(41))).toEqual(1)
|
|
218
|
+
expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x3fffffe))).toEqual(0)
|
|
219
|
+
expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x3ffffff))).toEqual(-1)
|
|
220
|
+
expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x3fffffd))).toEqual(1)
|
|
221
|
+
expect(new BigNumber(0x3fffffe).cmp(new BigNumber(0x4000000))).toEqual(-1)
|
|
222
|
+
expect(new BigNumber(42).cmp(new BigNumber(-42))).toEqual(1)
|
|
223
|
+
expect(new BigNumber(-42).cmp(new BigNumber(42))).toEqual(-1)
|
|
224
|
+
expect(new BigNumber(-42).cmp(new BigNumber(-42))).toEqual(0)
|
|
225
|
+
expect(1 / new BigNumber(-42).cmp(new BigNumber(-42))).toEqual(Infinity)
|
|
226
|
+
})
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
describe('comparison shorthands', () => {
|
|
230
|
+
it('.gtn greater than', () => {
|
|
231
|
+
expect(new BigNumber(3).gtn(2)).toEqual(true)
|
|
232
|
+
expect(new BigNumber(3).gtn(3)).toEqual(false)
|
|
233
|
+
expect(new BigNumber(3).gtn(4)).toEqual(false)
|
|
234
|
+
})
|
|
235
|
+
it('.gt greater than', () => {
|
|
236
|
+
expect(new BigNumber(3).gt(new BigNumber(2))).toEqual(true)
|
|
237
|
+
expect(new BigNumber(3).gt(new BigNumber(3))).toEqual(false)
|
|
238
|
+
expect(new BigNumber(3).gt(new BigNumber(4))).toEqual(false)
|
|
239
|
+
})
|
|
240
|
+
it('.gten greater than or equal', () => {
|
|
241
|
+
expect(new BigNumber(3).gten(3)).toEqual(true)
|
|
242
|
+
expect(new BigNumber(3).gten(2)).toEqual(true)
|
|
243
|
+
expect(new BigNumber(3).gten(4)).toEqual(false)
|
|
244
|
+
})
|
|
245
|
+
it('.gte greater than or equal', () => {
|
|
246
|
+
expect(new BigNumber(3).gte(new BigNumber(3))).toEqual(true)
|
|
247
|
+
expect(new BigNumber(3).gte(new BigNumber(2))).toEqual(true)
|
|
248
|
+
expect(new BigNumber(3).gte(new BigNumber(4))).toEqual(false)
|
|
249
|
+
})
|
|
250
|
+
it('.ltn less than', () => {
|
|
251
|
+
expect(new BigNumber(2).ltn(3)).toEqual(true)
|
|
252
|
+
expect(new BigNumber(2).ltn(2)).toEqual(false)
|
|
253
|
+
expect(new BigNumber(2).ltn(1)).toEqual(false)
|
|
254
|
+
})
|
|
255
|
+
it('.lt less than', () => {
|
|
256
|
+
expect(new BigNumber(2).lt(new BigNumber(3))).toEqual(true)
|
|
257
|
+
expect(new BigNumber(2).lt(new BigNumber(2))).toEqual(false)
|
|
258
|
+
expect(new BigNumber(2).lt(new BigNumber(1))).toEqual(false)
|
|
259
|
+
})
|
|
260
|
+
it('.lten less than or equal', () => {
|
|
261
|
+
expect(new BigNumber(3).lten(3)).toEqual(true)
|
|
262
|
+
expect(new BigNumber(3).lten(2)).toEqual(false)
|
|
263
|
+
expect(new BigNumber(3).lten(4)).toEqual(true)
|
|
264
|
+
})
|
|
265
|
+
it('.lte less than or equal', () => {
|
|
266
|
+
expect(new BigNumber(3).lte(new BigNumber(3))).toEqual(true)
|
|
267
|
+
expect(new BigNumber(3).lte(new BigNumber(2))).toEqual(false)
|
|
268
|
+
expect(new BigNumber(3).lte(new BigNumber(4))).toEqual(true)
|
|
269
|
+
})
|
|
270
|
+
it('.eqn equal', () => {
|
|
271
|
+
expect(new BigNumber(3).eqn(3)).toEqual(true)
|
|
272
|
+
expect(new BigNumber(3).eqn(2)).toEqual(false)
|
|
273
|
+
expect(new BigNumber(3).eqn(4)).toEqual(false)
|
|
274
|
+
})
|
|
275
|
+
it('.eq equal', () => {
|
|
276
|
+
expect(new BigNumber(3).eq(new BigNumber(3))).toEqual(true)
|
|
277
|
+
expect(new BigNumber(3).eq(new BigNumber(2))).toEqual(false)
|
|
278
|
+
expect(new BigNumber(3).eq(new BigNumber(4))).toEqual(false)
|
|
279
|
+
})
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
describe('.fromTwos', () => {
|
|
283
|
+
it('should convert from two\'s complement to negative number', () => {
|
|
284
|
+
expect(new BigNumber('00000000', 16).fromTwos(32).toNumber()).toEqual(0)
|
|
285
|
+
expect(new BigNumber('00000001', 16).fromTwos(32).toNumber()).toEqual(1)
|
|
286
|
+
expect(new BigNumber('7fffffff', 16).fromTwos(32).toNumber()).toEqual(2147483647)
|
|
287
|
+
expect(new BigNumber('80000000', 16).fromTwos(32).toNumber()).toEqual(-2147483648)
|
|
288
|
+
expect(new BigNumber('f0000000', 16).fromTwos(32).toNumber()).toEqual(-268435456)
|
|
289
|
+
expect(new BigNumber('f1234567', 16).fromTwos(32).toNumber()).toEqual(-249346713)
|
|
290
|
+
expect(new BigNumber('ffffffff', 16).fromTwos(32).toNumber()).toEqual(-1)
|
|
291
|
+
expect(new BigNumber('fffffffe', 16).fromTwos(32).toNumber()).toEqual(-2)
|
|
292
|
+
expect(new BigNumber('fffffffffffffffffffffffffffffffe', 16)
|
|
293
|
+
.fromTwos(128).toNumber()).toEqual(-2)
|
|
294
|
+
expect(new BigNumber('ffffffffffffffffffffffffffffffff' +
|
|
295
|
+
'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber()).toEqual(-2)
|
|
296
|
+
expect(new BigNumber('ffffffffffffffffffffffffffffffff' +
|
|
297
|
+
'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber()).toEqual(-1)
|
|
298
|
+
expect(
|
|
299
|
+
new BigNumber('7fffffffffffffffffffffffffffffff' +
|
|
300
|
+
'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10)).toEqual(new BigNumber('5789604461865809771178549250434395392663499' +
|
|
301
|
+
'2332820282019728792003956564819967', 10).toString(10))
|
|
302
|
+
expect(
|
|
303
|
+
new BigNumber('80000000000000000000000000000000' +
|
|
304
|
+
'00000000000000000000000000000000', 16).fromTwos(256).toString(10)).toEqual(new BigNumber('-578960446186580977117854925043439539266349' +
|
|
305
|
+
'92332820282019728792003956564819968', 10).toString(10))
|
|
306
|
+
})
|
|
307
|
+
})
|
|
308
|
+
|
|
309
|
+
describe('.toTwos', () => {
|
|
310
|
+
it('should convert from negative number to two\'s complement', () => {
|
|
311
|
+
expect(new BigNumber(0).toTwos(32).toString(16)).toEqual('0')
|
|
312
|
+
expect(new BigNumber(1).toTwos(32).toString(16)).toEqual('1')
|
|
313
|
+
expect(new BigNumber(2147483647).toTwos(32).toString(16)).toEqual('7fffffff')
|
|
314
|
+
expect(new BigNumber('-2147483648', 10).toTwos(32).toString(16)).toEqual('80000000')
|
|
315
|
+
expect(new BigNumber('-268435456', 10).toTwos(32).toString(16)).toEqual('f0000000')
|
|
316
|
+
expect(new BigNumber('-249346713', 10).toTwos(32).toString(16)).toEqual('f1234567')
|
|
317
|
+
expect(new BigNumber('-1', 10).toTwos(32).toString(16)).toEqual('ffffffff')
|
|
318
|
+
expect(new BigNumber('-2', 10).toTwos(32).toString(16)).toEqual('fffffffe')
|
|
319
|
+
expect(new BigNumber('-2', 10).toTwos(128).toString(16)).toEqual(
|
|
320
|
+
'fffffffffffffffffffffffffffffffe')
|
|
321
|
+
expect(new BigNumber('-2', 10).toTwos(256).toString(16)).toEqual(
|
|
322
|
+
'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe')
|
|
323
|
+
expect(new BigNumber('-1', 10).toTwos(256).toString(16)).toEqual(
|
|
324
|
+
'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
|
|
325
|
+
expect(
|
|
326
|
+
new BigNumber('5789604461865809771178549250434395392663' +
|
|
327
|
+
'4992332820282019728792003956564819967', 10).toTwos(256).toString(16)).toEqual(
|
|
328
|
+
'7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
|
|
329
|
+
expect(
|
|
330
|
+
new BigNumber('-578960446186580977117854925043439539266' +
|
|
331
|
+
'34992332820282019728792003956564819968', 10).toTwos(256).toString(16)).toEqual(
|
|
332
|
+
'8000000000000000000000000000000000000000000000000000000000000000')
|
|
333
|
+
})
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
describe('.isBN', () => {
|
|
337
|
+
it('should return true for BN', () => {
|
|
338
|
+
expect(BigNumber.isBN(new BigNumber())).toEqual(true)
|
|
339
|
+
})
|
|
340
|
+
|
|
341
|
+
it('should return false for everything else', () => {
|
|
342
|
+
expect(BigNumber.isBN(1)).toEqual(false)
|
|
343
|
+
expect(BigNumber.isBN([])).toEqual(false)
|
|
344
|
+
expect(BigNumber.isBN({})).toEqual(false)
|
|
345
|
+
})
|
|
346
|
+
})
|
|
347
|
+
})
|