@bsv/sdk 1.3.12 → 1.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/package.json +15 -3
- package/dist/cjs/src/auth/Peer.js +83 -57
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js +14 -9
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
- package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/auth/utils/createNonce.js +2 -1
- package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
- package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
- package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/cjs/src/compat/BSM.js +7 -17
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +172 -133
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +63 -73
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +102 -106
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/Utxo.js +2 -2
- package/dist/cjs/src/compat/Utxo.js.map +1 -1
- package/dist/cjs/src/compat/index.js +7 -17
- package/dist/cjs/src/compat/index.js.map +1 -1
- package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js +1 -0
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/messages/index.js +7 -17
- package/dist/cjs/src/messages/index.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +6 -5
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BasePoint.js +1 -1
- package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +50 -62
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js +46 -22
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/DRBG.js +2 -8
- package/dist/cjs/src/primitives/DRBG.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +51 -35
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +191 -216
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +117 -88
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/Polynomial.js +4 -2
- package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +32 -33
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +6 -5
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js +21 -15
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +8 -7
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/index.js +7 -17
- package/dist/cjs/src/primitives/index.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +79 -68
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/script/OP.js +3 -3
- package/dist/cjs/src/script/OP.js.map +1 -1
- package/dist/cjs/src/script/Script.js +12 -10
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +47 -49
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js +24 -12
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +28 -23
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +2 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +177 -154
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js +24 -24
- package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +26 -18
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/Broadcaster.js +3 -2
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +64 -37
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +111 -137
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
- package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/index.js.map +1 -1
- package/dist/cjs/src/transaction/index.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
- package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
- package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js +7 -2
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js +2 -2
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +15 -15
- package/dist/esm/src/auth/Peer.js +75 -54
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js +14 -9
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/Certificate.js +15 -11
- package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
- package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/esm/src/compat/BSM.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +165 -116
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +56 -56
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +95 -89
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/compat/Utxo.js +1 -1
- package/dist/esm/src/compat/Utxo.js.map +1 -1
- package/dist/esm/src/messages/EncryptedMessage.js +3 -1
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js +1 -0
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +1 -0
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BasePoint.js +1 -1
- package/dist/esm/src/primitives/BasePoint.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +50 -62
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js +45 -22
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/DRBG.js +2 -8
- package/dist/esm/src/primitives/DRBG.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +50 -35
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +188 -213
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js +18 -5
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Mersenne.js.map +1 -1
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +107 -88
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/Polynomial.js +4 -2
- package/dist/esm/src/primitives/Polynomial.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +25 -16
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +7 -6
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReductionContext.js +1 -1
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js +21 -15
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +8 -7
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js +13 -13
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +22 -12
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +76 -66
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/script/OP.js +3 -3
- package/dist/esm/src/script/OP.js.map +1 -1
- package/dist/esm/src/script/Script.js +12 -10
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/Spend.js +39 -32
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/P2PKH.js +26 -11
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +29 -22
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js +11 -6
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/totp/totp.js +2 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +176 -154
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js +24 -24
- package/dist/esm/src/transaction/BeefParty.js.map +1 -1
- package/dist/esm/src/transaction/BeefTx.js +26 -18
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +61 -36
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +105 -138
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
- package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/index.js.map +1 -1
- package/dist/esm/src/transaction/index.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/KeyDeriver.js +60 -52
- package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/ProtoWallet.js +75 -29
- package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js +7 -2
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js +2 -2
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js +8 -3
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +15 -15
- package/dist/types/src/auth/Peer.d.ts +10 -10
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts +4 -4
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
- package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
- package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
- package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
- package/dist/types/src/compat/BSM.d.ts +1 -1
- package/dist/types/src/compat/BSM.d.ts.map +1 -1
- package/dist/types/src/compat/ECIES.d.ts +36 -36
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts +51 -51
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/compat/Mnemonic.d.ts +79 -79
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
- package/dist/types/src/compat/Utxo.d.ts.map +1 -1
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
- package/dist/types/src/primitives/BasePoint.d.ts +8 -8
- package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Curve.d.ts +14 -7
- package/dist/types/src/primitives/Curve.d.ts.map +1 -1
- package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +11 -11
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts +14 -10
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
- package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/Schnorr.d.ts +14 -14
- package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
- package/dist/types/src/primitives/Signature.d.ts +1 -1
- package/dist/types/src/primitives/Signature.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +3 -6
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts +3 -3
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
- package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
- package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
- package/dist/types/src/totp/totp.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +96 -96
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefParty.d.ts +22 -22
- package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +5 -5
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
- package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +4 -12
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
- package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/index.d.ts.map +1 -1
- package/dist/types/src/transaction/index.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
- package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +5 -5
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
- package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/auth.md +92 -82
- package/docs/compat.md +24 -24
- package/docs/messages.md +7 -5
- package/docs/overlay-tools.md +21 -21
- package/docs/primitives.md +336 -315
- package/docs/script.md +35 -35
- package/docs/swagger/dist/swagger-initializer.js +7 -7
- package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
- package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
- package/docs/swagger/dist/swagger-ui.js +2 -2
- package/docs/totp.md +5 -5
- package/docs/transaction.md +103 -105
- package/docs/wallet-substrates.md +17 -17
- package/docs/wallet.md +202 -204
- package/mod.ts +15 -15
- package/package.json +15 -3
- package/src/auth/Peer.ts +271 -121
- package/src/auth/SessionManager.ts +17 -10
- package/src/auth/__tests/Peer.test.ts +361 -179
- package/src/auth/__tests/SessionManager.test.ts +67 -19
- package/src/auth/__tests/build.test.ts +11 -0
- package/src/auth/certificates/Certificate.ts +27 -14
- package/src/auth/certificates/MasterCertificate.ts +106 -62
- package/src/auth/certificates/VerifiableCertificate.ts +30 -8
- package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
- package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
- package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
- package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
- package/src/auth/certificates/index.ts +1 -1
- package/src/auth/clients/AuthFetch.ts +1 -0
- package/src/auth/clients/index.ts +1 -1
- package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
- package/src/auth/transports/index.ts +1 -1
- package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
- package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
- package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
- package/src/auth/utils/createNonce.ts +11 -3
- package/src/auth/utils/getVerifiableCertificates.ts +12 -7
- package/src/auth/utils/validateCertificates.ts +57 -39
- package/src/auth/utils/verifyNonce.ts +6 -2
- package/src/compat/BSM.ts +10 -2
- package/src/compat/ECIES.ts +265 -141
- package/src/compat/HD.ts +81 -63
- package/src/compat/Mnemonic.ts +104 -91
- package/src/compat/Utxo.ts +8 -5
- package/src/compat/__tests/BSM.test.ts +42 -16
- package/src/compat/__tests/ECIES.test.ts +117 -52
- package/src/compat/__tests/HD.test.ts +55 -42
- package/src/compat/__tests/Mnemonic.test.ts +11 -12
- package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
- package/src/messages/EncryptedMessage.ts +6 -2
- package/src/messages/SignedMessage.ts +14 -8
- package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
- package/src/messages/__tests/SignedMessage.test.ts +17 -11
- package/src/overlay-tools/LookupResolver.ts +108 -56
- package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
- package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
- package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
- package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
- package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
- package/src/primitives/AESGCM.ts +2 -0
- package/src/primitives/BasePoint.ts +4 -4
- package/src/primitives/BigNumber.ts +99 -90
- package/src/primitives/Curve.ts +117 -46
- package/src/primitives/DRBG.ts +9 -11
- package/src/primitives/ECDSA.ts +109 -63
- package/src/primitives/Hash.ts +492 -321
- package/src/primitives/JacobianPoint.ts +67 -19
- package/src/primitives/Point.ts +254 -152
- package/src/primitives/Polynomial.ts +8 -3
- package/src/primitives/PrivateKey.ts +41 -17
- package/src/primitives/PublicKey.ts +13 -3
- package/src/primitives/Random.ts +14 -8
- package/src/primitives/ReductionContext.ts +1 -1
- package/src/primitives/Schnorr.ts +40 -18
- package/src/primitives/Signature.ts +26 -16
- package/src/primitives/SymmetricKey.ts +14 -14
- package/src/primitives/TransactionSignature.ts +41 -17
- package/src/primitives/__tests/AESGCM.test.ts +457 -151
- package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
- package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
- package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
- package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
- package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
- package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
- package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
- package/src/primitives/__tests/Curve.unit.test.ts +75 -53
- package/src/primitives/__tests/DRBG.test.ts +1 -1
- package/src/primitives/__tests/DRBG.vectors.ts +45 -75
- package/src/primitives/__tests/ECDH.test.ts +15 -8
- package/src/primitives/__tests/ECDSA.test.ts +12 -6
- package/src/primitives/__tests/HMAC.test.ts +24 -18
- package/src/primitives/__tests/Hash.test.ts +57 -46
- package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
- package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
- package/src/primitives/__tests/PrivateKey.test.ts +11 -10
- package/src/primitives/__tests/PublicKey.test.ts +64 -53
- package/src/primitives/__tests/Random.test.ts +1 -1
- package/src/primitives/__tests/Reader.test.ts +240 -219
- package/src/primitives/__tests/ReductionContext.test.ts +98 -61
- package/src/primitives/__tests/Schnorr.test.ts +249 -237
- package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
- package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
- package/src/primitives/__tests/Writer.test.ts +23 -13
- package/src/primitives/__tests/bug-31.test.ts +6 -10
- package/src/primitives/__tests/utils.test.ts +70 -19
- package/src/primitives/utils.ts +103 -79
- package/src/script/Script.ts +18 -12
- package/src/script/ScriptTemplate.ts +3 -5
- package/src/script/Spend.ts +306 -108
- package/src/script/__tests/Script.test.ts +73 -55
- package/src/script/__tests/Spend.test.ts +208 -83
- package/src/script/__tests/SpendComplex.test.ts +19 -13
- package/src/script/__tests/script.invalid.vectors.ts +428 -1796
- package/src/script/__tests/script.valid.vectors.ts +728 -2764
- package/src/script/templates/P2PKH.ts +34 -12
- package/src/script/templates/PushDrop.ts +65 -31
- package/src/script/templates/RPuzzle.ts +29 -8
- package/src/script/templates/__tests/PushDrop.test.ts +146 -41
- package/src/totp/__tests/totp.test.ts +45 -44
- package/src/totp/totp.ts +3 -2
- package/src/transaction/Beef.ts +269 -174
- package/src/transaction/BeefParty.ts +41 -31
- package/src/transaction/BeefTx.ts +36 -26
- package/src/transaction/Broadcaster.ts +10 -6
- package/src/transaction/ChainTracker.ts +2 -2
- package/src/transaction/FeeModel.ts +0 -1
- package/src/transaction/MerklePath.ts +124 -59
- package/src/transaction/Transaction.ts +188 -187
- package/src/transaction/TransactionOutput.ts +0 -1
- package/src/transaction/__tests/Beef.test.ts +390 -287
- package/src/transaction/__tests/MerklePath.test.ts +59 -26
- package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
- package/src/transaction/__tests/Transaction.test.ts +758 -482
- package/src/transaction/__tests/bigtx.vectors.ts +2 -1
- package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
- package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
- package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
- package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
- package/src/transaction/broadcasters/ARC.ts +69 -38
- package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
- package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
- package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
- package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
- package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
- package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
- package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
- package/src/transaction/http/DefaultHttpClient.ts +5 -4
- package/src/transaction/http/FetchHttpClient.ts +18 -9
- package/src/transaction/http/HttpClient.ts +27 -22
- package/src/transaction/http/NodejsHttpClient.ts +23 -9
- package/src/transaction/http/index.ts +5 -1
- package/src/transaction/index.ts +5 -1
- package/src/wallet/CachedKeyDeriver.ts +151 -82
- package/src/wallet/KeyDeriver.ts +186 -105
- package/src/wallet/ProtoWallet.ts +121 -52
- package/src/wallet/Wallet.interfaces.ts +167 -156
- package/src/wallet/WalletClient.ts +314 -59
- package/src/wallet/WalletError.ts +2 -2
- package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
- package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
- package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
- package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
- package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
- package/src/wallet/substrates/WalletWireCalls.ts +2 -2
- package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
- package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
- package/src/wallet/substrates/XDM.ts +425 -36
- package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
- package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
- package/src/wallet/substrates/window.CWI.ts +520 -61
|
@@ -2,6 +2,11 @@ import MerklePath from './MerklePath.js';
|
|
|
2
2
|
import BeefTx from './BeefTx.js';
|
|
3
3
|
import { Reader, Writer, toHex, toArray } from '../primitives/utils.js';
|
|
4
4
|
import { hash256 } from '../primitives/Hash.js';
|
|
5
|
+
function verifyTruthy(v) {
|
|
6
|
+
if (v == null)
|
|
7
|
+
throw new Error('Expected a valid value, but got undefined.');
|
|
8
|
+
return v;
|
|
9
|
+
}
|
|
5
10
|
export const BEEF_V1 = 4022206465; // 0100BEEF in LE order
|
|
6
11
|
export const BEEF_V2 = 4022206466; // 0200BEEF in LE order
|
|
7
12
|
export const ATOMIC_BEEF = 0x01010101; // 01010101
|
|
@@ -73,11 +78,11 @@ export class Beef {
|
|
|
73
78
|
this.version = version;
|
|
74
79
|
}
|
|
75
80
|
/**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
81
|
+
* @param txid of `beefTx` to find
|
|
82
|
+
* @returns `BeefTx` in `txs` with `txid`.
|
|
83
|
+
*/
|
|
79
84
|
findTxid(txid) {
|
|
80
|
-
return this.txs.find(tx => tx.txid === txid);
|
|
85
|
+
return this.txs.find((tx) => tx.txid === txid);
|
|
81
86
|
}
|
|
82
87
|
/**
|
|
83
88
|
* Replaces `BeefTx` for this txid with txidOnly.
|
|
@@ -90,7 +95,7 @@ export class Beef {
|
|
|
90
95
|
* @returns undefined if txid is unknown.
|
|
91
96
|
*/
|
|
92
97
|
makeTxidOnly(txid) {
|
|
93
|
-
const i = this.txs.findIndex(tx => tx.txid === txid);
|
|
98
|
+
const i = this.txs.findIndex((tx) => tx.txid === txid);
|
|
94
99
|
if (i === -1)
|
|
95
100
|
return undefined;
|
|
96
101
|
let btx = this.txs[i];
|
|
@@ -105,7 +110,8 @@ export class Beef {
|
|
|
105
110
|
* @returns `MerklePath` with level zero hash equal to txid or undefined.
|
|
106
111
|
*/
|
|
107
112
|
findBump(txid) {
|
|
108
|
-
return this.bumps.find(b => b.path[0].
|
|
113
|
+
return this.bumps.find((b) => b.path[0].some((leaf) => leaf.hash === txid) // ✅ Ensure boolean return with `.some()`
|
|
114
|
+
);
|
|
109
115
|
}
|
|
110
116
|
/**
|
|
111
117
|
* Finds a Transaction in this `Beef`
|
|
@@ -118,12 +124,12 @@ export class Beef {
|
|
|
118
124
|
*/
|
|
119
125
|
findTransactionForSigning(txid) {
|
|
120
126
|
const beefTx = this.findTxid(txid);
|
|
121
|
-
if (
|
|
122
|
-
return undefined;
|
|
127
|
+
if ((beefTx == null) || (beefTx.tx == null))
|
|
128
|
+
return undefined; // Ensure beefTx.tx exists before using it
|
|
123
129
|
for (const i of beefTx.tx.inputs) {
|
|
124
|
-
if (
|
|
125
|
-
const itx = this.findTxid(i.sourceTXID);
|
|
126
|
-
if (itx) {
|
|
130
|
+
if (i.sourceTransaction == null) {
|
|
131
|
+
const itx = this.findTxid(verifyTruthy(i.sourceTXID)); // Ensure sourceTXID is valid
|
|
132
|
+
if (itx != null) {
|
|
127
133
|
i.sourceTransaction = itx.tx;
|
|
128
134
|
}
|
|
129
135
|
}
|
|
@@ -140,24 +146,24 @@ export class Beef {
|
|
|
140
146
|
*/
|
|
141
147
|
findAtomicTransaction(txid) {
|
|
142
148
|
const beefTx = this.findTxid(txid);
|
|
143
|
-
if (
|
|
144
|
-
return undefined;
|
|
149
|
+
if ((beefTx == null) || (beefTx.tx == null))
|
|
150
|
+
return undefined; // Ensure beefTx.tx exists before using it
|
|
145
151
|
const addInputProof = (beef, tx) => {
|
|
146
152
|
const mp = beef.findBump(tx.id('hex'));
|
|
147
|
-
if (mp) {
|
|
153
|
+
if (mp != null) {
|
|
148
154
|
tx.merklePath = mp;
|
|
149
155
|
}
|
|
150
156
|
else {
|
|
151
157
|
for (const i of tx.inputs) {
|
|
152
|
-
if (
|
|
153
|
-
const itx = beef.findTxid(i.sourceTXID);
|
|
154
|
-
if (itx) {
|
|
158
|
+
if (i.sourceTransaction == null) {
|
|
159
|
+
const itx = beef.findTxid(verifyTruthy(i.sourceTXID)); // Ensure sourceTXID is valid
|
|
160
|
+
if (itx != null) {
|
|
155
161
|
i.sourceTransaction = itx.tx;
|
|
156
162
|
}
|
|
157
163
|
}
|
|
158
|
-
if (i.sourceTransaction) {
|
|
164
|
+
if (i.sourceTransaction != null) {
|
|
159
165
|
const mp = beef.findBump(i.sourceTransaction.id('hex'));
|
|
160
|
-
if (mp) {
|
|
166
|
+
if (mp != null) {
|
|
161
167
|
i.sourceTransaction.merklePath = mp;
|
|
162
168
|
}
|
|
163
169
|
else {
|
|
@@ -167,20 +173,21 @@ export class Beef {
|
|
|
167
173
|
}
|
|
168
174
|
}
|
|
169
175
|
};
|
|
170
|
-
addInputProof(this, beefTx.tx);
|
|
176
|
+
addInputProof(this, beefTx.tx); // Safe because we checked that beefTx.tx exists
|
|
171
177
|
return beefTx.tx;
|
|
172
178
|
}
|
|
173
179
|
/**
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
180
|
+
* Merge a MerklePath that is assumed to be fully valid.
|
|
181
|
+
* @param bump
|
|
182
|
+
* @returns index of merged bump
|
|
183
|
+
*/
|
|
178
184
|
mergeBump(bump) {
|
|
179
185
|
let bumpIndex;
|
|
180
186
|
// If this proof is identical to another one previously added, we use that first. Otherwise, we try to merge it with proofs from the same block.
|
|
181
187
|
for (let i = 0; i < this.bumps.length; i++) {
|
|
182
188
|
const b = this.bumps[i];
|
|
183
|
-
if (b === bump) {
|
|
189
|
+
if (b === bump) {
|
|
190
|
+
// Literally the same
|
|
184
191
|
return i;
|
|
185
192
|
}
|
|
186
193
|
if (b.blockHeight === bump.blockHeight) {
|
|
@@ -200,11 +207,11 @@ export class Beef {
|
|
|
200
207
|
bumpIndex = this.bumps.length;
|
|
201
208
|
this.bumps.push(bump);
|
|
202
209
|
}
|
|
203
|
-
//
|
|
210
|
+
// Review if any transactions are proven by this bump
|
|
204
211
|
const b = this.bumps[bumpIndex];
|
|
205
212
|
for (const tx of this.txs) {
|
|
206
213
|
const txid = tx.txid;
|
|
207
|
-
if (
|
|
214
|
+
if (tx.bumpIndex == null) { // ✅ Explicitly check for null or undefined
|
|
208
215
|
for (const n of b.path[0]) {
|
|
209
216
|
if (n.hash === txid) {
|
|
210
217
|
tx.bumpIndex = bumpIndex;
|
|
@@ -217,16 +224,16 @@ export class Beef {
|
|
|
217
224
|
return bumpIndex;
|
|
218
225
|
}
|
|
219
226
|
/**
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
* Merge a serialized transaction.
|
|
228
|
+
*
|
|
229
|
+
* Checks that a transaction with the same txid hasn't already been merged.
|
|
230
|
+
*
|
|
231
|
+
* Replaces existing transaction with same txid.
|
|
232
|
+
*
|
|
233
|
+
* @param rawTx
|
|
234
|
+
* @param bumpIndex Optional. If a number, must be valid index into bumps array.
|
|
235
|
+
* @returns txid of rawTx
|
|
236
|
+
*/
|
|
230
237
|
mergeRawTx(rawTx, bumpIndex) {
|
|
231
238
|
const newTx = new BeefTx(rawTx, bumpIndex);
|
|
232
239
|
this.removeExistingTxid(newTx.txid);
|
|
@@ -235,20 +242,20 @@ export class Beef {
|
|
|
235
242
|
return newTx;
|
|
236
243
|
}
|
|
237
244
|
/**
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
245
|
+
* Merge a `Transaction` and any referenced `merklePath` and `sourceTransaction`, recursifely.
|
|
246
|
+
*
|
|
247
|
+
* Replaces existing transaction with same txid.
|
|
248
|
+
*
|
|
249
|
+
* Attempts to match an existing bump to the new transaction.
|
|
250
|
+
*
|
|
251
|
+
* @param tx
|
|
252
|
+
* @returns txid of tx
|
|
253
|
+
*/
|
|
247
254
|
mergeTransaction(tx) {
|
|
248
255
|
const txid = tx.id('hex');
|
|
249
256
|
this.removeExistingTxid(txid);
|
|
250
257
|
let bumpIndex;
|
|
251
|
-
if (tx.merklePath) {
|
|
258
|
+
if (tx.merklePath != null) {
|
|
252
259
|
bumpIndex = this.mergeBump(tx.merklePath);
|
|
253
260
|
}
|
|
254
261
|
const newTx = new BeefTx(tx, bumpIndex);
|
|
@@ -257,7 +264,7 @@ export class Beef {
|
|
|
257
264
|
bumpIndex = newTx.bumpIndex;
|
|
258
265
|
if (bumpIndex === undefined) {
|
|
259
266
|
for (const input of tx.inputs) {
|
|
260
|
-
if (input.sourceTransaction) {
|
|
267
|
+
if (input.sourceTransaction != null) {
|
|
261
268
|
this.mergeTransaction(input.sourceTransaction);
|
|
262
269
|
}
|
|
263
270
|
}
|
|
@@ -265,18 +272,18 @@ export class Beef {
|
|
|
265
272
|
return newTx;
|
|
266
273
|
}
|
|
267
274
|
/**
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
275
|
+
* Removes an existing transaction from the BEEF, given its TXID
|
|
276
|
+
* @param txid TXID of the transaction to remove
|
|
277
|
+
*/
|
|
271
278
|
removeExistingTxid(txid) {
|
|
272
|
-
const existingTxIndex = this.txs.findIndex(t => t.txid === txid);
|
|
279
|
+
const existingTxIndex = this.txs.findIndex((t) => t.txid === txid);
|
|
273
280
|
if (existingTxIndex >= 0) {
|
|
274
281
|
this.txs.splice(existingTxIndex, 1);
|
|
275
282
|
}
|
|
276
283
|
}
|
|
277
284
|
mergeTxidOnly(txid) {
|
|
278
|
-
let tx = this.txs.find(t => t.txid === txid);
|
|
279
|
-
if (
|
|
285
|
+
let tx = this.txs.find((t) => t.txid === txid);
|
|
286
|
+
if (tx == null) {
|
|
280
287
|
tx = new BeefTx(txid);
|
|
281
288
|
this.txs.push(tx);
|
|
282
289
|
this.tryToValidateBumpIndex(tx);
|
|
@@ -285,15 +292,18 @@ export class Beef {
|
|
|
285
292
|
}
|
|
286
293
|
mergeBeefTx(btx) {
|
|
287
294
|
let beefTx = this.findTxid(btx.txid);
|
|
288
|
-
if (btx.isTxidOnly &&
|
|
295
|
+
if (btx.isTxidOnly && (beefTx == null)) {
|
|
289
296
|
beefTx = this.mergeTxidOnly(btx.txid);
|
|
290
297
|
}
|
|
291
|
-
else if (btx._tx && (
|
|
298
|
+
else if ((btx._tx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
|
|
292
299
|
beefTx = this.mergeTransaction(btx._tx);
|
|
293
300
|
}
|
|
294
|
-
else if (btx._rawTx && (
|
|
301
|
+
else if ((btx._rawTx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
|
|
295
302
|
beefTx = this.mergeRawTx(btx._rawTx);
|
|
296
303
|
}
|
|
304
|
+
if (beefTx == null) {
|
|
305
|
+
throw new Error(`Failed to merge BeefTx for txid: ${btx.txid}`);
|
|
306
|
+
}
|
|
297
307
|
return beefTx;
|
|
298
308
|
}
|
|
299
309
|
mergeBeef(beef) {
|
|
@@ -306,35 +316,35 @@ export class Beef {
|
|
|
306
316
|
}
|
|
307
317
|
}
|
|
308
318
|
/**
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
319
|
+
* Sorts `txs` and checks structural validity of beef.
|
|
320
|
+
*
|
|
321
|
+
* Does NOT verify merkle roots.
|
|
322
|
+
*
|
|
323
|
+
* Validity requirements:
|
|
324
|
+
* 1. No 'known' txids, unless `allowTxidOnly` is true.
|
|
325
|
+
* 2. All transactions have bumps or their inputs chain back to bumps (or are known).
|
|
326
|
+
* 3. Order of transactions satisfies dependencies before dependents.
|
|
327
|
+
* 4. No transactions with duplicate txids.
|
|
328
|
+
*
|
|
329
|
+
* @param allowTxidOnly optional. If true, transaction txid only is assumed valid
|
|
330
|
+
*/
|
|
321
331
|
isValid(allowTxidOnly) {
|
|
322
332
|
return this.verifyValid(allowTxidOnly).valid;
|
|
323
333
|
}
|
|
324
334
|
/**
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
335
|
+
* Sorts `txs` and confirms validity of transaction data contained in beef
|
|
336
|
+
* by validating structure of this beef and confirming computed merkle roots
|
|
337
|
+
* using `chainTracker`.
|
|
338
|
+
*
|
|
339
|
+
* Validity requirements:
|
|
340
|
+
* 1. No 'known' txids, unless `allowTxidOnly` is true.
|
|
341
|
+
* 2. All transactions have bumps or their inputs chain back to bumps (or are known).
|
|
342
|
+
* 3. Order of transactions satisfies dependencies before dependents.
|
|
343
|
+
* 4. No transactions with duplicate txids.
|
|
344
|
+
*
|
|
345
|
+
* @param chainTracker Used to verify computed merkle path roots for all bump txids.
|
|
346
|
+
* @param allowTxidOnly optional. If true, transaction txid is assumed valid
|
|
347
|
+
*/
|
|
338
348
|
async verify(chainTracker, allowTxidOnly) {
|
|
339
349
|
const r = this.verifyValid(allowTxidOnly);
|
|
340
350
|
if (!r.valid)
|
|
@@ -348,20 +358,23 @@ export class Beef {
|
|
|
348
358
|
return true;
|
|
349
359
|
}
|
|
350
360
|
verifyValid(allowTxidOnly) {
|
|
351
|
-
const r = {
|
|
361
|
+
const r = {
|
|
362
|
+
valid: false,
|
|
363
|
+
roots: {}
|
|
364
|
+
};
|
|
352
365
|
this.sortTxs();
|
|
353
366
|
// valid txids: only txids if allowed, bump txids, then txids with input's in txids
|
|
354
367
|
const txids = {};
|
|
355
368
|
for (const tx of this.txs) {
|
|
356
369
|
if (tx.isTxidOnly) {
|
|
357
|
-
if (
|
|
358
|
-
return r;
|
|
370
|
+
if (allowTxidOnly !== true)
|
|
371
|
+
return r; // ✅ Explicit check for `true`
|
|
359
372
|
txids[tx.txid] = true;
|
|
360
373
|
}
|
|
361
374
|
}
|
|
362
375
|
const confirmComputedRoot = (b, txid) => {
|
|
363
376
|
const root = b.computeRoot(txid);
|
|
364
|
-
if (
|
|
377
|
+
if (r.roots[b.blockHeight] === undefined || r.roots[b.blockHeight] === '') {
|
|
365
378
|
// accept the root as valid for this block and reuse for subsequent txids
|
|
366
379
|
r.roots[b.blockHeight] = root;
|
|
367
380
|
}
|
|
@@ -372,9 +385,9 @@ export class Beef {
|
|
|
372
385
|
};
|
|
373
386
|
for (const b of this.bumps) {
|
|
374
387
|
for (const n of b.path[0]) {
|
|
375
|
-
if (n.txid && n.hash) {
|
|
388
|
+
if (n.txid === true && typeof n.hash === 'string' && n.hash.length > 0) {
|
|
376
389
|
txids[n.hash] = true;
|
|
377
|
-
//
|
|
390
|
+
// All txid hashes in all bumps must agree on computed merkle path roots
|
|
378
391
|
if (!confirmComputedRoot(b, n.hash)) {
|
|
379
392
|
return r;
|
|
380
393
|
}
|
|
@@ -382,9 +395,8 @@ export class Beef {
|
|
|
382
395
|
}
|
|
383
396
|
}
|
|
384
397
|
for (const t of this.txs) {
|
|
385
|
-
for (const i of t.inputTxids)
|
|
386
398
|
// all input txids must be included before they are referenced
|
|
387
|
-
{
|
|
399
|
+
for (const i of t.inputTxids) {
|
|
388
400
|
if (!txids[i])
|
|
389
401
|
return r;
|
|
390
402
|
}
|
|
@@ -409,9 +421,9 @@ export class Beef {
|
|
|
409
421
|
}
|
|
410
422
|
}
|
|
411
423
|
/**
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
424
|
+
* Returns a binary array representing the serialized BEEF
|
|
425
|
+
* @returns A binary array representing the BEEF
|
|
426
|
+
*/
|
|
415
427
|
toBinary() {
|
|
416
428
|
const writer = new Writer();
|
|
417
429
|
this.toWriter(writer);
|
|
@@ -430,13 +442,13 @@ export class Beef {
|
|
|
430
442
|
toBinaryAtomic(txid) {
|
|
431
443
|
this.sortTxs();
|
|
432
444
|
const tx = this.findTxid(txid);
|
|
433
|
-
if (
|
|
445
|
+
if (tx == null) {
|
|
434
446
|
throw new Error(`${txid} does not exist in this Beef`);
|
|
435
447
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
const i = this.txs.findIndex(t => t.txid === txid);
|
|
448
|
+
// If the transaction is not the last one, clone and modify
|
|
449
|
+
const beef = (this.txs[this.txs.length - 1] === tx) ? this : this.clone();
|
|
450
|
+
if (beef !== this) {
|
|
451
|
+
const i = this.txs.findIndex((t) => t.txid === txid);
|
|
440
452
|
beef.txs.splice(i + 1);
|
|
441
453
|
}
|
|
442
454
|
const writer = new Writer();
|
|
@@ -446,9 +458,9 @@ export class Beef {
|
|
|
446
458
|
return writer.toArray();
|
|
447
459
|
}
|
|
448
460
|
/**
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
461
|
+
* Returns a hex string representing the serialized BEEF
|
|
462
|
+
* @returns A hex string representing the BEEF
|
|
463
|
+
*/
|
|
452
464
|
toHex() {
|
|
453
465
|
return toHex(this.toBinary());
|
|
454
466
|
}
|
|
@@ -478,39 +490,39 @@ export class Beef {
|
|
|
478
490
|
return beef;
|
|
479
491
|
}
|
|
480
492
|
/**
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
493
|
+
* Constructs an instance of the Beef class based on the provided binary array
|
|
494
|
+
* @param bin The binary array from which to construct BEEF
|
|
495
|
+
* @returns An instance of the Beef class constructed from the binary data
|
|
496
|
+
*/
|
|
485
497
|
static fromBinary(bin) {
|
|
486
498
|
const br = new Reader(bin);
|
|
487
499
|
return Beef.fromReader(br);
|
|
488
500
|
}
|
|
489
501
|
/**
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
502
|
+
* Constructs an instance of the Beef class based on the provided string
|
|
503
|
+
* @param s The string value from which to construct BEEF
|
|
504
|
+
* @param enc The encoding of the string value from which BEEF should be constructed
|
|
505
|
+
* @returns An instance of the Beef class constructed from the string
|
|
506
|
+
*/
|
|
495
507
|
static fromString(s, enc = 'hex') {
|
|
496
508
|
const bin = toArray(s, enc);
|
|
497
509
|
const br = new Reader(bin);
|
|
498
510
|
return Beef.fromReader(br);
|
|
499
511
|
}
|
|
500
512
|
/**
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
513
|
+
* Try to validate newTx.bumpIndex by looking for an existing bump
|
|
514
|
+
* that proves newTx.txid
|
|
515
|
+
*
|
|
516
|
+
* @param newTx A new `BeefTx` that has been added to this.txs
|
|
517
|
+
* @returns true if a bump was found, false otherwise
|
|
518
|
+
*/
|
|
507
519
|
tryToValidateBumpIndex(newTx) {
|
|
508
520
|
if (newTx.bumpIndex !== undefined) {
|
|
509
521
|
return true;
|
|
510
522
|
}
|
|
511
523
|
const txid = newTx.txid;
|
|
512
524
|
for (let i = 0; i < this.bumps.length; i++) {
|
|
513
|
-
const j = this.bumps[i].path[0].findIndex(b => b.hash === txid);
|
|
525
|
+
const j = this.bumps[i].path[0].findIndex((b) => b.hash === txid);
|
|
514
526
|
if (j >= 0) {
|
|
515
527
|
newTx.bumpIndex = i;
|
|
516
528
|
this.bumps[i].path[0][j].txid = true;
|
|
@@ -520,15 +532,15 @@ export class Beef {
|
|
|
520
532
|
return false;
|
|
521
533
|
}
|
|
522
534
|
/**
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
535
|
+
* Sort the `txs` by input txid dependency order:
|
|
536
|
+
* - Oldest Tx Anchored by Path or txid only
|
|
537
|
+
* - Newer Txs depending on Older parents
|
|
538
|
+
* - Newest Tx
|
|
539
|
+
*
|
|
540
|
+
* with proof (MerklePath) last, longest chain of dependencies first
|
|
541
|
+
*
|
|
542
|
+
* @returns `{ missingInputs, notValid, valid, withMissingInputs }`
|
|
543
|
+
*/
|
|
532
544
|
sortTxs() {
|
|
533
545
|
// Hashtable of valid txids (with proof or all inputs chain to proof)
|
|
534
546
|
const validTxids = {};
|
|
@@ -568,7 +580,7 @@ export class Beef {
|
|
|
568
580
|
// link their inputs that exist in this beef,
|
|
569
581
|
// make a note of missing inputs.
|
|
570
582
|
for (const inputTxid of tx.inputTxids) {
|
|
571
|
-
if (
|
|
583
|
+
if (txidToTx[inputTxid] === undefined) { // Explicitly check for undefined
|
|
572
584
|
missingInputs[inputTxid] = true;
|
|
573
585
|
hasMissingInput = true;
|
|
574
586
|
}
|
|
@@ -587,7 +599,7 @@ export class Beef {
|
|
|
587
599
|
// all tx are isValid false, hasProof false.
|
|
588
600
|
// if isTxidOnly then has inputTxids
|
|
589
601
|
for (const tx of oldQueue) {
|
|
590
|
-
if (tx.inputTxids.every(txid => validTxids[txid])) {
|
|
602
|
+
if (tx.inputTxids.every((txid) => validTxids[txid])) {
|
|
591
603
|
validTxids[tx.txid] = true;
|
|
592
604
|
result.push(tx);
|
|
593
605
|
}
|
|
@@ -602,28 +614,32 @@ export class Beef {
|
|
|
602
614
|
// transactions that don't have proofs and don't chain to proofs
|
|
603
615
|
const txsNotValid = queue;
|
|
604
616
|
// New order of txs is unsortable (missing inputs or depends on missing inputs), txidOnly, sorted (so newest sorted is last)
|
|
605
|
-
this.txs = txsMissingInputs
|
|
617
|
+
this.txs = txsMissingInputs
|
|
618
|
+
.concat(txsNotValid)
|
|
619
|
+
.concat(txidOnly)
|
|
620
|
+
.concat(result);
|
|
606
621
|
return {
|
|
607
622
|
missingInputs: Object.keys(missingInputs),
|
|
608
|
-
notValid: txsNotValid.map(tx => tx.txid),
|
|
623
|
+
notValid: txsNotValid.map((tx) => tx.txid),
|
|
609
624
|
valid: Object.keys(validTxids),
|
|
610
|
-
withMissingInputs: txsMissingInputs.map(tx => tx.txid),
|
|
611
|
-
txidOnly: txidOnly.map(tx => tx.txid)
|
|
625
|
+
withMissingInputs: txsMissingInputs.map((tx) => tx.txid),
|
|
626
|
+
txidOnly: txidOnly.map((tx) => tx.txid)
|
|
612
627
|
};
|
|
613
628
|
}
|
|
614
629
|
/**
|
|
615
|
-
|
|
616
|
-
|
|
630
|
+
* @returns a shallow copy of this beef
|
|
631
|
+
*/
|
|
617
632
|
clone() {
|
|
618
633
|
const c = new Beef();
|
|
634
|
+
c.version = this.version;
|
|
619
635
|
c.bumps = Array.from(this.bumps);
|
|
620
636
|
c.txs = Array.from(this.txs);
|
|
621
637
|
return c;
|
|
622
638
|
}
|
|
623
639
|
/**
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
640
|
+
* Ensure that all the txids in `knownTxids` are txidOnly
|
|
641
|
+
* @param knownTxids
|
|
642
|
+
*/
|
|
627
643
|
trimKnownTxids(knownTxids) {
|
|
628
644
|
for (let i = 0; i < this.txs.length;) {
|
|
629
645
|
const tx = this.txs[i];
|
|
@@ -644,15 +660,18 @@ export class Beef {
|
|
|
644
660
|
return r.valid;
|
|
645
661
|
}
|
|
646
662
|
/**
|
|
647
|
-
|
|
648
|
-
|
|
663
|
+
* @returns Summary of `Beef` contents as multi-line string.
|
|
664
|
+
*/
|
|
649
665
|
toLogString() {
|
|
650
666
|
let log = '';
|
|
651
|
-
log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid()}\n`;
|
|
667
|
+
log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid().toString()}\n`;
|
|
652
668
|
let i = -1;
|
|
653
669
|
for (const b of this.bumps) {
|
|
654
670
|
i++;
|
|
655
|
-
log += ` BUMP ${i}\n block: ${b.blockHeight}\n txids: [\n${b.path[0]
|
|
671
|
+
log += ` BUMP ${i}\n block: ${b.blockHeight}\n txids: [\n${b.path[0]
|
|
672
|
+
.filter((n) => n.txid === true) // ✅ Explicitly check if txid is `true`
|
|
673
|
+
.map((n) => ` '${n.hash ?? ''}'`)
|
|
674
|
+
.join(',\n')}\n ]\n`;
|
|
656
675
|
}
|
|
657
676
|
i = -1;
|
|
658
677
|
for (const t of this.txs) {
|
|
@@ -665,32 +684,35 @@ export class Beef {
|
|
|
665
684
|
log += ' txidOnly\n';
|
|
666
685
|
}
|
|
667
686
|
else {
|
|
668
|
-
log += ` rawTx length=${t.rawTx
|
|
687
|
+
log += ` rawTx length=${t.rawTx?.length ?? 0}\n`; // ✅ Fix applied here
|
|
669
688
|
}
|
|
670
689
|
if (t.inputTxids.length > 0) {
|
|
671
|
-
log += ` inputs: [\n${t.inputTxids
|
|
690
|
+
log += ` inputs: [\n${t.inputTxids
|
|
691
|
+
.map((it) => ` '${it}'`)
|
|
692
|
+
.join(',\n')}\n ]\n`;
|
|
672
693
|
}
|
|
673
694
|
}
|
|
674
695
|
return log;
|
|
675
696
|
}
|
|
676
697
|
/**
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
698
|
+
* In some circumstances it may be helpful for the BUMP MerklePaths to include
|
|
699
|
+
* leaves that can be computed from row zero.
|
|
700
|
+
*/
|
|
680
701
|
addComputedLeaves() {
|
|
681
|
-
const
|
|
682
|
-
const
|
|
683
|
-
for (const bump of beef.bumps) {
|
|
702
|
+
const hash = (m) => toHex(hash256(toArray(m, 'hex').reverse()).reverse());
|
|
703
|
+
for (const bump of this.bumps) { // ✅ Use `this` instead of `beef`
|
|
684
704
|
for (let row = 1; row < bump.path.length; row++) {
|
|
685
705
|
for (const leafL of bump.path[row - 1]) {
|
|
686
|
-
if (leafL.hash && (leafL.offset & 1) === 0) {
|
|
687
|
-
const leafR = bump.path[row - 1].find(l => l.offset === leafL.offset + 1);
|
|
706
|
+
if (typeof leafL.hash === 'string' && (leafL.offset & 1) === 0) {
|
|
707
|
+
const leafR = bump.path[row - 1].find((l) => l.offset === leafL.offset + 1);
|
|
688
708
|
const offsetOnRow = leafL.offset >> 1;
|
|
689
|
-
if (leafR
|
|
690
|
-
|
|
709
|
+
if (leafR !== undefined &&
|
|
710
|
+
typeof leafR.hash === 'string' &&
|
|
711
|
+
bump.path[row].every((l) => l.offset !== offsetOnRow)) {
|
|
712
|
+
// Computable leaf is missing... add it.
|
|
691
713
|
bump.path[row].push({
|
|
692
714
|
offset: offsetOnRow,
|
|
693
|
-
//
|
|
715
|
+
// String concatenation puts the right leaf on the left of the left leaf hash
|
|
694
716
|
hash: hash(leafR.hash + leafL.hash)
|
|
695
717
|
});
|
|
696
718
|
}
|