diff --git a/src/ripple/app/tx/impl/ClaimReward.cpp b/src/ripple/app/tx/impl/ClaimReward.cpp index d92b10bdc..6bfd7bdb5 100644 --- a/src/ripple/app/tx/impl/ClaimReward.cpp +++ b/src/ripple/app/tx/impl/ClaimReward.cpp @@ -95,6 +95,8 @@ ClaimReward::doApply() sle->makeFieldAbsent(sfRewardLgrLast); if (sle->isFieldPresent(sfRewardAccumulator)) sle->makeFieldAbsent(sfRewardAccumulator); + if (sle->isFieldPresent(sfRewardTime)) + sle->makeFieldAbsent(sfRewardTime); } else { @@ -104,6 +106,15 @@ ClaimReward::doApply() sle->setFieldU32(sfRewardLgrFirst, lgrCur); sle->setFieldU32(sfRewardLgrLast, lgrCur); sle->setFieldU64(sfRewardAccumulator, 0ULL); + sle->setFieldU32(sfRewardTime, + std::chrono::duration_cast + ( + ctx_.app.getLedgerMaster() + .getValidatedLedger()->info() + .parentCloseTime + .time_since_epoch() + ).count()); + } view().update(sle); diff --git a/src/ripple/protocol/SField.h b/src/ripple/protocol/SField.h index dd8c9cce2..c54ffb5f4 100644 --- a/src/ripple/protocol/SField.h +++ b/src/ripple/protocol/SField.h @@ -401,6 +401,7 @@ extern SF_UINT32 const sfBurnedNFTokens; extern SF_UINT32 const sfHookStateCount; extern SF_UINT32 const sfEmitGeneration; extern SF_UINT32 const sfLockCount; +extern SF_UINT32 const sfRewardTime; extern SF_UINT32 const sfRewardLgrFirst; extern SF_UINT32 const sfRewardLgrLast; diff --git a/src/ripple/protocol/impl/LedgerFormats.cpp b/src/ripple/protocol/impl/LedgerFormats.cpp index 7ea2819cc..db93d2e52 100644 --- a/src/ripple/protocol/impl/LedgerFormats.cpp +++ b/src/ripple/protocol/impl/LedgerFormats.cpp @@ -59,6 +59,7 @@ LedgerFormats::LedgerFormats() {sfHookNamespaces, soeOPTIONAL}, {sfRewardLgrFirst, soeOPTIONAL}, {sfRewardLgrLast, soeOPTIONAL}, + {sfRewardTime, soeOPTIONAL}, {sfRewardAccumulator, soeOPTIONAL} }, commonFields); diff --git a/src/ripple/protocol/impl/SField.cpp b/src/ripple/protocol/impl/SField.cpp index 4e75bd760..8343b6021 100644 --- a/src/ripple/protocol/impl/SField.cpp +++ b/src/ripple/protocol/impl/SField.cpp @@ -152,8 +152,9 @@ CONSTRUCT_TYPED_SFIELD(sfHookStateCount, "HookStateCount", UINT32, CONSTRUCT_TYPED_SFIELD(sfEmitGeneration, "EmitGeneration", UINT32, 46); CONSTRUCT_TYPED_SFIELD(sfLockCount, "LockCount", UINT32, 47); -CONSTRUCT_TYPED_SFIELD(sfRewardLgrFirst, "RewardLgrFirst", UINT32, 99); -CONSTRUCT_TYPED_SFIELD(sfRewardLgrLast, "RewardLgrLast", UINT32, 100); +CONSTRUCT_TYPED_SFIELD(sfRewardTime, "RewardTime", UINT32, 98); +CONSTRUCT_TYPED_SFIELD(sfRewardLgrFirst, "RewardLgrFirst", UINT32, 99); +CONSTRUCT_TYPED_SFIELD(sfRewardLgrLast, "RewardLgrLast", UINT32, 100); // 64-bit integers (common) CONSTRUCT_TYPED_SFIELD(sfIndexNext, "IndexNext", UINT64, 1);