@bsv/sdk 1.6.9 → 1.6.11
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/README.md +9 -4
- package/dist/cjs/package.json +4 -2
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/concepts/beef.md +84 -0
- package/docs/concepts/chain-tracking.md +122 -0
- package/docs/concepts/decentralized-identity.md +184 -0
- package/docs/concepts/fees.md +217 -0
- package/docs/concepts/identity-certificates.md +255 -0
- package/docs/concepts/index.md +62 -0
- package/docs/concepts/key-management.md +176 -0
- package/docs/concepts/script-templates.md +163 -0
- package/docs/concepts/sdk-philosophy.md +72 -0
- package/docs/concepts/signatures.md +179 -0
- package/docs/concepts/spv-verification.md +106 -0
- package/docs/concepts/transaction-encoding.md +148 -0
- package/docs/concepts/transaction-structure.md +63 -0
- package/docs/concepts/trust-model.md +123 -0
- package/docs/concepts/verification.md +219 -0
- package/docs/concepts/wallet-integration.md +95 -0
- package/docs/guides/direct-transaction-creation.md +137 -0
- package/docs/guides/http-client-configuration.md +414 -0
- package/docs/guides/index.md +30 -0
- package/docs/guides/transaction-signing-methods.md +268 -0
- package/docs/index.md +74 -0
- package/docs/reference/arc-config.md +698 -0
- package/docs/reference/brc-100.md +33 -0
- package/docs/reference/configuration.md +829 -0
- package/docs/reference/debugging.md +700 -0
- package/docs/reference/errors.md +547 -0
- package/docs/reference/index.md +98 -0
- package/docs/reference/network-config.md +914 -0
- package/docs/reference/op-codes.md +306 -0
- package/docs/reference/transaction-signatures.md +94 -0
- package/docs/requirements.txt +3 -0
- package/docs/tutorials/advanced-transaction.md +575 -0
- package/docs/tutorials/aes-encryption.md +947 -0
- package/docs/tutorials/authfetch-tutorial.md +957 -0
- package/docs/tutorials/ecdh-key-exchange.md +547 -0
- package/docs/tutorials/elliptic-curve-fundamentals.md +603 -0
- package/docs/tutorials/error-handling.md +1215 -0
- package/docs/tutorials/first-transaction-low-level.md +204 -0
- package/docs/tutorials/first-transaction.md +278 -0
- package/docs/tutorials/hashes-and-hmacs.md +814 -0
- package/docs/tutorials/identity-management.md +702 -0
- package/docs/tutorials/index.md +182 -0
- package/docs/tutorials/key-management.md +536 -0
- package/docs/tutorials/protowallet-development.md +716 -0
- package/docs/tutorials/script-construction.md +690 -0
- package/docs/tutorials/spv-merkle-proofs.md +682 -0
- package/docs/tutorials/testnet-transactions-low-level.md +352 -0
- package/docs/tutorials/transaction-broadcasting.md +535 -0
- package/docs/tutorials/transaction-types.md +419 -0
- package/docs/tutorials/type-42.md +582 -0
- package/docs/tutorials/uhrp-storage.md +579 -0
- package/package.json +4 -2
- package/src/wallet/substrates/HTTPWalletJSON.ts +6 -1
- package/dist/cjs/src/auth/__tests/Peer.test.js +0 -446
- package/dist/cjs/src/auth/__tests/Peer.test.js.map +0 -1
- package/dist/cjs/src/auth/__tests/SessionManager.test.js +0 -69
- package/dist/cjs/src/auth/__tests/SessionManager.test.js.map +0 -1
- package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js +0 -182
- package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js.map +0 -1
- package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js +0 -184
- package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js.map +0 -1
- package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js +0 -75
- package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +0 -1
- package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js +0 -101
- package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js.map +0 -1
- package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js +0 -106
- package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +0 -1
- package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js +0 -111
- package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js.map +0 -1
- package/dist/cjs/src/auth/utils/certificateHelpers.js +0 -51
- package/dist/cjs/src/auth/utils/certificateHelpers.js.map +0 -1
- package/dist/cjs/src/compat/__tests/BSM.test.js +0 -69
- package/dist/cjs/src/compat/__tests/BSM.test.js.map +0 -1
- package/dist/cjs/src/compat/__tests/ECIES.test.js +0 -115
- package/dist/cjs/src/compat/__tests/ECIES.test.js.map +0 -1
- package/dist/cjs/src/compat/__tests/HD.test.js +0 -336
- package/dist/cjs/src/compat/__tests/HD.test.js.map +0 -1
- package/dist/cjs/src/compat/__tests/Mnemonic.test.js +0 -150
- package/dist/cjs/src/compat/__tests/Mnemonic.test.js.map +0 -1
- package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js +0 -175
- package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js.map +0 -1
- package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js +0 -57
- package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js.map +0 -1
- package/dist/cjs/src/messages/__tests/SignedMessage.test.js +0 -52
- package/dist/cjs/src/messages/__tests/SignedMessage.test.js.map +0 -1
- package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js +0 -1471
- package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js.map +0 -1
- package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +0 -78
- package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +0 -1
- package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js +0 -933
- package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/AESGCM.test.js +0 -248
- package/dist/cjs/src/primitives/__tests/AESGCM.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js +0 -36
- package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js +0 -36
- package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js +0 -501
- package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js +0 -185
- package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js +0 -149
- package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js +0 -23
- package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js +0 -268
- package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js +0 -147
- package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js +0 -322
- package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/Curve.unit.test.js +0 -145
- package/dist/cjs/src/primitives/__tests/Curve.unit.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/DRBG.test.js +0 -22
- package/dist/cjs/src/primitives/__tests/DRBG.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/DRBG.vectors.js +0 -170
- package/dist/cjs/src/primitives/__tests/DRBG.vectors.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/ECDH.test.js +0 -34
- package/dist/cjs/src/primitives/__tests/ECDH.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/ECDSA.test.js +0 -89
- package/dist/cjs/src/primitives/__tests/ECDSA.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/HMAC.test.js +0 -60
- package/dist/cjs/src/primitives/__tests/HMAC.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/Hash.test.js +0 -159
- package/dist/cjs/src/primitives/__tests/Hash.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js +0 -122
- package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js +0 -105
- package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/PrivateKey.test.js +0 -90
- package/dist/cjs/src/primitives/__tests/PrivateKey.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/PublicKey.test.js +0 -83
- package/dist/cjs/src/primitives/__tests/PublicKey.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/Random.test.js +0 -19
- package/dist/cjs/src/primitives/__tests/Random.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/Reader.test.js +0 -282
- package/dist/cjs/src/primitives/__tests/Reader.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/ReductionContext.test.js +0 -224
- package/dist/cjs/src/primitives/__tests/ReductionContext.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/Schnorr.test.js +0 -213
- package/dist/cjs/src/primitives/__tests/Schnorr.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js +0 -51
- package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js +0 -43
- package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/Writer.test.js +0 -176
- package/dist/cjs/src/primitives/__tests/Writer.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/bug-31.test.js +0 -32
- package/dist/cjs/src/primitives/__tests/bug-31.test.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/sighash.vectors.js +0 -3506
- package/dist/cjs/src/primitives/__tests/sighash.vectors.js.map +0 -1
- package/dist/cjs/src/primitives/__tests/utils.test.js +0 -110
- package/dist/cjs/src/primitives/__tests/utils.test.js.map +0 -1
- package/dist/cjs/src/script/__tests/Script.test.js +0 -347
- package/dist/cjs/src/script/__tests/Script.test.js.map +0 -1
- package/dist/cjs/src/script/__tests/Spend.test.js +0 -282
- package/dist/cjs/src/script/__tests/Spend.test.js.map +0 -1
- package/dist/cjs/src/script/__tests/SpendComplex.test.js +0 -52
- package/dist/cjs/src/script/__tests/SpendComplex.test.js.map +0 -1
- package/dist/cjs/src/script/__tests/script.invalid.vectors.js +0 -2370
- package/dist/cjs/src/script/__tests/script.invalid.vectors.js.map +0 -1
- package/dist/cjs/src/script/__tests/script.valid.vectors.js +0 -1181
- package/dist/cjs/src/script/__tests/script.valid.vectors.js.map +0 -1
- package/dist/cjs/src/script/__tests/spend.valid.vectors.js +0 -2298
- package/dist/cjs/src/script/__tests/spend.valid.vectors.js.map +0 -1
- package/dist/cjs/src/script/templates/__tests/PushDrop.test.js +0 -161
- package/dist/cjs/src/script/templates/__tests/PushDrop.test.js.map +0 -1
- package/dist/cjs/src/totp/__tests/totp.test.js +0 -67
- package/dist/cjs/src/totp/__tests/totp.test.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/Beef.test.js +0 -393
- package/dist/cjs/src/transaction/__tests/Beef.test.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/MerklePath.test.js +0 -209
- package/dist/cjs/src/transaction/__tests/MerklePath.test.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js +0 -219
- package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/Transaction.test.js +0 -1073
- package/dist/cjs/src/transaction/__tests/Transaction.test.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/bigtx.vectors.js +0 -7
- package/dist/cjs/src/transaction/__tests/bigtx.vectors.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js +0 -11
- package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js +0 -7
- package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js +0 -230
- package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js.map +0 -1
- package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js +0 -296
- package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js.map +0 -1
- package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js +0 -246
- package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js.map +0 -1
- package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +0 -148
- package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +0 -1
- package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +0 -155
- package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +0 -1
- package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js +0 -39
- package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js.map +0 -1
- package/dist/cjs/src/wallet/WalletSigner.js +0 -260
- package/dist/cjs/src/wallet/WalletSigner.js.map +0 -1
- package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js +0 -269
- package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js.map +0 -1
- package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js +0 -114
- package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js.map +0 -1
- package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js +0 -475
- package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js.map +0 -1
- package/dist/cjs/src/wallet/createActionSdk.js +0 -230
- package/dist/cjs/src/wallet/createActionSdk.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js +0 -174
- package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/CertOps.js +0 -181
- package/dist/cjs/src/wallet/sdk/CertOps.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/Certificate.js +0 -162
- package/dist/cjs/src/wallet/sdk/Certificate.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/KeyDeriver.js +0 -176
- package/dist/cjs/src/wallet/sdk/KeyDeriver.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/ProtoWallet.js +0 -75
- package/dist/cjs/src/wallet/sdk/ProtoWallet.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/StorageSyncReader.js +0 -3
- package/dist/cjs/src/wallet/sdk/StorageSyncReader.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/WERR_errors.js +0 -107
- package/dist/cjs/src/wallet/sdk/WERR_errors.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js +0 -3
- package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/WalletCrypto.js +0 -171
- package/dist/cjs/src/wallet/sdk/WalletCrypto.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/WalletError.js +0 -103
- package/dist/cjs/src/wallet/sdk/WalletError.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js +0 -3
- package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js +0 -3
- package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js +0 -3
- package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/index.js +0 -31
- package/dist/cjs/src/wallet/sdk/index.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/types.js +0 -11
- package/dist/cjs/src/wallet/sdk/types.js.map +0 -1
- package/dist/cjs/src/wallet/sdk/validationHelpers.js +0 -601
- package/dist/cjs/src/wallet/sdk/validationHelpers.js.map +0 -1
- package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js +0 -1962
- package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +0 -1
- package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js +0 -579
- package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js.map +0 -1
- package/dist/cjs/src/wallet/utilityHelpers.js +0 -305
- package/dist/cjs/src/wallet/utilityHelpers.js.map +0 -1
- package/dist/cjs/src/wallet/validationHelpers.js +0 -601
- package/dist/cjs/src/wallet/validationHelpers.js.map +0 -1
- package/dist/esm/src/auth/__tests/Peer.test.js +0 -448
- package/dist/esm/src/auth/__tests/Peer.test.js.map +0 -1
- package/dist/esm/src/auth/__tests/SessionManager.test.js +0 -69
- package/dist/esm/src/auth/__tests/SessionManager.test.js.map +0 -1
- package/dist/esm/src/auth/certificates/__tests/Certificate.test.js +0 -182
- package/dist/esm/src/auth/certificates/__tests/Certificate.test.js.map +0 -1
- package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js +0 -184
- package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js.map +0 -1
- package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js +0 -75
- package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +0 -1
- package/dist/esm/src/auth/utils/__tests/cryptononce.test.js +0 -101
- package/dist/esm/src/auth/utils/__tests/cryptononce.test.js.map +0 -1
- package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js +0 -106
- package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +0 -1
- package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js +0 -111
- package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js.map +0 -1
- package/dist/esm/src/auth/utils/certificateHelpers.js +0 -47
- package/dist/esm/src/auth/utils/certificateHelpers.js.map +0 -1
- package/dist/esm/src/compat/__tests/BSM.test.js +0 -69
- package/dist/esm/src/compat/__tests/BSM.test.js.map +0 -1
- package/dist/esm/src/compat/__tests/ECIES.test.js +0 -115
- package/dist/esm/src/compat/__tests/ECIES.test.js.map +0 -1
- package/dist/esm/src/compat/__tests/HD.test.js +0 -336
- package/dist/esm/src/compat/__tests/HD.test.js.map +0 -1
- package/dist/esm/src/compat/__tests/Mnemonic.test.js +0 -150
- package/dist/esm/src/compat/__tests/Mnemonic.test.js.map +0 -1
- package/dist/esm/src/compat/__tests/Mnemonic.vectors.js +0 -175
- package/dist/esm/src/compat/__tests/Mnemonic.vectors.js.map +0 -1
- package/dist/esm/src/messages/__tests/EncryptedMessage.test.js +0 -57
- package/dist/esm/src/messages/__tests/EncryptedMessage.test.js.map +0 -1
- package/dist/esm/src/messages/__tests/SignedMessage.test.js +0 -52
- package/dist/esm/src/messages/__tests/SignedMessage.test.js.map +0 -1
- package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js +0 -1471
- package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js.map +0 -1
- package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +0 -78
- package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +0 -1
- package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js +0 -933
- package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/AESGCM.test.js +0 -248
- package/dist/esm/src/primitives/__tests/AESGCM.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js +0 -36
- package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js +0 -36
- package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js +0 -501
- package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js +0 -185
- package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js +0 -149
- package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js +0 -23
- package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js +0 -268
- package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js +0 -147
- package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js +0 -322
- package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/Curve.unit.test.js +0 -145
- package/dist/esm/src/primitives/__tests/Curve.unit.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/DRBG.test.js +0 -22
- package/dist/esm/src/primitives/__tests/DRBG.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/DRBG.vectors.js +0 -170
- package/dist/esm/src/primitives/__tests/DRBG.vectors.js.map +0 -1
- package/dist/esm/src/primitives/__tests/ECDH.test.js +0 -34
- package/dist/esm/src/primitives/__tests/ECDH.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/ECDSA.test.js +0 -89
- package/dist/esm/src/primitives/__tests/ECDSA.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/HMAC.test.js +0 -60
- package/dist/esm/src/primitives/__tests/HMAC.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/Hash.test.js +0 -159
- package/dist/esm/src/primitives/__tests/Hash.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js +0 -122
- package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js.map +0 -1
- package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js +0 -105
- package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/PrivateKey.test.js +0 -90
- package/dist/esm/src/primitives/__tests/PrivateKey.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/PublicKey.test.js +0 -83
- package/dist/esm/src/primitives/__tests/PublicKey.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/Random.test.js +0 -19
- package/dist/esm/src/primitives/__tests/Random.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/Reader.test.js +0 -282
- package/dist/esm/src/primitives/__tests/Reader.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/ReductionContext.test.js +0 -223
- package/dist/esm/src/primitives/__tests/ReductionContext.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/Schnorr.test.js +0 -213
- package/dist/esm/src/primitives/__tests/Schnorr.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/SymmetricKey.test.js +0 -51
- package/dist/esm/src/primitives/__tests/SymmetricKey.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js +0 -43
- package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js.map +0 -1
- package/dist/esm/src/primitives/__tests/Writer.test.js +0 -176
- package/dist/esm/src/primitives/__tests/Writer.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/bug-31.test.js +0 -32
- package/dist/esm/src/primitives/__tests/bug-31.test.js.map +0 -1
- package/dist/esm/src/primitives/__tests/sighash.vectors.js +0 -3506
- package/dist/esm/src/primitives/__tests/sighash.vectors.js.map +0 -1
- package/dist/esm/src/primitives/__tests/utils.test.js +0 -110
- package/dist/esm/src/primitives/__tests/utils.test.js.map +0 -1
- package/dist/esm/src/script/__tests/Script.test.js +0 -347
- package/dist/esm/src/script/__tests/Script.test.js.map +0 -1
- package/dist/esm/src/script/__tests/Spend.test.js +0 -282
- package/dist/esm/src/script/__tests/Spend.test.js.map +0 -1
- package/dist/esm/src/script/__tests/SpendComplex.test.js +0 -51
- package/dist/esm/src/script/__tests/SpendComplex.test.js.map +0 -1
- package/dist/esm/src/script/__tests/script.invalid.vectors.js +0 -2370
- package/dist/esm/src/script/__tests/script.invalid.vectors.js.map +0 -1
- package/dist/esm/src/script/__tests/script.valid.vectors.js +0 -1181
- package/dist/esm/src/script/__tests/script.valid.vectors.js.map +0 -1
- package/dist/esm/src/script/__tests/spend.valid.vectors.js +0 -2298
- package/dist/esm/src/script/__tests/spend.valid.vectors.js.map +0 -1
- package/dist/esm/src/script/templates/__tests/PushDrop.test.js +0 -161
- package/dist/esm/src/script/templates/__tests/PushDrop.test.js.map +0 -1
- package/dist/esm/src/totp/__tests/totp.test.js +0 -67
- package/dist/esm/src/totp/__tests/totp.test.js.map +0 -1
- package/dist/esm/src/transaction/__tests/Beef.test.js +0 -393
- package/dist/esm/src/transaction/__tests/Beef.test.js.map +0 -1
- package/dist/esm/src/transaction/__tests/MerklePath.test.js +0 -209
- package/dist/esm/src/transaction/__tests/MerklePath.test.js.map +0 -1
- package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js +0 -219
- package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js.map +0 -1
- package/dist/esm/src/transaction/__tests/Transaction.test.js +0 -1072
- package/dist/esm/src/transaction/__tests/Transaction.test.js.map +0 -1
- package/dist/esm/src/transaction/__tests/bigtx.vectors.js +0 -7
- package/dist/esm/src/transaction/__tests/bigtx.vectors.js.map +0 -1
- package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js +0 -11
- package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js.map +0 -1
- package/dist/esm/src/transaction/__tests/bump.valid.vectors.js +0 -7
- package/dist/esm/src/transaction/__tests/bump.valid.vectors.js.map +0 -1
- package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js +0 -230
- package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js.map +0 -1
- package/dist/esm/src/transaction/__tests/tx.valid.vectors.js +0 -296
- package/dist/esm/src/transaction/__tests/tx.valid.vectors.js.map +0 -1
- package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js +0 -246
- package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js.map +0 -1
- package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +0 -148
- package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +0 -1
- package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +0 -155
- package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +0 -1
- package/dist/esm/src/wallet/ScriptTemplateSABPPP.js +0 -37
- package/dist/esm/src/wallet/ScriptTemplateSABPPP.js.map +0 -1
- package/dist/esm/src/wallet/WalletSigner.js +0 -263
- package/dist/esm/src/wallet/WalletSigner.js.map +0 -1
- package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js +0 -269
- package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js.map +0 -1
- package/dist/esm/src/wallet/__tests/KeyDeriver.test.js +0 -113
- package/dist/esm/src/wallet/__tests/KeyDeriver.test.js.map +0 -1
- package/dist/esm/src/wallet/__tests/ProtoWallet.test.js +0 -475
- package/dist/esm/src/wallet/__tests/ProtoWallet.test.js.map +0 -1
- package/dist/esm/src/wallet/createActionSdk.js +0 -223
- package/dist/esm/src/wallet/createActionSdk.js.map +0 -1
- package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js +0 -174
- package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js.map +0 -1
- package/dist/esm/src/wallet/sdk/CertOps.js +0 -181
- package/dist/esm/src/wallet/sdk/CertOps.js.map +0 -1
- package/dist/esm/src/wallet/sdk/Certificate.js +0 -186
- package/dist/esm/src/wallet/sdk/Certificate.js.map +0 -1
- package/dist/esm/src/wallet/sdk/KeyDeriver.js +0 -174
- package/dist/esm/src/wallet/sdk/KeyDeriver.js.map +0 -1
- package/dist/esm/src/wallet/sdk/ProtoWallet.js +0 -71
- package/dist/esm/src/wallet/sdk/ProtoWallet.js.map +0 -1
- package/dist/esm/src/wallet/sdk/StorageSyncReader.js +0 -2
- package/dist/esm/src/wallet/sdk/StorageSyncReader.js.map +0 -1
- package/dist/esm/src/wallet/sdk/WERR_errors.js +0 -99
- package/dist/esm/src/wallet/sdk/WERR_errors.js.map +0 -1
- package/dist/esm/src/wallet/sdk/Wallet.interfaces.js +0 -2
- package/dist/esm/src/wallet/sdk/Wallet.interfaces.js.map +0 -1
- package/dist/esm/src/wallet/sdk/WalletCrypto.js +0 -168
- package/dist/esm/src/wallet/sdk/WalletCrypto.js.map +0 -1
- package/dist/esm/src/wallet/sdk/WalletError.js +0 -100
- package/dist/esm/src/wallet/sdk/WalletError.js.map +0 -1
- package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js +0 -2
- package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js.map +0 -1
- package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js +0 -2
- package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js.map +0 -1
- package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js +0 -2
- package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js.map +0 -1
- package/dist/esm/src/wallet/sdk/index.js +0 -15
- package/dist/esm/src/wallet/sdk/index.js.map +0 -1
- package/dist/esm/src/wallet/sdk/types.js +0 -8
- package/dist/esm/src/wallet/sdk/types.js.map +0 -1
- package/dist/esm/src/wallet/sdk/validationHelpers.js +0 -566
- package/dist/esm/src/wallet/sdk/validationHelpers.js.map +0 -1
- package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js +0 -1962
- package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +0 -1
- package/dist/esm/src/wallet/substrates/__tests/XDM.test.js +0 -579
- package/dist/esm/src/wallet/substrates/__tests/XDM.test.js.map +0 -1
- package/dist/esm/src/wallet/utilityHelpers.js +0 -275
- package/dist/esm/src/wallet/utilityHelpers.js.map +0 -1
- package/dist/esm/src/wallet/validationHelpers.js +0 -566
- package/dist/esm/src/wallet/validationHelpers.js.map +0 -1
- package/dist/types/src/auth/__tests/Peer.test.d.ts +0 -2
- package/dist/types/src/auth/__tests/Peer.test.d.ts.map +0 -1
- package/dist/types/src/auth/__tests/SessionManager.test.d.ts +0 -2
- package/dist/types/src/auth/__tests/SessionManager.test.d.ts.map +0 -1
- package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts +0 -2
- package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts.map +0 -1
- package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts +0 -2
- package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts.map +0 -1
- package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts +0 -2
- package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts.map +0 -1
- package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts +0 -2
- package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts.map +0 -1
- package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts +0 -2
- package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts.map +0 -1
- package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts +0 -2
- package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts.map +0 -1
- package/dist/types/src/auth/utils/certificateHelpers.d.ts +0 -26
- package/dist/types/src/auth/utils/certificateHelpers.d.ts.map +0 -1
- package/dist/types/src/compat/__tests/BSM.test.d.ts +0 -2
- package/dist/types/src/compat/__tests/BSM.test.d.ts.map +0 -1
- package/dist/types/src/compat/__tests/ECIES.test.d.ts +0 -2
- package/dist/types/src/compat/__tests/ECIES.test.d.ts.map +0 -1
- package/dist/types/src/compat/__tests/HD.test.d.ts +0 -2
- package/dist/types/src/compat/__tests/HD.test.d.ts.map +0 -1
- package/dist/types/src/compat/__tests/Mnemonic.test.d.ts +0 -2
- package/dist/types/src/compat/__tests/Mnemonic.test.d.ts.map +0 -1
- package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts +0 -11
- package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts.map +0 -1
- package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts +0 -2
- package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts.map +0 -1
- package/dist/types/src/messages/__tests/SignedMessage.test.d.ts +0 -2
- package/dist/types/src/messages/__tests/SignedMessage.test.d.ts.map +0 -1
- package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts +0 -2
- package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts.map +0 -1
- package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts +0 -2
- package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts.map +0 -1
- package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts +0 -2
- package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/AESGCM.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/AESGCM.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts +0 -8
- package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts +0 -8
- package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts +0 -15
- package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/DRBG.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/DRBG.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts +0 -10
- package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/ECDH.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/ECDH.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/ECDSA.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/ECDSA.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/HMAC.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/HMAC.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/Hash.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/Hash.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts +0 -68
- package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/PublicKey.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/PublicKey.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/Random.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/Random.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/Reader.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/Reader.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/Schnorr.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/Schnorr.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts +0 -20
- package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/Writer.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/Writer.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/bug-31.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/bug-31.test.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/sighash.vectors.d.ts +0 -3
- package/dist/types/src/primitives/__tests/sighash.vectors.d.ts.map +0 -1
- package/dist/types/src/primitives/__tests/utils.test.d.ts +0 -2
- package/dist/types/src/primitives/__tests/utils.test.d.ts.map +0 -1
- package/dist/types/src/script/__tests/Script.test.d.ts +0 -2
- package/dist/types/src/script/__tests/Script.test.d.ts.map +0 -1
- package/dist/types/src/script/__tests/Spend.test.d.ts +0 -2
- package/dist/types/src/script/__tests/Spend.test.d.ts.map +0 -1
- package/dist/types/src/script/__tests/SpendComplex.test.d.ts +0 -2
- package/dist/types/src/script/__tests/SpendComplex.test.d.ts.map +0 -1
- package/dist/types/src/script/__tests/script.invalid.vectors.d.ts +0 -3
- package/dist/types/src/script/__tests/script.invalid.vectors.d.ts.map +0 -1
- package/dist/types/src/script/__tests/script.valid.vectors.d.ts +0 -3
- package/dist/types/src/script/__tests/script.valid.vectors.d.ts.map +0 -1
- package/dist/types/src/script/__tests/spend.valid.vectors.d.ts +0 -3
- package/dist/types/src/script/__tests/spend.valid.vectors.d.ts.map +0 -1
- package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts +0 -2
- package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts.map +0 -1
- package/dist/types/src/totp/__tests/totp.test.d.ts +0 -2
- package/dist/types/src/totp/__tests/totp.test.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/Beef.test.d.ts +0 -2
- package/dist/types/src/transaction/__tests/Beef.test.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/MerklePath.test.d.ts +0 -2
- package/dist/types/src/transaction/__tests/MerklePath.test.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts +0 -2
- package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/Transaction.test.d.ts +0 -2
- package/dist/types/src/transaction/__tests/Transaction.test.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts +0 -6
- package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts +0 -6
- package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts +0 -5
- package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts +0 -3
- package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts.map +0 -1
- package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts +0 -3
- package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts.map +0 -1
- package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts +0 -2
- package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts.map +0 -1
- package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts +0 -2
- package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts.map +0 -1
- package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts +0 -2
- package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts.map +0 -1
- package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts +0 -25
- package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts.map +0 -1
- package/dist/types/src/wallet/WalletSigner.d.ts +0 -110
- package/dist/types/src/wallet/WalletSigner.d.ts.map +0 -1
- package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts +0 -2
- package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts.map +0 -1
- package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts +0 -2
- package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts.map +0 -1
- package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts +0 -2
- package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts.map +0 -1
- package/dist/types/src/wallet/createActionSdk.d.ts +0 -8
- package/dist/types/src/wallet/createActionSdk.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts +0 -94
- package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/CertOps.d.ts +0 -63
- package/dist/types/src/wallet/sdk/CertOps.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/Certificate.d.ts +0 -77
- package/dist/types/src/wallet/sdk/Certificate.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/KeyDeriver.d.ts +0 -128
- package/dist/types/src/wallet/sdk/KeyDeriver.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/ProtoWallet.d.ts +0 -30
- package/dist/types/src/wallet/sdk/ProtoWallet.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts +0 -102
- package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/WERR_errors.d.ts +0 -84
- package/dist/types/src/wallet/sdk/WERR_errors.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts +0 -1036
- package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/WalletCrypto.d.ts +0 -31
- package/dist/types/src/wallet/sdk/WalletCrypto.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/WalletError.d.ts +0 -46
- package/dist/types/src/wallet/sdk/WalletError.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts +0 -293
- package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts +0 -48
- package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts +0 -296
- package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/index.d.ts +0 -15
- package/dist/types/src/wallet/sdk/index.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/types.d.ts +0 -56
- package/dist/types/src/wallet/sdk/types.d.ts.map +0 -1
- package/dist/types/src/wallet/sdk/validationHelpers.d.ts +0 -301
- package/dist/types/src/wallet/sdk/validationHelpers.d.ts.map +0 -1
- package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts +0 -2
- package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts.map +0 -1
- package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts +0 -5
- package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts.map +0 -1
- package/dist/types/src/wallet/utilityHelpers.d.ts +0 -142
- package/dist/types/src/wallet/utilityHelpers.d.ts.map +0 -1
- package/dist/types/src/wallet/validationHelpers.d.ts +0 -301
- package/dist/types/src/wallet/validationHelpers.d.ts.map +0 -1
- package/docs/README.md +0 -21
- /package/docs/{auth.md → reference/auth.md} +0 -0
- /package/docs/{compat.md → reference/compat.md} +0 -0
- /package/docs/{identity.md → reference/identity.md} +0 -0
- /package/docs/{kvstore.md → reference/kvstore.md} +0 -0
- /package/docs/{messages.md → reference/messages.md} +0 -0
- /package/docs/{overlay-tools.md → reference/overlay-tools.md} +0 -0
- /package/docs/{primitives.md → reference/primitives.md} +0 -0
- /package/docs/{registry.md → reference/registry.md} +0 -0
- /package/docs/{script.md → reference/script.md} +0 -0
- /package/docs/{storage.md → reference/storage.md} +0 -0
- /package/docs/{totp.md → reference/totp.md} +0 -0
- /package/docs/{transaction.md → reference/transaction.md} +0 -0
- /package/docs/{wallet.md → reference/wallet.md} +0 -0
|
@@ -1,1072 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const BigNumber_1 = __importDefault(require("../../primitives/BigNumber"));
|
|
7
|
-
const TransactionSignature_1 = __importDefault(require("../../primitives/TransactionSignature"));
|
|
8
|
-
const utils_1 = require("../../primitives/utils");
|
|
9
|
-
const Script_1 = __importDefault(require("../../script/Script"));
|
|
10
|
-
const UnlockingScript_1 = __importDefault(require("../../script/UnlockingScript"));
|
|
11
|
-
const LockingScript_1 = __importDefault(require("../../script/LockingScript"));
|
|
12
|
-
const Transaction_1 = __importDefault(require("../../transaction/Transaction"));
|
|
13
|
-
const Hash_1 = require("../../primitives/Hash");
|
|
14
|
-
const PrivateKey_1 = __importDefault(require("../../primitives/PrivateKey"));
|
|
15
|
-
const Curve_1 = __importDefault(require("../../primitives/Curve"));
|
|
16
|
-
const P2PKH_1 = __importDefault(require("../../script/templates/P2PKH"));
|
|
17
|
-
const Utxo_1 = __importDefault(require("../../compat/Utxo"));
|
|
18
|
-
const MerklePath_1 = __importDefault(require("../../transaction/MerklePath"));
|
|
19
|
-
const Beef_1 = require("../../transaction/Beef");
|
|
20
|
-
const sighash_vectors_1 = __importDefault(require("../../primitives/__tests/sighash.vectors"));
|
|
21
|
-
const tx_invalid_vectors_1 = __importDefault(require("./tx.invalid.vectors"));
|
|
22
|
-
const tx_valid_vectors_1 = __importDefault(require("./tx.valid.vectors"));
|
|
23
|
-
const bigtx_vectors_1 = __importDefault(require("./bigtx.vectors"));
|
|
24
|
-
const BRC62Hex = '0100beef01fe636d0c0007021400fe507c0c7aa754cef1f7889d5fd395cf1f785dd7de98eed895dbedfe4e5bc70d1502ac4e164f5bc16746bb0868404292ac8318bbac3800e4aad13a014da427adce3e010b00bc4ff395efd11719b277694cface5aa50d085a0bb81f613f70313acd28cf4557010400574b2d9142b8d28b61d88e3b2c3f44d858411356b49a28a4643b6d1a6a092a5201030051a05fc84d531b5d250c23f4f886f6812f9fe3f402d61607f977b4ecd2701c19010000fd781529d58fc2523cf396a7f25440b409857e7e221766c57214b1d38c7b481f01010062f542f45ea3660f86c013ced80534cb5fd4c19d66c56e7e8c5d4bf2d40acc5e010100b121e91836fd7cd5102b654e9f72f3cf6fdbfd0b161c53a9c54b12c841126331020100000001cd4e4cac3c7b56920d1e7655e7e260d31f29d9a388d04910f1bbd72304a79029010000006b483045022100e75279a205a547c445719420aa3138bf14743e3f42618e5f86a19bde14bb95f7022064777d34776b05d816daf1699493fcdf2ef5a5ab1ad710d9c97bfb5b8f7cef3641210263e2dee22b1ddc5e11f6fab8bcd2378bdd19580d640501ea956ec0e786f93e76ffffffff013e660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac0000000001000100000001ac4e164f5bc16746bb0868404292ac8318bbac3800e4aad13a014da427adce3e000000006a47304402203a61a2e931612b4bda08d541cfb980885173b8dcf64a3471238ae7abcd368d6402204cbf24f04b9aa2256d8901f0ed97866603d2be8324c2bfb7a37bf8fc90edd5b441210263e2dee22b1ddc5e11f6fab8bcd2378bdd19580d640501ea956ec0e786f93e76ffffffff013c660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac0000000000';
|
|
25
|
-
const MerkleRootFromBEEF = 'bb6f640cc4ee56bf38eb5a1969ac0c16caa2d3d202b22bf3735d10eec0ca6e00';
|
|
26
|
-
describe('Transaction', () => {
|
|
27
|
-
const txIn = {
|
|
28
|
-
sourceTXID: '0000000000000000000000000000000000000000000000000000000000000000',
|
|
29
|
-
sourceOutputIndex: 0,
|
|
30
|
-
unlockingScript: UnlockingScript_1.default.fromHex('ae'),
|
|
31
|
-
sequence: 0
|
|
32
|
-
};
|
|
33
|
-
const txOut = {
|
|
34
|
-
satoshis: BigNumber_1.default.fromHex('05000000000000', 'big').toNumber(),
|
|
35
|
-
lockingScript: LockingScript_1.default.fromHex('ae')
|
|
36
|
-
};
|
|
37
|
-
const tx = new Transaction_1.default(0, [txIn], [txOut], 0);
|
|
38
|
-
const txhex = '000000000100000000000000000000000000000000000000000000000000000000000000000000000001ae0000000001050000000000000001ae00000000';
|
|
39
|
-
const txbuf = (0, utils_1.toArray)(txhex, 'hex');
|
|
40
|
-
const tx2idhex = '8c9aa966d35bfeaf031409e0001b90ccdafd8d859799eb945a3c515b8260bcf2';
|
|
41
|
-
const tx2hex = '01000000029e8d016a7b0dc49a325922d05da1f916d1e4d4f0cb840c9727f3d22ce8d1363f000000008c493046022100e9318720bee5425378b4763b0427158b1051eec8b08442ce3fbfbf7b30202a44022100d4172239ebd701dae2fbaaccd9f038e7ca166707333427e3fb2a2865b19a7f27014104510c67f46d2cbb29476d1f0b794be4cb549ea59ab9cc1e731969a7bf5be95f7ad5e7f904e5ccf50a9dc1714df00fbeb794aa27aaff33260c1032d931a75c56f2ffffffffa3195e7a1ab665473ff717814f6881485dc8759bebe97e31c301ffe7933a656f020000008b48304502201c282f35f3e02a1f32d2089265ad4b561f07ea3c288169dedcf2f785e6065efa022100e8db18aadacb382eed13ee04708f00ba0a9c40e3b21cf91da8859d0f7d99e0c50141042b409e1ebbb43875be5edde9c452c82c01e3903d38fa4fd89f3887a52cb8aea9dc8aec7e2c9d5b3609c03eb16259a2537135a1bf0f9c5fbbcbdbaf83ba402442ffffffff02206b1000000000001976a91420bb5c3bfaef0231dc05190e7f1c8e22e098991e88acf0ca0100000000001976a9149e3e2d23973a04ec1b02be97c30ab9f2f27c3b2c88ac00000000';
|
|
42
|
-
const tx2buf = (0, utils_1.toArray)(tx2hex, 'hex');
|
|
43
|
-
it('should make a new transaction', () => {
|
|
44
|
-
let tx = new Transaction_1.default();
|
|
45
|
-
expect(tx).toBeDefined();
|
|
46
|
-
tx = new Transaction_1.default();
|
|
47
|
-
expect(tx).toBeDefined();
|
|
48
|
-
expect(Transaction_1.default.fromBinary(txbuf).toHex()).toEqual(txhex);
|
|
49
|
-
// should set known defaults
|
|
50
|
-
expect(tx.version).toEqual(1);
|
|
51
|
-
expect(tx.inputs.length).toEqual(0);
|
|
52
|
-
expect(tx.outputs.length).toEqual(0);
|
|
53
|
-
expect(tx.lockTime).toEqual(0);
|
|
54
|
-
});
|
|
55
|
-
describe('#constructor', () => {
|
|
56
|
-
it('should set these known defaults', () => {
|
|
57
|
-
const tx = new Transaction_1.default();
|
|
58
|
-
expect(tx.version).toEqual(1);
|
|
59
|
-
expect(tx.inputs.length).toEqual(0);
|
|
60
|
-
expect(tx.outputs.length).toEqual(0);
|
|
61
|
-
expect(tx.lockTime).toEqual(0);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('#fromHex', () => {
|
|
65
|
-
it('should recover from this known tx', () => {
|
|
66
|
-
expect(Transaction_1.default.fromHex(txhex).toHex()).toEqual(txhex);
|
|
67
|
-
});
|
|
68
|
-
it('should recover from this known tx from the blockchain', () => {
|
|
69
|
-
expect(Transaction_1.default.fromHex(tx2hex).toHex()).toEqual(tx2hex);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe('#fromBinary', () => {
|
|
73
|
-
it('should recover from this known tx', () => {
|
|
74
|
-
expect((0, utils_1.toHex)(Transaction_1.default.fromBinary(txbuf).toBinary())).toEqual(txhex);
|
|
75
|
-
});
|
|
76
|
-
it('should recover from this known tx from the blockchain', () => {
|
|
77
|
-
expect((0, utils_1.toHex)(Transaction_1.default.fromBinary(tx2buf).toBinary())).toEqual(tx2hex);
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
describe('#parseScriptOffsets', () => {
|
|
81
|
-
it('should match sliced scripts to parsed scripts', async () => {
|
|
82
|
-
const tx = Transaction_1.default.fromBinary(tx2buf);
|
|
83
|
-
expect(tx.id('hex')).toBe(tx2idhex);
|
|
84
|
-
const r = Transaction_1.default.parseScriptOffsets(tx2buf);
|
|
85
|
-
expect(r.inputs.length).toBe(2);
|
|
86
|
-
expect(r.outputs.length).toBe(2);
|
|
87
|
-
for (let vin = 0; vin < 2; vin++) {
|
|
88
|
-
const i = r.inputs[vin];
|
|
89
|
-
const script = tx2buf.slice(i.offset, i.length + i.offset);
|
|
90
|
-
expect(script).toEqual(tx.inputs[vin].unlockingScript?.toBinary());
|
|
91
|
-
}
|
|
92
|
-
for (let vout = 0; vout < 2; vout++) {
|
|
93
|
-
const o = r.outputs[vout];
|
|
94
|
-
const script = tx2buf.slice(o.offset, o.length + o.offset);
|
|
95
|
-
expect(script).toEqual(tx.outputs[vout].lockingScript?.toBinary());
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
describe('#toHex', () => {
|
|
100
|
-
it('should produce this known tx', () => {
|
|
101
|
-
expect(Transaction_1.default.fromHex(txhex).toHex()).toEqual(txhex);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe('#toBinary', () => {
|
|
105
|
-
it('should produce this known tx', () => {
|
|
106
|
-
expect((0, utils_1.toHex)(Transaction_1.default.fromBinary(txbuf).toBinary())).toEqual(txhex);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('#hash', () => {
|
|
110
|
-
it('should correctly calculate the hash of this known transaction', () => {
|
|
111
|
-
const tx = Transaction_1.default.fromBinary(tx2buf);
|
|
112
|
-
const hash = tx.hash();
|
|
113
|
-
const reversedHash = Array.isArray(hash)
|
|
114
|
-
? hash.reverse()
|
|
115
|
-
: (0, utils_1.toArray)(hash, 'hex').reverse();
|
|
116
|
-
expect((0, utils_1.toHex)(reversedHash)).toEqual(tx2idhex);
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
describe('#id', () => {
|
|
120
|
-
it('should correctly calculate the txid of this known transaction', () => {
|
|
121
|
-
const tx = Transaction_1.default.fromBinary(tx2buf);
|
|
122
|
-
expect(tx.id('hex')).toEqual(tx2idhex);
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
describe('#addInput', () => {
|
|
126
|
-
it('should add an input', () => {
|
|
127
|
-
const txIn = {
|
|
128
|
-
sourceTXID: '0000000000000000000000000000000000000000000000000000000000000000',
|
|
129
|
-
sourceOutputIndex: 0,
|
|
130
|
-
unlockingScript: new UnlockingScript_1.default(),
|
|
131
|
-
sequence: 0xffffffff
|
|
132
|
-
};
|
|
133
|
-
const tx = new Transaction_1.default();
|
|
134
|
-
expect(tx.inputs.length).toEqual(0);
|
|
135
|
-
tx.addInput(txIn);
|
|
136
|
-
expect(tx.inputs.length).toEqual(1);
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
describe('#addOutput', () => {
|
|
140
|
-
it('should add an output', () => {
|
|
141
|
-
const txOut = {
|
|
142
|
-
lockingScript: new LockingScript_1.default(),
|
|
143
|
-
satoshis: 1
|
|
144
|
-
};
|
|
145
|
-
const tx = new Transaction_1.default();
|
|
146
|
-
expect(tx.outputs.length).toEqual(0);
|
|
147
|
-
tx.addOutput(txOut);
|
|
148
|
-
expect(tx.outputs.length).toEqual(1);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
describe('Signing', () => {
|
|
152
|
-
it('Signs unlocking script templates, hydrating the scripts', async () => {
|
|
153
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
154
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
155
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
156
|
-
const p2pkh = new P2PKH_1.default();
|
|
157
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
158
|
-
{
|
|
159
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
160
|
-
satoshis: 4000
|
|
161
|
-
}
|
|
162
|
-
], 0);
|
|
163
|
-
const spendTx = new Transaction_1.default(1, [
|
|
164
|
-
{
|
|
165
|
-
sourceTransaction: sourceTx,
|
|
166
|
-
sourceOutputIndex: 0,
|
|
167
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
168
|
-
sequence: 0xffffffff
|
|
169
|
-
}
|
|
170
|
-
], [
|
|
171
|
-
{
|
|
172
|
-
satoshis: 1000,
|
|
173
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
177
|
-
change: true
|
|
178
|
-
}
|
|
179
|
-
], 0);
|
|
180
|
-
expect(spendTx.inputs[0].unlockingScript).not.toBeDefined();
|
|
181
|
-
await spendTx.fee();
|
|
182
|
-
await spendTx.sign();
|
|
183
|
-
expect(spendTx.inputs[0].unlockingScript).toBeDefined();
|
|
184
|
-
// P2PKH unlocking scripts have two chunks (the signature and public key)
|
|
185
|
-
expect(spendTx.inputs[0].unlockingScript.chunks.length).toBe(2);
|
|
186
|
-
});
|
|
187
|
-
it('Signs a large number of unlocking script templates in a timely manner', async () => {
|
|
188
|
-
const privateKey = new PrivateKey_1.default(134);
|
|
189
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
190
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
191
|
-
const p2pkh = new P2PKH_1.default();
|
|
192
|
-
const spendCount = 30;
|
|
193
|
-
const output = {
|
|
194
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
195
|
-
satoshis: 4000
|
|
196
|
-
};
|
|
197
|
-
const manyOutputs = [output];
|
|
198
|
-
for (let i = 1; i < spendCount; i++) {
|
|
199
|
-
manyOutputs[i] = {
|
|
200
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
201
|
-
satoshis: 4000
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
const sourceTx = new Transaction_1.default(1, [], manyOutputs, 0);
|
|
205
|
-
const input = {
|
|
206
|
-
sourceTransaction: sourceTx,
|
|
207
|
-
sourceOutputIndex: 0,
|
|
208
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
209
|
-
sequence: 0xffffffff
|
|
210
|
-
};
|
|
211
|
-
const manyInputs = [input];
|
|
212
|
-
for (let i = 1; i < spendCount; i++) {
|
|
213
|
-
manyInputs[i] = {
|
|
214
|
-
sourceTransaction: sourceTx,
|
|
215
|
-
sourceOutputIndex: i,
|
|
216
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
217
|
-
sequence: 0xffffffff
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
const spendTx = new Transaction_1.default(1, manyInputs, [
|
|
221
|
-
{
|
|
222
|
-
satoshis: 1000,
|
|
223
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
227
|
-
change: true
|
|
228
|
-
}
|
|
229
|
-
], 0);
|
|
230
|
-
expect(spendTx.inputs[0].unlockingScript).not.toBeDefined();
|
|
231
|
-
await spendTx.fee();
|
|
232
|
-
await spendTx.sign();
|
|
233
|
-
expect(spendTx.inputs[0].unlockingScript).toBeDefined();
|
|
234
|
-
// P2PKH unlocking scripts have two chunks (the signature and public key)
|
|
235
|
-
expect(spendTx.inputs[0].unlockingScript.chunks.length).toBe(2);
|
|
236
|
-
});
|
|
237
|
-
it('Throws an Error if signing before the fee is computed', async () => {
|
|
238
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
239
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
240
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true), 'hex');
|
|
241
|
-
const p2pkh = new P2PKH_1.default();
|
|
242
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
243
|
-
{
|
|
244
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
245
|
-
satoshis: 4000
|
|
246
|
-
}
|
|
247
|
-
], 0);
|
|
248
|
-
const spendTx = new Transaction_1.default(1, [
|
|
249
|
-
{
|
|
250
|
-
sourceTransaction: sourceTx,
|
|
251
|
-
sourceOutputIndex: 0,
|
|
252
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
253
|
-
sequence: 0xffffffff
|
|
254
|
-
}
|
|
255
|
-
], [
|
|
256
|
-
{
|
|
257
|
-
satoshis: 1000,
|
|
258
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
262
|
-
change: true
|
|
263
|
-
}
|
|
264
|
-
], 0);
|
|
265
|
-
await expect(spendTx.sign()).rejects.toThrow();
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
describe('Fees', () => {
|
|
269
|
-
it('Computes fees with the default fee model', async () => {
|
|
270
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
271
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
272
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
273
|
-
const p2pkh = new P2PKH_1.default();
|
|
274
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
275
|
-
{
|
|
276
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
277
|
-
satoshis: 4000
|
|
278
|
-
}
|
|
279
|
-
], 0);
|
|
280
|
-
const spendTx = new Transaction_1.default(1, [
|
|
281
|
-
{
|
|
282
|
-
sourceTransaction: sourceTx,
|
|
283
|
-
sourceOutputIndex: 0,
|
|
284
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
285
|
-
sequence: 0xffffffff
|
|
286
|
-
}
|
|
287
|
-
], [
|
|
288
|
-
{
|
|
289
|
-
satoshis: 1000,
|
|
290
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
291
|
-
},
|
|
292
|
-
{
|
|
293
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
294
|
-
change: true
|
|
295
|
-
}
|
|
296
|
-
], 0);
|
|
297
|
-
expect(spendTx.outputs[1].satoshis).not.toBeDefined();
|
|
298
|
-
await spendTx.fee();
|
|
299
|
-
// Transaction size is 225 bytes for one-input two-output P2PKH.
|
|
300
|
-
// Default fee rate is 10 sat/kb = 2.25 sats (round up to 3).
|
|
301
|
-
// 4000 sats in - 1000 sats out - 3 sats fee = expected 2997 sats change.
|
|
302
|
-
expect(spendTx.outputs[1].satoshis).toEqual(2997);
|
|
303
|
-
});
|
|
304
|
-
it('Computes fees with a custom fee model', async () => {
|
|
305
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
306
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
307
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
308
|
-
const p2pkh = new P2PKH_1.default();
|
|
309
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
310
|
-
{
|
|
311
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
312
|
-
satoshis: 4000
|
|
313
|
-
}
|
|
314
|
-
], 0);
|
|
315
|
-
const spendTx = new Transaction_1.default(1, [
|
|
316
|
-
{
|
|
317
|
-
sourceTransaction: sourceTx,
|
|
318
|
-
sourceOutputIndex: 0,
|
|
319
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
320
|
-
sequence: 0xffffffff
|
|
321
|
-
}
|
|
322
|
-
], [
|
|
323
|
-
{
|
|
324
|
-
satoshis: 1000,
|
|
325
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
329
|
-
change: true
|
|
330
|
-
}
|
|
331
|
-
], 0);
|
|
332
|
-
expect(spendTx.outputs[1].satoshis).not.toBeDefined();
|
|
333
|
-
await spendTx.fee({
|
|
334
|
-
// Our custom fee model will always charge 1033 sats for a tx.
|
|
335
|
-
computeFee: async () => 1033
|
|
336
|
-
});
|
|
337
|
-
// 4000 sats in - 1000 sats out - 1033 sats fee = expected 1967 sats change
|
|
338
|
-
expect(spendTx.outputs[1].satoshis).toEqual(1967);
|
|
339
|
-
});
|
|
340
|
-
it('Computes fee using FixedFee model', async () => {
|
|
341
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
342
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
343
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
344
|
-
const p2pkh = new P2PKH_1.default();
|
|
345
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
346
|
-
{
|
|
347
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
348
|
-
satoshis: 4000
|
|
349
|
-
}
|
|
350
|
-
], 0);
|
|
351
|
-
const spendTx = new Transaction_1.default(1, [
|
|
352
|
-
{
|
|
353
|
-
sourceTransaction: sourceTx,
|
|
354
|
-
sourceOutputIndex: 0,
|
|
355
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
356
|
-
sequence: 0xffffffff
|
|
357
|
-
}
|
|
358
|
-
], [
|
|
359
|
-
{
|
|
360
|
-
satoshis: 1000,
|
|
361
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
362
|
-
},
|
|
363
|
-
{
|
|
364
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
365
|
-
change: true
|
|
366
|
-
}
|
|
367
|
-
], 0);
|
|
368
|
-
expect(spendTx.outputs[1].satoshis).not.toBeDefined();
|
|
369
|
-
await spendTx.fee(1033);
|
|
370
|
-
// 4000 sats in - 1000 sats out - 1033 sats fee = expected 1967 sats change
|
|
371
|
-
expect(spendTx.outputs[1].satoshis).toEqual(1967);
|
|
372
|
-
});
|
|
373
|
-
it('Distributes change equally among multiple change outputs', async () => {
|
|
374
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
375
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
376
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
377
|
-
const p2pkh = new P2PKH_1.default();
|
|
378
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
379
|
-
{
|
|
380
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
381
|
-
satoshis: 4000
|
|
382
|
-
}
|
|
383
|
-
], 0);
|
|
384
|
-
const spendTx = new Transaction_1.default(1, [
|
|
385
|
-
{
|
|
386
|
-
sourceTransaction: sourceTx,
|
|
387
|
-
sourceOutputIndex: 0,
|
|
388
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
389
|
-
sequence: 0xffffffff
|
|
390
|
-
}
|
|
391
|
-
], [
|
|
392
|
-
{
|
|
393
|
-
satoshis: 1000,
|
|
394
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
395
|
-
},
|
|
396
|
-
{
|
|
397
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
398
|
-
change: true
|
|
399
|
-
},
|
|
400
|
-
{
|
|
401
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
402
|
-
change: true
|
|
403
|
-
},
|
|
404
|
-
{
|
|
405
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
406
|
-
change: true
|
|
407
|
-
},
|
|
408
|
-
{
|
|
409
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
410
|
-
change: true
|
|
411
|
-
}
|
|
412
|
-
], 0);
|
|
413
|
-
expect(spendTx.outputs[1].satoshis).not.toBeDefined();
|
|
414
|
-
expect(spendTx.outputs[2].satoshis).not.toBeDefined();
|
|
415
|
-
expect(spendTx.outputs[3].satoshis).not.toBeDefined();
|
|
416
|
-
expect(spendTx.outputs[4].satoshis).not.toBeDefined();
|
|
417
|
-
await spendTx.fee({
|
|
418
|
-
// Our custom fee model will always charge 1033 sats for a tx.
|
|
419
|
-
computeFee: async () => 1032
|
|
420
|
-
});
|
|
421
|
-
// 4000 sats in - 1000 sats out - 1033 sats fee = expected 1967 sats change
|
|
422
|
-
// Divide by 2 (no remainder) = 983 sats per change output
|
|
423
|
-
expect(spendTx.outputs[0].satoshis).toEqual(1000);
|
|
424
|
-
expect(spendTx.outputs[1].satoshis).toEqual(492);
|
|
425
|
-
expect(spendTx.outputs[2].satoshis).toEqual(492);
|
|
426
|
-
expect(spendTx.outputs[3].satoshis).toEqual(492);
|
|
427
|
-
expect(spendTx.outputs[4].satoshis).toEqual(492);
|
|
428
|
-
});
|
|
429
|
-
it('Distributes change randomly among multiple change outputs', async () => {
|
|
430
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
431
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
432
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
433
|
-
const p2pkh = new P2PKH_1.default();
|
|
434
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
435
|
-
{
|
|
436
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
437
|
-
satoshis: 900
|
|
438
|
-
}
|
|
439
|
-
], 0);
|
|
440
|
-
const spendTx = new Transaction_1.default(1, [
|
|
441
|
-
{
|
|
442
|
-
sourceTransaction: sourceTx,
|
|
443
|
-
sourceOutputIndex: 0,
|
|
444
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
445
|
-
sequence: 0xffffffff
|
|
446
|
-
}
|
|
447
|
-
], [
|
|
448
|
-
{
|
|
449
|
-
satoshis: 1,
|
|
450
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
451
|
-
},
|
|
452
|
-
{
|
|
453
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
454
|
-
change: true
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
458
|
-
change: true
|
|
459
|
-
},
|
|
460
|
-
{
|
|
461
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
462
|
-
change: true
|
|
463
|
-
},
|
|
464
|
-
{
|
|
465
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
466
|
-
change: true
|
|
467
|
-
},
|
|
468
|
-
{
|
|
469
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
470
|
-
change: true
|
|
471
|
-
},
|
|
472
|
-
{
|
|
473
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
474
|
-
change: true
|
|
475
|
-
}
|
|
476
|
-
], 0);
|
|
477
|
-
expect(spendTx.outputs[1].satoshis).not.toBeDefined();
|
|
478
|
-
expect(spendTx.outputs[2].satoshis).not.toBeDefined();
|
|
479
|
-
expect(spendTx.outputs[3].satoshis).not.toBeDefined();
|
|
480
|
-
expect(spendTx.outputs[4].satoshis).not.toBeDefined();
|
|
481
|
-
expect(spendTx.outputs[5].satoshis).not.toBeDefined();
|
|
482
|
-
expect(spendTx.outputs[6].satoshis).not.toBeDefined();
|
|
483
|
-
await spendTx.fee({
|
|
484
|
-
computeFee: async () => 3
|
|
485
|
-
}, 'random');
|
|
486
|
-
expect(spendTx.outputs[0].satoshis).toEqual(1);
|
|
487
|
-
expect(spendTx.outputs.reduce((a, b) => a + b.satoshis, 0)).toEqual(897);
|
|
488
|
-
});
|
|
489
|
-
it('Distributes change randomly among multiple change outputs, with one set output', async () => {
|
|
490
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
491
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
492
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
493
|
-
const p2pkh = new P2PKH_1.default();
|
|
494
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
495
|
-
{
|
|
496
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
497
|
-
satoshis: 9
|
|
498
|
-
}
|
|
499
|
-
], 0);
|
|
500
|
-
const spendTx = new Transaction_1.default(1, [
|
|
501
|
-
{
|
|
502
|
-
sourceTransaction: sourceTx,
|
|
503
|
-
sourceOutputIndex: 0,
|
|
504
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
505
|
-
sequence: 0xffffffff
|
|
506
|
-
}
|
|
507
|
-
], [
|
|
508
|
-
{
|
|
509
|
-
satoshis: 1,
|
|
510
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
511
|
-
},
|
|
512
|
-
{
|
|
513
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
514
|
-
change: true
|
|
515
|
-
},
|
|
516
|
-
{
|
|
517
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
518
|
-
change: true
|
|
519
|
-
},
|
|
520
|
-
{
|
|
521
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
522
|
-
change: true
|
|
523
|
-
},
|
|
524
|
-
{
|
|
525
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
526
|
-
change: true
|
|
527
|
-
},
|
|
528
|
-
{
|
|
529
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
530
|
-
change: true
|
|
531
|
-
},
|
|
532
|
-
{
|
|
533
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
534
|
-
change: true
|
|
535
|
-
}
|
|
536
|
-
], 0);
|
|
537
|
-
expect(spendTx.outputs[1].satoshis).not.toBeDefined();
|
|
538
|
-
expect(spendTx.outputs[2].satoshis).not.toBeDefined();
|
|
539
|
-
expect(spendTx.outputs[3].satoshis).not.toBeDefined();
|
|
540
|
-
expect(spendTx.outputs[4].satoshis).not.toBeDefined();
|
|
541
|
-
expect(spendTx.outputs[5].satoshis).not.toBeDefined();
|
|
542
|
-
expect(spendTx.outputs[6].satoshis).not.toBeDefined();
|
|
543
|
-
await spendTx.fee({
|
|
544
|
-
computeFee: async () => 1
|
|
545
|
-
}, 'random');
|
|
546
|
-
expect(spendTx.outputs.reduce((a, b) => a + b.satoshis, 0)).toEqual(8);
|
|
547
|
-
});
|
|
548
|
-
it('Distributes change randomly among multiple change outputs, thinnly spread', async () => {
|
|
549
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
550
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
551
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
552
|
-
const p2pkh = new P2PKH_1.default();
|
|
553
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
554
|
-
{
|
|
555
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
556
|
-
satoshis: 46
|
|
557
|
-
}
|
|
558
|
-
], 0);
|
|
559
|
-
const spendTx = new Transaction_1.default(1, [
|
|
560
|
-
{
|
|
561
|
-
sourceTransaction: sourceTx,
|
|
562
|
-
sourceOutputIndex: 0,
|
|
563
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
564
|
-
sequence: 0xffffffff
|
|
565
|
-
}
|
|
566
|
-
], Array(21)
|
|
567
|
-
.fill(null)
|
|
568
|
-
.map(() => ({
|
|
569
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
570
|
-
change: true
|
|
571
|
-
})), 0);
|
|
572
|
-
await spendTx.fee({
|
|
573
|
-
computeFee: async () => 1
|
|
574
|
-
}, 'random');
|
|
575
|
-
expect(spendTx.outputs.reduce((a, b) => a + b.satoshis, 0)).toEqual(45);
|
|
576
|
-
});
|
|
577
|
-
it('Calculates fee for utxo based transaction', async () => {
|
|
578
|
-
const utxos = [
|
|
579
|
-
// WoC format utxos
|
|
580
|
-
{
|
|
581
|
-
height: 1600000,
|
|
582
|
-
tx_pos: 0,
|
|
583
|
-
tx_hash: '672dd6a93fa5d7ba6794e0bdf8b479440b95a55ec10ad3d9e03585ecb5628d8d',
|
|
584
|
-
value: 10000
|
|
585
|
-
},
|
|
586
|
-
{
|
|
587
|
-
height: 1600000,
|
|
588
|
-
tx_pos: 0,
|
|
589
|
-
tx_hash: 'f33505acf37a7726cc37d391bc6f889b8684ac2a2d581c4be2a4b1c8b46609bc',
|
|
590
|
-
value: 10000
|
|
591
|
-
}
|
|
592
|
-
];
|
|
593
|
-
const priv = PrivateKey_1.default.fromRandom();
|
|
594
|
-
const tx = new Transaction_1.default();
|
|
595
|
-
utxos.forEach(utxo => {
|
|
596
|
-
const u = {
|
|
597
|
-
txid: utxo.tx_hash,
|
|
598
|
-
vout: utxo.tx_pos,
|
|
599
|
-
script: new P2PKH_1.default().lock(priv.toPublicKey().toHash()).toHex(),
|
|
600
|
-
satoshis: utxo.value
|
|
601
|
-
};
|
|
602
|
-
tx.addInput((0, Utxo_1.default)(u, new P2PKH_1.default().unlock(priv)));
|
|
603
|
-
});
|
|
604
|
-
tx.addOutput({
|
|
605
|
-
lockingScript: new P2PKH_1.default().lock(priv.toAddress()),
|
|
606
|
-
change: true
|
|
607
|
-
});
|
|
608
|
-
await tx.fee({ computeFee: async () => 10 });
|
|
609
|
-
expect(tx.outputs[0].satoshis).toEqual(20000 - 10);
|
|
610
|
-
expect(tx.getFee()).toEqual(10);
|
|
611
|
-
});
|
|
612
|
-
});
|
|
613
|
-
describe('Broadcast', () => {
|
|
614
|
-
it('Broadcasts with the default Broadcaster instance', async () => {
|
|
615
|
-
const mockedFetch = jest.fn().mockResolvedValue({
|
|
616
|
-
ok: true,
|
|
617
|
-
status: 200,
|
|
618
|
-
statusText: 'OK',
|
|
619
|
-
headers: {
|
|
620
|
-
get(key) {
|
|
621
|
-
if (key === 'Content-Type') {
|
|
622
|
-
return 'application/json';
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
},
|
|
626
|
-
json: async () => ({
|
|
627
|
-
txid: 'mocked_txid',
|
|
628
|
-
txStatus: 'success',
|
|
629
|
-
extraInfo: 'received'
|
|
630
|
-
})
|
|
631
|
-
});
|
|
632
|
-
global.window = { fetch: mockedFetch };
|
|
633
|
-
const tx = new Transaction_1.default();
|
|
634
|
-
const rv = await tx.broadcast();
|
|
635
|
-
expect(mockedFetch).toHaveBeenCalled();
|
|
636
|
-
const url = mockedFetch.mock.calls[0][0];
|
|
637
|
-
expect(url).toEqual('https://arc.taal.com/v1/tx');
|
|
638
|
-
expect(rv).toEqual({
|
|
639
|
-
status: 'success',
|
|
640
|
-
txid: 'mocked_txid',
|
|
641
|
-
message: 'success received'
|
|
642
|
-
});
|
|
643
|
-
});
|
|
644
|
-
it('Broadcasts with the provided Broadcaster instance', async () => {
|
|
645
|
-
const mockBroadcast = jest.fn(async () => {
|
|
646
|
-
return {
|
|
647
|
-
status: 'success', // Explicitly matches the literal type "success"
|
|
648
|
-
txid: 'mock_txid',
|
|
649
|
-
message: 'Transaction successfully broadcasted.'
|
|
650
|
-
};
|
|
651
|
-
});
|
|
652
|
-
const tx = new Transaction_1.default();
|
|
653
|
-
const rv = await tx.broadcast({
|
|
654
|
-
broadcast: mockBroadcast
|
|
655
|
-
});
|
|
656
|
-
// Ensure the mock function was called with the correct argument
|
|
657
|
-
expect(mockBroadcast).toHaveBeenCalledWith(tx);
|
|
658
|
-
// Verify the return value matches the mocked response
|
|
659
|
-
expect(rv).toEqual({
|
|
660
|
-
status: 'success',
|
|
661
|
-
txid: 'mock_txid',
|
|
662
|
-
message: 'Transaction successfully broadcasted.'
|
|
663
|
-
});
|
|
664
|
-
});
|
|
665
|
-
describe('BEEF', () => {
|
|
666
|
-
it('Serialization and deserialization', async () => {
|
|
667
|
-
const tx = Transaction_1.default.fromBEEF((0, utils_1.toArray)(BRC62Hex, 'hex'));
|
|
668
|
-
expect(tx.inputs[0].sourceTransaction.merklePath.blockHeight).toEqual(814435);
|
|
669
|
-
const beef = (0, utils_1.toHex)(tx.toBEEF());
|
|
670
|
-
expect(beef).toEqual(BRC62Hex);
|
|
671
|
-
});
|
|
672
|
-
it('Does not double-encode transactions', () => {
|
|
673
|
-
// Source: https://github.com/bitcoin-sv/ts-sdk/issues/77
|
|
674
|
-
const incorrect = '0100beef01fe76eb0c000e02c402deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111c500f4076b7f48031fc467f87d5e99d9c3c0b59e4dca5e3049f58b735c59b413a8b6016300bad9c2d948e8a2ca647fdb50f2fd36641c4adf937b41134405a3e7f734b8beb201300053604a579558b5f7030e618d5c726a19229e0ff677f6edf109f41c5cfdafc93e0119005f8465c2a8d1558afbfa80c2395f3f8866a2fa5015e54fab778b0149da58376c010d00cd452b4e74f57d199cdb81b8a0e4a62dcdaf89504d6c63a5a65d5b866912b8c0010700d2ae7e2ce76da560509172066f1a1cf81faf81d73f9c0f6fd5af0904973dcfb10102006e5e077bcaa35c0240d61c1f3bba8d789223711ec035ef88b0911fc569d2b95a010000c961038959b9d404297a180c066816562dd2a34986c0960121a87ba91a51262f010100a50e381b4e8812479ea561e5bab7dcaa80078652b1b39ee5410966c515a3442b010100383ce8891ca7bf1ddefa5e0d8a1ba9ab01cb4e18046e9d7d0d438b5aaecc38b2010100c694be322b4e74acca8a5ef7703afedb708281321fd674f1221eebc743b0e01c0101000f3cc61f2b3d762cfecdd977ba768a5cbb0a4b402ad4f0d1bd3a98a582794c35010100094ad56eeea3b47edb2b298775f2efabe48172612cb3419962632251d8cdb78e010100de84bf9dd8873f37decbda1b5188e24ead978b147a63c809691702d19c47e8cb050200000001b67f1b6a6c3e70742a39b82ba45d51c983f598963ebf237101cc372da1144b83020000006b483045022100d14c3eb0c1438747c124f099bc664bf945cd27cbd96915027057e508bbc9e03302203c73f79d4e00f8018783e1008ce0fbb8e8c58bff6bd8042ab7e3966a66c8788c41210356762156ee9347c3e2ceca17d13713028d5446f453e9cbcb0ea170b4ca7fab52ffffffff037c660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac75330100000000001976a914eb645f9ea7e4e232e54b9651474c100026698c3088acf2458005000000001976a914802737e30c85b6fe86e26fb28e03140058aca65e88ac0000000001000100000001deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111000000006a473044022076da9f61380c208f43652587c219b4452a7b803a0407c2c7c0f3bc27612c4e88022021a9eb02da5529873a5986933f9c35965aa78537b9e2aef9382de33cfb1ab4bb41210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff023c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac3c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac00000000000200000001b67f1b6a6c3e70742a39b82ba45d51c983f598963ebf237101cc372da1144b83020000006b483045022100d14c3eb0c1438747c124f099bc664bf945cd27cbd96915027057e508bbc9e03302203c73f79d4e00f8018783e1008ce0fbb8e8c58bff6bd8042ab7e3966a66c8788c41210356762156ee9347c3e2ceca17d13713028d5446f453e9cbcb0ea170b4ca7fab52ffffffff037c660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac75330100000000001976a914eb645f9ea7e4e232e54b9651474c100026698c3088acf2458005000000001976a914802737e30c85b6fe86e26fb28e03140058aca65e88ac0000000001000100000001deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111000000006a473044022076da9f61380c208f43652587c219b4452a7b803a0407c2c7c0f3bc27612c4e88022021a9eb02da5529873a5986933f9c35965aa78537b9e2aef9382de33cfb1ab4bb41210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff023c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac3c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac000000000001000000022e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b000000006b483045022100d9a2d1efea4896b36b2eb5af42cf52009982c7c31b446213fe37f26835d9d72202203e4dee0ceb068a4936e79b0bf69f72203906a00a4256cb1a7b30a40764616e8441210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff2e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b010000006b483045022100b57a09145c57b7b5efb4b546f1b0bfb7adbc5e64d35d9d6989345d4c60c483940220280998a210a49a6efaacda6fb73670001bb7269d069be80eb14ea2227a73e82241210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff0174660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac0000000000';
|
|
675
|
-
const correct = '0100beef01fe76eb0c000e02c402deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111c500f4076b7f48031fc467f87d5e99d9c3c0b59e4dca5e3049f58b735c59b413a8b6016300bad9c2d948e8a2ca647fdb50f2fd36641c4adf937b41134405a3e7f734b8beb201300053604a579558b5f7030e618d5c726a19229e0ff677f6edf109f41c5cfdafc93e0119005f8465c2a8d1558afbfa80c2395f3f8866a2fa5015e54fab778b0149da58376c010d00cd452b4e74f57d199cdb81b8a0e4a62dcdaf89504d6c63a5a65d5b866912b8c0010700d2ae7e2ce76da560509172066f1a1cf81faf81d73f9c0f6fd5af0904973dcfb10102006e5e077bcaa35c0240d61c1f3bba8d789223711ec035ef88b0911fc569d2b95a010000c961038959b9d404297a180c066816562dd2a34986c0960121a87ba91a51262f010100a50e381b4e8812479ea561e5bab7dcaa80078652b1b39ee5410966c515a3442b010100383ce8891ca7bf1ddefa5e0d8a1ba9ab01cb4e18046e9d7d0d438b5aaecc38b2010100c694be322b4e74acca8a5ef7703afedb708281321fd674f1221eebc743b0e01c0101000f3cc61f2b3d762cfecdd977ba768a5cbb0a4b402ad4f0d1bd3a98a582794c35010100094ad56eeea3b47edb2b298775f2efabe48172612cb3419962632251d8cdb78e010100de84bf9dd8873f37decbda1b5188e24ead978b147a63c809691702d19c47e8cb030200000001b67f1b6a6c3e70742a39b82ba45d51c983f598963ebf237101cc372da1144b83020000006b483045022100d14c3eb0c1438747c124f099bc664bf945cd27cbd96915027057e508bbc9e03302203c73f79d4e00f8018783e1008ce0fbb8e8c58bff6bd8042ab7e3966a66c8788c41210356762156ee9347c3e2ceca17d13713028d5446f453e9cbcb0ea170b4ca7fab52ffffffff037c660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac75330100000000001976a914eb645f9ea7e4e232e54b9651474c100026698c3088acf2458005000000001976a914802737e30c85b6fe86e26fb28e03140058aca65e88ac0000000001000100000001deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111000000006a473044022076da9f61380c208f43652587c219b4452a7b803a0407c2c7c0f3bc27612c4e88022021a9eb02da5529873a5986933f9c35965aa78537b9e2aef9382de33cfb1ab4bb41210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff023c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac3c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac000000000001000000022e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b000000006b483045022100d9a2d1efea4896b36b2eb5af42cf52009982c7c31b446213fe37f26835d9d72202203e4dee0ceb068a4936e79b0bf69f72203906a00a4256cb1a7b30a40764616e8441210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff2e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b010000006b483045022100b57a09145c57b7b5efb4b546f1b0bfb7adbc5e64d35d9d6989345d4c60c483940220280998a210a49a6efaacda6fb73670001bb7269d069be80eb14ea2227a73e82241210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff0174660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac0000000000';
|
|
676
|
-
const tx1 = Transaction_1.default.fromHexBEEF(incorrect);
|
|
677
|
-
expect(tx1.toHexBEEF()).toEqual(correct);
|
|
678
|
-
});
|
|
679
|
-
});
|
|
680
|
-
describe('EF', () => {
|
|
681
|
-
it('Serialization and deserialization', async () => {
|
|
682
|
-
const tx = Transaction_1.default.fromBEEF((0, utils_1.toArray)(BRC62Hex, 'hex'));
|
|
683
|
-
const ef = (0, utils_1.toHex)(tx.toEF());
|
|
684
|
-
expect(ef).toEqual('010000000000000000ef01ac4e164f5bc16746bb0868404292ac8318bbac3800e4aad13a014da427adce3e000000006a47304402203a61a2e931612b4bda08d541cfb980885173b8dcf64a3471238ae7abcd368d6402204cbf24f04b9aa2256d8901f0ed97866603d2be8324c2bfb7a37bf8fc90edd5b441210263e2dee22b1ddc5e11f6fab8bcd2378bdd19580d640501ea956ec0e786f93e76ffffffff3e660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac013c660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac00000000');
|
|
685
|
-
});
|
|
686
|
-
});
|
|
687
|
-
describe('Verification', () => {
|
|
688
|
-
it('Verifies the transaction from the BEEF spec', async () => {
|
|
689
|
-
const tx = Transaction_1.default.fromHexBEEF(BRC62Hex);
|
|
690
|
-
const alwaysYesChainTracker = {
|
|
691
|
-
currentHeight: async () => 1631619, // Mocked current height
|
|
692
|
-
isValidRootForHeight: async () => true // Always returns true
|
|
693
|
-
};
|
|
694
|
-
const verified = await tx.verify(alwaysYesChainTracker);
|
|
695
|
-
expect(verified).toBe(true);
|
|
696
|
-
});
|
|
697
|
-
});
|
|
698
|
-
it('Verifies the transaction from the BEEF spec with a default chain tracker', async () => {
|
|
699
|
-
const mockFetch = jest.fn().mockResolvedValue({
|
|
700
|
-
ok: true,
|
|
701
|
-
status: 200,
|
|
702
|
-
statusText: 'OK',
|
|
703
|
-
headers: {
|
|
704
|
-
get(key) {
|
|
705
|
-
if (key === 'Content-Type') {
|
|
706
|
-
return 'application/json';
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
},
|
|
710
|
-
json: async () => ({
|
|
711
|
-
merkleroot: MerkleRootFromBEEF
|
|
712
|
-
})
|
|
713
|
-
});
|
|
714
|
-
global.window = { fetch: mockFetch };
|
|
715
|
-
const tx = Transaction_1.default.fromHexBEEF(BRC62Hex);
|
|
716
|
-
const verified = await tx.verify();
|
|
717
|
-
expect(mockFetch).toHaveBeenCalled();
|
|
718
|
-
expect(verified).toBe(true);
|
|
719
|
-
});
|
|
720
|
-
it('Verifies the transaction from the BEEF spec with a scripts only', async () => {
|
|
721
|
-
const BEEF = 'AQC+7wH+kQYNAAcCVAIKXThHm90iVbs15AIfFQEYl5xesbHCXMkYy9SqoR1vNVUAAZFHZkdkWeD0mUHP/kCkyoVXXC15rMA8tMP/F6738iwBKwCAMYdbLFfXFlvz5q0XXwDZnaj73hZrOJxESFgs2kfYPQEUAMDiGktI+c5Wzl35XNEk7phXeSfEVmAhtulujP3id36UAQsAkekX7uvGTir5i9nHAbRcFhvi88/9WdjHwIOtAc76PdsBBACO8lHRXtRZK+tuXsbAPfOuoK/bG7uFPgcrbV7cl/ckYQEDAAjyH0EYt9rEd4TrWj6/dQPX9pBJnulm6TDNUSwMRJGBAQAA2IGpOsjMdZ6u69g4z8Q0X/Hb58clIDz8y4Mh7gjQHrsJAQAAAAGiNgu1l9P6UBCiEHYC6f6lMy+Nfh9pQGklO/1zFv04AwIAAABqRzBEAiBt6+lIB2/OSNzOrB8QADEHwTvl/O9Pd9TMCLmV8K2mhwIgC6fGUaZSC17haVpGJEcc0heGxmu6zm9tOHiRTyytPVtBIQLGxNeyMZsFPL4iTn7yT4S0XQPnoGKOJTtPv4+5ktq77v////8DAQAAAAAAAAB/IQOb9SFSZlaZ4kwQGL9bSOV13jFvhElip52zK5O34yi/cawSYmVuY2htYXJrVG9rZW5fOTk5RzBFAiEA0KG8TGPpoWTh3eNZu8WhUH/eL8D/TA8GC9Tfs5TIGDMCIBIZ4Vxoj5WY6KM/bH1a8RcbOWxumYZsnMU/RthviWFDbcgAAAAAAAAAGXapFHpPGSoGhmZHz0NwEsNKYTuHopeTiKw1SQAAAAAAABl2qRQhSuHh+ETVgSwVNYwwQxE1HRMh6YisAAAAAAEAAQAAAAEKXThHm90iVbs15AIfFQEYl5xesbHCXMkYy9SqoR1vNQIAAABqRzBEAiANrOhLuR2njxZKOeUHiILC/1UUpj93aWYG1uGtMwCzBQIgP849avSAGRtTOC7hcrxKzdzgsUfFne6T6uVNehQCrudBIQOP+/6gVhpmL5mHjrpusZBqw80k46oEjQ5orkbu23kcIP////8DAQAAAAAAAAB9IQOb9SFSZlaZ4kwQGL9bSOV13jFvhElip52zK5O34yi/cawQYmVuY2htYXJrVG9rZW5fMEcwRQIhAISNx6VL+LwnZymxuS7g2bOhVO+sb2lOs7wpDJFVkQCzAiArQr3G2TZcKnyg/47OSlG7XW+h6CTkl+FF4FlO3khrdG3IAAAAAAAAABl2qRTMh3rEbc9boUbdBSu8EvwE9FpcFYisa0gAAAAAAAAZdqkUDavGkHIDei8GA14PE9pui/adYxOIrAAAAAAAAQAAAAG+I3gM0VUiDYkYn6HnijD5X1nRA6TP4M9PnS6DIiv8+gIAAABqRzBEAiBqB4v3J0nlRjJAEXf5/Apfk4Qpq5oQZBZR/dWlKde45wIgOsk3ILukmghtJ3kbGGjBkRWGzU7J+0e7RghLBLe4H79BIQJvD8752by3nrkpNKpf5Im+dmD52AxHz06mneVGeVmHJ/////8DAQAAAAAAAAB8IQOb9SFSZlaZ4kwQGL9bSOV13jFvhElip52zK5O34yi/cawQYmVuY2htYXJrVG9rZW5fMUYwRAIgYCfx4TRmBa6ZaSlwG+qfeyjwas09Ehn5+kBlMIpbjsECIDohOgL9ssMXo043vJx2RA4RwUSzic+oyrNDsvH3+GlhbcgAAAAAAAAAGXapFCR85IaVea4Lp20fQxq6wDUa+4KbiKyhRwAAAAAAABl2qRRtQlA5LLnIQE6FKAwoXWqwx1IPxYisAAAAAAABAAAAATQCyNdYMv3gisTSig8QHFSAtZogx3gJAFeCLf+T6ftKAgAAAGpHMEQCIBxDKsYb3o9/mkjqU3wkApD58TakUxcjVxrWBwb+KZCNAiA/N5mst9Y5R9z0nciIQxj6mjSDX8a48tt71WMWle2XG0EhA1bL/xbl8RY7bvQKLiLKeiTLkEogzFcLGIAKB0CJTDIt/////wMBAAAAAAAAAH0hA5v1IVJmVpniTBAYv1tI5XXeMW+ESWKnnbMrk7fjKL9xrBBiZW5jaG1hcmtUb2tlbl8yRzBFAiEAprd99c9CM86bHYxii818vfyaa+pbqQke8PMDdmWWbhgCIG095qrWtjvzGj999PrjifFtV0mNepQ82IWkgRUSYl4dbcgAAAAAAAAAGXapFFChFep+CB3Qdpssh55ZAh7Z1B9AiKzXRgAAAAAAABl2qRQI3se+hqgRme2BD/l9/VGT8fzze4isAAAAAAABAAAAATYrcW2trOWKTN66CahA2iVdmw9EoD3NRfSxicuqf2VZAgAAAGpHMEQCIGLzQtoohOruohH2N8f85EY4r07C8ef4sA1zpzhrgp8MAiB7EPTjjK6bA5u6pcEZzrzvCaEjip9djuaHNkh62Ov3lEEhA4hF47lxu8l7pDcyBLhnBTDrJg2sN73GTRqmBwvXH7hu/////wMBAAAAAAAAAH0hA5v1IVJmVpniTBAYv1tI5XXeMW+ESWKnnbMrk7fjKL9xrBBiZW5jaG1hcmtUb2tlbl8zRzBFAiEAgHsST5TSjs4SaxQo/ayAT/i9H+/K6kGqSOgiXwJ7MEkCIB/I+awNxfAbjtCXJfu8PkK3Gm17v14tUj2U4N7+kOYPbcgAAAAAAAAAGXapFESF1LKTxPR0Lp/YSAhBv1cqaB5jiKwNRgAAAAAAABl2qRRMDm8dYnq71SvC2ZW85T4wiK1d44isAAAAAAABAAAAAZlmx40ThobDzbDV92I652mrG99hHvc/z2XDZCxaFSdOAgAAAGpHMEQCIGd6FcM+jWQOI37EiQQX1vLsnNBIRpWm76gHZfmZsY0+AiAQCdssIwaME5Rm5dyhM8N8G4OGJ6U8Ec2jIdVO1fQyIkEhAj6oxrKo6ObL1GrOuwvOEpqICEgVndhRAWh1qL5awn29/////wMBAAAAAAAAAH0hA5v1IVJmVpniTBAYv1tI5XXeMW+ESWKnnbMrk7fjKL9xrBBiZW5jaG1hcmtUb2tlbl80RzBFAiEAtnby9Is30Kad+SeRR44T9vl/XgLKB83wo8g5utYnFQICIBdeBto6oVxzJRuWOBs0Dqeb0EnDLJWw/Kg0fA0wjXFUbcgAAAAAAAAAGXapFPif6YFPsfQSAsYD0phVFDdWnITziKxDRQAAAAAAABl2qRSzMU4yDCTmCoXgpH461go08jpAwYisAAAAAAABAAAAAfFifKQeabVQuUt9F1rQiVz/iZrNQ7N6Vrsqs0WrDolhAgAAAGpHMEQCIC/4j1TMcnWc4FIy65w9KoM1h+LYwwSL0g4Eg/rwOdovAiBjSYcebQ/MGhbX2/iVs4XrkPodBN/UvUTQp9IQP93BsEEhAuvPbcwwKILhK6OpY6K+XqmqmwS0hv1cH7WY8IKnWkTk/////wMBAAAAAAAAAHwhA5v1IVJmVpniTBAYv1tI5XXeMW+ESWKnnbMrk7fjKL9xrBBiZW5jaG1hcmtUb2tlbl81RjBEAiAfXkdtFBi9ugyeDKCKkeorFXRAAVOS/dGEp0DInrwQCgIgdkyqe70lCHIalzS4nFugA1EUutCh7O2aUijN6tHxGVBtyAAAAAAAAAAZdqkUTHmgM3RpBYmbWxqYgeOA8zdsyfuIrHlEAAAAAAAAGXapFOLz0OAGrxiGzBPRvLjAoDp7p/VUiKwAAAAAAAEAAAABODRQbkr3Udw6DXPpvdBncJreUkiGCWf7PrcoVL5gEdwCAAAAa0gwRQIhAIq/LOGvvMPEiVJlsJZqxp4idfs1pzj5hztUFs07tozBAiAskG+XcdLWho+Bo01qOvTNfeBwlpKG23CXxeDzoAm2OEEhAvaoHEQtzZA8eAinWr3pIXJou3BBetU4wY+1l7TFU8NU/////wMBAAAAAAAAAHwhA5v1IVJmVpniTBAYv1tI5XXeMW+ESWKnnbMrk7fjKL9xrBBiZW5jaG1hcmtUb2tlbl82RjBEAiA0yjzEkWPk1bwk9BxepGMe/UrnwkP5BMkOHbbmpV6PDgIga7AxusovxtZNpa1yLOLgcTdxjl5YCS5ez1TlL83WZKttyAAAAAAAAAAZdqkUcHY6VT1hWoFE+giJoOH5PR2NqLCIrK9DAAAAAAAAGXapFFqhL5vgEh7uVOczHY+ZX+Td7XL1iKwAAAAAAAEAAAABXCLo00qVp2GgaFuLWpmghF6fA9h9VxanNR0Ik521zZICAAAAakcwRAIgUQHyvcQAmMveGicAcaW/3VpvvvyKOKi0oa2soKb/VecCIA7FwKV8tl38aqIuaFa7TGK4mHp7n6MstgHJS1ebpn2DQSEDyL5rIX/FWTmFHigjn7v3MfmX4CatNEqp1Lc5GB/pZ0P/////AwEAAAAAAAAAfCEDm/UhUmZWmeJMEBi/W0jldd4xb4RJYqedsyuTt+Mov3GsEGJlbmNobWFya1Rva2VuXzdGMEQCIAJoCOlFP3XKH8PHuw974e+spc6mse2parfbVsUZtnkyAiB9H6Xn1UJU0hQiVpR/k6BheBKApu0kZAUkcGM6fIiNH23IAAAAAAAAABl2qRQou28gesj0t/bBxZFOFDphZVhrJIis5UIAAAAAAAAZdqkUGXy953q7y5hcpgqFwpiLKsMsVBqIrAAAAAAA';
|
|
722
|
-
const tx = Transaction_1.default.fromBEEF((0, utils_1.toArray)(BEEF, 'base64'));
|
|
723
|
-
// Verifies transaction with scripts only
|
|
724
|
-
const verified = await tx.verify('scripts only');
|
|
725
|
-
expect(verified).toBe(true);
|
|
726
|
-
});
|
|
727
|
-
it('Verifies tx scripts only when our input has no MerklePath.', async () => {
|
|
728
|
-
const sourceTransaction = Transaction_1.default.fromHex('01000000013834506e4af751dc3a0d73e9bdd067709ade5248860967fb3eb72854be6011dc020000006b4830450221008abf2ce1afbcc3c4895265b0966ac69e2275fb35a738f9873b5416cd3bb68cc102202c906f9771d2d6868f81a34d6a3af4cd7de070969286db7097c5e0f3a009b638412102f6a81c442dcd903c7808a75abde9217268bb70417ad538c18fb597b4c553c354ffffffff0301000000000000007c21039bf52152665699e24c1018bf5b48e575de316f844962a79db32b93b7e328bf71ac1062656e63686d61726b546f6b656e5f36463044022034ca3cc49163e4d5bc24f41c5ea4631efd4ae7c243f904c90e1db6e6a55e8f0e02206bb031baca2fc6d64da5ad722ce2e07137718e5e58092e5ecf54e52fcdd664ab6dc8000000000000001976a91470763a553d615a8144fa0889a0e1f93d1d8da8b088acaf430000000000001976a9145aa12f9be0121eee54e7331d8f995fe4dded72f588ac00000000');
|
|
729
|
-
const tx = Transaction_1.default.fromHex('01000000015c22e8d34a95a761a0685b8b5a99a0845e9f03d87d5716a7351d08939db5cd92020000006a47304402205101f2bdc40098cbde1a270071a5bfdd5a6fbefc8a38a8b4a1adaca0a6ff55e702200ec5c0a57cb65dfc6aa22e6856bb4c62b8987a7b9fa32cb601c94b579ba67d83412103c8be6b217fc55939851e28239fbbf731f997e026ad344aa9d4b739181fe96743ffffffff0301000000000000007c21039bf52152665699e24c1018bf5b48e575de316f844962a79db32b93b7e328bf71ac1062656e63686d61726b546f6b656e5f374630440220026808e9453f75ca1fc3c7bb0f7be1efaca5cea6b1eda96ab7db56c519b6793202207d1fa5e7d54254d2142256947f93a061781280a6ed2464052470633a7c888d1f6dc8000000000000001976a91428bb6f207ac8f4b7f6c1c5914e143a6165586b2488ace5420000000000001976a914197cbde77abbcb985ca60a85c2988b2ac32c541a88ac00000000');
|
|
730
|
-
// Create a mock MerklePath
|
|
731
|
-
const mockMerklePath = new MerklePath_1.default(0, [
|
|
732
|
-
[{ offset: 0, hash: 'dummyHash' }]
|
|
733
|
-
]);
|
|
734
|
-
sourceTransaction.merklePath = mockMerklePath;
|
|
735
|
-
tx.inputs[0].sourceTransaction = sourceTransaction;
|
|
736
|
-
const verified = await tx.verify('scripts only', undefined);
|
|
737
|
-
expect(verified).toBe(true);
|
|
738
|
-
});
|
|
739
|
-
describe('vectors: a 1mb transaction', () => {
|
|
740
|
-
it('should find the correct id of this (valid, on the blockchain) 1 mb transaction', () => {
|
|
741
|
-
const txidhex = bigtx_vectors_1.default.txidhex;
|
|
742
|
-
const txhex = bigtx_vectors_1.default.txhex;
|
|
743
|
-
const tx = Transaction_1.default.fromHex(txhex);
|
|
744
|
-
const txid = tx.id('hex');
|
|
745
|
-
expect(txid).toEqual(txidhex);
|
|
746
|
-
});
|
|
747
|
-
});
|
|
748
|
-
describe('vectors: sighash and serialization', () => {
|
|
749
|
-
sighash_vectors_1.default.forEach((vector, i) => {
|
|
750
|
-
if (i === 0) {
|
|
751
|
-
return;
|
|
752
|
-
}
|
|
753
|
-
it(`should pass bitcoin-abc sighash test vector ${i}`, () => {
|
|
754
|
-
const txbuf = (0, utils_1.toArray)(vector[0], 'hex');
|
|
755
|
-
const scriptbuf = (0, utils_1.toArray)(vector[1], 'hex');
|
|
756
|
-
const subScript = Script_1.default.fromBinary(scriptbuf);
|
|
757
|
-
const nIn = vector[2];
|
|
758
|
-
const nHashType = vector[3];
|
|
759
|
-
const sighashBuf = (0, utils_1.toArray)(vector[4], 'hex');
|
|
760
|
-
const tx = Transaction_1.default.fromBinary(txbuf);
|
|
761
|
-
// make sure transacion to/from buffer is isomorphic
|
|
762
|
-
expect((0, utils_1.toHex)(tx.toBinary())).toEqual((0, utils_1.toHex)(txbuf));
|
|
763
|
-
// sighash ought to be correct
|
|
764
|
-
const valueBn = new BigNumber_1.default(0).toNumber();
|
|
765
|
-
const otherInputs = [...tx.inputs];
|
|
766
|
-
const [input] = otherInputs.splice(nIn, 1);
|
|
767
|
-
const preimage = TransactionSignature_1.default.format({
|
|
768
|
-
sourceTXID: input.sourceTXID,
|
|
769
|
-
sourceOutputIndex: input.sourceOutputIndex,
|
|
770
|
-
sourceSatoshis: valueBn,
|
|
771
|
-
transactionVersion: tx.version,
|
|
772
|
-
otherInputs,
|
|
773
|
-
outputs: tx.outputs,
|
|
774
|
-
inputIndex: nIn,
|
|
775
|
-
subscript: subScript,
|
|
776
|
-
inputSequence: input.sequence,
|
|
777
|
-
lockTime: tx.lockTime,
|
|
778
|
-
scope: nHashType
|
|
779
|
-
});
|
|
780
|
-
const hash = (0, Hash_1.hash256)(preimage);
|
|
781
|
-
hash.reverse();
|
|
782
|
-
expect((0, utils_1.toHex)(hash)).toEqual((0, utils_1.toHex)(sighashBuf));
|
|
783
|
-
});
|
|
784
|
-
});
|
|
785
|
-
tx_valid_vectors_1.default.forEach((vector, i) => {
|
|
786
|
-
if (vector.length === 1) {
|
|
787
|
-
return;
|
|
788
|
-
}
|
|
789
|
-
it(`should correctly serialized/deserialize tx_valid test vector ${i}`, () => {
|
|
790
|
-
const expectedHex = vector[1];
|
|
791
|
-
const expectedBin = (0, utils_1.toArray)(vector[1], 'hex');
|
|
792
|
-
const actualTX = Transaction_1.default.fromBinary(expectedBin);
|
|
793
|
-
const actualBin = actualTX.toBinary();
|
|
794
|
-
const actualHex = (0, utils_1.toHex)(actualBin);
|
|
795
|
-
expect(actualHex).toEqual(expectedHex);
|
|
796
|
-
});
|
|
797
|
-
});
|
|
798
|
-
tx_invalid_vectors_1.default.forEach((vector, i) => {
|
|
799
|
-
if (vector.length === 1) {
|
|
800
|
-
return;
|
|
801
|
-
}
|
|
802
|
-
// 151, 142 and 25 have invalid Satoshi amounts that exceed 53 bits in length, causing exceptions that make serialization and deserialization impossible.
|
|
803
|
-
if (i === 151 || i === 142 || i === 25) {
|
|
804
|
-
return;
|
|
805
|
-
}
|
|
806
|
-
it(`should correctly serialized/deserialize tx_invalid test vector ${i}`, () => {
|
|
807
|
-
const expectedHex = vector[1];
|
|
808
|
-
const expectedBin = (0, utils_1.toArray)(vector[1], 'hex');
|
|
809
|
-
const actualTX = Transaction_1.default.fromBinary(expectedBin);
|
|
810
|
-
const actualBin = actualTX.toBinary();
|
|
811
|
-
const actualHex = (0, utils_1.toHex)(actualBin);
|
|
812
|
-
expect(actualHex).toEqual(expectedHex);
|
|
813
|
-
});
|
|
814
|
-
});
|
|
815
|
-
});
|
|
816
|
-
describe('Atomic BEEF', () => {
|
|
817
|
-
it('should serialize a transaction to Atomic BEEF format correctly', async () => {
|
|
818
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
819
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
820
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
821
|
-
const p2pkh = new P2PKH_1.default();
|
|
822
|
-
// Create a simple transaction
|
|
823
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
824
|
-
{
|
|
825
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
826
|
-
satoshis: 10000
|
|
827
|
-
}
|
|
828
|
-
], 0);
|
|
829
|
-
const spendTx = new Transaction_1.default(1, [
|
|
830
|
-
{
|
|
831
|
-
sourceTransaction: sourceTx,
|
|
832
|
-
sourceOutputIndex: 0,
|
|
833
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
834
|
-
sequence: 0xffffffff
|
|
835
|
-
}
|
|
836
|
-
], [
|
|
837
|
-
{
|
|
838
|
-
satoshis: 9000,
|
|
839
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
840
|
-
}
|
|
841
|
-
], 0);
|
|
842
|
-
// Sign the transaction
|
|
843
|
-
await spendTx.fee();
|
|
844
|
-
await spendTx.sign();
|
|
845
|
-
// Assign a MerklePath to the source transaction to simulate mined transaction
|
|
846
|
-
const sourceTxID = sourceTx.id('hex');
|
|
847
|
-
const merklePath = new MerklePath_1.default(1000, [
|
|
848
|
-
[
|
|
849
|
-
{ offset: 0, hash: sourceTxID, txid: true },
|
|
850
|
-
{ offset: 1, duplicate: true }
|
|
851
|
-
]
|
|
852
|
-
]);
|
|
853
|
-
sourceTx.merklePath = merklePath;
|
|
854
|
-
// Serialize to Atomic BEEF
|
|
855
|
-
const atomicBEEF = spendTx.toAtomicBEEF();
|
|
856
|
-
expect(atomicBEEF).toBeDefined();
|
|
857
|
-
// Verify that the Atomic BEEF starts with the correct prefix and TXID
|
|
858
|
-
const expectedPrefix = [0x01, 0x01, 0x01, 0x01];
|
|
859
|
-
expect(atomicBEEF.slice(0, 4)).toEqual(expectedPrefix);
|
|
860
|
-
const txid = spendTx.id();
|
|
861
|
-
expect(atomicBEEF.slice(4, 36)).toEqual(txid);
|
|
862
|
-
// Deserialize from Atomic BEEF
|
|
863
|
-
const deserializedTx = Transaction_1.default.fromAtomicBEEF(atomicBEEF);
|
|
864
|
-
expect(deserializedTx.toHex()).toEqual(spendTx.toHex());
|
|
865
|
-
});
|
|
866
|
-
it('should throw an error when deserializing Atomic BEEF if subject transaction is missing', () => {
|
|
867
|
-
// Create Atomic BEEF data with missing subject transaction
|
|
868
|
-
const writer = new utils_1.Writer();
|
|
869
|
-
// Write Atomic BEEF prefix
|
|
870
|
-
writer.writeUInt32LE(0x01010101);
|
|
871
|
-
// Write subject TXID
|
|
872
|
-
const fakeTXID = (0, utils_1.toArray)('00'.repeat(32), 'hex');
|
|
873
|
-
writer.write(fakeTXID);
|
|
874
|
-
// Write empty BEEF data
|
|
875
|
-
writer.writeUInt32LE(Beef_1.BEEF_V1); // BEEF version
|
|
876
|
-
writer.writeVarIntNum(0); // No BUMPs
|
|
877
|
-
writer.writeVarIntNum(0); // No transactions
|
|
878
|
-
const atomicBEEFData = writer.toArray();
|
|
879
|
-
expect(() => {
|
|
880
|
-
Transaction_1.default.fromAtomicBEEF(atomicBEEFData);
|
|
881
|
-
}).toThrow('beef must include at least one transaction.');
|
|
882
|
-
});
|
|
883
|
-
it('should allow selecting a specific TXID from BEEF data', async () => {
|
|
884
|
-
// Create two transactions, one depending on the other
|
|
885
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
886
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
887
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
888
|
-
const p2pkh = new P2PKH_1.default();
|
|
889
|
-
const sourceTx = new Transaction_1.default(1, [], [
|
|
890
|
-
{
|
|
891
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
892
|
-
satoshis: 10000
|
|
893
|
-
}
|
|
894
|
-
], 0);
|
|
895
|
-
const spendTx = new Transaction_1.default(1, [
|
|
896
|
-
{
|
|
897
|
-
sourceTransaction: sourceTx,
|
|
898
|
-
sourceOutputIndex: 0,
|
|
899
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
900
|
-
sequence: 0xffffffff
|
|
901
|
-
}
|
|
902
|
-
], [
|
|
903
|
-
{
|
|
904
|
-
satoshis: 9000,
|
|
905
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
906
|
-
}
|
|
907
|
-
], 0);
|
|
908
|
-
// Sign transactions
|
|
909
|
-
await spendTx.fee();
|
|
910
|
-
await spendTx.sign();
|
|
911
|
-
// Assign merkle path to source transaction
|
|
912
|
-
const sourceTxID = sourceTx.id('hex');
|
|
913
|
-
sourceTx.merklePath = new MerklePath_1.default(1000, [
|
|
914
|
-
[
|
|
915
|
-
{ offset: 0, hash: sourceTxID, txid: true },
|
|
916
|
-
{ offset: 1, duplicate: true }
|
|
917
|
-
]
|
|
918
|
-
]);
|
|
919
|
-
// Serialize to BEEF
|
|
920
|
-
const beefData = spendTx.toBEEF();
|
|
921
|
-
// Get TXIDs
|
|
922
|
-
const spendTxID = spendTx.id('hex');
|
|
923
|
-
// Deserialize the source transaction from BEEF data
|
|
924
|
-
const deserializedSourceTx = Transaction_1.default.fromBEEF(beefData, sourceTxID);
|
|
925
|
-
expect(deserializedSourceTx.id('hex')).toEqual(sourceTxID);
|
|
926
|
-
// Deserialize the spend transaction from BEEF data
|
|
927
|
-
const deserializedSpendTx = Transaction_1.default.fromBEEF(beefData, spendTxID);
|
|
928
|
-
expect(deserializedSpendTx.id('hex')).toEqual(spendTxID);
|
|
929
|
-
// Attempt to deserialize a non-existent transaction
|
|
930
|
-
expect(() => {
|
|
931
|
-
Transaction_1.default.fromBEEF(beefData, '00'.repeat(32));
|
|
932
|
-
}).toThrowError('Transaction with TXID 0000000000000000000000000000000000000000000000000000000000000000 not found in BEEF data.');
|
|
933
|
-
});
|
|
934
|
-
});
|
|
935
|
-
describe('addP2PKHOutput', () => {
|
|
936
|
-
it('should create an output on the current transaction using an address hash or string', async () => {
|
|
937
|
-
const privateKey = PrivateKey_1.default.fromRandom();
|
|
938
|
-
const lockingScript = new P2PKH_1.default().lock(privateKey.toAddress());
|
|
939
|
-
const tx = new Transaction_1.default();
|
|
940
|
-
tx.addInput({
|
|
941
|
-
sourceTXID: '00'.repeat(32),
|
|
942
|
-
sourceOutputIndex: 0,
|
|
943
|
-
unlockingScriptTemplate: new P2PKH_1.default().unlock(privateKey)
|
|
944
|
-
});
|
|
945
|
-
tx.addP2PKHOutput(privateKey.toAddress(), 10000);
|
|
946
|
-
expect(tx.outputs.length).toEqual(1);
|
|
947
|
-
expect(tx.outputs[0].satoshis).toEqual(10000);
|
|
948
|
-
expect(tx.outputs[0].lockingScript.toHex() === lockingScript.toHex()).toBeTruthy();
|
|
949
|
-
});
|
|
950
|
-
});
|
|
951
|
-
});
|
|
952
|
-
describe('Atomic BEEF', () => {
|
|
953
|
-
it('should serialize a transaction to Atomic BEEF format correctly', async () => {
|
|
954
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
955
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
956
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
957
|
-
const p2pkh = new P2PKH_1.default();
|
|
958
|
-
// Create a simple transaction
|
|
959
|
-
const sourceTx = new Transaction_1.default(1, [], [{
|
|
960
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
961
|
-
satoshis: 10000
|
|
962
|
-
}], 0);
|
|
963
|
-
const spendTx = new Transaction_1.default(1, [{
|
|
964
|
-
sourceTransaction: sourceTx,
|
|
965
|
-
sourceOutputIndex: 0,
|
|
966
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
967
|
-
sequence: 0xffffffff
|
|
968
|
-
}], [{
|
|
969
|
-
satoshis: 9000,
|
|
970
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
971
|
-
}], 0);
|
|
972
|
-
// Sign the transaction
|
|
973
|
-
await spendTx.fee();
|
|
974
|
-
await spendTx.sign();
|
|
975
|
-
// Assign a MerklePath to the source transaction to simulate mined transaction
|
|
976
|
-
const sourceTxID = sourceTx.id('hex');
|
|
977
|
-
const merklePath = new MerklePath_1.default(1000, [
|
|
978
|
-
[
|
|
979
|
-
{ offset: 0, hash: sourceTxID, txid: true },
|
|
980
|
-
{ offset: 1, duplicate: true }
|
|
981
|
-
]
|
|
982
|
-
]);
|
|
983
|
-
sourceTx.merklePath = merklePath;
|
|
984
|
-
// Serialize to Atomic BEEF
|
|
985
|
-
const atomicBEEF = spendTx.toAtomicBEEF();
|
|
986
|
-
expect(atomicBEEF).toBeDefined();
|
|
987
|
-
// Verify that the Atomic BEEF starts with the correct prefix and TXID
|
|
988
|
-
const expectedPrefix = [0x01, 0x01, 0x01, 0x01];
|
|
989
|
-
expect(atomicBEEF.slice(0, 4)).toEqual(expectedPrefix);
|
|
990
|
-
const txid = spendTx.id();
|
|
991
|
-
expect(atomicBEEF.slice(4, 36)).toEqual(txid);
|
|
992
|
-
// Deserialize from Atomic BEEF
|
|
993
|
-
const deserializedTx = Transaction_1.default.fromAtomicBEEF(atomicBEEF);
|
|
994
|
-
expect(deserializedTx.toHex()).toEqual(spendTx.toHex());
|
|
995
|
-
});
|
|
996
|
-
it('should throw an error when deserializing Atomic BEEF if subject transaction is missing', () => {
|
|
997
|
-
// Create Atomic BEEF data with missing subject transaction
|
|
998
|
-
const writer = new utils_1.Writer();
|
|
999
|
-
// Write Atomic BEEF prefix
|
|
1000
|
-
writer.writeUInt32LE(0x01010101);
|
|
1001
|
-
// Write subject TXID
|
|
1002
|
-
const fakeTXID = (0, utils_1.toArray)('00'.repeat(32), 'hex');
|
|
1003
|
-
writer.write(fakeTXID);
|
|
1004
|
-
// Write empty BEEF data
|
|
1005
|
-
writer.writeUInt32LE(Beef_1.BEEF_V1); // BEEF version
|
|
1006
|
-
writer.writeVarIntNum(0); // No BUMPs
|
|
1007
|
-
writer.writeVarIntNum(0); // No transactions
|
|
1008
|
-
const atomicBEEFData = writer.toArray();
|
|
1009
|
-
expect(() => {
|
|
1010
|
-
Transaction_1.default.fromAtomicBEEF(atomicBEEFData);
|
|
1011
|
-
}).toThrowError('beef must include at least one transaction.');
|
|
1012
|
-
});
|
|
1013
|
-
it('should allow selecting a specific TXID from BEEF data', async () => {
|
|
1014
|
-
// Create two transactions, one depending on the other
|
|
1015
|
-
const privateKey = new PrivateKey_1.default(1);
|
|
1016
|
-
const publicKey = new Curve_1.default().g.mul(privateKey);
|
|
1017
|
-
const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
|
|
1018
|
-
const p2pkh = new P2PKH_1.default();
|
|
1019
|
-
const sourceTx = new Transaction_1.default(1, [], [{
|
|
1020
|
-
lockingScript: p2pkh.lock(publicKeyHash),
|
|
1021
|
-
satoshis: 10000
|
|
1022
|
-
}], 0);
|
|
1023
|
-
const spendTx = new Transaction_1.default(1, [{
|
|
1024
|
-
sourceTransaction: sourceTx,
|
|
1025
|
-
sourceOutputIndex: 0,
|
|
1026
|
-
unlockingScriptTemplate: p2pkh.unlock(privateKey),
|
|
1027
|
-
sequence: 0xffffffff
|
|
1028
|
-
}], [{
|
|
1029
|
-
satoshis: 9000,
|
|
1030
|
-
lockingScript: p2pkh.lock(publicKeyHash)
|
|
1031
|
-
}], 0);
|
|
1032
|
-
// Sign transactions
|
|
1033
|
-
await spendTx.fee();
|
|
1034
|
-
await spendTx.sign();
|
|
1035
|
-
// Assign merkle path to source transaction
|
|
1036
|
-
const sourceTxID = sourceTx.id('hex');
|
|
1037
|
-
sourceTx.merklePath = new MerklePath_1.default(1000, [
|
|
1038
|
-
[
|
|
1039
|
-
{ offset: 0, hash: sourceTxID, txid: true },
|
|
1040
|
-
{ offset: 1, duplicate: true }
|
|
1041
|
-
]
|
|
1042
|
-
]);
|
|
1043
|
-
// Serialize to BEEF
|
|
1044
|
-
const beefData = spendTx.toBEEF();
|
|
1045
|
-
// Get TXIDs
|
|
1046
|
-
const spendTxID = spendTx.id('hex');
|
|
1047
|
-
// Deserialize the source transaction from BEEF data
|
|
1048
|
-
const deserializedSourceTx = Transaction_1.default.fromBEEF(beefData, sourceTxID);
|
|
1049
|
-
expect(deserializedSourceTx.id('hex')).toEqual(sourceTxID);
|
|
1050
|
-
// Deserialize the spend transaction from BEEF data
|
|
1051
|
-
const deserializedSpendTx = Transaction_1.default.fromBEEF(beefData, spendTxID);
|
|
1052
|
-
expect(deserializedSpendTx.id('hex')).toEqual(spendTxID);
|
|
1053
|
-
// Attempt to deserialize a non-existent transaction
|
|
1054
|
-
expect(() => {
|
|
1055
|
-
Transaction_1.default.fromBEEF(beefData, '00'.repeat(32));
|
|
1056
|
-
}).toThrowError('Transaction with TXID 0000000000000000000000000000000000000000000000000000000000000000 not found in BEEF data.');
|
|
1057
|
-
});
|
|
1058
|
-
});
|
|
1059
|
-
describe('addP2PKHOutput', () => {
|
|
1060
|
-
it('should create an output on the current transaction using an address hash or string', async () => {
|
|
1061
|
-
const privateKey = PrivateKey_1.default.fromRandom();
|
|
1062
|
-
const lockingScript = new P2PKH_1.default().lock(privateKey.toAddress());
|
|
1063
|
-
const tx = new Transaction_1.default();
|
|
1064
|
-
tx.addInput({
|
|
1065
|
-
sourceTXID: '00'.repeat(32),
|
|
1066
|
-
sourceOutputIndex: 0,
|
|
1067
|
-
unlockingScriptTemplate: new P2PKH_1.default().unlock(privateKey),
|
|
1068
|
-
});
|
|
1069
|
-
});
|
|
1070
|
-
});
|
|
1071
|
-
});
|
|
1072
|
-
//# sourceMappingURL=Transaction.test.js.map
|