@bsv/sdk 2.0.0-beta.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/mod.js +1 -0
- package/dist/cjs/mod.js.map +1 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/auth/Peer.js +149 -74
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/Certificate.js +18 -8
- package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +19 -9
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +17 -7
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +30 -10
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/clients/__tests__/AuthFetch.test.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +17 -7
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/auth/transports/__tests__/SimplifiedFetchTransport.test.js +17 -7
- package/dist/cjs/src/auth/transports/__tests__/SimplifiedFetchTransport.test.js.map +1 -1
- package/dist/cjs/src/auth/utils/createNonce.js +18 -9
- package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
- package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js +18 -9
- package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/cjs/src/compat/BSM.js +17 -7
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +17 -7
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +17 -7
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +17 -7
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/Utxo.js +1 -1
- package/dist/cjs/src/compat/Utxo.js.map +1 -1
- package/dist/cjs/src/compat/index.js +17 -7
- package/dist/cjs/src/compat/index.js.map +1 -1
- package/dist/cjs/src/identity/ContactsManager.js +1 -1
- package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
- package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
- package/dist/cjs/src/kvstore/GlobalKVStore.js +20 -10
- package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
- package/dist/cjs/src/kvstore/LocalKVStore.js +17 -7
- package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js +17 -7
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
- package/dist/cjs/src/messages/EncryptedMessage.js +19 -0
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/messages/index.js +17 -7
- package/dist/cjs/src/messages/index.js.map +1 -1
- package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
- package/dist/cjs/src/overlay-tools/HostReputationTracker.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +17 -7
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +17 -7
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/overlay-tools/withDoubleSpendRetry.js +1 -2
- package/dist/cjs/src/overlay-tools/withDoubleSpendRetry.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +77 -32
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +28 -54
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/DRBG.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +58 -24
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +6 -6
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +63 -6
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +46 -9
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js +1 -1
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReaderUint8Array.js +180 -0
- package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -0
- package/dist/cjs/src/primitives/ReductionContext.js +35 -46
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +132 -17
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/WriterUint8Array.js +173 -0
- package/dist/cjs/src/primitives/WriterUint8Array.js.map +1 -0
- package/dist/cjs/src/primitives/hex.js +2 -3
- package/dist/cjs/src/primitives/hex.js.map +1 -1
- package/dist/cjs/src/primitives/index.js +17 -7
- package/dist/cjs/src/primitives/index.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +43 -16
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/registry/RegistryClient.js +2 -2
- package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
- package/dist/cjs/src/remittance/CommsLayer.js +3 -0
- package/dist/cjs/src/remittance/CommsLayer.js.map +1 -0
- package/dist/cjs/src/remittance/IdentityLayer.js +3 -0
- package/dist/cjs/src/remittance/IdentityLayer.js.map +1 -0
- package/dist/cjs/src/remittance/RemittanceManager.js +1245 -0
- package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -0
- package/dist/cjs/src/remittance/RemittanceModule.js +3 -0
- package/dist/cjs/src/remittance/RemittanceModule.js.map +1 -0
- package/dist/cjs/src/remittance/index.js +23 -0
- package/dist/cjs/src/remittance/index.js.map +1 -0
- package/dist/cjs/src/remittance/modules/BasicBRC29.js +225 -0
- package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -0
- package/dist/cjs/src/remittance/modules/index.js +18 -0
- package/dist/cjs/src/remittance/modules/index.js.map +1 -0
- package/dist/cjs/src/remittance/types.js +22 -0
- package/dist/cjs/src/remittance/types.js.map +1 -0
- package/dist/cjs/src/script/OP.js +15 -13
- package/dist/cjs/src/script/OP.js.map +1 -1
- package/dist/cjs/src/script/Script.js +4 -1
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +145 -53
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +21 -7
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
- package/dist/cjs/src/storage/StorageUploader.js +17 -7
- package/dist/cjs/src/storage/StorageUploader.js.map +1 -1
- package/dist/cjs/src/storage/StorageUtils.js.map +1 -1
- package/dist/cjs/src/storage/index.js +17 -7
- package/dist/cjs/src/storage/index.js.map +1 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +85 -27
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +32 -14
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/Broadcaster.js +2 -3
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +25 -6
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +238 -27
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/ARC.js +23 -0
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +1 -2
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/Teranode.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/BlockHeadersService.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +1 -2
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/LivePolicy.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/BinaryFetchClient.js +2 -2
- package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +1 -2
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/ProtoWallet.js +1 -1
- package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/index.js +17 -7
- package/dist/cjs/src/wallet/index.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +17 -7
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +17 -7
- package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +17 -7
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +17 -7
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +17 -7
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js +1 -2
- package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/src/wallet/validationHelpers.js +51 -41
- package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +1 -0
- package/dist/esm/mod.js.map +1 -1
- package/dist/esm/src/auth/Peer.js +132 -67
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/Certificate.js +1 -1
- package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +2 -2
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +13 -3
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/clients/__tests__/AuthFetch.test.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/auth/transports/__tests__/SimplifiedFetchTransport.test.js.map +1 -1
- package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/esm/src/compat/BSM.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/identity/ContactsManager.js +1 -1
- package/dist/esm/src/identity/ContactsManager.js.map +1 -1
- package/dist/esm/src/identity/IdentityClient.js.map +1 -1
- package/dist/esm/src/kvstore/GlobalKVStore.js +3 -3
- package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
- package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
- package/dist/esm/src/messages/EncryptedMessage.js +19 -0
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
- package/dist/esm/src/overlay-tools/HostReputationTracker.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/overlay-tools/withDoubleSpendRetry.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +71 -26
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +28 -54
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/DRBG.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +58 -24
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Mersenne.js.map +1 -1
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +61 -4
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/Polynomial.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +29 -2
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js +1 -1
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReaderUint8Array.js +176 -0
- package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -0
- package/dist/esm/src/primitives/ReductionContext.js +35 -46
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +115 -10
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/WriterUint8Array.js +169 -0
- package/dist/esm/src/primitives/WriterUint8Array.js.map +1 -0
- package/dist/esm/src/primitives/hex.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +37 -11
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/registry/RegistryClient.js.map +1 -1
- package/dist/esm/src/remittance/CommsLayer.js +2 -0
- package/dist/esm/src/remittance/CommsLayer.js.map +1 -0
- package/dist/esm/src/remittance/IdentityLayer.js +2 -0
- package/dist/esm/src/remittance/IdentityLayer.js.map +1 -0
- package/dist/esm/src/remittance/RemittanceManager.js +1254 -0
- package/dist/esm/src/remittance/RemittanceManager.js.map +1 -0
- package/dist/esm/src/remittance/RemittanceModule.js +2 -0
- package/dist/esm/src/remittance/RemittanceModule.js.map +1 -0
- package/dist/esm/src/remittance/index.js +7 -0
- package/dist/esm/src/remittance/index.js.map +1 -0
- package/dist/esm/src/remittance/modules/BasicBRC29.js +227 -0
- package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -0
- package/dist/esm/src/remittance/modules/index.js +2 -0
- package/dist/esm/src/remittance/modules/index.js.map +1 -0
- package/dist/esm/src/remittance/types.js +19 -0
- package/dist/esm/src/remittance/types.js.map +1 -0
- package/dist/esm/src/script/OP.js +15 -13
- package/dist/esm/src/script/OP.js.map +1 -1
- package/dist/esm/src/script/Script.js +4 -1
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/Spend.js +129 -46
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +21 -7
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
- package/dist/esm/src/storage/StorageUploader.js.map +1 -1
- package/dist/esm/src/storage/StorageUtils.js.map +1 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +86 -28
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js.map +1 -1
- package/dist/esm/src/transaction/BeefTx.js +32 -14
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +26 -7
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +239 -28
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/ARC.js +23 -0
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/Teranode.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/BlockHeadersService.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/LivePolicy.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/ProtoWallet.js +1 -1
- package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/utils/toOriginHeader.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/src/wallet/validationHelpers.js +1 -1
- package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +1 -0
- package/dist/types/mod.d.ts.map +1 -1
- package/dist/types/src/auth/Peer.d.ts +12 -7
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/auth/types.d.ts +2 -0
- package/dist/types/src/auth/types.d.ts.map +1 -1
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
- package/dist/types/src/compat/BSM.d.ts +1 -1
- package/dist/types/src/compat/BSM.d.ts.map +1 -1
- package/dist/types/src/messages/EncryptedMessage.d.ts +19 -0
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
- package/dist/types/src/primitives/AESGCM.d.ts +18 -0
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts +8 -0
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts +24 -0
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +8 -8
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts +1 -0
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/PrivateKey.d.ts +27 -0
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/ReaderUint8Array.d.ts +32 -0
- package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -0
- package/dist/types/src/primitives/ReductionContext.d.ts +9 -0
- package/dist/types/src/primitives/ReductionContext.d.ts.map +1 -1
- package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
- package/dist/types/src/primitives/TransactionSignature.d.ts +16 -4
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
- package/dist/types/src/primitives/WriterUint8Array.d.ts +54 -0
- package/dist/types/src/primitives/WriterUint8Array.d.ts.map +1 -0
- package/dist/types/src/primitives/utils.d.ts +19 -6
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/remittance/CommsLayer.d.ts +50 -0
- package/dist/types/src/remittance/CommsLayer.d.ts.map +1 -0
- package/dist/types/src/remittance/IdentityLayer.d.ts +35 -0
- package/dist/types/src/remittance/IdentityLayer.d.ts.map +1 -0
- package/dist/types/src/remittance/RemittanceManager.d.ts +452 -0
- package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -0
- package/dist/types/src/remittance/RemittanceModule.d.ts +106 -0
- package/dist/types/src/remittance/RemittanceModule.d.ts.map +1 -0
- package/dist/types/src/remittance/index.d.ts +7 -0
- package/dist/types/src/remittance/index.d.ts.map +1 -0
- package/dist/types/src/remittance/modules/BasicBRC29.d.ts +133 -0
- package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -0
- package/dist/types/src/remittance/modules/index.d.ts +2 -0
- package/dist/types/src/remittance/modules/index.d.ts.map +1 -0
- package/dist/types/src/remittance/types.d.ts +238 -0
- package/dist/types/src/remittance/types.d.ts.map +1 -0
- package/dist/types/src/script/OP.d.ts +5 -3
- package/dist/types/src/script/OP.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts +7 -0
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +3 -4
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
- package/dist/types/src/storage/StorageUtils.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +26 -9
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +13 -6
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts +16 -3
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +58 -7
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
- package/dist/types/src/transaction/http/BinaryFetchClient.d.ts +0 -2
- package/dist/types/src/transaction/http/BinaryFetchClient.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +5 -5
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +13 -13
- package/dist/umd/bundle.js.map +1 -1
- package/docs/index.md +3 -1
- package/docs/reference/auth.md +8 -12
- package/docs/reference/primitives.md +260 -55
- package/docs/reference/remittance.md +2166 -0
- package/docs/reference/script.md +12 -4
- package/docs/reference/transaction.md +203 -34
- package/docs/reference/wallet.md +6 -5
- package/docs/remittance-getting-started.md +138 -0
- package/mod.ts +1 -0
- package/package.json +11 -1
- package/src/auth/Peer.ts +196 -85
- package/src/auth/__tests/Peer.test.ts +424 -257
- package/src/auth/clients/AuthFetch.ts +18 -3
- package/src/auth/types.ts +2 -0
- package/src/messages/EncryptedMessage.ts +19 -0
- package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +7 -0
- package/src/primitives/AESGCM.ts +75 -34
- package/src/primitives/BigNumber.ts +27 -31
- package/src/primitives/ECDSA.ts +41 -2
- package/src/primitives/PrivateKey.ts +27 -0
- package/src/primitives/ReaderUint8Array.ts +196 -0
- package/src/primitives/ReductionContext.ts +44 -48
- package/src/primitives/TransactionSignature.ts +129 -10
- package/src/primitives/WriterUint8Array.ts +195 -0
- package/src/primitives/__tests/AESGCM.test.ts +31 -0
- package/src/primitives/__tests/ECDSA.test.ts +16 -0
- package/src/primitives/__tests/ReaderUint8Array.test.ts +317 -0
- package/src/primitives/__tests/WriterUint8Array.test.ts +208 -0
- package/src/primitives/utils.ts +31 -4
- package/src/remittance/CommsLayer.ts +41 -0
- package/src/remittance/IdentityLayer.ts +32 -0
- package/src/remittance/RemittanceManager.ts +1672 -0
- package/src/remittance/RemittanceModule.ts +92 -0
- package/src/remittance/__tests/BasicBRC29.test.ts +188 -0
- package/src/remittance/__tests/RemittanceManager.test.ts +493 -0
- package/src/remittance/__tests/examples.ts +130 -0
- package/src/remittance/index.ts +6 -0
- package/src/remittance/modules/BasicBRC29.ts +361 -0
- package/src/remittance/modules/index.ts +1 -0
- package/src/remittance/types.ts +284 -0
- package/src/script/OP.ts +15 -13
- package/src/script/Script.ts +3 -1
- package/src/script/Spend.ts +128 -52
- package/src/script/__tests/Chronicle.test.ts +186 -0
- package/src/script/__tests/Spend.test.ts +1 -1
- package/src/script/__tests/SpendValildVectors.test.ts +63 -0
- package/src/script/__tests/lrshiftnum.test.ts +185 -0
- package/src/script/__tests/sighashTestData.ts +1031 -0
- package/src/script/__tests/spend.valid.vectors.ts +9 -16
- package/src/script/templates/PushDrop.ts +32 -17
- package/src/script/templates/__tests/PushDrop.test.ts +28 -0
- package/src/storage/__tests/StorageUploader.test.ts +1 -1
- package/src/transaction/Beef.ts +103 -40
- package/src/transaction/BeefTx.ts +38 -19
- package/src/transaction/MerklePath.ts +30 -9
- package/src/transaction/Transaction.ts +277 -38
- package/src/transaction/__tests/Beef.test.ts +77 -0
- package/src/transaction/__tests/Transaction.test.ts +641 -3
- package/src/transaction/broadcasters/ARC.ts +34 -7
- package/src/transaction/broadcasters/__tests/ARC.test.ts +98 -0
- package/src/wallet/Wallet.interfaces.ts +5 -5
- package/dist/cjs/src/storage/__test/StorageDownloader.test.js +0 -171
- package/dist/cjs/src/storage/__test/StorageDownloader.test.js.map +0 -1
- package/dist/cjs/src/storage/__test/StorageUploader.test.js +0 -163
- package/dist/cjs/src/storage/__test/StorageUploader.test.js.map +0 -1
- package/dist/cjs/src/storage/__test/StorageUtils.test.js +0 -97
- package/dist/cjs/src/storage/__test/StorageUtils.test.js.map +0 -1
- package/dist/esm/src/storage/__test/StorageDownloader.test.js +0 -166
- package/dist/esm/src/storage/__test/StorageDownloader.test.js.map +0 -1
- package/dist/esm/src/storage/__test/StorageUploader.test.js +0 -135
- package/dist/esm/src/storage/__test/StorageUploader.test.js.map +0 -1
- package/dist/esm/src/storage/__test/StorageUtils.test.js +0 -72
- package/dist/esm/src/storage/__test/StorageUtils.test.js.map +0 -1
- package/dist/types/src/storage/__test/StorageDownloader.test.d.ts +0 -2
- package/dist/types/src/storage/__test/StorageDownloader.test.d.ts.map +0 -1
- package/dist/types/src/storage/__test/StorageUploader.test.d.ts +0 -2
- package/dist/types/src/storage/__test/StorageUploader.test.d.ts.map +0 -1
- package/dist/types/src/storage/__test/StorageUtils.test.d.ts +0 -2
- package/dist/types/src/storage/__test/StorageUtils.test.d.ts.map +0 -1
|
@@ -3,7 +3,7 @@ import TransactionInput from './TransactionInput.js'
|
|
|
3
3
|
import TransactionOutput from './TransactionOutput.js'
|
|
4
4
|
import UnlockingScript from '../script/UnlockingScript.js'
|
|
5
5
|
import LockingScript from '../script/LockingScript.js'
|
|
6
|
-
import { Reader, Writer, toHex, toArray } from '../primitives/utils.js'
|
|
6
|
+
import { Reader, Writer, toHex, toArray, ReaderUint8Array, toUint8Array, WriterUint8Array } from '../primitives/utils.js'
|
|
7
7
|
import { hash256 } from '../primitives/Hash.js'
|
|
8
8
|
import FeeModel from './FeeModel.js'
|
|
9
9
|
import LivePolicy from './fee-models/LivePolicy.js'
|
|
@@ -16,9 +16,6 @@ import { defaultChainTracker } from './chaintrackers/DefaultChainTracker.js'
|
|
|
16
16
|
import { Beef, BEEF_V1 } from './Beef.js'
|
|
17
17
|
import P2PKH from '../script/templates/P2PKH.js'
|
|
18
18
|
|
|
19
|
-
const BufferCtor =
|
|
20
|
-
typeof globalThis !== 'undefined' ? (globalThis as any).Buffer : undefined
|
|
21
|
-
|
|
22
19
|
/**
|
|
23
20
|
* Represents a complete Bitcoin transaction. This class encapsulates all the details
|
|
24
21
|
* required for creating, signing, and processing a Bitcoin transaction, including
|
|
@@ -109,7 +106,7 @@ export default class Transaction {
|
|
|
109
106
|
* @param txid Optional TXID of the transaction to retrieve from the BEEF data.
|
|
110
107
|
* @returns An anchored transaction, linked to its associated inputs populated with merkle paths.
|
|
111
108
|
*/
|
|
112
|
-
static fromBEEF (beef: number[], txid?: string): Transaction {
|
|
109
|
+
static fromBEEF (beef: number[] | Uint8Array, txid?: string): Transaction {
|
|
113
110
|
const { tx } = Transaction.fromAnyBeef(beef, txid)
|
|
114
111
|
return tx
|
|
115
112
|
}
|
|
@@ -121,7 +118,7 @@ export default class Transaction {
|
|
|
121
118
|
* @param beef A binary representation of an Atomic BEEF structure.
|
|
122
119
|
* @returns The subject transaction, linked to its associated inputs populated with merkle paths.
|
|
123
120
|
*/
|
|
124
|
-
static fromAtomicBEEF (beef: number[]): Transaction {
|
|
121
|
+
static fromAtomicBEEF (beef: number[] | Uint8Array): Transaction {
|
|
125
122
|
const { tx, txid, beef: b } = Transaction.fromAnyBeef(beef)
|
|
126
123
|
if (txid !== b.atomicTxid) {
|
|
127
124
|
if (b.atomicTxid != null) {
|
|
@@ -133,7 +130,7 @@ export default class Transaction {
|
|
|
133
130
|
return tx
|
|
134
131
|
}
|
|
135
132
|
|
|
136
|
-
private static fromAnyBeef (beef: number[], txid?: string): { tx: Transaction, beef: Beef, txid: string } {
|
|
133
|
+
private static fromAnyBeef (beef: number[] | Uint8Array, txid?: string): { tx: Transaction, beef: Beef, txid: string } {
|
|
137
134
|
const b = Beef.fromBinary(beef)
|
|
138
135
|
if (b.txs.length < 1) {
|
|
139
136
|
throw new Error('beef must include at least one transaction.')
|
|
@@ -155,8 +152,8 @@ export default class Transaction {
|
|
|
155
152
|
* @param ef A binary representation of a transaction in EF format.
|
|
156
153
|
* @returns An extended transaction, linked to its associated inputs by locking script and satoshis amounts only.
|
|
157
154
|
*/
|
|
158
|
-
static fromEF (ef: number[]): Transaction {
|
|
159
|
-
const br =
|
|
155
|
+
static fromEF (ef: number[] | Uint8Array): Transaction {
|
|
156
|
+
const br = ReaderUint8Array.makeReader(ef)
|
|
160
157
|
const version = br.readUInt32LE()
|
|
161
158
|
if (toHex(br.read(6)) !== '0000000000ef') { throw new Error('Invalid EF marker') }
|
|
162
159
|
const inputsLength = br.readVarIntNum()
|
|
@@ -217,11 +214,11 @@ export default class Transaction {
|
|
|
217
214
|
* outputs: { vout: number, offset: number, length: number }[]
|
|
218
215
|
* }
|
|
219
216
|
*/
|
|
220
|
-
static parseScriptOffsets (bin: number[]): {
|
|
217
|
+
static parseScriptOffsets (bin: number[] | Uint8Array): {
|
|
221
218
|
inputs: Array<{ vin: number, offset: number, length: number }>
|
|
222
219
|
outputs: Array<{ vout: number, offset: number, length: number }>
|
|
223
220
|
} {
|
|
224
|
-
const br =
|
|
221
|
+
const br = ReaderUint8Array.makeReader(bin)
|
|
225
222
|
const inputs: Array<{ vin: number, offset: number, length: number }> = []
|
|
226
223
|
const outputs: Array<{ vout: number, offset: number, length: number }> = []
|
|
227
224
|
|
|
@@ -243,7 +240,7 @@ export default class Transaction {
|
|
|
243
240
|
return { inputs, outputs }
|
|
244
241
|
}
|
|
245
242
|
|
|
246
|
-
static fromReader (br: Reader): Transaction {
|
|
243
|
+
static fromReader (br: Reader | ReaderUint8Array): Transaction {
|
|
247
244
|
const version = br.readUInt32LE()
|
|
248
245
|
const inputsLength = br.readVarIntNum()
|
|
249
246
|
const inputs: TransactionInput[] = []
|
|
@@ -284,10 +281,10 @@ export default class Transaction {
|
|
|
284
281
|
* @param {number[]} bin - The binary array representation of the transaction.
|
|
285
282
|
* @returns {Transaction} - A new Transaction instance.
|
|
286
283
|
*/
|
|
287
|
-
static fromBinary (bin: number[]): Transaction {
|
|
284
|
+
static fromBinary (bin: number[] | Uint8Array): Transaction {
|
|
288
285
|
const copy = bin.slice()
|
|
289
286
|
const rawBytes = Uint8Array.from(copy)
|
|
290
|
-
const br = new
|
|
287
|
+
const br = new ReaderUint8Array(rawBytes)
|
|
291
288
|
const tx = Transaction.fromReader(br)
|
|
292
289
|
tx.rawBytesCache = rawBytes
|
|
293
290
|
return tx
|
|
@@ -301,15 +298,11 @@ export default class Transaction {
|
|
|
301
298
|
* @returns {Transaction} - A new Transaction instance.
|
|
302
299
|
*/
|
|
303
300
|
static fromHex (hex: string): Transaction {
|
|
304
|
-
const
|
|
305
|
-
const
|
|
306
|
-
const br = new Reader(bin)
|
|
301
|
+
const rawBytes = toUint8Array(hex, 'hex')
|
|
302
|
+
const br = new ReaderUint8Array(rawBytes)
|
|
307
303
|
const tx = Transaction.fromReader(br)
|
|
308
304
|
tx.rawBytesCache = rawBytes
|
|
309
|
-
tx.hexCache =
|
|
310
|
-
BufferCtor != null
|
|
311
|
-
? BufferCtor.from(rawBytes).toString('hex')
|
|
312
|
-
: toHex(bin)
|
|
305
|
+
tx.hexCache = toHex(rawBytes)
|
|
313
306
|
return tx
|
|
314
307
|
}
|
|
315
308
|
|
|
@@ -321,7 +314,7 @@ export default class Transaction {
|
|
|
321
314
|
* @returns {Transaction} - A new Transaction instance.
|
|
322
315
|
*/
|
|
323
316
|
static fromHexEF (hex: string): Transaction {
|
|
324
|
-
return Transaction.fromEF(
|
|
317
|
+
return Transaction.fromEF(toUint8Array(hex, 'hex'))
|
|
325
318
|
}
|
|
326
319
|
|
|
327
320
|
/**
|
|
@@ -616,7 +609,7 @@ export default class Transaction {
|
|
|
616
609
|
return await broadcaster.broadcast(this)
|
|
617
610
|
}
|
|
618
611
|
|
|
619
|
-
private writeTransactionBody (writer: Writer): void {
|
|
612
|
+
private writeTransactionBody (writer: Writer | WriterUint8Array): void {
|
|
620
613
|
writer.writeUInt32LE(this.version)
|
|
621
614
|
writer.writeVarIntNum(this.inputs.length)
|
|
622
615
|
for (const i of this.inputs) {
|
|
@@ -649,7 +642,7 @@ export default class Transaction {
|
|
|
649
642
|
}
|
|
650
643
|
|
|
651
644
|
private buildSerializedBytes (): Uint8Array {
|
|
652
|
-
const writer = new
|
|
645
|
+
const writer = new WriterUint8Array()
|
|
653
646
|
this.writeTransactionBody(writer)
|
|
654
647
|
return writer.toUint8Array()
|
|
655
648
|
}
|
|
@@ -674,13 +667,7 @@ export default class Transaction {
|
|
|
674
667
|
return this.getSerializedBytes()
|
|
675
668
|
}
|
|
676
669
|
|
|
677
|
-
|
|
678
|
-
* Converts the transaction to a BRC-30 EF format.
|
|
679
|
-
*
|
|
680
|
-
* @returns {number[]} - The BRC-30 EF representation of the transaction.
|
|
681
|
-
*/
|
|
682
|
-
toEF (): number[] {
|
|
683
|
-
const writer = new Writer()
|
|
670
|
+
private writeEF (writer: Writer | WriterUint8Array): void {
|
|
684
671
|
writer.writeUInt32LE(this.version)
|
|
685
672
|
writer.write([0, 0, 0, 0, 0, 0xef])
|
|
686
673
|
writer.writeVarIntNum(this.inputs.length)
|
|
@@ -721,16 +708,37 @@ export default class Transaction {
|
|
|
721
708
|
writer.write(scriptBin)
|
|
722
709
|
}
|
|
723
710
|
writer.writeUInt32LE(this.lockTime)
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Converts the transaction to a BRC-30 EF format.
|
|
715
|
+
*
|
|
716
|
+
* @returns {number[]} - The BRC-30 EF representation of the transaction.
|
|
717
|
+
*/
|
|
718
|
+
toEF (): number[] {
|
|
719
|
+
const writer = new Writer()
|
|
720
|
+
this.writeEF(writer)
|
|
724
721
|
return writer.toArray()
|
|
725
722
|
}
|
|
726
723
|
|
|
724
|
+
/**
|
|
725
|
+
* Converts the transaction to a BRC-30 EF format.
|
|
726
|
+
*
|
|
727
|
+
* @returns {Uint8Array} - The BRC-30 EF representation of the transaction.
|
|
728
|
+
*/
|
|
729
|
+
toEFUint8Array (): Uint8Array {
|
|
730
|
+
const writer = new WriterUint8Array()
|
|
731
|
+
this.writeEF(writer)
|
|
732
|
+
return writer.toUint8Array()
|
|
733
|
+
}
|
|
734
|
+
|
|
727
735
|
/**
|
|
728
736
|
* Converts the transaction to a hexadecimal string EF.
|
|
729
737
|
*
|
|
730
738
|
* @returns {string} - The hexadecimal string representation of the transaction EF.
|
|
731
739
|
*/
|
|
732
740
|
toHexEF (): string {
|
|
733
|
-
return toHex(this.
|
|
741
|
+
return toHex(this.toEFUint8Array())
|
|
734
742
|
}
|
|
735
743
|
|
|
736
744
|
/**
|
|
@@ -743,10 +751,7 @@ export default class Transaction {
|
|
|
743
751
|
return this.hexCache
|
|
744
752
|
}
|
|
745
753
|
const bytes = this.getSerializedBytes()
|
|
746
|
-
const hex =
|
|
747
|
-
BufferCtor != null
|
|
748
|
-
? BufferCtor.from(bytes).toString('hex')
|
|
749
|
-
: toHex(Array.from(bytes))
|
|
754
|
+
const hex = toHex(bytes)
|
|
750
755
|
this.hexCache = hex
|
|
751
756
|
return hex
|
|
752
757
|
}
|
|
@@ -951,13 +956,13 @@ export default class Transaction {
|
|
|
951
956
|
/**
|
|
952
957
|
* Serializes this transaction, together with its inputs and the respective merkle proofs, into the BEEF (BRC-62) format. This enables efficient verification of its compliance with the rules of SPV.
|
|
953
958
|
*
|
|
959
|
+
* @param writer The writer to serialize to
|
|
954
960
|
* @param allowPartial If true, error will not be thrown if there are any missing sourceTransactions.
|
|
955
961
|
*
|
|
956
962
|
* @returns The serialized BEEF structure
|
|
957
963
|
* @throws Error if there are any missing sourceTransactions unless `allowPartial` is true.
|
|
958
964
|
*/
|
|
959
|
-
|
|
960
|
-
const writer = new Writer()
|
|
965
|
+
writeSerializedBEEF (writer: Writer | WriterUint8Array, allowPartial?: boolean): void {
|
|
961
966
|
writer.writeUInt32LE(BEEF_V1)
|
|
962
967
|
const BUMPs: MerklePath[] = []
|
|
963
968
|
const bumpIndexByInstance = new Map<MerklePath, number>()
|
|
@@ -1035,6 +1040,34 @@ export default class Transaction {
|
|
|
1035
1040
|
return writer.toArray()
|
|
1036
1041
|
}
|
|
1037
1042
|
|
|
1043
|
+
/**
|
|
1044
|
+
* Serializes this transaction, together with its inputs and the respective merkle proofs, into the BEEF (BRC-62) format. This enables efficient verification of its compliance with the rules of SPV.
|
|
1045
|
+
*
|
|
1046
|
+
* @param allowPartial If true, error will not be thrown if there are any missing sourceTransactions.
|
|
1047
|
+
*
|
|
1048
|
+
* @returns {number[]} The serialized BEEF structure
|
|
1049
|
+
* @throws Error if there are any missing sourceTransactions unless `allowPartial` is true.
|
|
1050
|
+
*/
|
|
1051
|
+
toBEEF (allowPartial?: boolean): number[] {
|
|
1052
|
+
const writer = new Writer()
|
|
1053
|
+
this.writeSerializedBEEF(writer, allowPartial)
|
|
1054
|
+
return writer.toArray()
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
/**
|
|
1058
|
+
* Serializes this transaction, together with its inputs and the respective merkle proofs, into the BEEF (BRC-62) format. This enables efficient verification of its compliance with the rules of SPV.
|
|
1059
|
+
*
|
|
1060
|
+
* @param allowPartial If true, error will not be thrown if there are any missing sourceTransactions.
|
|
1061
|
+
*
|
|
1062
|
+
* @returns {number[]} The serialized BEEF structure
|
|
1063
|
+
* @throws Error if there are any missing sourceTransactions unless `allowPartial` is true.
|
|
1064
|
+
*/
|
|
1065
|
+
toBEEFUint8Array (allowPartial?: boolean): Uint8Array {
|
|
1066
|
+
const writer = new WriterUint8Array()
|
|
1067
|
+
this.writeSerializedBEEF(writer, allowPartial)
|
|
1068
|
+
return writer.toArray()
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1038
1071
|
/**
|
|
1039
1072
|
* Serializes this transaction and its inputs into the Atomic BEEF (BRC-95) format.
|
|
1040
1073
|
* The Atomic BEEF format starts with a 4-byte prefix `0x01010101`, followed by the TXID of the subject transaction,
|
|
@@ -1052,4 +1085,210 @@ export default class Transaction {
|
|
|
1052
1085
|
const beefData = this.toBEEF(allowPartial)
|
|
1053
1086
|
return prefix.concat(txHash, beefData)
|
|
1054
1087
|
}
|
|
1088
|
+
|
|
1089
|
+
/**
|
|
1090
|
+
* Serializes this transaction and its inputs into the Atomic BEEF (BRC-95) format.
|
|
1091
|
+
* The Atomic BEEF format starts with a 4-byte prefix `0x01010101`, followed by the TXID of the subject transaction,
|
|
1092
|
+
* and then the BEEF data containing only the subject transaction and its dependencies.
|
|
1093
|
+
* This format ensures that the BEEF structure is atomic and contains no unrelated transactions.
|
|
1094
|
+
*
|
|
1095
|
+
* @param allowPartial If true, error will not be thrown if there are any missing sourceTransactions.
|
|
1096
|
+
*
|
|
1097
|
+
* @returns {number[]} - The serialized Atomic BEEF structure.
|
|
1098
|
+
* @throws Error if there are any missing sourceTransactions unless `allowPartial` is true.
|
|
1099
|
+
*/
|
|
1100
|
+
toAtomicBEEFUint8Array (allowPartial?: boolean): Uint8Array {
|
|
1101
|
+
const writer = new WriterUint8Array()
|
|
1102
|
+
const prefix = [1, 1, 1, 1]
|
|
1103
|
+
writer.write(prefix)
|
|
1104
|
+
const txHash = this.hash() as number[]
|
|
1105
|
+
writer.write(txHash)
|
|
1106
|
+
this.writeSerializedBEEF(writer, allowPartial)
|
|
1107
|
+
return writer.toUint8Array()
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
/**
|
|
1111
|
+
* Completes the transaction using a wallet interface, which will handle
|
|
1112
|
+
* signing and transaction finalization. This method converts the current
|
|
1113
|
+
* transaction into a format that can be processed by the wallet, and then
|
|
1114
|
+
* updates this transaction object with the result from the wallet.
|
|
1115
|
+
*
|
|
1116
|
+
* @param {WalletInterface} wallet - The BRC-100 compliant wallet to use for completing the transaction
|
|
1117
|
+
* @param {string} [actionDescription] - Optional description for the action
|
|
1118
|
+
* @param {string} [originator] - Optional originator domain name
|
|
1119
|
+
* @param {CreateActionOptions} [options] - Optional settings for transaction creation (e.g., acceptDelayedBroadcast, trustSelf, noSend, etc.)
|
|
1120
|
+
* @returns {Promise<void>}
|
|
1121
|
+
*/
|
|
1122
|
+
async completeWithWallet (wallet: WalletInterface, actionDescription?: DescriptionString5to50Bytes, originator?: string, options?: CreateActionOptions): Promise<void> {
|
|
1123
|
+
const inputCount = this.inputs.length
|
|
1124
|
+
const outputCount = this.outputs.length
|
|
1125
|
+
const description = actionDescription ?? `Transaction with ${inputCount} input(s) and ${outputCount} output(s)`
|
|
1126
|
+
|
|
1127
|
+
const actionArgs: CreateActionArgs = {
|
|
1128
|
+
description,
|
|
1129
|
+
inputs: [] as any[],
|
|
1130
|
+
outputs: [] as any[],
|
|
1131
|
+
lockTime: this.lockTime,
|
|
1132
|
+
version: this.version
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
// Check if any input has an unlocking script template
|
|
1136
|
+
const hasTemplates = this.inputs.some(input => input.unlockingScriptTemplate != null)
|
|
1137
|
+
|
|
1138
|
+
// Process inputs - collect all source transactions and convert them to BEEF
|
|
1139
|
+
const beefData = new Beef()
|
|
1140
|
+
for (let i = 0; i < this.inputs.length; i++) {
|
|
1141
|
+
const input = this.inputs[i]
|
|
1142
|
+
|
|
1143
|
+
if (input.sourceTransaction == null) {
|
|
1144
|
+
throw new Error('All inputs must have a sourceTransaction when using completeWithWallet')
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
// Merge source transaction into BEEF
|
|
1148
|
+
const sourceBEEF = input.sourceTransaction.toBEEF()
|
|
1149
|
+
beefData.mergeBeef(sourceBEEF)
|
|
1150
|
+
|
|
1151
|
+
const sourceTXID = input.sourceTransaction.id('hex')
|
|
1152
|
+
|
|
1153
|
+
const inputArg: any = {
|
|
1154
|
+
outpoint: `${sourceTXID}.${input.sourceOutputIndex}`,
|
|
1155
|
+
inputDescription: 'Input from source transaction',
|
|
1156
|
+
sequenceNumber: input.sequence
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
// Handle inputs with templates vs scripts
|
|
1160
|
+
if (hasTemplates) {
|
|
1161
|
+
// When using signAction flow, need to provide length for templates
|
|
1162
|
+
if (input.unlockingScriptTemplate != null) {
|
|
1163
|
+
const estimatedLength = await input.unlockingScriptTemplate.estimateLength(this, i)
|
|
1164
|
+
inputArg.unlockingScriptLength = estimatedLength
|
|
1165
|
+
} else if (input.unlockingScript != null) {
|
|
1166
|
+
// Still provide the script if it exists
|
|
1167
|
+
inputArg.unlockingScript = input.unlockingScript.toHex()
|
|
1168
|
+
} else {
|
|
1169
|
+
throw new Error(`Input ${i} must have either an unlockingScript or unlockingScriptTemplate`)
|
|
1170
|
+
}
|
|
1171
|
+
} else {
|
|
1172
|
+
// Original flow: all inputs must have unlocking scripts
|
|
1173
|
+
if (input.unlockingScript == null) {
|
|
1174
|
+
throw new Error('All inputs must have an unlockingScript when using completeWithWallet')
|
|
1175
|
+
}
|
|
1176
|
+
inputArg.unlockingScript = input.unlockingScript.toHex()
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
actionArgs.inputs.push(inputArg)
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
// Add inputBEEF if there are inputs
|
|
1183
|
+
if (this.inputs.length > 0) {
|
|
1184
|
+
actionArgs.inputBEEF = beefData.toBinary()
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
// Process outputs
|
|
1188
|
+
for (const output of this.outputs) {
|
|
1189
|
+
actionArgs.outputs.push({
|
|
1190
|
+
satoshis: output.satoshis,
|
|
1191
|
+
lockingScript: output.lockingScript.toHex(),
|
|
1192
|
+
outputDescription: 'Output from source transaction'
|
|
1193
|
+
})
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
// Add any labels from metadata if they exist
|
|
1197
|
+
if (this.metadata?.labels != null && Array.isArray(this.metadata.labels)) {
|
|
1198
|
+
actionArgs.labels = this.metadata.labels
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
let atomicBEEF: number[]
|
|
1202
|
+
|
|
1203
|
+
// Use signAction flow for templates
|
|
1204
|
+
if (hasTemplates) {
|
|
1205
|
+
// Merge user options with required signAndProcess: false for template flow
|
|
1206
|
+
actionArgs.options = {
|
|
1207
|
+
...options,
|
|
1208
|
+
signAndProcess: false
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
const { signableTransaction } = await wallet.createAction(actionArgs, originator)
|
|
1212
|
+
|
|
1213
|
+
if (signableTransaction == null) {
|
|
1214
|
+
throw new Error('Wallet createAction did not return signableTransaction')
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
// Parse the signable transaction BEEF to get the unsigned transaction
|
|
1218
|
+
const partialTx = Transaction.fromBEEF(signableTransaction.tx)
|
|
1219
|
+
|
|
1220
|
+
// Sign inputs with templates and collect all unlocking scripts
|
|
1221
|
+
const spends: Record<number, { unlockingScript: string }> = {}
|
|
1222
|
+
|
|
1223
|
+
for (let i = 0; i < this.inputs.length; i++) {
|
|
1224
|
+
const input = this.inputs[i]
|
|
1225
|
+
|
|
1226
|
+
if (input.unlockingScriptTemplate != null) {
|
|
1227
|
+
// Use the template to sign this input
|
|
1228
|
+
const unlockingScript = await input.unlockingScriptTemplate.sign(partialTx, i)
|
|
1229
|
+
spends[i] = {
|
|
1230
|
+
unlockingScript: unlockingScript.toHex()
|
|
1231
|
+
}
|
|
1232
|
+
} else if (input.unlockingScript != null) {
|
|
1233
|
+
// Include pre-existing unlocking scripts
|
|
1234
|
+
spends[i] = {
|
|
1235
|
+
unlockingScript: input.unlockingScript.toHex()
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
// Extract options that apply to signAction (subset of CreateActionOptions)
|
|
1241
|
+
const signActionOptions: SignActionOptions | undefined = options != null
|
|
1242
|
+
? {
|
|
1243
|
+
acceptDelayedBroadcast: options.acceptDelayedBroadcast,
|
|
1244
|
+
returnTXIDOnly: options.returnTXIDOnly,
|
|
1245
|
+
noSend: options.noSend,
|
|
1246
|
+
sendWith: options.sendWith
|
|
1247
|
+
}
|
|
1248
|
+
: undefined
|
|
1249
|
+
|
|
1250
|
+
// Call signAction with the generated unlocking scripts
|
|
1251
|
+
const signResult = await wallet.signAction({
|
|
1252
|
+
reference: signableTransaction.reference,
|
|
1253
|
+
spends,
|
|
1254
|
+
options: signActionOptions
|
|
1255
|
+
}, originator)
|
|
1256
|
+
|
|
1257
|
+
if (signResult.tx == null) {
|
|
1258
|
+
throw new Error('Wallet signAction did not return transaction data')
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
atomicBEEF = signResult.tx
|
|
1262
|
+
} else {
|
|
1263
|
+
// Pass through user options for standard flow
|
|
1264
|
+
if (options != null) {
|
|
1265
|
+
actionArgs.options = options
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
const { tx } = await wallet.createAction(actionArgs, originator)
|
|
1269
|
+
|
|
1270
|
+
if (tx == null) {
|
|
1271
|
+
throw new Error('Wallet createAction did not return transaction data')
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
atomicBEEF = tx
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
// Create a new transaction from the atomic BEEF
|
|
1278
|
+
const newTransaction = Transaction.fromAtomicBEEF(atomicBEEF)
|
|
1279
|
+
|
|
1280
|
+
// Update this transaction's properties with the new transaction's properties
|
|
1281
|
+
this.version = newTransaction.version
|
|
1282
|
+
this.inputs = newTransaction.inputs
|
|
1283
|
+
this.outputs = newTransaction.outputs
|
|
1284
|
+
this.lockTime = newTransaction.lockTime
|
|
1285
|
+
this.merklePath = newTransaction.merklePath
|
|
1286
|
+
this.cachedHash = newTransaction.cachedHash
|
|
1287
|
+
|
|
1288
|
+
// Preserve metadata from the original transaction but update with any new metadata
|
|
1289
|
+
this.metadata = {
|
|
1290
|
+
...this.metadata,
|
|
1291
|
+
...newTransaction.metadata
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1055
1294
|
}
|
|
@@ -324,6 +324,81 @@ describe('Beef tests', () => {
|
|
|
324
324
|
}
|
|
325
325
|
})
|
|
326
326
|
|
|
327
|
+
test('6b_trimKnownTxids_removes_unreferenced_bumps', async () => {
|
|
328
|
+
// Create a beef with multiple transactions and bumps
|
|
329
|
+
const beef = Beef.fromString(beefs[0])
|
|
330
|
+
|
|
331
|
+
// Verify initial state
|
|
332
|
+
const initialBumpCount = beef.bumps.length
|
|
333
|
+
const initialTxCount = beef.txs.length
|
|
334
|
+
expect(initialBumpCount).toBe(1)
|
|
335
|
+
expect(initialTxCount).toBe(1)
|
|
336
|
+
|
|
337
|
+
// Add some txid-only transactions that don't have bumps
|
|
338
|
+
beef.mergeTxidOnly('txid1')
|
|
339
|
+
beef.mergeTxidOnly('txid2')
|
|
340
|
+
beef.mergeTxidOnly('txid3')
|
|
341
|
+
|
|
342
|
+
expect(beef.txs.length).toBe(4)
|
|
343
|
+
expect(beef.bumps.length).toBe(1)
|
|
344
|
+
|
|
345
|
+
// Get the txid of the transaction with a bump
|
|
346
|
+
const txWithBump = beef.txs.find(tx => tx.bumpIndex !== undefined)
|
|
347
|
+
expect(txWithBump).toBeTruthy()
|
|
348
|
+
|
|
349
|
+
// Trim all txid-only transactions
|
|
350
|
+
beef.trimKnownTxids(['txid1', 'txid2', 'txid3'])
|
|
351
|
+
|
|
352
|
+
// Verify txids were removed
|
|
353
|
+
expect(beef.txs.length).toBe(1)
|
|
354
|
+
expect(beef.bumps.length).toBe(1) // Bump should still be there because it's referenced
|
|
355
|
+
|
|
356
|
+
// Now test removing the transaction that has the bump
|
|
357
|
+
// First, make it txidOnly
|
|
358
|
+
const originalTxid = txWithBump!.txid
|
|
359
|
+
beef.makeTxidOnly(originalTxid)
|
|
360
|
+
|
|
361
|
+
// Now trim it
|
|
362
|
+
beef.trimKnownTxids([originalTxid])
|
|
363
|
+
|
|
364
|
+
// The bump should be removed since no transactions reference it anymore
|
|
365
|
+
expect(beef.txs.length).toBe(0)
|
|
366
|
+
expect(beef.bumps.length).toBe(0)
|
|
367
|
+
})
|
|
368
|
+
|
|
369
|
+
test('6c_trimKnownTxids_updates_bump_indices', async () => {
|
|
370
|
+
// Use existing beef with bumps
|
|
371
|
+
const beef = Beef.fromString(beefs[0])
|
|
372
|
+
|
|
373
|
+
const initialBumpCount = beef.bumps.length
|
|
374
|
+
const initialTxCount = beef.txs.length
|
|
375
|
+
|
|
376
|
+
// Find transaction with bump
|
|
377
|
+
const txWithBump = beef.txs.find(tx => tx.bumpIndex !== undefined)
|
|
378
|
+
expect(txWithBump).toBeTruthy()
|
|
379
|
+
const originalBumpIndex = txWithBump!.bumpIndex
|
|
380
|
+
|
|
381
|
+
// Add some txid-only transactions
|
|
382
|
+
beef.mergeTxidOnly('known1')
|
|
383
|
+
beef.mergeTxidOnly('known2')
|
|
384
|
+
|
|
385
|
+
expect(beef.txs.length).toBe(initialTxCount + 2)
|
|
386
|
+
expect(beef.bumps.length).toBe(initialBumpCount)
|
|
387
|
+
|
|
388
|
+
// Trim the known txids
|
|
389
|
+
beef.trimKnownTxids(['known1', 'known2'])
|
|
390
|
+
|
|
391
|
+
// Verify bump count didn't change (all bumps are still referenced)
|
|
392
|
+
expect(beef.bumps.length).toBe(initialBumpCount)
|
|
393
|
+
|
|
394
|
+
// Verify transaction count decreased
|
|
395
|
+
expect(beef.txs.length).toBe(initialTxCount)
|
|
396
|
+
|
|
397
|
+
// Verify bumpIndex is still correct
|
|
398
|
+
const txAfterTrim = beef.txs.find(tx => tx.txid === txWithBump!.txid)
|
|
399
|
+
expect(txAfterTrim?.bumpIndex).toBe(originalBumpIndex)
|
|
400
|
+
})
|
|
401
|
+
|
|
327
402
|
test('7_AtomicBeef', async () => {
|
|
328
403
|
{
|
|
329
404
|
const beef = Beef.fromString(beefs[0])
|
|
@@ -391,6 +466,8 @@ describe('Beef tests', () => {
|
|
|
391
466
|
const t2 = Transaction.fromAtomicBEEF(atomic)
|
|
392
467
|
const beef2 = t2.toAtomicBEEF()
|
|
393
468
|
expect(atomic).toEqual(beef2)
|
|
469
|
+
const atomic2 = beef.toUint8ArrayAtomic(tx.id('hex'))
|
|
470
|
+
expect(atomic).toEqual(Array.from(atomic2))
|
|
394
471
|
})
|
|
395
472
|
test('9_sortTxs', async () => {
|
|
396
473
|
{
|