mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-28 22:45:49 +00:00
86 lines
2.6 KiB
C++
86 lines
2.6 KiB
C++
//------------------------------------------------------------------------------
|
|
/*
|
|
This file is part of rippled: https://github.com/ripple/rippled
|
|
Copyright (c) 2012, 2013 Ripple Labs Inc.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted, provided that the above
|
|
copyright notice and this permission notice appear in all copies.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
//==============================================================================
|
|
|
|
#include <ripple/app/tx/impl/ClaimReward.h>
|
|
#include <ripple/basics/Log.h>
|
|
#include <ripple/core/Config.h>
|
|
#include <ripple/ledger/View.h>
|
|
#include <ripple/protocol/Feature.h>
|
|
#include <ripple/protocol/Indexes.h>
|
|
#include <ripple/protocol/PublicKey.h>
|
|
#include <ripple/protocol/Quality.h>
|
|
#include <ripple/protocol/st.h>
|
|
|
|
namespace ripple {
|
|
|
|
TxConsequences
|
|
ClaimReward::makeTxConsequences(PreflightContext const& ctx)
|
|
{
|
|
return TxConsequences{ctx.tx, TxConsequences::normal};
|
|
}
|
|
|
|
NotTEC
|
|
ClaimReward::preflight(PreflightContext const& ctx)
|
|
{
|
|
if (auto const ret = preflight1(ctx); !isTesSuccess(ret))
|
|
return ret;
|
|
|
|
return preflight2(ctx);
|
|
}
|
|
|
|
TER
|
|
ClaimReward::preclaim(PreclaimContext const& ctx)
|
|
{
|
|
if (ctx.view.rules().enabled(featureBalanceRewards))
|
|
return temDISABLED;
|
|
|
|
auto const id = ctx.tx[sfAccount];
|
|
|
|
auto const sle = ctx.view.read(keylet::account(id));
|
|
if (!sle)
|
|
return terNO_ACCOUNT;
|
|
|
|
auto const issuer = ctx.tx[sfIssuer];
|
|
if (!ctx.view.exists(keylet::account(issuer)))
|
|
return tecNO_ISSUER;
|
|
|
|
return tesSUCCESS;
|
|
}
|
|
|
|
TER
|
|
ClaimReward::doApply()
|
|
{
|
|
auto const sle = view().peek(keylet::account(account_));
|
|
if (!sle)
|
|
return tefINTERNAL;
|
|
|
|
// all actual rewards are handled by the hook on the sfIssuer
|
|
// the tt just resets the counters
|
|
uint32_t lgrCur = view().seq();
|
|
sle->setFieldU32(sfRewardLgrFirst, lgrCur);
|
|
sle->setFieldU32(sfRewardLgrLast, lgrCur);
|
|
sle->setFieldU64(sfRewardAccumulator, 0ULL);
|
|
|
|
view().update(sle);
|
|
|
|
return tesSUCCESS;
|
|
}
|
|
|
|
} // namespace ripple
|