本文整理汇总了C++中Currency类的典型用法代码示例。如果您正苦于以下问题:C++ Currency类的具体用法?C++ Currency怎么用?C++ Currency使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Currency类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createVectorMainChainStorage
std::unique_ptr<IMainChainStorage> createVectorMainChainStorage(const Currency& currency) {
std::unique_ptr<IMainChainStorage> storage(new VectorMainChainStorage());
RawBlock genesis;
genesis.block = toBinaryArray(currency.genesisBlock());
storage->pushBlock(genesis);
return std::move(storage);
}
示例2:
FusionTransactionBuilder::FusionTransactionBuilder(const Currency& currency, uint64_t amount) :
m_currency(currency),
m_amount(amount),
m_firstInput(0),
m_firstOutput(0),
m_fee(0),
m_extraSize(0),
m_inputCount(currency.fusionTxMinInputCount()) {
}
示例3: to_string
std::string to_string(Currency const& currency)
{
static Currency const sIsoBits ("FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFF");
// Characters we are willing to allow in the ASCII representation of a
// three-letter currency code.
static std::string const allowed_characters =
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789"
"<>(){}[]|[email protected]#$%^&*";
if (currency == zero)
return systemCurrencyCode();
if (currency == vbcCurrency())
return systemCurrencyCodeVBC();
if (currency == noCurrency())
return "1";
if ((currency & sIsoBits).isZero ())
{
// The offset of the 3 character ISO code in the currency descriptor
int const isoOffset = 12;
std::string const iso(
currency.data () + isoOffset,
currency.data () + isoOffset + 3);
// Specifying the system currency code using ISO-style representation
// is not allowed.
if ((iso != systemCurrencyCode()) && (iso != systemCurrencyCodeVBC()) &&
(iso.find_first_not_of (allowed_characters) == std::string::npos))
{
return iso;
}
}
return strHex (currency.begin (), currency.size ());
}
示例4: innerResult
bool
AllowTrustOpFrame::doCheckValid()
{
if (mAllowTrust.currency.type() != CURRENCY_TYPE_ALPHANUM)
{
innerResult().code(ALLOW_TRUST_MALFORMED);
return false;
}
Currency ci;
ci.type(CURRENCY_TYPE_ALPHANUM);
ci.alphaNum().currencyCode = mAllowTrust.currency.currencyCode();
ci.alphaNum().issuer = getSourceID();
if (!isCurrencyValid(ci))
{
innerResult().code(ALLOW_TRUST_MALFORMED);
return false;
}
return true;
}
示例5: while
void TransactionDialog::changeCurrency(QComboBox *control, int index)
{
Account* acc = accounts->at(index);
QList<Currency*>* currency = acc->getCurrencyList();
control->clear();
QList<Currency*>::iterator i = currency->begin();
while(i != currency->end())
{
Currency *cur = (*i);
if (cur->isDisplay())
{
control->addItem(cur->getShortName(), cur->getId());
}
i++;
}
}
示例6: ValidateAndAcknowledgeTrade
void TradeHandler::ValidateAndAcknowledgeTrade(
AcceptCommit accept_commit)
{
uint160 accept_commit_hash = accept_commit.GetHash160();
uint160 commit_hash = accept_commit.order_commit_hash;
OrderCommit commit = msgdata[commit_hash]["commit"];
AcceptOrder accept;
accept = msgdata[commit.accept_order_hash]["accept_order"];
Order order = msgdata[accept.order_hash]["order"];
Currency currency = flexnode.currencies[order.currency];
vch_t payer_data, payee_data;
if (order.side == ASK)
{
payer_data = order.auxiliary_data;
payee_data = accept.auxiliary_data;
}
else
{
payee_data = order.auxiliary_data;
payer_data = accept.auxiliary_data;
}
if (!currency.ValidateProposedFiatTransaction(accept_commit_hash,
payer_data,
payee_data,
order.size))
{
log_ << "Could not validate fiat transaction!\n";
return;
}
tradedata[accept_commit_hash]["ttp_validated"] = true;
ThirdPartyTransactionAcknowledgement ack(accept_commit_hash);
ack.Sign();
uint160 ack_hash = ack.GetHash160();
tradedata[accept_commit_hash]["acknowledgement"] = ack_hash;
BroadcastMessage(ack);
}
示例7: getLedgerEntryRippleState
SLE::pointer
getLedgerEntryRippleState(Ledger::pointer ledger,
TestAccount const& account1, TestAccount const& account2,
Currency currency)
{
auto uNodeIndex = getRippleStateIndex(
account1.pk.getAccountID(), account2.pk.getAccountID(),
to_currency(currency.getCurrency()));
if (!uNodeIndex.isNonZero())
throw std::runtime_error(
"!uNodeIndex.isNonZero()");
return ledger->getSLEi(uNodeIndex);
}
示例8: to_currency
bool to_currency(Currency& currency, std::string const& code)
{
if (code.empty () || !code.compare (systemCurrencyCode()))
{
currency = zero;
return true;
}
if (code.empty() || !code.compare(systemCurrencyCodeVBC()))
{
currency = vbcCurrency();
return true;
}
static const int CURRENCY_CODE_LENGTH = 3;
if (code.size () == CURRENCY_CODE_LENGTH)
{
Blob codeBlob (CURRENCY_CODE_LENGTH);
std::transform (code.begin (), code.end (), codeBlob.begin (), ::toupper);
Serializer s;
s.addZeros (96 / 8);
s.addRaw (codeBlob);
s.addZeros (16 / 8);
s.addZeros (24 / 8);
s.get160 (currency, 0);
return true;
}
if (40 == code.size ())
return currency.SetHex (code);
return false;
}
示例9: rpcError
int PathRequest::parseJson (Json::Value const& jvParams, bool complete)
{
int ret = PFR_PJ_NOCHANGE;
if (jvParams.isMember (jss::source_account))
{
raSrcAccount = parseBase58<AccountID>(
jvParams[jss::source_account].asString());
if (! raSrcAccount)
{
jvStatus = rpcError (rpcSRC_ACT_MALFORMED);
return PFR_PJ_INVALID;
}
}
else if (complete)
{
jvStatus = rpcError (rpcSRC_ACT_MISSING);
return PFR_PJ_INVALID;
}
if (jvParams.isMember (jss::destination_account))
{
raDstAccount = parseBase58<AccountID>(
jvParams[jss::destination_account].asString());
if (! raDstAccount)
{
jvStatus = rpcError (rpcDST_ACT_MALFORMED);
return PFR_PJ_INVALID;
}
}
else if (complete)
{
jvStatus = rpcError (rpcDST_ACT_MISSING);
return PFR_PJ_INVALID;
}
if (jvParams.isMember (jss::destination_amount))
{
if (! amountFromJsonNoThrow (
saDstAmount, jvParams[jss::destination_amount]) ||
(saDstAmount.getCurrency ().isZero () &&
saDstAmount.getIssuer ().isNonZero ()) ||
(saDstAmount.getCurrency () == badCurrency ()) ||
saDstAmount <= zero)
{
jvStatus = rpcError (rpcDST_AMT_MALFORMED);
return PFR_PJ_INVALID;
}
}
else if (complete)
{
jvStatus = rpcError (rpcDST_ACT_MISSING);
return PFR_PJ_INVALID;
}
if (jvParams.isMember (jss::source_currencies))
{
Json::Value const& jvSrcCur = jvParams[jss::source_currencies];
if (!jvSrcCur.isArray ())
{
jvStatus = rpcError (rpcSRC_CUR_MALFORMED);
return PFR_PJ_INVALID;
}
sciSourceCurrencies.clear ();
for (unsigned i = 0; i < jvSrcCur.size (); ++i)
{
Json::Value const& jvCur = jvSrcCur[i];
Currency uCur;
AccountID uIss;
if (!jvCur.isObject() || !jvCur.isMember (jss::currency) ||
!to_currency (uCur, jvCur[jss::currency].asString ()))
{
jvStatus = rpcError (rpcSRC_CUR_MALFORMED);
return PFR_PJ_INVALID;
}
if (jvCur.isMember (jss::issuer) &&
!to_issuer (uIss, jvCur[jss::issuer].asString ()))
{
jvStatus = rpcError (rpcSRC_ISR_MALFORMED);
}
if (uCur.isZero () && uIss.isNonZero ())
{
jvStatus = rpcError (rpcSRC_CUR_MALFORMED);
return PFR_PJ_INVALID;
}
if (uCur.isNonZero() && uIss.isZero())
{
uIss = *raSrcAccount;
}
sciSourceCurrencies.insert ({uCur, uIss});
}
}
//.........这里部分代码省略.........
示例10: advancePeriodToDate
void BudgetBalancer::processItem(LedgerBudget const& budget)
{
// if there is a budget period, process recorded items until we are within
// range of this budget command
advancePeriodToDate(budget.date());
// if the current period started before today, or if it already has recorded
// commands, then end the period today and process what we have
if (m_period.startDate() != budget.date() || m_numRecords != 0)
{
m_period = DateRange(m_period.startDate(), budget.date());
allocateCategories();
processRecords();
}
// remove categories that are not in this budget command, or that have
// changed, and allocate their funds to the available category
auto categories = budget.categories();
for (auto it = m_categories.cbegin(); it != m_categories.cend(); ++it)
{
if (!categories.contains(it.key()) ||
categories[it.key()].type != it->type)
{
switch (it->type)
{
case LedgerBudget::Category::Type::GOAL:
// nothing to do for goals
break;
case LedgerBudget::Category::Type::INCOME:
// nothing to do for income type
break;
case LedgerBudget::Category::Type::RESERVE_AMOUNT:
{
Currency amount = m_reserveAmountAllocator.deallocate(it.key());
if (!amount.isZero())
{
emit message(budget,
QString("Reserve category '%1' was closed with "
"a balance of %2. Those funds are "
"available again.")
.arg(it.key())
.arg(amount.toString()));
}
m_available += amount;
break;
}
case LedgerBudget::Category::Type::RESERVE_PERCENT:
{
Currency amount = m_reservePercentAllocator.deallocate(it.key());
if (!amount.isZero())
{
emit message(budget,
QString("Reserve category '%1' was closed with "
"a balance of %2. Those funds are "
"available again.")
.arg(it.key())
.arg(amount.toString()));
}
m_available += amount;
break;
}
case LedgerBudget::Category::Type::ROUTINE:
m_routineAllocator.deallocate(it.key());
break;
}
}
}
// configure new and changed budget categories
for (auto it = categories.cbegin(); it != categories.cend(); ++it)
{
switch (it->type)
{
case LedgerBudget::Category::Type::GOAL:
m_goalAllocator.budget(budget.date());
break;
case LedgerBudget::Category::Type::INCOME:
// nothing to do for income
break;
case LedgerBudget::Category::Type::RESERVE_AMOUNT:
m_reserveAmountAllocator.budget(budget.date(), it.key(), it->amount,
it->interval);
break;
case LedgerBudget::Category::Type::RESERVE_PERCENT:
m_reservePercentAllocator.budget(it.key(), it->percentage);
break;
case LedgerBudget::Category::Type::ROUTINE:
// nothing to do for routine expenses
break;
}
}
m_categories = categories;
// reset the dates for the new period
m_period = DateRange(budget.date(), budget.interval());
}
示例11: innerResult
// work backward to determine how much they need to send to get the
// specified amount of currency to the recipient
bool
PaymentOpFrame::sendNoCreate(AccountFrame& destination, LedgerDelta& delta,
LedgerManager& ledgerManager)
{
Database& db = ledgerManager.getDatabase();
bool multi_mode = mPayment.path.size() != 0;
if (multi_mode)
{
innerResult().code(PAYMENT_SUCCESS_MULTI);
}
else
{
innerResult().code(PAYMENT_SUCCESS);
}
// tracks the last amount that was traded
int64_t curBReceived = mPayment.amount;
Currency curB = mPayment.currency;
// update balances, walks backwards
// update last balance in the chain
{
if (curB.type() == CURRENCY_TYPE_NATIVE)
{
destination.getAccount().balance += curBReceived;
destination.storeChange(delta, db);
}
else
{
TrustFrame destLine;
if (!TrustFrame::loadTrustLine(destination.getID(), curB, destLine,
db))
{
innerResult().code(PAYMENT_NO_TRUST);
return false;
}
if (!destLine.isAuthorized())
{
innerResult().code(PAYMENT_NOT_AUTHORIZED);
return false;
}
if (!destLine.addBalance(curBReceived))
{
innerResult().code(PAYMENT_LINE_FULL);
return false;
}
destLine.storeChange(delta, db);
}
if (multi_mode)
{
innerResult().multi().last =
SimplePaymentResult(destination.getID(), curB, curBReceived);
}
}
if (multi_mode)
{
// now, walk the path backwards
for (int i = (int)mPayment.path.size() - 1; i >= 0; i--)
{
int64_t curASent, actualCurBReceived;
Currency const& curA = mPayment.path[i];
OfferExchange oe(delta, ledgerManager);
// curA -> curB
OfferExchange::ConvertResult r =
oe.convertWithOffers(curA, INT64_MAX, curASent, curB,
curBReceived, actualCurBReceived, nullptr);
switch (r)
{
case OfferExchange::eFilterStop:
assert(false); // no filter -> should not happen
break;
case OfferExchange::eOK:
if (curBReceived == actualCurBReceived)
{
break;
}
// fall through
case OfferExchange::ePartial:
innerResult().code(PAYMENT_TOO_FEW_OFFERS);
return false;
}
assert(curBReceived == actualCurBReceived);
curBReceived = curASent; // next round, we need to send enough
curB = curA;
// add offers that got taken on the way
// insert in front to match the path's order
//.........这里部分代码省略.........
示例12: ToString
string ToString() { return CombineString(Currency.ToString(), DespoitType.ToString(),
date::to_iso_string(Period.begin()), date::to_iso_string(Period.end()),
date::to_iso_string(LastUpdateDate));
}
示例13: doRipplePathFind
// This interface is deprecated.
Json::Value doRipplePathFind (RPC::Context& context)
{
RPC::LegacyPathFind lpf (context.role == Role::ADMIN);
if (!lpf.isOk ())
return rpcError (rpcTOO_BUSY);
context.loadType = Resource::feeHighBurdenRPC;
RippleAddress raSrc;
RippleAddress raDst;
STAmount saDstAmount;
Ledger::pointer lpLedger;
Json::Value jvResult;
if (getConfig().RUN_STANDALONE ||
context.params.isMember(jss::ledger) ||
context.params.isMember(jss::ledger_index) ||
context.params.isMember(jss::ledger_hash))
{
// The caller specified a ledger
jvResult = RPC::lookupLedger (
context.params, lpLedger, context.netOps);
if (!lpLedger)
return jvResult;
}
if (!context.params.isMember ("source_account"))
{
jvResult = rpcError (rpcSRC_ACT_MISSING);
}
else if (!context.params["source_account"].isString ()
|| !raSrc.setAccountID (
context.params["source_account"].asString ()))
{
jvResult = rpcError (rpcSRC_ACT_MALFORMED);
}
else if (!context.params.isMember ("destination_account"))
{
jvResult = rpcError (rpcDST_ACT_MISSING);
}
else if (!context.params["destination_account"].isString ()
|| !raDst.setAccountID (
context.params["destination_account"].asString ()))
{
jvResult = rpcError (rpcDST_ACT_MALFORMED);
}
else if (
// Parse saDstAmount.
!context.params.isMember ("destination_amount")
|| ! amountFromJsonNoThrow(saDstAmount, context.params["destination_amount"])
|| saDstAmount <= zero
|| (!isXRP(saDstAmount.getCurrency ())
&& (!saDstAmount.getIssuer () ||
noAccount() == saDstAmount.getIssuer ())))
{
WriteLog (lsINFO, RPCHandler) << "Bad destination_amount.";
jvResult = rpcError (rpcINVALID_PARAMS);
}
else if (
// Checks on source_currencies.
context.params.isMember ("source_currencies")
&& (!context.params["source_currencies"].isArray ()
|| !context.params["source_currencies"].size ())
// Don't allow empty currencies.
)
{
WriteLog (lsINFO, RPCHandler) << "Bad source_currencies.";
jvResult = rpcError (rpcINVALID_PARAMS);
}
else
{
context.loadType = Resource::feeHighBurdenRPC;
RippleLineCache::pointer cache;
if (lpLedger)
{
// The caller specified a ledger
lpLedger = std::make_shared<Ledger> (std::ref (*lpLedger), false);
cache = std::make_shared<RippleLineCache>(lpLedger);
}
else
{
// The closed ledger is recent and any nodes made resident
// have the best chance to persist
lpLedger = context.netOps.getClosedLedger();
cache = getApp().getPathRequests().getLineCache(lpLedger, false);
}
Json::Value jvSrcCurrencies;
if (context.params.isMember ("source_currencies"))
{
jvSrcCurrencies = context.params["source_currencies"];
}
else
{
auto currencies = accountSourceCurrencies (raSrc, cache, true);
jvSrcCurrencies = Json::Value (Json::arrayValue);
//.........这里部分代码省略.........
示例14: ripplePathFind
std::pair<bool, Json::Value>
ripplePathFind(RippleLineCache::pointer const& cache,
RippleAddress const& raSrc, RippleAddress const& raDst,
STAmount const& saDstAmount, Ledger::pointer const& lpLedger,
Json::Value const& jvSrcCurrencies,
boost::optional<Json::Value> const& contextPaths, int const& level)
{
FindPaths fp(
cache,
raSrc.getAccountID(),
raDst.getAccountID(),
saDstAmount,
level,
4); // max paths
Json::Value jvArray(Json::arrayValue);
for (unsigned int i = 0; i != jvSrcCurrencies.size(); ++i)
{
Json::Value jvSource = jvSrcCurrencies[i];
Currency uSrcCurrencyID;
Account uSrcIssuerID;
if (!jvSource.isObject())
return std::make_pair(false, rpcError(rpcINVALID_PARAMS));
// Parse mandatory currency.
if (!jvSource.isMember(jss::currency)
|| !to_currency(
uSrcCurrencyID, jvSource[jss::currency].asString()))
{
WriteLog(lsINFO, RPCHandler) << "Bad currency.";
return std::make_pair(false, rpcError(rpcSRC_CUR_MALFORMED));
}
if (uSrcCurrencyID.isNonZero())
uSrcIssuerID = raSrc.getAccountID();
// Parse optional issuer.
if (jvSource.isMember(jss::issuer) &&
((!jvSource[jss::issuer].isString() ||
!to_issuer(uSrcIssuerID, jvSource[jss::issuer].asString())) ||
(uSrcIssuerID.isZero() != uSrcCurrencyID.isZero()) ||
(noAccount() == uSrcIssuerID)))
{
WriteLog(lsINFO, RPCHandler) << "Bad issuer.";
return std::make_pair(false, rpcError(rpcSRC_ISR_MALFORMED));
}
STPathSet spsComputed;
if (contextPaths)
{
Json::Value pathSet = Json::objectValue;
pathSet[jss::Paths] = contextPaths.get();
STParsedJSONObject paths("pathSet", pathSet);
if (paths.object.get() == nullptr)
return std::make_pair(false, paths.error);
else
{
spsComputed = paths.object.get()->getFieldPathSet(sfPaths);
WriteLog(lsTRACE, RPCHandler) << "ripple_path_find: Paths: " <<
spsComputed.getJson(0);
}
}
STPath fullLiquidityPath;
auto valid = fp.findPathsForIssue(
{ uSrcCurrencyID, uSrcIssuerID },
spsComputed,
fullLiquidityPath);
if (!valid)
{
WriteLog(lsWARNING, RPCHandler)
<< "ripple_path_find: No paths found.";
}
else
{
auto& issuer =
isXRP(uSrcIssuerID) ?
isXRP(uSrcCurrencyID) ? // Default to source account.
xrpAccount() :
Account(raSrc.getAccountID())
: uSrcIssuerID; // Use specifed issuer.
STAmount saMaxAmount({ uSrcCurrencyID, issuer }, 1);
saMaxAmount.negate();
LedgerEntrySet lesSandbox(lpLedger, tapNONE);
auto rc = path::RippleCalc::rippleCalculate(
lesSandbox,
saMaxAmount, // --> Amount to send is unlimited
// to get an estimate.
saDstAmount, // --> Amount to deliver.
raDst.getAccountID(), // --> Account to deliver to.
raSrc.getAccountID(), // --> Account sending from.
spsComputed); // --> Path set.
//.........这里部分代码省略.........
示例15: rpcError
int PathRequest::parseJson (const Json::Value& jvParams, bool complete)
{
int ret = PFR_PJ_NOCHANGE;
if (jvParams.isMember ("source_account"))
{
if (!raSrcAccount.setAccountID (jvParams["source_account"].asString ()))
{
jvStatus = rpcError (rpcSRC_ACT_MALFORMED);
return PFR_PJ_INVALID;
}
}
else if (complete)
{
jvStatus = rpcError (rpcSRC_ACT_MISSING);
return PFR_PJ_INVALID;
}
if (jvParams.isMember ("destination_account"))
{
if (!raDstAccount.setAccountID (jvParams["destination_account"].asString ()))
{
jvStatus = rpcError (rpcDST_ACT_MALFORMED);
return PFR_PJ_INVALID;
}
}
else if (complete)
{
jvStatus = rpcError (rpcDST_ACT_MISSING);
return PFR_PJ_INVALID;
}
if (jvParams.isMember ("destination_amount"))
{
if (!saDstAmount.bSetJson (jvParams["destination_amount"]) ||
(saDstAmount.getCurrency ().isZero () && saDstAmount.getIssuer ().isNonZero ()) ||
(saDstAmount.getCurrency () == badCurrency()) ||
saDstAmount <= zero)
{
jvStatus = rpcError (rpcDST_AMT_MALFORMED);
return PFR_PJ_INVALID;
}
}
else if (complete)
{
jvStatus = rpcError (rpcDST_ACT_MISSING);
return PFR_PJ_INVALID;
}
if (jvParams.isMember ("source_currencies"))
{
const Json::Value& jvSrcCur = jvParams["source_currencies"];
if (!jvSrcCur.isArray ())
{
jvStatus = rpcError (rpcSRC_CUR_MALFORMED);
return PFR_PJ_INVALID;
}
sciSourceCurrencies.clear ();
for (unsigned i = 0; i < jvSrcCur.size (); ++i)
{
const Json::Value& jvCur = jvSrcCur[i];
Currency uCur;
Account uIss;
if (!jvCur.isObject() || !jvCur.isMember ("currency") ||
!to_currency (uCur, jvCur["currency"].asString ()))
{
jvStatus = rpcError (rpcSRC_CUR_MALFORMED);
return PFR_PJ_INVALID;
}
if (jvCur.isMember ("issuer") &&
!to_issuer (uIss, jvCur["issuer"].asString ()))
{
jvStatus = rpcError (rpcSRC_ISR_MALFORMED);
}
if (uCur.isZero () && uIss.isNonZero ())
{
jvStatus = rpcError (rpcSRC_CUR_MALFORMED);
return PFR_PJ_INVALID;
}
sciSourceCurrencies.insert ({uCur, uIss});
}
}
if (jvParams.isMember ("id"))
jvId = jvParams["id"];
return ret;
}