@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
|
@@ -9,6 +9,11 @@ import TransactionSignature from '../../primitives/TransactionSignature.js'
|
|
|
9
9
|
import { sha256 } from '../../primitives/Hash.js'
|
|
10
10
|
import Script from '../Script.js'
|
|
11
11
|
|
|
12
|
+
function verifyTruthy<T>(v: T | undefined): T {
|
|
13
|
+
if (v == null) throw new Error('must have value')
|
|
14
|
+
return v
|
|
15
|
+
}
|
|
16
|
+
|
|
12
17
|
/**
|
|
13
18
|
* P2PKH (Pay To Public Key Hash) class implementing ScriptTemplate.
|
|
14
19
|
*
|
|
@@ -25,12 +30,16 @@ export default class P2PKH implements ScriptTemplate {
|
|
|
25
30
|
let data: number[]
|
|
26
31
|
if (typeof pubkeyhash === 'string') {
|
|
27
32
|
const hash = fromBase58Check(pubkeyhash)
|
|
28
|
-
if (hash.prefix[0] !== 0x00 && hash.prefix[0] !== 0x6f)
|
|
33
|
+
if (hash.prefix[0] !== 0x00 && hash.prefix[0] !== 0x6f) {
|
|
34
|
+
throw new Error('only P2PKH is supported')
|
|
35
|
+
}
|
|
29
36
|
data = hash.data as number[]
|
|
30
37
|
} else {
|
|
31
38
|
data = pubkeyhash
|
|
32
39
|
}
|
|
33
|
-
if (data.length !== 20)
|
|
40
|
+
if (data.length !== 20) {
|
|
41
|
+
throw new Error('P2PKH hash length must be 20 bytes')
|
|
42
|
+
}
|
|
34
43
|
return new LockingScript([
|
|
35
44
|
{ op: OP.OP_DUP },
|
|
36
45
|
{ op: OP.OP_HASH160 },
|
|
@@ -83,22 +92,32 @@ export default class P2PKH implements ScriptTemplate {
|
|
|
83
92
|
|
|
84
93
|
const input = tx.inputs[inputIndex]
|
|
85
94
|
|
|
86
|
-
const otherInputs = tx.inputs.filter(
|
|
95
|
+
const otherInputs = tx.inputs.filter(
|
|
96
|
+
(_, index) => index !== inputIndex
|
|
97
|
+
)
|
|
87
98
|
|
|
88
|
-
const sourceTXID = input.sourceTXID
|
|
89
|
-
if (
|
|
99
|
+
const sourceTXID = input.sourceTXID ?? input.sourceTransaction?.id('hex')
|
|
100
|
+
if (sourceTXID == null || sourceTXID === undefined) {
|
|
90
101
|
throw new Error(
|
|
91
102
|
'The input sourceTXID or sourceTransaction is required for transaction signing.'
|
|
92
103
|
)
|
|
93
104
|
}
|
|
94
|
-
|
|
95
|
-
|
|
105
|
+
if (sourceTXID === '') {
|
|
106
|
+
throw new Error(
|
|
107
|
+
'The input sourceTXID or sourceTransaction is required for transaction signing.'
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
sourceSatoshis ||=
|
|
111
|
+
input.sourceTransaction?.outputs[input.sourceOutputIndex].satoshis
|
|
112
|
+
if (sourceSatoshis == null || sourceSatoshis === undefined) {
|
|
96
113
|
throw new Error(
|
|
97
114
|
'The sourceSatoshis or input sourceTransaction is required for transaction signing.'
|
|
98
115
|
)
|
|
99
116
|
}
|
|
100
|
-
lockingScript ||=
|
|
101
|
-
|
|
117
|
+
lockingScript ||=
|
|
118
|
+
input.sourceTransaction?.outputs[input.sourceOutputIndex]
|
|
119
|
+
.lockingScript
|
|
120
|
+
if (lockingScript == null) {
|
|
102
121
|
throw new Error(
|
|
103
122
|
'The lockingScript or input sourceTransaction is required for transaction signing.'
|
|
104
123
|
)
|
|
@@ -106,17 +125,18 @@ export default class P2PKH implements ScriptTemplate {
|
|
|
106
125
|
|
|
107
126
|
const preimage = TransactionSignature.format({
|
|
108
127
|
sourceTXID,
|
|
109
|
-
sourceOutputIndex: input.sourceOutputIndex,
|
|
128
|
+
sourceOutputIndex: verifyTruthy(input.sourceOutputIndex),
|
|
110
129
|
sourceSatoshis,
|
|
111
130
|
transactionVersion: tx.version,
|
|
112
131
|
otherInputs,
|
|
113
132
|
inputIndex,
|
|
114
133
|
outputs: tx.outputs,
|
|
115
|
-
inputSequence: input.sequence,
|
|
134
|
+
inputSequence: verifyTruthy(input.sequence),
|
|
116
135
|
subscript: lockingScript,
|
|
117
136
|
lockTime: tx.lockTime,
|
|
118
137
|
scope: signatureScope
|
|
119
138
|
})
|
|
139
|
+
|
|
120
140
|
const rawSignature = privateKey.sign(sha256(preimage))
|
|
121
141
|
const sig = new TransactionSignature(
|
|
122
142
|
rawSignature.r,
|
|
@@ -124,7 +144,9 @@ export default class P2PKH implements ScriptTemplate {
|
|
|
124
144
|
signatureScope
|
|
125
145
|
)
|
|
126
146
|
const sigForScript = sig.toChecksigFormat()
|
|
127
|
-
const pubkeyForScript = privateKey
|
|
147
|
+
const pubkeyForScript = privateKey
|
|
148
|
+
.toPublicKey()
|
|
149
|
+
.encode(true) as number[]
|
|
128
150
|
return new UnlockingScript([
|
|
129
151
|
{ op: sigForScript.length, data: sigForScript },
|
|
130
152
|
{ op: pubkeyForScript.length, data: pubkeyForScript }
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { ScriptTemplate, LockingScript, UnlockingScript, OP } from '../index.js'
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
Utils,
|
|
4
|
+
Hash,
|
|
5
|
+
TransactionSignature,
|
|
6
|
+
Signature,
|
|
7
|
+
PublicKey
|
|
8
|
+
} from '../../primitives/index.js'
|
|
9
|
+
import { WalletInterface, SecurityLevel } from '../../wallet/Wallet.interfaces.js'
|
|
4
10
|
import { Transaction } from '../../transaction/index.js'
|
|
5
|
-
|
|
11
|
+
|
|
12
|
+
function verifyTruthy<T>(v: T | undefined): T {
|
|
13
|
+
if (v == null) throw new Error('must have value')
|
|
14
|
+
return v
|
|
15
|
+
}
|
|
6
16
|
|
|
7
17
|
/**
|
|
8
18
|
* For a given piece of data to push onto the stack in script, creates the correct minimally-encoded script chunk,
|
|
@@ -10,7 +20,9 @@ import { SecurityLevel } from '../../wallet/Wallet.interfaces.js'
|
|
|
10
20
|
*
|
|
11
21
|
* TODO: This should be made into a TS-SDK util (distinct from the `minimallyEncode` util)
|
|
12
22
|
*/
|
|
13
|
-
const createMinimallyEncodedScriptChunk = (
|
|
23
|
+
const createMinimallyEncodedScriptChunk = (
|
|
24
|
+
data: number[]
|
|
25
|
+
): { op: number, data?: number[] } => {
|
|
14
26
|
if (data.length === 0) {
|
|
15
27
|
// Could have used OP_0.
|
|
16
28
|
return { op: 0 }
|
|
@@ -52,13 +64,21 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
52
64
|
* @param script PushDrop script to decode back into token fields
|
|
53
65
|
* @returns An object containing PushDrop token fields and the locking public key. If a signature was included, it will be the last field.
|
|
54
66
|
*/
|
|
55
|
-
static decode(script: LockingScript): {
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
static decode(script: LockingScript): {
|
|
68
|
+
lockingPublicKey: PublicKey
|
|
69
|
+
fields: number[][]
|
|
70
|
+
} {
|
|
71
|
+
const lockingPublicKey = PublicKey.fromString(
|
|
72
|
+
Utils.toHex(verifyTruthy(script.chunks[0].data)) // ✅ Ensure not undefined
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
const fields: number[][] = []
|
|
58
76
|
for (let i = 2; i < script.chunks.length; i++) {
|
|
59
|
-
const nextOpcode = script.chunks[i + 1]
|
|
60
|
-
let chunk = script.chunks[i].data
|
|
61
|
-
|
|
77
|
+
const nextOpcode = script.chunks[i + 1]?.op // ✅ Prevent accessing `op` from `undefined`
|
|
78
|
+
let chunk: number[] = script.chunks[i].data ?? [] // ✅ Ensure `chunk` is always `number[]`
|
|
79
|
+
|
|
80
|
+
if (chunk.length === 0) {
|
|
81
|
+
// ✅ Only modify `chunk` if it was empty
|
|
62
82
|
if (script.chunks[i].op >= 80 && script.chunks[i].op <= 95) {
|
|
63
83
|
chunk = [script.chunks[i].op - 80]
|
|
64
84
|
} else if (script.chunks[i].op === 0) {
|
|
@@ -101,7 +121,15 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
101
121
|
* @param {boolean} [includeSignature=true] - Flag indicating if a signature should be included in the script (default yes).
|
|
102
122
|
* @returns {Promise<LockingScript>} The generated PushDrop locking script.
|
|
103
123
|
*/
|
|
104
|
-
async lock(
|
|
124
|
+
async lock(
|
|
125
|
+
fields: number[][],
|
|
126
|
+
protocolID: [SecurityLevel, string],
|
|
127
|
+
keyID: string,
|
|
128
|
+
counterparty: string,
|
|
129
|
+
forSelf = false,
|
|
130
|
+
includeSignature = true,
|
|
131
|
+
lockPosition: 'before' | 'after' = 'before'
|
|
132
|
+
): Promise<LockingScript> {
|
|
105
133
|
const { publicKey } = await this.wallet.getPublicKey({
|
|
106
134
|
protocolID,
|
|
107
135
|
keyID,
|
|
@@ -110,7 +138,10 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
110
138
|
})
|
|
111
139
|
const lockChunks: Array<{ op: number, data?: number[] }> = []
|
|
112
140
|
const pushDropChunks: Array<{ op: number, data?: number[] }> = []
|
|
113
|
-
lockChunks.push({
|
|
141
|
+
lockChunks.push({
|
|
142
|
+
op: publicKey.length / 2,
|
|
143
|
+
data: Utils.toArray(publicKey, 'hex')
|
|
144
|
+
})
|
|
114
145
|
lockChunks.push({ op: OP.OP_CHECKSIG })
|
|
115
146
|
if (includeSignature) {
|
|
116
147
|
const dataToSign = fields.reduce((a, e) => [...a, ...e], [])
|
|
@@ -130,19 +161,13 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
130
161
|
pushDropChunks.push({ op: OP.OP_2DROP })
|
|
131
162
|
notYetDropped -= 2
|
|
132
163
|
}
|
|
133
|
-
if (notYetDropped) {
|
|
164
|
+
if (notYetDropped !== 0) {
|
|
134
165
|
pushDropChunks.push({ op: OP.OP_DROP })
|
|
135
166
|
}
|
|
136
167
|
if (lockPosition === 'before') {
|
|
137
|
-
return new LockingScript([
|
|
138
|
-
...lockChunks,
|
|
139
|
-
...pushDropChunks
|
|
140
|
-
])
|
|
168
|
+
return new LockingScript([...lockChunks, ...pushDropChunks])
|
|
141
169
|
} else {
|
|
142
|
-
return new LockingScript([
|
|
143
|
-
...pushDropChunks,
|
|
144
|
-
...lockChunks
|
|
145
|
-
])
|
|
170
|
+
return new LockingScript([...pushDropChunks, ...lockChunks])
|
|
146
171
|
}
|
|
147
172
|
}
|
|
148
173
|
|
|
@@ -172,7 +197,10 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
172
197
|
estimateLength: () => Promise<73>
|
|
173
198
|
} {
|
|
174
199
|
return {
|
|
175
|
-
sign: async (
|
|
200
|
+
sign: async (
|
|
201
|
+
tx: Transaction,
|
|
202
|
+
inputIndex: number
|
|
203
|
+
): Promise<UnlockingScript> => {
|
|
176
204
|
let signatureScope = TransactionSignature.SIGHASH_FORKID
|
|
177
205
|
if (signOutputs === 'all') {
|
|
178
206
|
signatureScope |= TransactionSignature.SIGHASH_ALL
|
|
@@ -189,22 +217,27 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
189
217
|
|
|
190
218
|
const input = tx.inputs[inputIndex]
|
|
191
219
|
|
|
192
|
-
const otherInputs = tx.inputs.filter(
|
|
220
|
+
const otherInputs = tx.inputs.filter(
|
|
221
|
+
(_, index) => index !== inputIndex
|
|
222
|
+
)
|
|
193
223
|
|
|
194
|
-
const sourceTXID = input.sourceTXID
|
|
195
|
-
if (
|
|
224
|
+
const sourceTXID = input.sourceTXID ?? input.sourceTransaction?.id('hex')
|
|
225
|
+
if (sourceTXID == null || sourceTXID === undefined) {
|
|
196
226
|
throw new Error(
|
|
197
227
|
'The input sourceTXID or sourceTransaction is required for transaction signing.'
|
|
198
228
|
)
|
|
199
229
|
}
|
|
200
|
-
sourceSatoshis ||=
|
|
201
|
-
|
|
230
|
+
sourceSatoshis ||=
|
|
231
|
+
input.sourceTransaction?.outputs[input.sourceOutputIndex].satoshis
|
|
232
|
+
if (sourceSatoshis == null || sourceSatoshis === undefined) {
|
|
202
233
|
throw new Error(
|
|
203
234
|
'The sourceSatoshis or input sourceTransaction is required for transaction signing.'
|
|
204
235
|
)
|
|
205
236
|
}
|
|
206
|
-
lockingScript ||=
|
|
207
|
-
|
|
237
|
+
lockingScript ||=
|
|
238
|
+
input.sourceTransaction?.outputs[input.sourceOutputIndex]
|
|
239
|
+
.lockingScript
|
|
240
|
+
if (lockingScript == null) {
|
|
208
241
|
throw new Error(
|
|
209
242
|
'The lockingScript or input sourceTransaction is required for transaction signing.'
|
|
210
243
|
)
|
|
@@ -212,17 +245,18 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
212
245
|
|
|
213
246
|
const preimage = TransactionSignature.format({
|
|
214
247
|
sourceTXID,
|
|
215
|
-
sourceOutputIndex: input.sourceOutputIndex,
|
|
248
|
+
sourceOutputIndex: verifyTruthy(input.sourceOutputIndex),
|
|
216
249
|
sourceSatoshis,
|
|
217
250
|
transactionVersion: tx.version,
|
|
218
251
|
otherInputs,
|
|
219
252
|
inputIndex,
|
|
220
253
|
outputs: tx.outputs,
|
|
221
|
-
inputSequence: input.sequence,
|
|
254
|
+
inputSequence: input.sequence ?? 0xffffffff,
|
|
222
255
|
subscript: lockingScript,
|
|
223
256
|
lockTime: tx.lockTime,
|
|
224
257
|
scope: signatureScope
|
|
225
258
|
})
|
|
259
|
+
|
|
226
260
|
const preimageHash = Hash.sha256(preimage)
|
|
227
261
|
const { signature: bareSignature } = await this.wallet.createSignature({
|
|
228
262
|
data: preimageHash,
|
|
@@ -8,6 +8,7 @@ import TransactionSignature from '../../primitives/TransactionSignature.js'
|
|
|
8
8
|
import { sha256 } from '../../primitives/Hash.js'
|
|
9
9
|
import ScriptChunk from '../ScriptChunk.js'
|
|
10
10
|
import BigNumber from '../../primitives/BigNumber.js'
|
|
11
|
+
import Script from '../Script.js'
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* RPuzzle class implementing ScriptTemplate.
|
|
@@ -23,7 +24,15 @@ export default class RPuzzle implements ScriptTemplate {
|
|
|
23
24
|
*
|
|
24
25
|
* @param {'raw'|'SHA1'|'SHA256'|'HASH256'|'RIPEMD160'|'HASH160'} type Denotes the type of puzzle to create
|
|
25
26
|
*/
|
|
26
|
-
constructor(
|
|
27
|
+
constructor(
|
|
28
|
+
type:
|
|
29
|
+
| 'raw'
|
|
30
|
+
| 'SHA1'
|
|
31
|
+
| 'SHA256'
|
|
32
|
+
| 'HASH256'
|
|
33
|
+
| 'RIPEMD160'
|
|
34
|
+
| 'HASH160' = 'raw'
|
|
35
|
+
) {
|
|
27
36
|
this.type = type
|
|
28
37
|
}
|
|
29
38
|
|
|
@@ -105,26 +114,38 @@ export default class RPuzzle implements ScriptTemplate {
|
|
|
105
114
|
)
|
|
106
115
|
}
|
|
107
116
|
const preimage = TransactionSignature.format({
|
|
108
|
-
sourceTXID: input.sourceTransaction
|
|
109
|
-
sourceOutputIndex: input.sourceOutputIndex,
|
|
110
|
-
sourceSatoshis:
|
|
117
|
+
sourceTXID: input.sourceTransaction?.id('hex') ?? '',
|
|
118
|
+
sourceOutputIndex: input.sourceOutputIndex ?? 0,
|
|
119
|
+
sourceSatoshis:
|
|
120
|
+
input.sourceTransaction?.outputs[input.sourceOutputIndex]
|
|
121
|
+
?.satoshis ?? 0,
|
|
111
122
|
transactionVersion: tx.version,
|
|
112
123
|
otherInputs,
|
|
113
124
|
inputIndex,
|
|
114
125
|
outputs: tx.outputs,
|
|
115
|
-
inputSequence: input.sequence,
|
|
116
|
-
subscript:
|
|
126
|
+
inputSequence: input.sequence ?? 0xffffffff,
|
|
127
|
+
subscript:
|
|
128
|
+
input.sourceTransaction?.outputs[input.sourceOutputIndex]
|
|
129
|
+
?.lockingScript ?? new Script(),
|
|
117
130
|
lockTime: tx.lockTime,
|
|
118
131
|
scope: signatureScope
|
|
119
132
|
})
|
|
120
|
-
|
|
133
|
+
|
|
134
|
+
const rawSignature = privateKey.sign(
|
|
135
|
+
sha256(preimage),
|
|
136
|
+
undefined,
|
|
137
|
+
true,
|
|
138
|
+
k
|
|
139
|
+
)
|
|
121
140
|
const sig = new TransactionSignature(
|
|
122
141
|
rawSignature.r,
|
|
123
142
|
rawSignature.s,
|
|
124
143
|
signatureScope
|
|
125
144
|
)
|
|
126
145
|
const sigForScript = sig.toChecksigFormat()
|
|
127
|
-
const pubkeyForScript = privateKey
|
|
146
|
+
const pubkeyForScript = privateKey
|
|
147
|
+
.toPublicKey()
|
|
148
|
+
.encode(true) as number[]
|
|
128
149
|
return new UnlockingScript([
|
|
129
150
|
{ op: sigForScript.length, data: sigForScript },
|
|
130
151
|
{ op: pubkeyForScript.length, data: pubkeyForScript }
|
|
@@ -1,33 +1,66 @@
|
|
|
1
1
|
/* eslint-env jest */
|
|
2
|
-
import PushDrop from '
|
|
3
|
-
import
|
|
4
|
-
import { PrivateKey, Utils } from '
|
|
5
|
-
import { Script, Spend } from '
|
|
6
|
-
import { Transaction } from '
|
|
2
|
+
import PushDrop from '../../../script/templates/PushDrop'
|
|
3
|
+
import { CompletedProtoWallet } from '../../../auth/certificates/__tests/CompletedProtoWallet'
|
|
4
|
+
import { PrivateKey, Utils } from '../../../primitives/index'
|
|
5
|
+
import { Script, Spend } from '../../../script/index'
|
|
6
|
+
import { Transaction } from '../../../transaction/index'
|
|
7
7
|
|
|
8
8
|
describe('PushDrop', () => {
|
|
9
|
-
let privateKey: typeof PrivateKey
|
|
10
9
|
let wallet
|
|
11
10
|
let pushDrop: PushDrop
|
|
12
11
|
|
|
13
|
-
const createDecodeRedeem = async (
|
|
14
|
-
|
|
12
|
+
const createDecodeRedeem = async (
|
|
13
|
+
fields: number[][] = [],
|
|
14
|
+
protocolID: [0 | 1 | 2, string] = [0, 'tests'],
|
|
15
|
+
keyID: string = 'test-key',
|
|
16
|
+
counterparty: string = 'self',
|
|
17
|
+
signOutputs: 'all' | 'none' | 'single' = 'all',
|
|
18
|
+
anyoneCanPay: boolean = false
|
|
19
|
+
): Promise<void> => {
|
|
20
|
+
const lockingScript = await pushDrop.lock(
|
|
21
|
+
fields,
|
|
22
|
+
protocolID,
|
|
23
|
+
keyID,
|
|
24
|
+
counterparty
|
|
25
|
+
)
|
|
15
26
|
expect(lockingScript).toBeInstanceOf(Script)
|
|
16
27
|
const decoded = await PushDrop.decode(lockingScript)
|
|
17
28
|
expect(decoded.fields).toEqual(fields)
|
|
18
|
-
const expectedPublicKey = (
|
|
29
|
+
const expectedPublicKey = (
|
|
30
|
+
await wallet.getPublicKey({ protocolID, keyID, counterparty })
|
|
31
|
+
).publicKey
|
|
19
32
|
expect(decoded.lockingPublicKey.toString()).toEqual(expectedPublicKey)
|
|
20
33
|
const satoshis = 1
|
|
21
|
-
const unlockingTemplate = await pushDrop.unlock(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
34
|
+
const unlockingTemplate = await pushDrop.unlock(
|
|
35
|
+
protocolID,
|
|
36
|
+
keyID,
|
|
37
|
+
counterparty,
|
|
38
|
+
signOutputs,
|
|
39
|
+
anyoneCanPay
|
|
40
|
+
)
|
|
41
|
+
const sourceTx = new Transaction(
|
|
42
|
+
1,
|
|
43
|
+
[],
|
|
44
|
+
[
|
|
45
|
+
{
|
|
46
|
+
lockingScript,
|
|
47
|
+
satoshis
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
0
|
|
51
|
+
)
|
|
52
|
+
const spendTx = new Transaction(
|
|
53
|
+
1,
|
|
54
|
+
[
|
|
55
|
+
{
|
|
56
|
+
sourceTransaction: sourceTx,
|
|
57
|
+
sourceOutputIndex: 0,
|
|
58
|
+
sequence: 0xffffffff
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
[],
|
|
62
|
+
0
|
|
63
|
+
)
|
|
31
64
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
32
65
|
expect(await unlockingTemplate.estimateLength()).toEqual(73)
|
|
33
66
|
const spend = new Spend({
|
|
@@ -48,8 +81,8 @@ describe('PushDrop', () => {
|
|
|
48
81
|
}
|
|
49
82
|
|
|
50
83
|
beforeEach(() => {
|
|
51
|
-
privateKey = PrivateKey.fromRandom()
|
|
52
|
-
wallet = new
|
|
84
|
+
const privateKey = PrivateKey.fromRandom()
|
|
85
|
+
wallet = new CompletedProtoWallet(privateKey)
|
|
53
86
|
pushDrop = new PushDrop(wallet)
|
|
54
87
|
})
|
|
55
88
|
|
|
@@ -64,11 +97,46 @@ describe('PushDrop', () => {
|
|
|
64
97
|
await createDecodeRedeem([new Array(70000).fill(0xff)])
|
|
65
98
|
await createDecodeRedeem([[0], [1], [2]])
|
|
66
99
|
await createDecodeRedeem([[0], [1], [2], [3]])
|
|
67
|
-
await createDecodeRedeem(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
100
|
+
await createDecodeRedeem(
|
|
101
|
+
[[3, 1, 4, 1, 5, 9]],
|
|
102
|
+
undefined,
|
|
103
|
+
undefined,
|
|
104
|
+
undefined,
|
|
105
|
+
'none',
|
|
106
|
+
false
|
|
107
|
+
)
|
|
108
|
+
await createDecodeRedeem(
|
|
109
|
+
[[3, 1, 4, 1, 5, 9]],
|
|
110
|
+
undefined,
|
|
111
|
+
undefined,
|
|
112
|
+
undefined,
|
|
113
|
+
'single',
|
|
114
|
+
false
|
|
115
|
+
)
|
|
116
|
+
await createDecodeRedeem(
|
|
117
|
+
[[3, 1, 4, 1, 5, 9]],
|
|
118
|
+
undefined,
|
|
119
|
+
undefined,
|
|
120
|
+
undefined,
|
|
121
|
+
'all',
|
|
122
|
+
true
|
|
123
|
+
)
|
|
124
|
+
await createDecodeRedeem(
|
|
125
|
+
[[3, 1, 4, 1, 5, 9]],
|
|
126
|
+
undefined,
|
|
127
|
+
undefined,
|
|
128
|
+
undefined,
|
|
129
|
+
'none',
|
|
130
|
+
true
|
|
131
|
+
)
|
|
132
|
+
await createDecodeRedeem(
|
|
133
|
+
[[3, 1, 4, 1, 5, 9]],
|
|
134
|
+
undefined,
|
|
135
|
+
undefined,
|
|
136
|
+
undefined,
|
|
137
|
+
'single',
|
|
138
|
+
true
|
|
139
|
+
)
|
|
72
140
|
})
|
|
73
141
|
|
|
74
142
|
describe('lock', () => {
|
|
@@ -81,7 +149,12 @@ describe('PushDrop', () => {
|
|
|
81
149
|
const protocolID: [0 | 1 | 2, string] = [0, 'tests']
|
|
82
150
|
const keyID = 'test-key'
|
|
83
151
|
const counterparty = 'self'
|
|
84
|
-
const lockingScript = await pushDrop.lock(
|
|
152
|
+
const lockingScript = await pushDrop.lock(
|
|
153
|
+
fields,
|
|
154
|
+
protocolID,
|
|
155
|
+
keyID,
|
|
156
|
+
counterparty
|
|
157
|
+
)
|
|
85
158
|
|
|
86
159
|
// Check that the locking script is not null
|
|
87
160
|
expect(lockingScript).toBeInstanceOf(Script)
|
|
@@ -89,7 +162,9 @@ describe('PushDrop', () => {
|
|
|
89
162
|
// Decode the locking script and check the fields and locking public key
|
|
90
163
|
const decoded = await PushDrop.decode(lockingScript)
|
|
91
164
|
expect(decoded.fields).toEqual(fields)
|
|
92
|
-
const expectedPublicKey = (
|
|
165
|
+
const expectedPublicKey = (
|
|
166
|
+
await wallet.getPublicKey({ protocolID, keyID, counterparty })
|
|
167
|
+
).publicKey
|
|
93
168
|
expect(decoded.lockingPublicKey.toString()).toEqual(expectedPublicKey)
|
|
94
169
|
})
|
|
95
170
|
})
|
|
@@ -104,18 +179,41 @@ describe('PushDrop', () => {
|
|
|
104
179
|
const protocolID: [0 | 1 | 2, string] = [0, 'tests']
|
|
105
180
|
const keyID = 'test-key'
|
|
106
181
|
const counterparty = 'self'
|
|
107
|
-
const lockingScript = await pushDrop.lock(
|
|
182
|
+
const lockingScript = await pushDrop.lock(
|
|
183
|
+
fields,
|
|
184
|
+
protocolID,
|
|
185
|
+
keyID,
|
|
186
|
+
counterparty
|
|
187
|
+
)
|
|
108
188
|
const satoshis = 1
|
|
109
|
-
const unlockingTemplate = await pushDrop.unlock(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
189
|
+
const unlockingTemplate = await pushDrop.unlock(
|
|
190
|
+
protocolID,
|
|
191
|
+
keyID,
|
|
192
|
+
counterparty
|
|
193
|
+
)
|
|
194
|
+
const sourceTx = new Transaction(
|
|
195
|
+
1,
|
|
196
|
+
[],
|
|
197
|
+
[
|
|
198
|
+
{
|
|
199
|
+
lockingScript,
|
|
200
|
+
satoshis
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
0
|
|
204
|
+
)
|
|
205
|
+
const spendTx = new Transaction(
|
|
206
|
+
1,
|
|
207
|
+
[
|
|
208
|
+
{
|
|
209
|
+
sourceTransaction: sourceTx,
|
|
210
|
+
sourceOutputIndex: 0,
|
|
211
|
+
sequence: 0xffffffff
|
|
212
|
+
}
|
|
213
|
+
],
|
|
214
|
+
[],
|
|
215
|
+
0
|
|
216
|
+
)
|
|
119
217
|
const unlockingScript = await unlockingTemplate.sign(spendTx, 0)
|
|
120
218
|
expect(await unlockingTemplate.estimateLength()).toEqual(73)
|
|
121
219
|
const spend = new Spend({
|
|
@@ -147,11 +245,18 @@ describe('PushDrop', () => {
|
|
|
147
245
|
const keyID = 'test-key'
|
|
148
246
|
const counterparty = 'self'
|
|
149
247
|
|
|
150
|
-
const lockingScript = await pushDrop.lock(
|
|
248
|
+
const lockingScript = await pushDrop.lock(
|
|
249
|
+
fields,
|
|
250
|
+
protocolID,
|
|
251
|
+
keyID,
|
|
252
|
+
counterparty
|
|
253
|
+
)
|
|
151
254
|
|
|
152
255
|
const decoded = await PushDrop.decode(lockingScript)
|
|
153
256
|
expect(decoded.fields).toEqual(fields)
|
|
154
|
-
const expectedPublicKey = (
|
|
257
|
+
const expectedPublicKey = (
|
|
258
|
+
await wallet.getPublicKey({ protocolID, keyID, counterparty })
|
|
259
|
+
).publicKey
|
|
155
260
|
expect(decoded.lockingPublicKey.toString()).toEqual(expectedPublicKey)
|
|
156
261
|
})
|
|
157
262
|
})
|