@bsv/sdk 1.3.12 → 1.3.14
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/dist/cjs/package.json +15 -3
- package/dist/cjs/src/auth/Peer.js +83 -57
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js +14 -9
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
- package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/auth/utils/createNonce.js +2 -1
- package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
- package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
- package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/cjs/src/compat/BSM.js +7 -17
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +172 -133
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +63 -73
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +102 -106
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/Utxo.js +2 -2
- package/dist/cjs/src/compat/Utxo.js.map +1 -1
- package/dist/cjs/src/compat/index.js +7 -17
- package/dist/cjs/src/compat/index.js.map +1 -1
- package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js +1 -0
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/messages/index.js +7 -17
- package/dist/cjs/src/messages/index.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +6 -5
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BasePoint.js +1 -1
- package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +50 -62
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js +46 -22
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/DRBG.js +2 -8
- package/dist/cjs/src/primitives/DRBG.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +51 -35
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +191 -216
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +117 -88
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/Polynomial.js +4 -2
- package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +32 -33
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +6 -5
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js +21 -15
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +8 -7
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/index.js +7 -17
- package/dist/cjs/src/primitives/index.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +79 -68
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/script/OP.js +3 -3
- package/dist/cjs/src/script/OP.js.map +1 -1
- package/dist/cjs/src/script/Script.js +12 -10
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +47 -49
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js +24 -12
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +28 -23
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +2 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +177 -154
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js +24 -24
- package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +26 -18
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/Broadcaster.js +3 -2
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +64 -37
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +111 -137
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
- package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/index.js.map +1 -1
- package/dist/cjs/src/transaction/index.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
- package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
- package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js +7 -2
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js +2 -2
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +15 -15
- package/dist/esm/src/auth/Peer.js +75 -54
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js +14 -9
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/Certificate.js +15 -11
- package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
- package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/esm/src/compat/BSM.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +165 -116
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +56 -56
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +95 -89
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/compat/Utxo.js +1 -1
- package/dist/esm/src/compat/Utxo.js.map +1 -1
- package/dist/esm/src/messages/EncryptedMessage.js +3 -1
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js +1 -0
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +1 -0
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BasePoint.js +1 -1
- package/dist/esm/src/primitives/BasePoint.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +50 -62
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js +45 -22
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/DRBG.js +2 -8
- package/dist/esm/src/primitives/DRBG.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +50 -35
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +188 -213
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js +18 -5
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Mersenne.js.map +1 -1
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +107 -88
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/Polynomial.js +4 -2
- package/dist/esm/src/primitives/Polynomial.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +25 -16
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +7 -6
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReductionContext.js +1 -1
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js +21 -15
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +8 -7
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js +13 -13
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +22 -12
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +76 -66
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/script/OP.js +3 -3
- package/dist/esm/src/script/OP.js.map +1 -1
- package/dist/esm/src/script/Script.js +12 -10
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/Spend.js +39 -32
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/P2PKH.js +26 -11
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +29 -22
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js +11 -6
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/totp/totp.js +2 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +176 -154
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js +24 -24
- package/dist/esm/src/transaction/BeefParty.js.map +1 -1
- package/dist/esm/src/transaction/BeefTx.js +26 -18
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +61 -36
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +105 -138
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
- package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/index.js.map +1 -1
- package/dist/esm/src/transaction/index.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/KeyDeriver.js +60 -52
- package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/ProtoWallet.js +75 -29
- package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js +7 -2
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js +2 -2
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js +8 -3
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +15 -15
- package/dist/types/src/auth/Peer.d.ts +10 -10
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts +4 -4
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
- package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
- package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
- package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
- package/dist/types/src/compat/BSM.d.ts +1 -1
- package/dist/types/src/compat/BSM.d.ts.map +1 -1
- package/dist/types/src/compat/ECIES.d.ts +36 -36
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts +51 -51
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/compat/Mnemonic.d.ts +79 -79
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
- package/dist/types/src/compat/Utxo.d.ts.map +1 -1
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
- package/dist/types/src/primitives/BasePoint.d.ts +8 -8
- package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Curve.d.ts +14 -7
- package/dist/types/src/primitives/Curve.d.ts.map +1 -1
- package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +11 -11
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts +14 -10
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
- package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/Schnorr.d.ts +14 -14
- package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
- package/dist/types/src/primitives/Signature.d.ts +1 -1
- package/dist/types/src/primitives/Signature.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +3 -6
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts +3 -3
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
- package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
- package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
- package/dist/types/src/totp/totp.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +96 -96
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefParty.d.ts +22 -22
- package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +5 -5
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
- package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +4 -12
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
- package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/index.d.ts.map +1 -1
- package/dist/types/src/transaction/index.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
- package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +5 -5
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
- package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/auth.md +92 -82
- package/docs/compat.md +24 -24
- package/docs/messages.md +7 -5
- package/docs/overlay-tools.md +21 -21
- package/docs/primitives.md +336 -315
- package/docs/script.md +35 -35
- package/docs/swagger/dist/swagger-initializer.js +7 -7
- package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
- package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
- package/docs/swagger/dist/swagger-ui.js +2 -2
- package/docs/totp.md +5 -5
- package/docs/transaction.md +103 -105
- package/docs/wallet-substrates.md +17 -17
- package/docs/wallet.md +202 -204
- package/mod.ts +15 -15
- package/package.json +15 -3
- package/src/auth/Peer.ts +271 -121
- package/src/auth/SessionManager.ts +17 -10
- package/src/auth/__tests/Peer.test.ts +361 -179
- package/src/auth/__tests/SessionManager.test.ts +67 -19
- package/src/auth/__tests/build.test.ts +11 -0
- package/src/auth/certificates/Certificate.ts +27 -14
- package/src/auth/certificates/MasterCertificate.ts +106 -62
- package/src/auth/certificates/VerifiableCertificate.ts +30 -8
- package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
- package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
- package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
- package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
- package/src/auth/certificates/index.ts +1 -1
- package/src/auth/clients/AuthFetch.ts +1 -0
- package/src/auth/clients/index.ts +1 -1
- package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
- package/src/auth/transports/index.ts +1 -1
- package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
- package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
- package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
- package/src/auth/utils/createNonce.ts +11 -3
- package/src/auth/utils/getVerifiableCertificates.ts +12 -7
- package/src/auth/utils/validateCertificates.ts +57 -39
- package/src/auth/utils/verifyNonce.ts +6 -2
- package/src/compat/BSM.ts +10 -2
- package/src/compat/ECIES.ts +265 -141
- package/src/compat/HD.ts +81 -63
- package/src/compat/Mnemonic.ts +104 -91
- package/src/compat/Utxo.ts +8 -5
- package/src/compat/__tests/BSM.test.ts +42 -16
- package/src/compat/__tests/ECIES.test.ts +117 -52
- package/src/compat/__tests/HD.test.ts +55 -42
- package/src/compat/__tests/Mnemonic.test.ts +11 -12
- package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
- package/src/messages/EncryptedMessage.ts +6 -2
- package/src/messages/SignedMessage.ts +14 -8
- package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
- package/src/messages/__tests/SignedMessage.test.ts +17 -11
- package/src/overlay-tools/LookupResolver.ts +108 -56
- package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
- package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
- package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
- package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
- package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
- package/src/primitives/AESGCM.ts +2 -0
- package/src/primitives/BasePoint.ts +4 -4
- package/src/primitives/BigNumber.ts +99 -90
- package/src/primitives/Curve.ts +117 -46
- package/src/primitives/DRBG.ts +9 -11
- package/src/primitives/ECDSA.ts +109 -63
- package/src/primitives/Hash.ts +492 -321
- package/src/primitives/JacobianPoint.ts +67 -19
- package/src/primitives/Point.ts +254 -152
- package/src/primitives/Polynomial.ts +8 -3
- package/src/primitives/PrivateKey.ts +41 -17
- package/src/primitives/PublicKey.ts +13 -3
- package/src/primitives/Random.ts +14 -8
- package/src/primitives/ReductionContext.ts +1 -1
- package/src/primitives/Schnorr.ts +40 -18
- package/src/primitives/Signature.ts +26 -16
- package/src/primitives/SymmetricKey.ts +14 -14
- package/src/primitives/TransactionSignature.ts +41 -17
- package/src/primitives/__tests/AESGCM.test.ts +457 -151
- package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
- package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
- package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
- package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
- package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
- package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
- package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
- package/src/primitives/__tests/Curve.unit.test.ts +75 -53
- package/src/primitives/__tests/DRBG.test.ts +1 -1
- package/src/primitives/__tests/DRBG.vectors.ts +45 -75
- package/src/primitives/__tests/ECDH.test.ts +15 -8
- package/src/primitives/__tests/ECDSA.test.ts +12 -6
- package/src/primitives/__tests/HMAC.test.ts +24 -18
- package/src/primitives/__tests/Hash.test.ts +57 -46
- package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
- package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
- package/src/primitives/__tests/PrivateKey.test.ts +11 -10
- package/src/primitives/__tests/PublicKey.test.ts +64 -53
- package/src/primitives/__tests/Random.test.ts +1 -1
- package/src/primitives/__tests/Reader.test.ts +240 -219
- package/src/primitives/__tests/ReductionContext.test.ts +98 -61
- package/src/primitives/__tests/Schnorr.test.ts +249 -237
- package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
- package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
- package/src/primitives/__tests/Writer.test.ts +23 -13
- package/src/primitives/__tests/bug-31.test.ts +6 -10
- package/src/primitives/__tests/utils.test.ts +70 -19
- package/src/primitives/utils.ts +103 -79
- package/src/script/Script.ts +18 -12
- package/src/script/ScriptTemplate.ts +3 -5
- package/src/script/Spend.ts +306 -108
- package/src/script/__tests/Script.test.ts +73 -55
- package/src/script/__tests/Spend.test.ts +208 -83
- package/src/script/__tests/SpendComplex.test.ts +19 -13
- package/src/script/__tests/script.invalid.vectors.ts +428 -1796
- package/src/script/__tests/script.valid.vectors.ts +728 -2764
- package/src/script/templates/P2PKH.ts +34 -12
- package/src/script/templates/PushDrop.ts +65 -31
- package/src/script/templates/RPuzzle.ts +29 -8
- package/src/script/templates/__tests/PushDrop.test.ts +146 -41
- package/src/totp/__tests/totp.test.ts +45 -44
- package/src/totp/totp.ts +3 -2
- package/src/transaction/Beef.ts +269 -174
- package/src/transaction/BeefParty.ts +41 -31
- package/src/transaction/BeefTx.ts +36 -26
- package/src/transaction/Broadcaster.ts +10 -6
- package/src/transaction/ChainTracker.ts +2 -2
- package/src/transaction/FeeModel.ts +0 -1
- package/src/transaction/MerklePath.ts +124 -59
- package/src/transaction/Transaction.ts +188 -187
- package/src/transaction/TransactionOutput.ts +0 -1
- package/src/transaction/__tests/Beef.test.ts +390 -287
- package/src/transaction/__tests/MerklePath.test.ts +59 -26
- package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
- package/src/transaction/__tests/Transaction.test.ts +758 -482
- package/src/transaction/__tests/bigtx.vectors.ts +2 -1
- package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
- package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
- package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
- package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
- package/src/transaction/broadcasters/ARC.ts +69 -38
- package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
- package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
- package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
- package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
- package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
- package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
- package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
- package/src/transaction/http/DefaultHttpClient.ts +5 -4
- package/src/transaction/http/FetchHttpClient.ts +18 -9
- package/src/transaction/http/HttpClient.ts +27 -22
- package/src/transaction/http/NodejsHttpClient.ts +23 -9
- package/src/transaction/http/index.ts +5 -1
- package/src/transaction/index.ts +5 -1
- package/src/wallet/CachedKeyDeriver.ts +151 -82
- package/src/wallet/KeyDeriver.ts +186 -105
- package/src/wallet/ProtoWallet.ts +121 -52
- package/src/wallet/Wallet.interfaces.ts +167 -156
- package/src/wallet/WalletClient.ts +314 -59
- package/src/wallet/WalletError.ts +2 -2
- package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
- package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
- package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
- package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
- package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
- package/src/wallet/substrates/WalletWireCalls.ts +2 -2
- package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
- package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
- package/src/wallet/substrates/XDM.ts +425 -36
- package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
- package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
- package/src/wallet/substrates/window.CWI.ts +520 -61
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import Script from '
|
|
2
|
-
import PrivateKey from '
|
|
3
|
-
import P2PKH from '
|
|
4
|
-
import OP from '
|
|
5
|
-
import { toHex } from '
|
|
1
|
+
import Script from '../../script/Script'
|
|
2
|
+
import PrivateKey from '../../primitives/PrivateKey'
|
|
3
|
+
import P2PKH from '../../script/templates/P2PKH'
|
|
4
|
+
import OP from '../../script/OP'
|
|
5
|
+
import { toHex } from '../../primitives/utils'
|
|
6
6
|
|
|
7
7
|
import scriptInvalid from './script.invalid.vectors'
|
|
8
8
|
import scriptValid from './script.valid.vectors'
|
|
@@ -48,7 +48,7 @@ describe('Script', () => {
|
|
|
48
48
|
it('should error when attempting to parse this strange Base58Check encoded string', () => {
|
|
49
49
|
const priv = PrivateKey.fromRandom()
|
|
50
50
|
const address = priv.toAddress([0x88])
|
|
51
|
-
function attemptToDeriveAddress () {
|
|
51
|
+
function attemptToDeriveAddress (): string {
|
|
52
52
|
const script = new P2PKH().lock(address).toASM()
|
|
53
53
|
return script
|
|
54
54
|
}
|
|
@@ -60,7 +60,7 @@ describe('Script', () => {
|
|
|
60
60
|
it('should parse this buffer containing an OP code', () => {
|
|
61
61
|
const buf = Buffer.alloc(1)
|
|
62
62
|
buf[0] = OP.OP_0
|
|
63
|
-
const script = Script.fromBinary(buf)
|
|
63
|
+
const script = Script.fromBinary([...buf])
|
|
64
64
|
expect(script.chunks).toHaveLength(1)
|
|
65
65
|
expect(script.chunks[0].op).toBe(buf[0])
|
|
66
66
|
})
|
|
@@ -68,59 +68,59 @@ describe('Script', () => {
|
|
|
68
68
|
it('should parse this buffer containing another OP code', () => {
|
|
69
69
|
const buf = Buffer.alloc(1)
|
|
70
70
|
buf[0] = OP.OP_CHECKMULTISIG
|
|
71
|
-
const script = Script.fromBinary(buf)
|
|
71
|
+
const script = Script.fromBinary([...buf])
|
|
72
72
|
expect(script.chunks).toHaveLength(1)
|
|
73
73
|
expect(script.chunks[0].op).toBe(buf[0])
|
|
74
74
|
})
|
|
75
75
|
|
|
76
76
|
it('should parse this buffer containing three bytes of data', () => {
|
|
77
|
-
const buf =
|
|
78
|
-
const script = Script.fromBinary(buf)
|
|
77
|
+
const buf = [3, 1, 2, 3]
|
|
78
|
+
const script = Script.fromBinary([...buf])
|
|
79
79
|
expect(script.chunks).toHaveLength(1)
|
|
80
80
|
expect(script.chunks[0].data).toEqual([1, 2, 3])
|
|
81
81
|
})
|
|
82
82
|
|
|
83
83
|
it('should parse this buffer containing OP_PUSHDATA1 and zero bytes of data', () => {
|
|
84
|
-
const buf =
|
|
84
|
+
const buf = [0]
|
|
85
85
|
buf[0] = OP.OP_PUSHDATA1
|
|
86
|
-
const script = Script.fromBinary(buf)
|
|
86
|
+
const script = Script.fromBinary([...buf])
|
|
87
87
|
expect(script.chunks.length).toEqual(1)
|
|
88
88
|
expect(script.chunks[0].data).toEqual([])
|
|
89
89
|
})
|
|
90
90
|
|
|
91
91
|
it('should parse this buffer containing OP_PUSHDATA2 and zero bytes of data', () => {
|
|
92
|
-
const buf =
|
|
92
|
+
const buf = [0]
|
|
93
93
|
buf[0] = OP.OP_PUSHDATA2
|
|
94
|
-
const script = Script.fromBinary(buf)
|
|
94
|
+
const script = Script.fromBinary([...buf])
|
|
95
95
|
expect(script.chunks.length).toEqual(1)
|
|
96
96
|
expect(script.chunks[0].data).toEqual([])
|
|
97
97
|
})
|
|
98
98
|
|
|
99
99
|
it('should parse this buffer containing OP_PUSHDATA2 and three bytes of data', () => {
|
|
100
|
-
const buf =
|
|
101
|
-
const script = Script.fromBinary(buf)
|
|
100
|
+
const buf = [OP.OP_PUSHDATA2, 3, 0, 1, 2, 3]
|
|
101
|
+
const script = Script.fromBinary([...buf])
|
|
102
102
|
expect(script.chunks.length).toEqual(1)
|
|
103
103
|
expect(script.chunks[0].data).toEqual([1, 2, 3])
|
|
104
104
|
})
|
|
105
105
|
|
|
106
106
|
it('should parse this buffer containing OP_PUSHDATA4 and zero bytes of data', () => {
|
|
107
|
-
const buf =
|
|
107
|
+
const buf = [0, 0]
|
|
108
108
|
buf[0] = OP.OP_PUSHDATA4
|
|
109
|
-
const script = Script.fromBinary(buf)
|
|
109
|
+
const script = Script.fromBinary([...buf])
|
|
110
110
|
expect(script.chunks.length).toEqual(1)
|
|
111
111
|
expect(script.chunks[0].data).toEqual([])
|
|
112
112
|
})
|
|
113
113
|
|
|
114
114
|
it('should parse this buffer containing OP_PUSHDATA4 and three bytes of data', () => {
|
|
115
115
|
const buf = [OP.OP_PUSHDATA4, 3, 0, 0, 0, 1, 2, 3]
|
|
116
|
-
const script = Script.fromBinary(buf)
|
|
116
|
+
const script = Script.fromBinary([...buf])
|
|
117
117
|
expect(script.chunks.length).toEqual(1)
|
|
118
118
|
expect(script.chunks[0].data).toEqual([1, 2, 3])
|
|
119
119
|
})
|
|
120
120
|
|
|
121
121
|
it('should parse this buffer an OP code, data, and another OP code', () => {
|
|
122
122
|
const buf = [OP.OP_0, OP.OP_PUSHDATA4, 3, 0, 0, 0, 1, 2, 3, OP.OP_0]
|
|
123
|
-
const script = Script.fromBinary(buf)
|
|
123
|
+
const script = Script.fromBinary([...buf])
|
|
124
124
|
expect(script.chunks.length).toEqual(3)
|
|
125
125
|
expect(script.chunks[0].op).toEqual(buf[0])
|
|
126
126
|
expect(script.chunks[1].data).toEqual([1, 2, 3])
|
|
@@ -139,7 +139,7 @@ describe('Script', () => {
|
|
|
139
139
|
it('should output this buffer containing an OP code', () => {
|
|
140
140
|
const buf = Buffer.alloc(1)
|
|
141
141
|
buf[0] = OP.OP_0
|
|
142
|
-
const script = Script.fromBinary(buf)
|
|
142
|
+
const script = Script.fromBinary([...buf])
|
|
143
143
|
expect(script.chunks.length).toEqual(1)
|
|
144
144
|
expect(script.chunks[0].op).toEqual(buf[0])
|
|
145
145
|
expect(script.toHex()).toEqual(buf.toString('hex'))
|
|
@@ -148,7 +148,7 @@ describe('Script', () => {
|
|
|
148
148
|
it('should output this buffer containing another OP code', () => {
|
|
149
149
|
const buf = Buffer.alloc(1)
|
|
150
150
|
buf[0] = OP.OP_CHECKMULTISIG
|
|
151
|
-
const script = Script.fromBinary(buf)
|
|
151
|
+
const script = Script.fromBinary([...buf])
|
|
152
152
|
expect(script.chunks.length).toEqual(1)
|
|
153
153
|
expect(script.chunks[0].op).toEqual(buf[0])
|
|
154
154
|
expect(script.toHex()).toEqual(buf.toString('hex'))
|
|
@@ -156,7 +156,7 @@ describe('Script', () => {
|
|
|
156
156
|
|
|
157
157
|
it('should output this buffer containing three bytes of data', () => {
|
|
158
158
|
const buf = Buffer.from([3, 1, 2, 3])
|
|
159
|
-
const script = Script.fromBinary(buf)
|
|
159
|
+
const script = Script.fromBinary([...buf])
|
|
160
160
|
expect(script.chunks.length).toEqual(1)
|
|
161
161
|
expect(script.chunks[0].data).toEqual([1, 2, 3])
|
|
162
162
|
expect(script.toHex()).toEqual(buf.toString('hex'))
|
|
@@ -166,7 +166,7 @@ describe('Script', () => {
|
|
|
166
166
|
const buf = Buffer.from([0, 0, 1, 2, 3])
|
|
167
167
|
buf[0] = OP.OP_PUSHDATA1
|
|
168
168
|
buf.writeUInt8(3, 1)
|
|
169
|
-
const script = Script.fromBinary(buf)
|
|
169
|
+
const script = Script.fromBinary([...buf])
|
|
170
170
|
expect(script.chunks.length).toEqual(1)
|
|
171
171
|
expect(script.chunks[0].data).toEqual([1, 2, 3])
|
|
172
172
|
expect(script.toHex()).toEqual(buf.toString('hex'))
|
|
@@ -176,7 +176,7 @@ describe('Script', () => {
|
|
|
176
176
|
const buf = Buffer.from([0, 0, 0, 1, 2, 3])
|
|
177
177
|
buf[0] = OP.OP_PUSHDATA2
|
|
178
178
|
buf.writeUInt16LE(3, 1)
|
|
179
|
-
const script = Script.fromBinary(buf)
|
|
179
|
+
const script = Script.fromBinary([...buf])
|
|
180
180
|
expect(script.chunks.length).toEqual(1)
|
|
181
181
|
expect(script.chunks[0].data).toEqual([1, 2, 3])
|
|
182
182
|
expect(script.toHex()).toEqual(buf.toString('hex'))
|
|
@@ -186,7 +186,7 @@ describe('Script', () => {
|
|
|
186
186
|
const buf = Buffer.from([0, 0, 0, 0, 0, 1, 2, 3])
|
|
187
187
|
buf[0] = OP.OP_PUSHDATA4
|
|
188
188
|
buf.writeUInt16LE(3, 1)
|
|
189
|
-
const script = Script.fromBinary(buf)
|
|
189
|
+
const script = Script.fromBinary([...buf])
|
|
190
190
|
expect(script.chunks.length).toEqual(1)
|
|
191
191
|
expect(script.chunks[0].data).toEqual([1, 2, 3])
|
|
192
192
|
expect(script.toHex()).toEqual(buf.toString('hex'))
|
|
@@ -198,7 +198,7 @@ describe('Script', () => {
|
|
|
198
198
|
buf[1] = OP.OP_PUSHDATA4
|
|
199
199
|
buf.writeUInt16LE(3, 2)
|
|
200
200
|
buf[buf.length - 1] = OP.OP_0
|
|
201
|
-
const script = Script.fromBinary(buf)
|
|
201
|
+
const script = Script.fromBinary([...buf])
|
|
202
202
|
expect(script.chunks.length).toEqual(3)
|
|
203
203
|
expect(script.chunks[0].op).toEqual(buf[0])
|
|
204
204
|
expect(script.chunks[1].data).toEqual([1, 2, 3])
|
|
@@ -214,7 +214,7 @@ describe('Script', () => {
|
|
|
214
214
|
buf[1] = OP.OP_PUSHDATA4
|
|
215
215
|
buf.writeUInt16LE(3, 2)
|
|
216
216
|
buf[buf.length - 1] = OP.OP_0
|
|
217
|
-
const script = Script.fromBinary(buf)
|
|
217
|
+
const script = Script.fromBinary([...buf])
|
|
218
218
|
expect(script.chunks.length).toEqual(3)
|
|
219
219
|
expect(script.chunks[0].op).toEqual(buf[0])
|
|
220
220
|
expect(script.chunks[1].data).toEqual([1, 2, 3])
|
|
@@ -225,35 +225,48 @@ describe('Script', () => {
|
|
|
225
225
|
|
|
226
226
|
describe('fromASM', () => {
|
|
227
227
|
it('should parse these known scripts', () => {
|
|
228
|
-
expect(Script.fromASM('OP_0 010203 OP_0')
|
|
229
|
-
|
|
230
|
-
)
|
|
231
|
-
expect(
|
|
232
|
-
|
|
233
|
-
|
|
228
|
+
expect(Script.fromASM('OP_0 010203 OP_0').toASM()).toEqual(
|
|
229
|
+
'OP_0 010203 OP_0'
|
|
230
|
+
)
|
|
231
|
+
expect(
|
|
232
|
+
Script.fromASM(
|
|
233
|
+
'OP_DUP OP_HASH160 1451baa3aad777144a0759998a03538018dd7b4b OP_EQUALVERIFY OP_CHECKSIG'
|
|
234
|
+
).toASM()
|
|
235
|
+
).toEqual(
|
|
234
236
|
'OP_DUP OP_HASH160 1451baa3aad777144a0759998a03538018dd7b4b OP_EQUALVERIFY OP_CHECKSIG'
|
|
235
237
|
)
|
|
236
|
-
expect(
|
|
237
|
-
|
|
238
|
-
|
|
238
|
+
expect(
|
|
239
|
+
Script.fromASM(
|
|
240
|
+
'OP_SHA256 8cc17e2a2b10e1da145488458a6edec4a1fdb1921c2d5ccbc96aa0ed31b4d5f8 OP_EQUALVERIFY OP_DUP OP_HASH160 1451baa3aad777144a0759998a03538018dd7b4b OP_EQUALVERIFY OP_CHECKSIGVERIFY OP_EQUALVERIFY OP_DUP OP_HASH160 1451baa3aad777144a0759998a03538018dd7b4b OP_EQUALVERIFY OP_CHECKSIG'
|
|
241
|
+
).toASM()
|
|
242
|
+
).toEqual(
|
|
239
243
|
'OP_SHA256 8cc17e2a2b10e1da145488458a6edec4a1fdb1921c2d5ccbc96aa0ed31b4d5f8 OP_EQUALVERIFY OP_DUP OP_HASH160 1451baa3aad777144a0759998a03538018dd7b4b OP_EQUALVERIFY OP_CHECKSIGVERIFY OP_EQUALVERIFY OP_DUP OP_HASH160 1451baa3aad777144a0759998a03538018dd7b4b OP_EQUALVERIFY OP_CHECKSIG'
|
|
240
244
|
)
|
|
241
|
-
expect(Script.fromASM('OP_0 010203 OP_0')
|
|
242
|
-
|
|
243
|
-
)
|
|
244
|
-
expect(Script.fromASM('OP_0 010203 OP_0')
|
|
245
|
-
|
|
246
|
-
)
|
|
247
|
-
expect(Script.fromASM('OP_0 3 010203 OP_0').toASM()).toEqual(
|
|
245
|
+
expect(Script.fromASM('OP_0 010203 OP_0').toASM()).toEqual(
|
|
246
|
+
'OP_0 010203 OP_0'
|
|
247
|
+
)
|
|
248
|
+
expect(Script.fromASM('OP_0 010203 OP_0').toASM()).toEqual(
|
|
249
|
+
'OP_0 010203 OP_0'
|
|
250
|
+
)
|
|
251
|
+
expect(Script.fromASM('OP_0 3 010203 OP_0').toASM()).toEqual(
|
|
252
|
+
'OP_0 03 010203 OP_0'
|
|
253
|
+
)
|
|
248
254
|
expect(Script.fromASM('').toASM()).toEqual('')
|
|
249
255
|
})
|
|
250
256
|
it('should parse this known script in ASM', () => {
|
|
251
|
-
const asm =
|
|
257
|
+
const asm =
|
|
258
|
+
'OP_DUP OP_HASH160 f4c03610e60ad15100929cc23da2f3a799af1725 OP_EQUALVERIFY OP_CHECKSIG'
|
|
252
259
|
const script = Script.fromASM(asm)
|
|
260
|
+
|
|
253
261
|
expect(script.chunks[0].op).toEqual(OP.OP_DUP)
|
|
254
262
|
expect(script.chunks[1].op).toEqual(OP.OP_HASH160)
|
|
255
263
|
expect(script.chunks[2].op).toEqual(20)
|
|
256
|
-
|
|
264
|
+
|
|
265
|
+
// Ensure `data` is defined before calling `toHex`
|
|
266
|
+
expect(toHex(script.chunks[2].data ?? [])).toEqual(
|
|
267
|
+
'f4c03610e60ad15100929cc23da2f3a799af1725'
|
|
268
|
+
)
|
|
269
|
+
|
|
257
270
|
expect(script.chunks[3].op).toEqual(OP.OP_EQUALVERIFY)
|
|
258
271
|
expect(script.chunks[4].op).toEqual(OP.OP_CHECKSIG)
|
|
259
272
|
})
|
|
@@ -267,7 +280,7 @@ describe('Script', () => {
|
|
|
267
280
|
it('should know this is invalid hex', () => {
|
|
268
281
|
const asm = 'OP_RETURN 026d02 0568656c6c6fzz'
|
|
269
282
|
|
|
270
|
-
const createScript = () => {
|
|
283
|
+
const createScript = (): string => {
|
|
271
284
|
const script = Script.fromASM(asm)
|
|
272
285
|
return script.toASM()
|
|
273
286
|
}
|
|
@@ -319,9 +332,11 @@ describe('Script', () => {
|
|
|
319
332
|
|
|
320
333
|
describe('#removeCodeseparators', () => {
|
|
321
334
|
it('should remove any OP_CODESEPARATORs', () => {
|
|
322
|
-
expect(
|
|
323
|
-
.
|
|
324
|
-
|
|
335
|
+
expect(
|
|
336
|
+
Script.fromASM('OP_CODESEPARATOR OP_0 OP_CODESEPARATOR')
|
|
337
|
+
.removeCodeseparators()
|
|
338
|
+
.toASM()
|
|
339
|
+
).toEqual('OP_0')
|
|
325
340
|
})
|
|
326
341
|
})
|
|
327
342
|
|
|
@@ -329,7 +344,9 @@ describe('Script', () => {
|
|
|
329
344
|
it("should know these scripts are or aren't push only", () => {
|
|
330
345
|
expect(Script.fromASM('OP_0').isPushOnly()).toEqual(true)
|
|
331
346
|
expect(Script.fromASM('OP_0 OP_RETURN').isPushOnly()).toEqual(false)
|
|
332
|
-
expect(Script.fromASM('OP_PUSHDATA1 5 1010101010').isPushOnly()).toEqual(
|
|
347
|
+
expect(Script.fromASM('OP_PUSHDATA1 5 1010101010').isPushOnly()).toEqual(
|
|
348
|
+
true
|
|
349
|
+
)
|
|
333
350
|
|
|
334
351
|
// like bitcoind, we regard OP_RESERVED as being "push only"
|
|
335
352
|
expect(Script.fromASM('OP_RESERVED').isPushOnly()).toEqual(true)
|
|
@@ -338,10 +355,11 @@ describe('Script', () => {
|
|
|
338
355
|
|
|
339
356
|
describe('#findAndDelete', () => {
|
|
340
357
|
it('should find and delete this buffer', () => {
|
|
341
|
-
expect(
|
|
342
|
-
.fromASM('OP_RETURN f0f0')
|
|
343
|
-
|
|
344
|
-
|
|
358
|
+
expect(
|
|
359
|
+
Script.fromASM('OP_RETURN f0f0')
|
|
360
|
+
.findAndDelete(Script.fromASM('f0f0'))
|
|
361
|
+
.toASM()
|
|
362
|
+
).toEqual('OP_RETURN')
|
|
345
363
|
})
|
|
346
364
|
})
|
|
347
365
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import PrivateKey from '
|
|
2
|
-
import { hash160, hash256 } from '
|
|
3
|
-
import Curve from '
|
|
4
|
-
import Spend from '
|
|
5
|
-
import P2PKH from '
|
|
6
|
-
import RPuzzle from '
|
|
7
|
-
import Transaction from '
|
|
8
|
-
import LockingScript from '
|
|
9
|
-
import UnlockingScript from '
|
|
1
|
+
import PrivateKey from '../../primitives/PrivateKey'
|
|
2
|
+
import { hash160, hash256 } from '../../primitives/Hash'
|
|
3
|
+
import Curve from '../../primitives/Curve'
|
|
4
|
+
import Spend from '../../script/Spend'
|
|
5
|
+
import P2PKH from '../../script/templates/P2PKH'
|
|
6
|
+
import RPuzzle from '../../script/templates/RPuzzle'
|
|
7
|
+
import Transaction from '../../transaction/Transaction'
|
|
8
|
+
import LockingScript from '../../script/LockingScript'
|
|
9
|
+
import UnlockingScript from '../../script/UnlockingScript'
|
|
10
10
|
|
|
11
11
|
import spendValid from './spend.valid.vectors'
|
|
12
12
|
|
|
@@ -19,15 +19,29 @@ describe('Spend', () => {
|
|
|
19
19
|
const lockingScript = p2pkh.lock(hash)
|
|
20
20
|
const satoshis = 1
|
|
21
21
|
const unlockingTemplate = p2pkh.unlock(privateKey)
|
|
22
|
-
const sourceTx = new Transaction(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
const sourceTx = new Transaction(
|
|
23
|
+
1,
|
|
24
|
+
[],
|
|
25
|
+
[
|
|
26
|
+
{
|
|
27
|
+
lockingScript,
|
|
28
|
+
satoshis
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
0
|
|
32
|
+
)
|
|
33
|
+
const spendTx = new Transaction(
|
|
34
|
+
1,
|
|
35
|
+
[
|
|
36
|
+
{
|
|
37
|
+
sourceTransaction: sourceTx,
|
|
38
|
+
sourceOutputIndex: 0,
|
|
39
|
+
sequence: 0xffffffff
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
[],
|
|
43
|
+
0
|
|
44
|
+
)
|
|
31
45
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
32
46
|
const spend = new Spend({
|
|
33
47
|
sourceTXID: sourceTx.id('hex'),
|
|
@@ -54,15 +68,29 @@ describe('Spend', () => {
|
|
|
54
68
|
const lockingScript = p2pkh.lock(hash)
|
|
55
69
|
const satoshis = 1
|
|
56
70
|
const unlockingTemplate = p2pkh.unlock(wrongPrivateKey)
|
|
57
|
-
const sourceTx = new Transaction(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
71
|
+
const sourceTx = new Transaction(
|
|
72
|
+
1,
|
|
73
|
+
[],
|
|
74
|
+
[
|
|
75
|
+
{
|
|
76
|
+
lockingScript,
|
|
77
|
+
satoshis
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
0
|
|
81
|
+
)
|
|
82
|
+
const spendTx = new Transaction(
|
|
83
|
+
1,
|
|
84
|
+
[
|
|
85
|
+
{
|
|
86
|
+
sourceTransaction: sourceTx,
|
|
87
|
+
sourceOutputIndex: 0,
|
|
88
|
+
sequence: 0xffffffff
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
[],
|
|
92
|
+
0
|
|
93
|
+
)
|
|
66
94
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
67
95
|
const spend = new Spend({
|
|
68
96
|
sourceTXID: sourceTx.id('hex'),
|
|
@@ -82,21 +110,44 @@ describe('Spend', () => {
|
|
|
82
110
|
it('Successfully validates an R-puzzle spend', async () => {
|
|
83
111
|
const k = new PrivateKey(2)
|
|
84
112
|
const c = new Curve()
|
|
85
|
-
let r = c.g.mul(k).x
|
|
86
|
-
|
|
113
|
+
let r = c.g.mul(k).x?.umod(c.n)?.toArray()
|
|
114
|
+
if (r !== null && r !== undefined) {
|
|
115
|
+
r = r[0] > 127 ? [0, ...r] : r
|
|
116
|
+
}
|
|
117
|
+
|
|
87
118
|
const puz = new RPuzzle()
|
|
88
|
-
const lockingScript = puz.lock(r)
|
|
119
|
+
const lockingScript = puz.lock(r ?? [])
|
|
89
120
|
const satoshis = 1
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
121
|
+
|
|
122
|
+
// ✅ Fix: Ensure privateKey is valid and within range
|
|
123
|
+
const privateKey = PrivateKey.fromRandom()
|
|
124
|
+
|
|
125
|
+
const unlockingTemplate = puz.unlock(k, privateKey)
|
|
126
|
+
const sourceTx = new Transaction(
|
|
127
|
+
1,
|
|
128
|
+
[],
|
|
129
|
+
[
|
|
130
|
+
{
|
|
131
|
+
lockingScript,
|
|
132
|
+
satoshis
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
0
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
const spendTx = new Transaction(
|
|
139
|
+
1,
|
|
140
|
+
[
|
|
141
|
+
{
|
|
142
|
+
sourceTransaction: sourceTx,
|
|
143
|
+
sourceOutputIndex: 0,
|
|
144
|
+
sequence: 0xffffffff
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
[],
|
|
148
|
+
0
|
|
149
|
+
)
|
|
150
|
+
|
|
100
151
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
101
152
|
const spend = new Spend({
|
|
102
153
|
sourceTXID: sourceTx.id('hex'),
|
|
@@ -111,28 +162,52 @@ describe('Spend', () => {
|
|
|
111
162
|
inputSequence: 0xffffffff,
|
|
112
163
|
lockTime: 0
|
|
113
164
|
})
|
|
165
|
+
|
|
114
166
|
const valid = spend.validate()
|
|
115
167
|
expect(valid).toBe(true)
|
|
116
168
|
})
|
|
169
|
+
|
|
117
170
|
it('Successfully validates an R-puzzle spend (HASH256)', async () => {
|
|
118
171
|
const k = new PrivateKey(2)
|
|
119
172
|
const c = new Curve()
|
|
120
|
-
let r = c.g.mul(k).x
|
|
121
|
-
|
|
122
|
-
|
|
173
|
+
let r = c.g.mul(k).x?.umod(c.n)?.toArray()
|
|
174
|
+
if (r !== null && r !== undefined) {
|
|
175
|
+
r = r[0] > 127 ? [0, ...r] : r
|
|
176
|
+
r = hash256(r)
|
|
177
|
+
}
|
|
123
178
|
const puz = new RPuzzle('HASH256')
|
|
124
|
-
const lockingScript = puz.lock(r)
|
|
179
|
+
const lockingScript = puz.lock(r ?? [])
|
|
125
180
|
const satoshis = 1
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
181
|
+
|
|
182
|
+
// ✅ Fix: Ensure privateKey is valid and within range
|
|
183
|
+
const privateKey = PrivateKey.fromRandom()
|
|
184
|
+
|
|
185
|
+
const unlockingTemplate = puz.unlock(k, privateKey)
|
|
186
|
+
const sourceTx = new Transaction(
|
|
187
|
+
1,
|
|
188
|
+
[],
|
|
189
|
+
[
|
|
190
|
+
{
|
|
191
|
+
lockingScript,
|
|
192
|
+
satoshis
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
0
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
const spendTx = new Transaction(
|
|
199
|
+
1,
|
|
200
|
+
[
|
|
201
|
+
{
|
|
202
|
+
sourceTransaction: sourceTx,
|
|
203
|
+
sourceOutputIndex: 0,
|
|
204
|
+
sequence: 0xffffffff
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
[],
|
|
208
|
+
0
|
|
209
|
+
)
|
|
210
|
+
|
|
136
211
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
137
212
|
const spend = new Spend({
|
|
138
213
|
sourceTXID: sourceTx.id('hex'),
|
|
@@ -147,29 +222,53 @@ describe('Spend', () => {
|
|
|
147
222
|
inputSequence: 0xffffffff,
|
|
148
223
|
lockTime: 0
|
|
149
224
|
})
|
|
225
|
+
|
|
150
226
|
const valid = spend.validate()
|
|
151
227
|
expect(valid).toBe(true)
|
|
152
228
|
})
|
|
229
|
+
|
|
153
230
|
it('Fails to validate an R-puzzle spend with the wrong K value', async () => {
|
|
154
231
|
const k = new PrivateKey(2)
|
|
155
232
|
const wrongK = new PrivateKey(5)
|
|
156
233
|
const c = new Curve()
|
|
157
|
-
let r = c.g.mul(k).x
|
|
158
|
-
|
|
159
|
-
|
|
234
|
+
let r = c.g.mul(k).x?.umod(c.n)?.toArray()
|
|
235
|
+
if (r !== null && r !== undefined) {
|
|
236
|
+
r = r[0] > 127 ? [0, ...r] : r
|
|
237
|
+
r = hash256(r)
|
|
238
|
+
}
|
|
160
239
|
const puz = new RPuzzle('HASH256')
|
|
161
|
-
const lockingScript = puz.lock(r)
|
|
240
|
+
const lockingScript = puz.lock(r ?? [])
|
|
162
241
|
const satoshis = 1
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
242
|
+
|
|
243
|
+
// ✅ Fix: Ensure privateKey is valid and within range
|
|
244
|
+
const privateKey = PrivateKey.fromRandom()
|
|
245
|
+
|
|
246
|
+
const unlockingTemplate = puz.unlock(wrongK, privateKey)
|
|
247
|
+
const sourceTx = new Transaction(
|
|
248
|
+
1,
|
|
249
|
+
[],
|
|
250
|
+
[
|
|
251
|
+
{
|
|
252
|
+
lockingScript,
|
|
253
|
+
satoshis
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
0
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
const spendTx = new Transaction(
|
|
260
|
+
1,
|
|
261
|
+
[
|
|
262
|
+
{
|
|
263
|
+
sourceTransaction: sourceTx,
|
|
264
|
+
sourceOutputIndex: 0,
|
|
265
|
+
sequence: 0xffffffff
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
[],
|
|
269
|
+
0
|
|
270
|
+
)
|
|
271
|
+
|
|
173
272
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
174
273
|
const spend = new Spend({
|
|
175
274
|
sourceTXID: sourceTx.id('hex'),
|
|
@@ -184,27 +283,51 @@ describe('Spend', () => {
|
|
|
184
283
|
inputSequence: 0xffffffff,
|
|
185
284
|
lockTime: 0
|
|
186
285
|
})
|
|
286
|
+
|
|
187
287
|
expect(() => spend.validate()).toThrow()
|
|
188
288
|
})
|
|
289
|
+
|
|
189
290
|
it('Fails to validate an R-puzzle spend with the wrong hash', async () => {
|
|
190
291
|
const k = new PrivateKey(2)
|
|
191
292
|
const c = new Curve()
|
|
192
|
-
let r = c.g.mul(k).x
|
|
193
|
-
|
|
194
|
-
|
|
293
|
+
let r = c.g.mul(k).x?.umod(c.n)?.toArray()
|
|
294
|
+
if (r !== null && r !== undefined) {
|
|
295
|
+
r = r[0] > 127 ? [0, ...r] : r
|
|
296
|
+
r = hash160(r)
|
|
297
|
+
}
|
|
195
298
|
const puz = new RPuzzle('HASH256')
|
|
196
|
-
const lockingScript = puz.lock(r)
|
|
299
|
+
const lockingScript = puz.lock(r ?? [])
|
|
197
300
|
const satoshis = 1
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
301
|
+
|
|
302
|
+
// ✅ Fix: Ensure privateKey is valid and within range
|
|
303
|
+
const privateKey = PrivateKey.fromRandom()
|
|
304
|
+
|
|
305
|
+
const unlockingTemplate = puz.unlock(k, privateKey)
|
|
306
|
+
const sourceTx = new Transaction(
|
|
307
|
+
1,
|
|
308
|
+
[],
|
|
309
|
+
[
|
|
310
|
+
{
|
|
311
|
+
lockingScript,
|
|
312
|
+
satoshis
|
|
313
|
+
}
|
|
314
|
+
],
|
|
315
|
+
0
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
const spendTx = new Transaction(
|
|
319
|
+
1,
|
|
320
|
+
[
|
|
321
|
+
{
|
|
322
|
+
sourceTransaction: sourceTx,
|
|
323
|
+
sourceOutputIndex: 0,
|
|
324
|
+
sequence: 0xffffffff
|
|
325
|
+
}
|
|
326
|
+
],
|
|
327
|
+
[],
|
|
328
|
+
0
|
|
329
|
+
)
|
|
330
|
+
|
|
208
331
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
209
332
|
const spend = new Spend({
|
|
210
333
|
sourceTXID: sourceTx.id('hex'),
|
|
@@ -219,6 +342,7 @@ describe('Spend', () => {
|
|
|
219
342
|
inputSequence: 0xffffffff,
|
|
220
343
|
lockTime: 0
|
|
221
344
|
})
|
|
345
|
+
|
|
222
346
|
expect(() => spend.validate()).toThrow()
|
|
223
347
|
})
|
|
224
348
|
for (let i = 0; i < spendValid.length; i++) {
|
|
@@ -228,7 +352,8 @@ describe('Spend', () => {
|
|
|
228
352
|
}
|
|
229
353
|
it(a[2], () => {
|
|
230
354
|
const spend = new Spend({
|
|
231
|
-
sourceTXID:
|
|
355
|
+
sourceTXID:
|
|
356
|
+
'0000000000000000000000000000000000000000000000000000000000000000',
|
|
232
357
|
sourceOutputIndex: 0,
|
|
233
358
|
sourceSatoshis: 1,
|
|
234
359
|
lockingScript: LockingScript.fromHex(a[1]),
|