From 3e9dc276ed1178018ee4238237e21417bdb8f87c Mon Sep 17 00:00:00 2001 From: Shawn Xie <35279399+shawnxie999@users.noreply.github.com> Date: Tue, 6 Jan 2026 12:21:00 -0500 Subject: [PATCH] add back clawback hash (#6175) --- include/xrpl/protocol/ConfidentialTransfer.h | 7 ++++--- src/libxrpl/protocol/ConfidentialTransfer.cpp | 14 ++++++++++---- src/test/jtx/impl/mpt.cpp | 5 +++-- src/xrpld/app/tx/detail/ConfidentialClawback.cpp | 4 ++-- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/include/xrpl/protocol/ConfidentialTransfer.h b/include/xrpl/protocol/ConfidentialTransfer.h index f0624886ca..1494497a8e 100644 --- a/include/xrpl/protocol/ConfidentialTransfer.h +++ b/include/xrpl/protocol/ConfidentialTransfer.h @@ -27,11 +27,12 @@ addCommonZKPFields( std::uint64_t amount); uint256 -getContextHash( +getClawbackContextHash( + AccountID const& account, + std::uint32_t sequence, uint192 const& issuanceID, std::uint64_t amount, - AccountID const& holder, - TxType const& txType); + AccountID const& holder); /** * @brief Generates a new secp256k1 key pair. diff --git a/src/libxrpl/protocol/ConfidentialTransfer.cpp b/src/libxrpl/protocol/ConfidentialTransfer.cpp index c76a56b4a6..b9bae2ab1c 100644 --- a/src/libxrpl/protocol/ConfidentialTransfer.cpp +++ b/src/libxrpl/protocol/ConfidentialTransfer.cpp @@ -10,23 +10,29 @@ void addCommonZKPFields( Serializer& s, std::uint16_t txType, + AccountID const& account, + std::uint32_t sequence, uint192 const& issuanceID, std::uint64_t amount) { s.add16(txType); + s.addBitString(account); + s.add32(sequence); s.addBitString(issuanceID); s.add64(amount); } uint256 -getContextHash( +getClawbackContextHash( + AccountID const& account, + std::uint32_t sequence, uint192 const& issuanceID, std::uint64_t amount, - AccountID const& holder, - TxType const& txType) + AccountID const& holder) { Serializer s; - addCommonZKPFields(s, txType, issuanceID, amount); + addCommonZKPFields( + s, ttCONFIDENTIAL_CLAWBACK, account, sequence, issuanceID, amount); s.addBitString(holder); diff --git a/src/test/jtx/impl/mpt.cpp b/src/test/jtx/impl/mpt.cpp index ae5ad83b80..0dfa55b64e 100644 --- a/src/test/jtx/impl/mpt.cpp +++ b/src/test/jtx/impl/mpt.cpp @@ -1097,8 +1097,9 @@ MPTTester::confidentialClaw(MPTConfidentialClawback const& arg) jv[sfZKProof] = *arg.proof; else { - uint256 const ctxHash = getContextHash( - *id_, *arg.amt, arg.holder->id(), ttCONFIDENTIAL_CLAWBACK); + std::uint32_t const seq = env_.seq(account); + uint256 const ctxHash = getClawbackContextHash( + account.id(), seq, *id_, *arg.amt, arg.holder->id()); Buffer proof = getClawbackProof( *arg.holder, *arg.amt, getPrivKey(account), ctxHash); diff --git a/src/xrpld/app/tx/detail/ConfidentialClawback.cpp b/src/xrpld/app/tx/detail/ConfidentialClawback.cpp index e67c43a133..9a32a5d037 100644 --- a/src/xrpld/app/tx/detail/ConfidentialClawback.cpp +++ b/src/xrpld/app/tx/detail/ConfidentialClawback.cpp @@ -87,8 +87,8 @@ ConfidentialClawback::preclaim(PreclaimContext const& ctx) auto const ciphertext = (*sleHolderMPToken)[sfIssuerEncryptedBalance]; auto const pubKeySlice = (*sleIssuance)[sfIssuerElGamalPublicKey]; - auto const contextHash = - getContextHash(mptIssuanceID, amount, holder, ctx.tx.getTxnType()); + auto const contextHash = getClawbackContextHash( + account, ctx.tx[sfSequence], mptIssuanceID, amount, holder); return verifyEqualityProof( amount, ctx.tx[sfZKProof], pubKeySlice, ciphertext, contextHash); }