@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
|
@@ -8,6 +8,11 @@ const MerklePath_js_1 = __importDefault(require("./MerklePath.js"));
|
|
|
8
8
|
const BeefTx_js_1 = __importDefault(require("./BeefTx.js"));
|
|
9
9
|
const utils_js_1 = require("../primitives/utils.js");
|
|
10
10
|
const Hash_js_1 = require("../primitives/Hash.js");
|
|
11
|
+
function verifyTruthy(v) {
|
|
12
|
+
if (v == null)
|
|
13
|
+
throw new Error('Expected a valid value, but got undefined.');
|
|
14
|
+
return v;
|
|
15
|
+
}
|
|
11
16
|
exports.BEEF_V1 = 4022206465; // 0100BEEF in LE order
|
|
12
17
|
exports.BEEF_V2 = 4022206466; // 0200BEEF in LE order
|
|
13
18
|
exports.ATOMIC_BEEF = 0x01010101; // 01010101
|
|
@@ -79,11 +84,11 @@ class Beef {
|
|
|
79
84
|
this.version = version;
|
|
80
85
|
}
|
|
81
86
|
/**
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
* @param txid of `beefTx` to find
|
|
88
|
+
* @returns `BeefTx` in `txs` with `txid`.
|
|
89
|
+
*/
|
|
85
90
|
findTxid(txid) {
|
|
86
|
-
return this.txs.find(tx => tx.txid === txid);
|
|
91
|
+
return this.txs.find((tx) => tx.txid === txid);
|
|
87
92
|
}
|
|
88
93
|
/**
|
|
89
94
|
* Replaces `BeefTx` for this txid with txidOnly.
|
|
@@ -96,7 +101,7 @@ class Beef {
|
|
|
96
101
|
* @returns undefined if txid is unknown.
|
|
97
102
|
*/
|
|
98
103
|
makeTxidOnly(txid) {
|
|
99
|
-
const i = this.txs.findIndex(tx => tx.txid === txid);
|
|
104
|
+
const i = this.txs.findIndex((tx) => tx.txid === txid);
|
|
100
105
|
if (i === -1)
|
|
101
106
|
return undefined;
|
|
102
107
|
let btx = this.txs[i];
|
|
@@ -111,7 +116,8 @@ class Beef {
|
|
|
111
116
|
* @returns `MerklePath` with level zero hash equal to txid or undefined.
|
|
112
117
|
*/
|
|
113
118
|
findBump(txid) {
|
|
114
|
-
return this.bumps.find(b => b.path[0].
|
|
119
|
+
return this.bumps.find((b) => b.path[0].some((leaf) => leaf.hash === txid) // ✅ Ensure boolean return with `.some()`
|
|
120
|
+
);
|
|
115
121
|
}
|
|
116
122
|
/**
|
|
117
123
|
* Finds a Transaction in this `Beef`
|
|
@@ -124,12 +130,12 @@ class Beef {
|
|
|
124
130
|
*/
|
|
125
131
|
findTransactionForSigning(txid) {
|
|
126
132
|
const beefTx = this.findTxid(txid);
|
|
127
|
-
if (
|
|
128
|
-
return undefined;
|
|
133
|
+
if ((beefTx == null) || (beefTx.tx == null))
|
|
134
|
+
return undefined; // Ensure beefTx.tx exists before using it
|
|
129
135
|
for (const i of beefTx.tx.inputs) {
|
|
130
|
-
if (
|
|
131
|
-
const itx = this.findTxid(i.sourceTXID);
|
|
132
|
-
if (itx) {
|
|
136
|
+
if (i.sourceTransaction == null) {
|
|
137
|
+
const itx = this.findTxid(verifyTruthy(i.sourceTXID)); // Ensure sourceTXID is valid
|
|
138
|
+
if (itx != null) {
|
|
133
139
|
i.sourceTransaction = itx.tx;
|
|
134
140
|
}
|
|
135
141
|
}
|
|
@@ -146,24 +152,24 @@ class Beef {
|
|
|
146
152
|
*/
|
|
147
153
|
findAtomicTransaction(txid) {
|
|
148
154
|
const beefTx = this.findTxid(txid);
|
|
149
|
-
if (
|
|
150
|
-
return undefined;
|
|
155
|
+
if ((beefTx == null) || (beefTx.tx == null))
|
|
156
|
+
return undefined; // Ensure beefTx.tx exists before using it
|
|
151
157
|
const addInputProof = (beef, tx) => {
|
|
152
158
|
const mp = beef.findBump(tx.id('hex'));
|
|
153
|
-
if (mp) {
|
|
159
|
+
if (mp != null) {
|
|
154
160
|
tx.merklePath = mp;
|
|
155
161
|
}
|
|
156
162
|
else {
|
|
157
163
|
for (const i of tx.inputs) {
|
|
158
|
-
if (
|
|
159
|
-
const itx = beef.findTxid(i.sourceTXID);
|
|
160
|
-
if (itx) {
|
|
164
|
+
if (i.sourceTransaction == null) {
|
|
165
|
+
const itx = beef.findTxid(verifyTruthy(i.sourceTXID)); // Ensure sourceTXID is valid
|
|
166
|
+
if (itx != null) {
|
|
161
167
|
i.sourceTransaction = itx.tx;
|
|
162
168
|
}
|
|
163
169
|
}
|
|
164
|
-
if (i.sourceTransaction) {
|
|
170
|
+
if (i.sourceTransaction != null) {
|
|
165
171
|
const mp = beef.findBump(i.sourceTransaction.id('hex'));
|
|
166
|
-
if (mp) {
|
|
172
|
+
if (mp != null) {
|
|
167
173
|
i.sourceTransaction.merklePath = mp;
|
|
168
174
|
}
|
|
169
175
|
else {
|
|
@@ -173,20 +179,21 @@ class Beef {
|
|
|
173
179
|
}
|
|
174
180
|
}
|
|
175
181
|
};
|
|
176
|
-
addInputProof(this, beefTx.tx);
|
|
182
|
+
addInputProof(this, beefTx.tx); // Safe because we checked that beefTx.tx exists
|
|
177
183
|
return beefTx.tx;
|
|
178
184
|
}
|
|
179
185
|
/**
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
186
|
+
* Merge a MerklePath that is assumed to be fully valid.
|
|
187
|
+
* @param bump
|
|
188
|
+
* @returns index of merged bump
|
|
189
|
+
*/
|
|
184
190
|
mergeBump(bump) {
|
|
185
191
|
let bumpIndex;
|
|
186
192
|
// 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.
|
|
187
193
|
for (let i = 0; i < this.bumps.length; i++) {
|
|
188
194
|
const b = this.bumps[i];
|
|
189
|
-
if (b === bump) {
|
|
195
|
+
if (b === bump) {
|
|
196
|
+
// Literally the same
|
|
190
197
|
return i;
|
|
191
198
|
}
|
|
192
199
|
if (b.blockHeight === bump.blockHeight) {
|
|
@@ -206,11 +213,11 @@ class Beef {
|
|
|
206
213
|
bumpIndex = this.bumps.length;
|
|
207
214
|
this.bumps.push(bump);
|
|
208
215
|
}
|
|
209
|
-
//
|
|
216
|
+
// Review if any transactions are proven by this bump
|
|
210
217
|
const b = this.bumps[bumpIndex];
|
|
211
218
|
for (const tx of this.txs) {
|
|
212
219
|
const txid = tx.txid;
|
|
213
|
-
if (
|
|
220
|
+
if (tx.bumpIndex == null) { // ✅ Explicitly check for null or undefined
|
|
214
221
|
for (const n of b.path[0]) {
|
|
215
222
|
if (n.hash === txid) {
|
|
216
223
|
tx.bumpIndex = bumpIndex;
|
|
@@ -223,16 +230,16 @@ class Beef {
|
|
|
223
230
|
return bumpIndex;
|
|
224
231
|
}
|
|
225
232
|
/**
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
233
|
+
* Merge a serialized transaction.
|
|
234
|
+
*
|
|
235
|
+
* Checks that a transaction with the same txid hasn't already been merged.
|
|
236
|
+
*
|
|
237
|
+
* Replaces existing transaction with same txid.
|
|
238
|
+
*
|
|
239
|
+
* @param rawTx
|
|
240
|
+
* @param bumpIndex Optional. If a number, must be valid index into bumps array.
|
|
241
|
+
* @returns txid of rawTx
|
|
242
|
+
*/
|
|
236
243
|
mergeRawTx(rawTx, bumpIndex) {
|
|
237
244
|
const newTx = new BeefTx_js_1.default(rawTx, bumpIndex);
|
|
238
245
|
this.removeExistingTxid(newTx.txid);
|
|
@@ -241,20 +248,20 @@ class Beef {
|
|
|
241
248
|
return newTx;
|
|
242
249
|
}
|
|
243
250
|
/**
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
* Merge a `Transaction` and any referenced `merklePath` and `sourceTransaction`, recursifely.
|
|
252
|
+
*
|
|
253
|
+
* Replaces existing transaction with same txid.
|
|
254
|
+
*
|
|
255
|
+
* Attempts to match an existing bump to the new transaction.
|
|
256
|
+
*
|
|
257
|
+
* @param tx
|
|
258
|
+
* @returns txid of tx
|
|
259
|
+
*/
|
|
253
260
|
mergeTransaction(tx) {
|
|
254
261
|
const txid = tx.id('hex');
|
|
255
262
|
this.removeExistingTxid(txid);
|
|
256
263
|
let bumpIndex;
|
|
257
|
-
if (tx.merklePath) {
|
|
264
|
+
if (tx.merklePath != null) {
|
|
258
265
|
bumpIndex = this.mergeBump(tx.merklePath);
|
|
259
266
|
}
|
|
260
267
|
const newTx = new BeefTx_js_1.default(tx, bumpIndex);
|
|
@@ -263,7 +270,7 @@ class Beef {
|
|
|
263
270
|
bumpIndex = newTx.bumpIndex;
|
|
264
271
|
if (bumpIndex === undefined) {
|
|
265
272
|
for (const input of tx.inputs) {
|
|
266
|
-
if (input.sourceTransaction) {
|
|
273
|
+
if (input.sourceTransaction != null) {
|
|
267
274
|
this.mergeTransaction(input.sourceTransaction);
|
|
268
275
|
}
|
|
269
276
|
}
|
|
@@ -271,18 +278,18 @@ class Beef {
|
|
|
271
278
|
return newTx;
|
|
272
279
|
}
|
|
273
280
|
/**
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
281
|
+
* Removes an existing transaction from the BEEF, given its TXID
|
|
282
|
+
* @param txid TXID of the transaction to remove
|
|
283
|
+
*/
|
|
277
284
|
removeExistingTxid(txid) {
|
|
278
|
-
const existingTxIndex = this.txs.findIndex(t => t.txid === txid);
|
|
285
|
+
const existingTxIndex = this.txs.findIndex((t) => t.txid === txid);
|
|
279
286
|
if (existingTxIndex >= 0) {
|
|
280
287
|
this.txs.splice(existingTxIndex, 1);
|
|
281
288
|
}
|
|
282
289
|
}
|
|
283
290
|
mergeTxidOnly(txid) {
|
|
284
|
-
let tx = this.txs.find(t => t.txid === txid);
|
|
285
|
-
if (
|
|
291
|
+
let tx = this.txs.find((t) => t.txid === txid);
|
|
292
|
+
if (tx == null) {
|
|
286
293
|
tx = new BeefTx_js_1.default(txid);
|
|
287
294
|
this.txs.push(tx);
|
|
288
295
|
this.tryToValidateBumpIndex(tx);
|
|
@@ -291,15 +298,18 @@ class Beef {
|
|
|
291
298
|
}
|
|
292
299
|
mergeBeefTx(btx) {
|
|
293
300
|
let beefTx = this.findTxid(btx.txid);
|
|
294
|
-
if (btx.isTxidOnly &&
|
|
301
|
+
if (btx.isTxidOnly && (beefTx == null)) {
|
|
295
302
|
beefTx = this.mergeTxidOnly(btx.txid);
|
|
296
303
|
}
|
|
297
|
-
else if (btx._tx && (
|
|
304
|
+
else if ((btx._tx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
|
|
298
305
|
beefTx = this.mergeTransaction(btx._tx);
|
|
299
306
|
}
|
|
300
|
-
else if (btx._rawTx && (
|
|
307
|
+
else if ((btx._rawTx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
|
|
301
308
|
beefTx = this.mergeRawTx(btx._rawTx);
|
|
302
309
|
}
|
|
310
|
+
if (beefTx == null) {
|
|
311
|
+
throw new Error(`Failed to merge BeefTx for txid: ${btx.txid}`);
|
|
312
|
+
}
|
|
303
313
|
return beefTx;
|
|
304
314
|
}
|
|
305
315
|
mergeBeef(beef) {
|
|
@@ -312,35 +322,35 @@ class Beef {
|
|
|
312
322
|
}
|
|
313
323
|
}
|
|
314
324
|
/**
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
325
|
+
* Sorts `txs` and checks structural validity of beef.
|
|
326
|
+
*
|
|
327
|
+
* Does NOT verify merkle roots.
|
|
328
|
+
*
|
|
329
|
+
* Validity requirements:
|
|
330
|
+
* 1. No 'known' txids, unless `allowTxidOnly` is true.
|
|
331
|
+
* 2. All transactions have bumps or their inputs chain back to bumps (or are known).
|
|
332
|
+
* 3. Order of transactions satisfies dependencies before dependents.
|
|
333
|
+
* 4. No transactions with duplicate txids.
|
|
334
|
+
*
|
|
335
|
+
* @param allowTxidOnly optional. If true, transaction txid only is assumed valid
|
|
336
|
+
*/
|
|
327
337
|
isValid(allowTxidOnly) {
|
|
328
338
|
return this.verifyValid(allowTxidOnly).valid;
|
|
329
339
|
}
|
|
330
340
|
/**
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
341
|
+
* Sorts `txs` and confirms validity of transaction data contained in beef
|
|
342
|
+
* by validating structure of this beef and confirming computed merkle roots
|
|
343
|
+
* using `chainTracker`.
|
|
344
|
+
*
|
|
345
|
+
* Validity requirements:
|
|
346
|
+
* 1. No 'known' txids, unless `allowTxidOnly` is true.
|
|
347
|
+
* 2. All transactions have bumps or their inputs chain back to bumps (or are known).
|
|
348
|
+
* 3. Order of transactions satisfies dependencies before dependents.
|
|
349
|
+
* 4. No transactions with duplicate txids.
|
|
350
|
+
*
|
|
351
|
+
* @param chainTracker Used to verify computed merkle path roots for all bump txids.
|
|
352
|
+
* @param allowTxidOnly optional. If true, transaction txid is assumed valid
|
|
353
|
+
*/
|
|
344
354
|
async verify(chainTracker, allowTxidOnly) {
|
|
345
355
|
const r = this.verifyValid(allowTxidOnly);
|
|
346
356
|
if (!r.valid)
|
|
@@ -354,20 +364,23 @@ class Beef {
|
|
|
354
364
|
return true;
|
|
355
365
|
}
|
|
356
366
|
verifyValid(allowTxidOnly) {
|
|
357
|
-
const r = {
|
|
367
|
+
const r = {
|
|
368
|
+
valid: false,
|
|
369
|
+
roots: {}
|
|
370
|
+
};
|
|
358
371
|
this.sortTxs();
|
|
359
372
|
// valid txids: only txids if allowed, bump txids, then txids with input's in txids
|
|
360
373
|
const txids = {};
|
|
361
374
|
for (const tx of this.txs) {
|
|
362
375
|
if (tx.isTxidOnly) {
|
|
363
|
-
if (
|
|
364
|
-
return r;
|
|
376
|
+
if (allowTxidOnly !== true)
|
|
377
|
+
return r; // ✅ Explicit check for `true`
|
|
365
378
|
txids[tx.txid] = true;
|
|
366
379
|
}
|
|
367
380
|
}
|
|
368
381
|
const confirmComputedRoot = (b, txid) => {
|
|
369
382
|
const root = b.computeRoot(txid);
|
|
370
|
-
if (
|
|
383
|
+
if (r.roots[b.blockHeight] === undefined || r.roots[b.blockHeight] === '') {
|
|
371
384
|
// accept the root as valid for this block and reuse for subsequent txids
|
|
372
385
|
r.roots[b.blockHeight] = root;
|
|
373
386
|
}
|
|
@@ -378,9 +391,9 @@ class Beef {
|
|
|
378
391
|
};
|
|
379
392
|
for (const b of this.bumps) {
|
|
380
393
|
for (const n of b.path[0]) {
|
|
381
|
-
if (n.txid && n.hash) {
|
|
394
|
+
if (n.txid === true && typeof n.hash === 'string' && n.hash.length > 0) {
|
|
382
395
|
txids[n.hash] = true;
|
|
383
|
-
//
|
|
396
|
+
// All txid hashes in all bumps must agree on computed merkle path roots
|
|
384
397
|
if (!confirmComputedRoot(b, n.hash)) {
|
|
385
398
|
return r;
|
|
386
399
|
}
|
|
@@ -388,9 +401,8 @@ class Beef {
|
|
|
388
401
|
}
|
|
389
402
|
}
|
|
390
403
|
for (const t of this.txs) {
|
|
391
|
-
for (const i of t.inputTxids)
|
|
392
404
|
// all input txids must be included before they are referenced
|
|
393
|
-
{
|
|
405
|
+
for (const i of t.inputTxids) {
|
|
394
406
|
if (!txids[i])
|
|
395
407
|
return r;
|
|
396
408
|
}
|
|
@@ -415,9 +427,9 @@ class Beef {
|
|
|
415
427
|
}
|
|
416
428
|
}
|
|
417
429
|
/**
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
430
|
+
* Returns a binary array representing the serialized BEEF
|
|
431
|
+
* @returns A binary array representing the BEEF
|
|
432
|
+
*/
|
|
421
433
|
toBinary() {
|
|
422
434
|
const writer = new utils_js_1.Writer();
|
|
423
435
|
this.toWriter(writer);
|
|
@@ -436,13 +448,13 @@ class Beef {
|
|
|
436
448
|
toBinaryAtomic(txid) {
|
|
437
449
|
this.sortTxs();
|
|
438
450
|
const tx = this.findTxid(txid);
|
|
439
|
-
if (
|
|
451
|
+
if (tx == null) {
|
|
440
452
|
throw new Error(`${txid} does not exist in this Beef`);
|
|
441
453
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
const i = this.txs.findIndex(t => t.txid === txid);
|
|
454
|
+
// If the transaction is not the last one, clone and modify
|
|
455
|
+
const beef = (this.txs[this.txs.length - 1] === tx) ? this : this.clone();
|
|
456
|
+
if (beef !== this) {
|
|
457
|
+
const i = this.txs.findIndex((t) => t.txid === txid);
|
|
446
458
|
beef.txs.splice(i + 1);
|
|
447
459
|
}
|
|
448
460
|
const writer = new utils_js_1.Writer();
|
|
@@ -452,9 +464,9 @@ class Beef {
|
|
|
452
464
|
return writer.toArray();
|
|
453
465
|
}
|
|
454
466
|
/**
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
467
|
+
* Returns a hex string representing the serialized BEEF
|
|
468
|
+
* @returns A hex string representing the BEEF
|
|
469
|
+
*/
|
|
458
470
|
toHex() {
|
|
459
471
|
return (0, utils_js_1.toHex)(this.toBinary());
|
|
460
472
|
}
|
|
@@ -484,39 +496,39 @@ class Beef {
|
|
|
484
496
|
return beef;
|
|
485
497
|
}
|
|
486
498
|
/**
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
499
|
+
* Constructs an instance of the Beef class based on the provided binary array
|
|
500
|
+
* @param bin The binary array from which to construct BEEF
|
|
501
|
+
* @returns An instance of the Beef class constructed from the binary data
|
|
502
|
+
*/
|
|
491
503
|
static fromBinary(bin) {
|
|
492
504
|
const br = new utils_js_1.Reader(bin);
|
|
493
505
|
return Beef.fromReader(br);
|
|
494
506
|
}
|
|
495
507
|
/**
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
508
|
+
* Constructs an instance of the Beef class based on the provided string
|
|
509
|
+
* @param s The string value from which to construct BEEF
|
|
510
|
+
* @param enc The encoding of the string value from which BEEF should be constructed
|
|
511
|
+
* @returns An instance of the Beef class constructed from the string
|
|
512
|
+
*/
|
|
501
513
|
static fromString(s, enc = 'hex') {
|
|
502
514
|
const bin = (0, utils_js_1.toArray)(s, enc);
|
|
503
515
|
const br = new utils_js_1.Reader(bin);
|
|
504
516
|
return Beef.fromReader(br);
|
|
505
517
|
}
|
|
506
518
|
/**
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
519
|
+
* Try to validate newTx.bumpIndex by looking for an existing bump
|
|
520
|
+
* that proves newTx.txid
|
|
521
|
+
*
|
|
522
|
+
* @param newTx A new `BeefTx` that has been added to this.txs
|
|
523
|
+
* @returns true if a bump was found, false otherwise
|
|
524
|
+
*/
|
|
513
525
|
tryToValidateBumpIndex(newTx) {
|
|
514
526
|
if (newTx.bumpIndex !== undefined) {
|
|
515
527
|
return true;
|
|
516
528
|
}
|
|
517
529
|
const txid = newTx.txid;
|
|
518
530
|
for (let i = 0; i < this.bumps.length; i++) {
|
|
519
|
-
const j = this.bumps[i].path[0].findIndex(b => b.hash === txid);
|
|
531
|
+
const j = this.bumps[i].path[0].findIndex((b) => b.hash === txid);
|
|
520
532
|
if (j >= 0) {
|
|
521
533
|
newTx.bumpIndex = i;
|
|
522
534
|
this.bumps[i].path[0][j].txid = true;
|
|
@@ -526,15 +538,15 @@ class Beef {
|
|
|
526
538
|
return false;
|
|
527
539
|
}
|
|
528
540
|
/**
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
541
|
+
* Sort the `txs` by input txid dependency order:
|
|
542
|
+
* - Oldest Tx Anchored by Path or txid only
|
|
543
|
+
* - Newer Txs depending on Older parents
|
|
544
|
+
* - Newest Tx
|
|
545
|
+
*
|
|
546
|
+
* with proof (MerklePath) last, longest chain of dependencies first
|
|
547
|
+
*
|
|
548
|
+
* @returns `{ missingInputs, notValid, valid, withMissingInputs }`
|
|
549
|
+
*/
|
|
538
550
|
sortTxs() {
|
|
539
551
|
// Hashtable of valid txids (with proof or all inputs chain to proof)
|
|
540
552
|
const validTxids = {};
|
|
@@ -574,7 +586,7 @@ class Beef {
|
|
|
574
586
|
// link their inputs that exist in this beef,
|
|
575
587
|
// make a note of missing inputs.
|
|
576
588
|
for (const inputTxid of tx.inputTxids) {
|
|
577
|
-
if (
|
|
589
|
+
if (txidToTx[inputTxid] === undefined) { // Explicitly check for undefined
|
|
578
590
|
missingInputs[inputTxid] = true;
|
|
579
591
|
hasMissingInput = true;
|
|
580
592
|
}
|
|
@@ -593,7 +605,7 @@ class Beef {
|
|
|
593
605
|
// all tx are isValid false, hasProof false.
|
|
594
606
|
// if isTxidOnly then has inputTxids
|
|
595
607
|
for (const tx of oldQueue) {
|
|
596
|
-
if (tx.inputTxids.every(txid => validTxids[txid])) {
|
|
608
|
+
if (tx.inputTxids.every((txid) => validTxids[txid])) {
|
|
597
609
|
validTxids[tx.txid] = true;
|
|
598
610
|
result.push(tx);
|
|
599
611
|
}
|
|
@@ -608,28 +620,32 @@ class Beef {
|
|
|
608
620
|
// transactions that don't have proofs and don't chain to proofs
|
|
609
621
|
const txsNotValid = queue;
|
|
610
622
|
// New order of txs is unsortable (missing inputs or depends on missing inputs), txidOnly, sorted (so newest sorted is last)
|
|
611
|
-
this.txs = txsMissingInputs
|
|
623
|
+
this.txs = txsMissingInputs
|
|
624
|
+
.concat(txsNotValid)
|
|
625
|
+
.concat(txidOnly)
|
|
626
|
+
.concat(result);
|
|
612
627
|
return {
|
|
613
628
|
missingInputs: Object.keys(missingInputs),
|
|
614
|
-
notValid: txsNotValid.map(tx => tx.txid),
|
|
629
|
+
notValid: txsNotValid.map((tx) => tx.txid),
|
|
615
630
|
valid: Object.keys(validTxids),
|
|
616
|
-
withMissingInputs: txsMissingInputs.map(tx => tx.txid),
|
|
617
|
-
txidOnly: txidOnly.map(tx => tx.txid)
|
|
631
|
+
withMissingInputs: txsMissingInputs.map((tx) => tx.txid),
|
|
632
|
+
txidOnly: txidOnly.map((tx) => tx.txid)
|
|
618
633
|
};
|
|
619
634
|
}
|
|
620
635
|
/**
|
|
621
|
-
|
|
622
|
-
|
|
636
|
+
* @returns a shallow copy of this beef
|
|
637
|
+
*/
|
|
623
638
|
clone() {
|
|
624
639
|
const c = new Beef();
|
|
640
|
+
c.version = this.version;
|
|
625
641
|
c.bumps = Array.from(this.bumps);
|
|
626
642
|
c.txs = Array.from(this.txs);
|
|
627
643
|
return c;
|
|
628
644
|
}
|
|
629
645
|
/**
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
646
|
+
* Ensure that all the txids in `knownTxids` are txidOnly
|
|
647
|
+
* @param knownTxids
|
|
648
|
+
*/
|
|
633
649
|
trimKnownTxids(knownTxids) {
|
|
634
650
|
for (let i = 0; i < this.txs.length;) {
|
|
635
651
|
const tx = this.txs[i];
|
|
@@ -650,15 +666,19 @@ class Beef {
|
|
|
650
666
|
return r.valid;
|
|
651
667
|
}
|
|
652
668
|
/**
|
|
653
|
-
|
|
654
|
-
|
|
669
|
+
* @returns Summary of `Beef` contents as multi-line string.
|
|
670
|
+
*/
|
|
655
671
|
toLogString() {
|
|
672
|
+
var _a, _b;
|
|
656
673
|
let log = '';
|
|
657
|
-
log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid()}\n`;
|
|
674
|
+
log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid().toString()}\n`;
|
|
658
675
|
let i = -1;
|
|
659
676
|
for (const b of this.bumps) {
|
|
660
677
|
i++;
|
|
661
|
-
log += ` BUMP ${i}\n block: ${b.blockHeight}\n txids: [\n${b.path[0]
|
|
678
|
+
log += ` BUMP ${i}\n block: ${b.blockHeight}\n txids: [\n${b.path[0]
|
|
679
|
+
.filter((n) => n.txid === true) // ✅ Explicitly check if txid is `true`
|
|
680
|
+
.map((n) => { var _a; return ` '${(_a = n.hash) !== null && _a !== void 0 ? _a : ''}'`; })
|
|
681
|
+
.join(',\n')}\n ]\n`;
|
|
662
682
|
}
|
|
663
683
|
i = -1;
|
|
664
684
|
for (const t of this.txs) {
|
|
@@ -671,32 +691,35 @@ class Beef {
|
|
|
671
691
|
log += ' txidOnly\n';
|
|
672
692
|
}
|
|
673
693
|
else {
|
|
674
|
-
log += ` rawTx length=${t.rawTx.length}\n`;
|
|
694
|
+
log += ` rawTx length=${(_b = (_a = t.rawTx) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0}\n`; // ✅ Fix applied here
|
|
675
695
|
}
|
|
676
696
|
if (t.inputTxids.length > 0) {
|
|
677
|
-
log += ` inputs: [\n${t.inputTxids
|
|
697
|
+
log += ` inputs: [\n${t.inputTxids
|
|
698
|
+
.map((it) => ` '${it}'`)
|
|
699
|
+
.join(',\n')}\n ]\n`;
|
|
678
700
|
}
|
|
679
701
|
}
|
|
680
702
|
return log;
|
|
681
703
|
}
|
|
682
704
|
/**
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
705
|
+
* In some circumstances it may be helpful for the BUMP MerklePaths to include
|
|
706
|
+
* leaves that can be computed from row zero.
|
|
707
|
+
*/
|
|
686
708
|
addComputedLeaves() {
|
|
687
|
-
const
|
|
688
|
-
const
|
|
689
|
-
for (const bump of beef.bumps) {
|
|
709
|
+
const hash = (m) => (0, utils_js_1.toHex)((0, Hash_js_1.hash256)((0, utils_js_1.toArray)(m, 'hex').reverse()).reverse());
|
|
710
|
+
for (const bump of this.bumps) { // ✅ Use `this` instead of `beef`
|
|
690
711
|
for (let row = 1; row < bump.path.length; row++) {
|
|
691
712
|
for (const leafL of bump.path[row - 1]) {
|
|
692
|
-
if (leafL.hash && (leafL.offset & 1) === 0) {
|
|
693
|
-
const leafR = bump.path[row - 1].find(l => l.offset === leafL.offset + 1);
|
|
713
|
+
if (typeof leafL.hash === 'string' && (leafL.offset & 1) === 0) {
|
|
714
|
+
const leafR = bump.path[row - 1].find((l) => l.offset === leafL.offset + 1);
|
|
694
715
|
const offsetOnRow = leafL.offset >> 1;
|
|
695
|
-
if (leafR
|
|
696
|
-
|
|
716
|
+
if (leafR !== undefined &&
|
|
717
|
+
typeof leafR.hash === 'string' &&
|
|
718
|
+
bump.path[row].every((l) => l.offset !== offsetOnRow)) {
|
|
719
|
+
// Computable leaf is missing... add it.
|
|
697
720
|
bump.path[row].push({
|
|
698
721
|
offset: offsetOnRow,
|
|
699
|
-
//
|
|
722
|
+
// String concatenation puts the right leaf on the left of the left leaf hash
|
|
700
723
|
hash: hash(leafR.hash + leafL.hash)
|
|
701
724
|
});
|
|
702
725
|
}
|