@bsv/sdk 2.0.0-beta.0 → 2.0.1
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 +80 -5
- 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 +80 -5
- 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 +70 -5
- package/src/script/Spend.ts +128 -52
- package/src/script/__tests/Chronicle.test.ts +186 -0
- package/src/script/__tests/Script.test.ts +39 -6
- 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
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const chronicle = [
|
|
2
|
+
[
|
|
3
|
+
'51',
|
|
4
|
+
'b0b1b2b8b95187',
|
|
5
|
+
'test'
|
|
6
|
+
],
|
|
7
|
+
]
|
|
8
|
+
|
|
9
|
+
export const preChronicle = [
|
|
2
10
|
[
|
|
3
11
|
'Format is: [scriptSig, scriptPubKey, comment]'
|
|
4
12
|
],
|
|
@@ -397,16 +405,6 @@ export default [
|
|
|
397
405
|
'a591',
|
|
398
406
|
'test'
|
|
399
407
|
],
|
|
400
|
-
[
|
|
401
|
-
'04ffffff7f01e40164',
|
|
402
|
-
'a591',
|
|
403
|
-
'test'
|
|
404
|
-
],
|
|
405
|
-
[
|
|
406
|
-
'51',
|
|
407
|
-
'b0b1b2b3b4b5b6b7b8b95187',
|
|
408
|
-
'test'
|
|
409
|
-
],
|
|
410
408
|
[
|
|
411
409
|
'51',
|
|
412
410
|
'61',
|
|
@@ -1557,11 +1555,6 @@ export default [
|
|
|
1557
1555
|
'a591',
|
|
1558
1556
|
'test'
|
|
1559
1557
|
],
|
|
1560
|
-
[
|
|
1561
|
-
'51',
|
|
1562
|
-
'b0b1b2b3b4b5b6b7b8b95187',
|
|
1563
|
-
'test'
|
|
1564
|
-
],
|
|
1565
1558
|
[
|
|
1566
1559
|
'51',
|
|
1567
1560
|
'61',
|
|
@@ -6,9 +6,8 @@ import {
|
|
|
6
6
|
Signature,
|
|
7
7
|
PublicKey
|
|
8
8
|
} from '../../primitives/index.js'
|
|
9
|
-
import { WalletInterface } from '../../wallet/Wallet.interfaces.js'
|
|
9
|
+
import { WalletInterface, WalletProtocol } from '../../wallet/Wallet.interfaces.js'
|
|
10
10
|
import { Transaction } from '../../transaction/index.js'
|
|
11
|
-
import { WalletProtocol } from '../../wallet/Wallet.interfaces.js'
|
|
12
11
|
import { verifyNotNull } from '../../primitives/utils.js'
|
|
13
12
|
|
|
14
13
|
/**
|
|
@@ -58,25 +57,41 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
58
57
|
|
|
59
58
|
/**
|
|
60
59
|
* Decodes a PushDrop script back into its token fields and the locking public key. If a signature was present, it will be the last field returned.
|
|
61
|
-
* Warning: Only works with a P2PK lock at the beginning of the script.
|
|
62
60
|
* @param script PushDrop script to decode back into token fields
|
|
61
|
+
* @param lockPosition Where the locking public key is positioned in the script ('before' = at start, 'after' = at end after DROP operations)
|
|
63
62
|
* @returns An object containing PushDrop token fields and the locking public key. If a signature was included, it will be the last field.
|
|
64
63
|
*/
|
|
65
|
-
static decode(script: LockingScript): {
|
|
64
|
+
static decode (script: LockingScript, lockPosition: 'before' | 'after' = 'before'): {
|
|
66
65
|
lockingPublicKey: PublicKey
|
|
67
66
|
fields: number[][]
|
|
68
67
|
} {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
let lockingPublicKey: PublicKey
|
|
69
|
+
let startIndex: number
|
|
70
|
+
|
|
71
|
+
if (lockPosition === 'before') {
|
|
72
|
+
lockingPublicKey = PublicKey.fromString(
|
|
73
|
+
Utils.toHex(verifyNotNull(script.chunks[0].data, 'script.chunks[0].data must have value'))
|
|
74
|
+
)
|
|
75
|
+
startIndex = 2
|
|
76
|
+
} else {
|
|
77
|
+
// lockPosition === 'after'
|
|
78
|
+
// Find the public key at the end (after the last DROP/2DROP, before OP_CHECKSIG)
|
|
79
|
+
const lastChunkIndex = script.chunks.length - 1
|
|
80
|
+
if (script.chunks[lastChunkIndex].op !== OP.OP_CHECKSIG) {
|
|
81
|
+
throw new Error('Expected OP_CHECKSIG at the end of the script')
|
|
82
|
+
}
|
|
83
|
+
lockingPublicKey = PublicKey.fromString(
|
|
84
|
+
Utils.toHex(verifyNotNull(script.chunks[lastChunkIndex - 1].data, 'public key chunk data must have value'))
|
|
85
|
+
)
|
|
86
|
+
startIndex = 0
|
|
87
|
+
}
|
|
72
88
|
|
|
73
89
|
const fields: number[][] = []
|
|
74
|
-
for (let i =
|
|
75
|
-
const nextOpcode = script.chunks[i + 1]?.op
|
|
76
|
-
let chunk: number[] = script.chunks[i].data ?? []
|
|
90
|
+
for (let i = startIndex; i < script.chunks.length; i++) {
|
|
91
|
+
const nextOpcode = script.chunks[i + 1]?.op
|
|
92
|
+
let chunk: number[] = script.chunks[i].data ?? []
|
|
77
93
|
|
|
78
94
|
if (chunk.length === 0) {
|
|
79
|
-
// ✅ Only modify `chunk` if it was empty
|
|
80
95
|
if (script.chunks[i].op >= 80 && script.chunks[i].op <= 95) {
|
|
81
96
|
chunk = [script.chunks[i].op - 80]
|
|
82
97
|
} else if (script.chunks[i].op === 0) {
|
|
@@ -105,7 +120,7 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
105
120
|
* @param {WalletInterface} wallet - The wallet interface used for creating signatures and accessing public keys.
|
|
106
121
|
* @param {string} originator — The originator to use with Wallet requests
|
|
107
122
|
*/
|
|
108
|
-
constructor(wallet: WalletInterface, originator?: string) {
|
|
123
|
+
constructor (wallet: WalletInterface, originator?: string) {
|
|
109
124
|
this.wallet = wallet
|
|
110
125
|
this.originator = originator
|
|
111
126
|
}
|
|
@@ -121,7 +136,7 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
121
136
|
* @param {boolean} [includeSignature=true] - Flag indicating if a signature should be included in the script (default yes).
|
|
122
137
|
* @returns {Promise<LockingScript>} The generated PushDrop locking script.
|
|
123
138
|
*/
|
|
124
|
-
async lock(
|
|
139
|
+
async lock (
|
|
125
140
|
fields: number[][],
|
|
126
141
|
protocolID: WalletProtocol,
|
|
127
142
|
keyID: string,
|
|
@@ -184,7 +199,7 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
184
199
|
* @param {boolean} [anyoneCanPay=false] - Specifies if the anyone-can-pay flag is set.
|
|
185
200
|
* @returns {Object} An object containing functions to sign the transaction and estimate the script length.
|
|
186
201
|
*/
|
|
187
|
-
unlock(
|
|
202
|
+
unlock (
|
|
188
203
|
protocolID: WalletProtocol,
|
|
189
204
|
keyID: string,
|
|
190
205
|
counterparty: string,
|
|
@@ -193,9 +208,9 @@ export default class PushDrop implements ScriptTemplate {
|
|
|
193
208
|
sourceSatoshis?: number,
|
|
194
209
|
lockingScript?: LockingScript
|
|
195
210
|
): {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
211
|
+
sign: (tx: Transaction, inputIndex: number) => Promise<UnlockingScript>
|
|
212
|
+
estimateLength: () => Promise<73>
|
|
213
|
+
} {
|
|
199
214
|
return {
|
|
200
215
|
sign: async (
|
|
201
216
|
tx: Transaction,
|
|
@@ -259,5 +259,33 @@ describe('PushDrop', () => {
|
|
|
259
259
|
).publicKey
|
|
260
260
|
expect(decoded.lockingPublicKey.toString()).toEqual(expectedPublicKey)
|
|
261
261
|
})
|
|
262
|
+
|
|
263
|
+
it('decodes the locking script correctly with lockPosition after', async () => {
|
|
264
|
+
const fields = [
|
|
265
|
+
Utils.toArray('hello world', 'utf8'),
|
|
266
|
+
Utils.toArray('This is a field', 'utf8'),
|
|
267
|
+
[0xde, 0xad, 0xbe, 0xef]
|
|
268
|
+
]
|
|
269
|
+
const protocolID: [0 | 1 | 2, string] = [0, 'tests']
|
|
270
|
+
const keyID = 'test-key'
|
|
271
|
+
const counterparty = 'self'
|
|
272
|
+
|
|
273
|
+
const lockingScript = await pushDrop.lock(
|
|
274
|
+
fields,
|
|
275
|
+
protocolID,
|
|
276
|
+
keyID,
|
|
277
|
+
counterparty,
|
|
278
|
+
false,
|
|
279
|
+
true,
|
|
280
|
+
'after'
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
const decoded = await PushDrop.decode(lockingScript, 'after')
|
|
284
|
+
expect(decoded.fields).toEqual(fields)
|
|
285
|
+
const expectedPublicKey = (
|
|
286
|
+
await wallet.getPublicKey({ protocolID, keyID, counterparty })
|
|
287
|
+
).publicKey
|
|
288
|
+
expect(decoded.lockingPublicKey.toString()).toEqual(expectedPublicKey)
|
|
289
|
+
})
|
|
262
290
|
})
|
|
263
291
|
})
|
|
@@ -15,7 +15,7 @@ describe('StorageUploader Tests', () => {
|
|
|
15
15
|
let walletClient: WalletClient
|
|
16
16
|
|
|
17
17
|
// We'll have TWO spies:
|
|
18
|
-
let authFetchSpy: jest.
|
|
18
|
+
let authFetchSpy: jest.SpyInstance
|
|
19
19
|
let globalFetchSpy: jest.SpiedFunction<typeof global.fetch>
|
|
20
20
|
|
|
21
21
|
beforeEach(() => {
|
package/src/transaction/Beef.ts
CHANGED
|
@@ -2,12 +2,9 @@ import MerklePath from './MerklePath.js'
|
|
|
2
2
|
import Transaction from './Transaction.js'
|
|
3
3
|
import ChainTracker from './ChainTracker.js'
|
|
4
4
|
import BeefTx from './BeefTx.js'
|
|
5
|
-
import { Reader, Writer, toHex, toArray, verifyNotNull } from '../primitives/utils.js'
|
|
5
|
+
import { Reader, Writer, toHex, toArray, verifyNotNull, ReaderUint8Array, WriterUint8Array, toUint8Array } from '../primitives/utils.js'
|
|
6
6
|
import { hash256 } from '../primitives/Hash.js'
|
|
7
7
|
|
|
8
|
-
const BufferCtor =
|
|
9
|
-
typeof globalThis !== 'undefined' ? (globalThis as any).Buffer : undefined
|
|
10
|
-
|
|
11
8
|
export const BEEF_V1 = 4022206465 // 0100BEEF in LE order
|
|
12
9
|
export const BEEF_V2 = 4022206466 // 0200BEEF in LE order
|
|
13
10
|
export const ATOMIC_BEEF = 0x01010101 // 01010101
|
|
@@ -112,13 +109,37 @@ export class Beef {
|
|
|
112
109
|
this.ensureSerializableState()
|
|
113
110
|
if (this.rawBytesCache == null) {
|
|
114
111
|
this.ensureSortedForSerialization()
|
|
115
|
-
const writer = new
|
|
112
|
+
const writer = new WriterUint8Array()
|
|
116
113
|
this.toWriter(writer)
|
|
117
114
|
this.rawBytesCache = writer.toUint8Array()
|
|
118
115
|
}
|
|
119
116
|
return this.rawBytesCache
|
|
120
117
|
}
|
|
121
118
|
|
|
119
|
+
private getBeefForAtomic (txid: string): { beef: Beef, writer: WriterUint8Array } {
|
|
120
|
+
if (this.needsSort) {
|
|
121
|
+
this.sortTxs()
|
|
122
|
+
}
|
|
123
|
+
const tx = this.findTxid(txid)
|
|
124
|
+
if (tx == null) {
|
|
125
|
+
throw new Error(`${txid} does not exist in this Beef`)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// If the transaction is not the last one, clone and modify
|
|
129
|
+
const beef = (this.txs[this.txs.length - 1] === tx) ? this : this.clone()
|
|
130
|
+
|
|
131
|
+
if (beef !== this) {
|
|
132
|
+
const i = this.txs.findIndex((t) => t.txid === txid)
|
|
133
|
+
beef.txs.splice(i + 1)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const writer = new WriterUint8Array()
|
|
137
|
+
writer.writeUInt32LE(ATOMIC_BEEF)
|
|
138
|
+
writer.writeReverse(toArray(txid, 'hex'))
|
|
139
|
+
|
|
140
|
+
return { beef, writer }
|
|
141
|
+
}
|
|
142
|
+
|
|
122
143
|
/**
|
|
123
144
|
* @param txid of `beefTx` to find
|
|
124
145
|
* @returns `BeefTx` in `txs` with `txid`.
|
|
@@ -308,7 +329,7 @@ export class Beef {
|
|
|
308
329
|
* @param bumpIndex Optional. If a number, must be valid index into bumps array.
|
|
309
330
|
* @returns txid of rawTx
|
|
310
331
|
*/
|
|
311
|
-
mergeRawTx (rawTx: number[], bumpIndex?: number): BeefTx {
|
|
332
|
+
mergeRawTx (rawTx: number[] | Uint8Array, bumpIndex?: number): BeefTx {
|
|
312
333
|
this.markMutated(true)
|
|
313
334
|
const newTx: BeefTx = new BeefTx(rawTx, bumpIndex)
|
|
314
335
|
this.removeExistingTxid(newTx.txid)
|
|
@@ -394,8 +415,8 @@ export class Beef {
|
|
|
394
415
|
return beefTx
|
|
395
416
|
}
|
|
396
417
|
|
|
397
|
-
mergeBeef (beef: number[] |
|
|
398
|
-
const b: Beef =
|
|
418
|
+
mergeBeef (beef: Beef | number[] | Uint8Array): void {
|
|
419
|
+
const b: Beef = (beef instanceof Beef) ? beef : Beef.fromBinary(beef)
|
|
399
420
|
|
|
400
421
|
for (const bump of b.bumps) {
|
|
401
422
|
this.mergeBump(bump)
|
|
@@ -549,7 +570,7 @@ export class Beef {
|
|
|
549
570
|
* Serializes this data to `writer`
|
|
550
571
|
* @param writer
|
|
551
572
|
*/
|
|
552
|
-
toWriter (writer: Writer): void {
|
|
573
|
+
toWriter (writer: Writer | WriterUint8Array): void {
|
|
553
574
|
writer.writeUInt32LE(this.version)
|
|
554
575
|
|
|
555
576
|
writer.writeVarIntNum(this.bumps.length)
|
|
@@ -566,11 +587,16 @@ export class Beef {
|
|
|
566
587
|
/**
|
|
567
588
|
* Returns a binary array representing the serialized BEEF
|
|
568
589
|
* @returns A binary array representing the BEEF
|
|
590
|
+
* @returns An array of byte values containing binary serialization of the BEEF
|
|
569
591
|
*/
|
|
570
592
|
toBinary (): number[] {
|
|
571
593
|
return Array.from(this.getSerializedBytes())
|
|
572
594
|
}
|
|
573
595
|
|
|
596
|
+
/**
|
|
597
|
+
* Returns a binary array representing the serialized BEEF
|
|
598
|
+
* @returns A Uint8Array containing binary serialization of the BEEF
|
|
599
|
+
*/
|
|
574
600
|
toUint8Array (): Uint8Array {
|
|
575
601
|
return this.getSerializedBytes()
|
|
576
602
|
}
|
|
@@ -586,30 +612,31 @@ export class Beef {
|
|
|
586
612
|
* @returns serialized contents of this Beef with AtomicBEEF prefix.
|
|
587
613
|
*/
|
|
588
614
|
toBinaryAtomic (txid: string): number[] {
|
|
589
|
-
|
|
590
|
-
this.sortTxs()
|
|
591
|
-
}
|
|
592
|
-
const tx = this.findTxid(txid)
|
|
593
|
-
if (tx == null) {
|
|
594
|
-
throw new Error(`${txid} does not exist in this Beef`)
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
// If the transaction is not the last one, clone and modify
|
|
598
|
-
const beef = (this.txs[this.txs.length - 1] === tx) ? this : this.clone()
|
|
599
|
-
|
|
600
|
-
if (beef !== this) {
|
|
601
|
-
const i = this.txs.findIndex((t) => t.txid === txid)
|
|
602
|
-
beef.txs.splice(i + 1)
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
const writer = new Writer()
|
|
606
|
-
writer.writeUInt32LE(ATOMIC_BEEF)
|
|
607
|
-
writer.writeReverse(toArray(txid, 'hex'))
|
|
615
|
+
const { beef, writer } = this.getBeefForAtomic(txid)
|
|
608
616
|
beef.toWriter(writer)
|
|
609
|
-
|
|
610
617
|
return writer.toArray()
|
|
611
618
|
}
|
|
612
619
|
|
|
620
|
+
/**
|
|
621
|
+
* Serialize this Beef as AtomicBEEF.
|
|
622
|
+
*
|
|
623
|
+
* `txid` must exist
|
|
624
|
+
*
|
|
625
|
+
* after sorting, if txid is not last txid, creates a clone and removes newer txs
|
|
626
|
+
*
|
|
627
|
+
* @param txid
|
|
628
|
+
* @returns serialized contents of this Beef with AtomicBEEF prefix.
|
|
629
|
+
*/
|
|
630
|
+
toUint8ArrayAtomic (txid: string): Uint8Array {
|
|
631
|
+
const { beef, writer } = this.getBeefForAtomic(txid)
|
|
632
|
+
const beefUint8 = beef.getSerializedBytes()
|
|
633
|
+
const prefix = writer.toUint8Array()
|
|
634
|
+
const atomic = new Uint8Array(prefix.length + beefUint8.length)
|
|
635
|
+
atomic.set(prefix, 0)
|
|
636
|
+
atomic.set(beefUint8, prefix.length)
|
|
637
|
+
return atomic
|
|
638
|
+
}
|
|
639
|
+
|
|
613
640
|
/**
|
|
614
641
|
* Returns a hex string representing the serialized BEEF
|
|
615
642
|
* @returns A hex string representing the BEEF
|
|
@@ -619,15 +646,12 @@ export class Beef {
|
|
|
619
646
|
return this.hexCache
|
|
620
647
|
}
|
|
621
648
|
const bytes = this.getSerializedBytes()
|
|
622
|
-
const hex =
|
|
623
|
-
BufferCtor != null
|
|
624
|
-
? BufferCtor.from(bytes).toString('hex')
|
|
625
|
-
: toHex(Array.from(bytes))
|
|
649
|
+
const hex = toHex(bytes)
|
|
626
650
|
this.hexCache = hex
|
|
627
651
|
return hex
|
|
628
652
|
}
|
|
629
653
|
|
|
630
|
-
static fromReader (br: Reader): Beef {
|
|
654
|
+
static fromReader (br: Reader | ReaderUint8Array): Beef {
|
|
631
655
|
let version = br.readUInt32LE()
|
|
632
656
|
let atomicTxid: string | undefined
|
|
633
657
|
if (version === ATOMIC_BEEF) {
|
|
@@ -657,11 +681,11 @@ export class Beef {
|
|
|
657
681
|
|
|
658
682
|
/**
|
|
659
683
|
* Constructs an instance of the Beef class based on the provided binary array
|
|
660
|
-
* @param bin The binary array from which to construct BEEF
|
|
684
|
+
* @param bin The binary array or Uint8Array from which to construct BEEF
|
|
661
685
|
* @returns An instance of the Beef class constructed from the binary data
|
|
662
686
|
*/
|
|
663
|
-
static fromBinary (bin: number[]): Beef {
|
|
664
|
-
const br =
|
|
687
|
+
static fromBinary (bin: number[] | Uint8Array): Beef {
|
|
688
|
+
const br = ReaderUint8Array.makeReader(bin)
|
|
665
689
|
return Beef.fromReader(br)
|
|
666
690
|
}
|
|
667
691
|
|
|
@@ -672,8 +696,8 @@ export class Beef {
|
|
|
672
696
|
* @returns An instance of the Beef class constructed from the string
|
|
673
697
|
*/
|
|
674
698
|
static fromString (s: string, enc: 'hex' | 'utf8' | 'base64' = 'hex'): Beef {
|
|
675
|
-
const bin =
|
|
676
|
-
const br = new
|
|
699
|
+
const bin = toUint8Array(s, enc)
|
|
700
|
+
const br = new ReaderUint8Array(bin)
|
|
677
701
|
return Beef.fromReader(br)
|
|
678
702
|
}
|
|
679
703
|
|
|
@@ -825,6 +849,8 @@ export class Beef {
|
|
|
825
849
|
c.txs = Array.from(this.txs)
|
|
826
850
|
c.txidIndex = undefined
|
|
827
851
|
c.needsSort = this.needsSort
|
|
852
|
+
c.hexCache = this.hexCache
|
|
853
|
+
c.rawBytesCache = this.rawBytesCache
|
|
828
854
|
return c
|
|
829
855
|
}
|
|
830
856
|
|
|
@@ -844,7 +870,44 @@ export class Beef {
|
|
|
844
870
|
i++
|
|
845
871
|
}
|
|
846
872
|
}
|
|
847
|
-
|
|
873
|
+
|
|
874
|
+
// Trim unreferenced bumps after removing known txids
|
|
875
|
+
const referencedBumpIndices = new Set<number>()
|
|
876
|
+
for (const tx of this.txs) {
|
|
877
|
+
if (tx.bumpIndex !== undefined) {
|
|
878
|
+
referencedBumpIndices.add(tx.bumpIndex)
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
// Check if there are any unreferenced bumps to remove
|
|
883
|
+
if (referencedBumpIndices.size < this.bumps.length) {
|
|
884
|
+
// Build mapping of old indices to new indices after removal
|
|
885
|
+
const indexMap = new Map<number, number>()
|
|
886
|
+
let newIndex = 0
|
|
887
|
+
for (let i = 0; i < this.bumps.length; i++) {
|
|
888
|
+
if (referencedBumpIndices.has(i)) {
|
|
889
|
+
indexMap.set(i, newIndex)
|
|
890
|
+
newIndex++
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
// Remove unreferenced bumps
|
|
895
|
+
this.bumps = this.bumps.filter((_, i) => referencedBumpIndices.has(i))
|
|
896
|
+
|
|
897
|
+
// Update all transaction bumpIndex references
|
|
898
|
+
for (const tx of this.txs) {
|
|
899
|
+
if (tx.bumpIndex !== undefined) {
|
|
900
|
+
const newIndex = indexMap.get(tx.bumpIndex)
|
|
901
|
+
if (newIndex === undefined) {
|
|
902
|
+
throw new Error(`Internal error: bumpIndex ${tx.bumpIndex} not found in indexMap`)
|
|
903
|
+
}
|
|
904
|
+
tx.bumpIndex = newIndex
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
mutated = true
|
|
909
|
+
}
|
|
910
|
+
|
|
848
911
|
if (mutated) {
|
|
849
912
|
this.markMutated(true)
|
|
850
913
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { hash256 } from '../primitives/Hash.js'
|
|
2
|
-
import { Reader, Writer, toHex, toArray } from '../primitives/utils.js'
|
|
2
|
+
import { Reader, Writer, toHex, toArray, ReaderUint8Array, WriterUint8Array } from '../primitives/utils.js'
|
|
3
3
|
import Transaction from './Transaction.js'
|
|
4
4
|
import { BEEF_V2, TX_DATA_FORMAT } from './Beef.js'
|
|
5
5
|
|
|
@@ -15,7 +15,7 @@ import { BEEF_V2, TX_DATA_FORMAT } from './Beef.js'
|
|
|
15
15
|
export default class BeefTx {
|
|
16
16
|
_bumpIndex?: number
|
|
17
17
|
_tx?: Transaction
|
|
18
|
-
_rawTx?:
|
|
18
|
+
_rawTx?: Uint8Array
|
|
19
19
|
_txid?: string
|
|
20
20
|
inputTxids: string[] = []
|
|
21
21
|
/**
|
|
@@ -64,10 +64,28 @@ export default class BeefTx {
|
|
|
64
64
|
return undefined
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Raw transaction bytes, if available as number[]
|
|
69
|
+
*/
|
|
67
70
|
get rawTx (): number[] | undefined {
|
|
71
|
+
if (this._rawTx != null) {
|
|
72
|
+
return Array.from(this._rawTx)
|
|
73
|
+
}
|
|
74
|
+
if (this._tx != null) {
|
|
75
|
+
const bytes = this._tx.toUint8Array()
|
|
76
|
+
this._rawTx = bytes // cache
|
|
77
|
+
return Array.from(bytes)
|
|
78
|
+
}
|
|
79
|
+
return undefined
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Raw transaction bytes, if available as Uint8Array
|
|
84
|
+
*/
|
|
85
|
+
get rawTxUint8Array (): Uint8Array | undefined {
|
|
68
86
|
if (this._rawTx != null) return this._rawTx
|
|
69
87
|
if (this._tx != null) {
|
|
70
|
-
this._rawTx = this._tx.
|
|
88
|
+
this._rawTx = this._tx.toUint8Array()
|
|
71
89
|
return this._rawTx
|
|
72
90
|
}
|
|
73
91
|
return undefined
|
|
@@ -77,13 +95,17 @@ export default class BeefTx {
|
|
|
77
95
|
* @param tx If string, must be a valid txid. If `number[]` must be a valid serialized transaction.
|
|
78
96
|
* @param bumpIndex If transaction already has a proof in the beef to which it will be added.
|
|
79
97
|
*/
|
|
80
|
-
constructor (tx: Transaction | number[] | string, bumpIndex?: number) {
|
|
98
|
+
constructor (tx: Transaction | Uint8Array | number[] | string, bumpIndex?: number) {
|
|
81
99
|
if (typeof tx === 'string') {
|
|
82
100
|
this._txid = tx
|
|
83
|
-
} else if (
|
|
101
|
+
} else if (tx instanceof Uint8Array) {
|
|
84
102
|
this._rawTx = tx
|
|
85
|
-
} else {
|
|
103
|
+
} else if (Array.isArray(tx)) {
|
|
104
|
+
this._rawTx = new Uint8Array(tx)
|
|
105
|
+
} else if (tx instanceof Transaction) {
|
|
86
106
|
this._tx = tx
|
|
107
|
+
} else {
|
|
108
|
+
throw new Error('Invalid transaction data type')
|
|
87
109
|
}
|
|
88
110
|
this.bumpIndex = bumpIndex
|
|
89
111
|
this.updateInputTxids()
|
|
@@ -93,7 +115,7 @@ export default class BeefTx {
|
|
|
93
115
|
return new BeefTx(tx, bumpIndex)
|
|
94
116
|
}
|
|
95
117
|
|
|
96
|
-
static fromRawTx (rawTx: number[], bumpIndex?: number): BeefTx {
|
|
118
|
+
static fromRawTx (rawTx: Uint8Array | number[], bumpIndex?: number): BeefTx {
|
|
97
119
|
return new BeefTx(rawTx, bumpIndex)
|
|
98
120
|
}
|
|
99
121
|
|
|
@@ -106,18 +128,17 @@ export default class BeefTx {
|
|
|
106
128
|
// If we have a proof, or don't have a parsed transaction
|
|
107
129
|
this.inputTxids = []
|
|
108
130
|
} else {
|
|
109
|
-
const inputTxids:
|
|
131
|
+
const inputTxids: Set<string> = new Set() // minor perf improvement
|
|
110
132
|
for (const input of this.tx.inputs) {
|
|
111
133
|
if (input.sourceTXID !== undefined && input.sourceTXID !== null && input.sourceTXID !== '') {
|
|
112
|
-
|
|
113
|
-
inputTxids[input.sourceTXID] = true
|
|
134
|
+
inputTxids.add(input.sourceTXID)
|
|
114
135
|
}
|
|
115
136
|
}
|
|
116
|
-
this.inputTxids =
|
|
137
|
+
this.inputTxids = Array.from(inputTxids)
|
|
117
138
|
}
|
|
118
139
|
}
|
|
119
140
|
|
|
120
|
-
toWriter (writer: Writer, version: number): void {
|
|
141
|
+
toWriter (writer: Writer | WriterUint8Array, version: number): void {
|
|
121
142
|
const writeByte = (bb: number): void => {
|
|
122
143
|
writer.writeUInt8(bb)
|
|
123
144
|
}
|
|
@@ -130,13 +151,11 @@ export default class BeefTx {
|
|
|
130
151
|
}
|
|
131
152
|
|
|
132
153
|
const writeTx = (): void => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
} else if (this._tx != null) {
|
|
136
|
-
writer.write(this._tx.toUint8Array())
|
|
137
|
-
} else {
|
|
154
|
+
const bytes = this.rawTxUint8Array
|
|
155
|
+
if (bytes == null) {
|
|
138
156
|
throw new Error('a valid serialized Transaction is expected')
|
|
139
157
|
}
|
|
158
|
+
writer.write(bytes)
|
|
140
159
|
}
|
|
141
160
|
|
|
142
161
|
const writeBumpIndex = (): void => {
|
|
@@ -166,8 +185,8 @@ export default class BeefTx {
|
|
|
166
185
|
}
|
|
167
186
|
}
|
|
168
187
|
|
|
169
|
-
static fromReader (br: Reader, version: number): BeefTx {
|
|
170
|
-
let data: Transaction |
|
|
188
|
+
static fromReader (br: Reader | ReaderUint8Array, version: number): BeefTx {
|
|
189
|
+
let data: Transaction | undefined
|
|
171
190
|
let bumpIndex: number | undefined
|
|
172
191
|
let beefTx: BeefTx | undefined
|
|
173
192
|
if (version === BEEF_V2) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
import { Reader, Writer, toHex, toArray } from '../primitives/utils.js'
|
|
2
|
+
import { Reader, Writer, toHex, toArray, WriterUint8Array } from '../primitives/utils.js'
|
|
3
3
|
import { hash256 } from '../primitives/Hash.js'
|
|
4
4
|
import ChainTracker from './ChainTracker.js'
|
|
5
|
+
import { ReaderUint8Array } from '../primitives/ReaderUint8Array.js'
|
|
5
6
|
|
|
6
7
|
export interface MerklePathLeaf {
|
|
7
8
|
offset: number
|
|
@@ -54,7 +55,7 @@ export default class MerklePath {
|
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
static fromReader (
|
|
57
|
-
reader: Reader,
|
|
58
|
+
reader: Reader | ReaderUint8Array,
|
|
58
59
|
legalOffsetsOnly: boolean = true
|
|
59
60
|
): MerklePath {
|
|
60
61
|
const blockHeight = reader.readVarIntNum()
|
|
@@ -103,8 +104,8 @@ export default class MerklePath {
|
|
|
103
104
|
* @param {number[]} bump - The binary array representation of the Merkle Path.
|
|
104
105
|
* @returns {MerklePath} - A new MerklePath instance.
|
|
105
106
|
*/
|
|
106
|
-
static fromBinary (bump: number[]): MerklePath {
|
|
107
|
-
const reader = new
|
|
107
|
+
static fromBinary (bump: number[] | Uint8Array): MerklePath {
|
|
108
|
+
const reader = new ReaderUint8Array(bump)
|
|
108
109
|
return MerklePath.fromReader(reader)
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -181,12 +182,11 @@ export default class MerklePath {
|
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
/**
|
|
184
|
-
*
|
|
185
|
+
* Serializes the MerklePath to the writer provided.
|
|
185
186
|
*
|
|
186
|
-
* @
|
|
187
|
+
* @param writer - The writer to which the Merkle Path will be serialized.
|
|
187
188
|
*/
|
|
188
|
-
|
|
189
|
-
const writer = new Writer()
|
|
189
|
+
toWriter (writer: Writer | WriterUint8Array): void {
|
|
190
190
|
writer.writeVarIntNum(this.blockHeight)
|
|
191
191
|
const treeHeight = this.path.length
|
|
192
192
|
writer.writeUInt8(treeHeight)
|
|
@@ -208,16 +208,37 @@ export default class MerklePath {
|
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Converts the MerklePath to a binary array format.
|
|
215
|
+
*
|
|
216
|
+
* @returns {number[]} - The binary array representation of the Merkle Path.
|
|
217
|
+
*/
|
|
218
|
+
toBinary (): number[] {
|
|
219
|
+
const writer = new Writer()
|
|
220
|
+
this.toWriter(writer)
|
|
211
221
|
return writer.toArray()
|
|
212
222
|
}
|
|
213
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Converts the MerklePath to a binary array format.
|
|
226
|
+
*
|
|
227
|
+
* @returns {Uint8Array} - The binary array representation of the Merkle Path.
|
|
228
|
+
*/
|
|
229
|
+
toBinaryUint8Array (): Uint8Array {
|
|
230
|
+
const writer = new WriterUint8Array()
|
|
231
|
+
this.toWriter(writer)
|
|
232
|
+
return writer.toUint8Array()
|
|
233
|
+
}
|
|
234
|
+
|
|
214
235
|
/**
|
|
215
236
|
* Converts the MerklePath to a hexadecimal string format.
|
|
216
237
|
*
|
|
217
238
|
* @returns {string} - The hexadecimal string representation of the Merkle Path.
|
|
218
239
|
*/
|
|
219
240
|
toHex (): string {
|
|
220
|
-
return toHex(this.
|
|
241
|
+
return toHex(this.toBinaryUint8Array())
|
|
221
242
|
}
|
|
222
243
|
|
|
223
244
|
//
|