本文整理汇总了C++中cryptonote::WalletGreen::getActualBalance方法的典型用法代码示例。如果您正苦于以下问题:C++ WalletGreen::getActualBalance方法的具体用法?C++ WalletGreen::getActualBalance怎么用?C++ WalletGreen::getActualBalance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类cryptonote::WalletGreen
的用法示例。
在下文中一共展示了WalletGreen::getActualBalance方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fullOptimize
void fullOptimize(CryptoNote::WalletGreen &wallet)
{
std::cout << "Attempting to optimize your wallet to allow you to "
<< "send large amounts at once. " << std::endl
<< WarningMsg("This may take a very long time!") << std::endl;
if (!confirm("Do you want to proceed?"))
{
std::cout << WarningMsg("Cancelling optimization.") << std::endl;
return;
}
for (int i = 1;;i++)
{
std::cout << InformationMsg("Running optimization round "
+ std::to_string(i) + "...")
<< std::endl;
/* Optimize as many times as possible until optimization is no longer
possible. */
if (!optimize(wallet, wallet.getActualBalance()))
{
break;
}
}
std::cout << SuccessMsg("Full optimization completed!") << std::endl;
}
示例2: balance
void balance(CryptoNote::INode &node, CryptoNote::WalletGreen &wallet,
bool viewWallet)
{
const uint64_t unconfirmedBalance = wallet.getPendingBalance();
const uint64_t confirmedBalance = wallet.getActualBalance();
const uint64_t totalBalance = unconfirmedBalance + confirmedBalance;
const uint32_t localHeight = node.getLastLocalBlockHeight();
const uint32_t remoteHeight = node.getLastKnownBlockHeight();
const uint32_t walletHeight = wallet.getBlockCount();
std::cout << "Available balance: "
<< SuccessMsg(formatAmount(confirmedBalance)) << std::endl
<< "Locked (unconfirmed) balance: "
<< WarningMsg(formatAmount(unconfirmedBalance))
<< std::endl << "Total balance: "
<< InformationMsg(formatAmount(totalBalance)) << std::endl;
if (viewWallet)
{
std::cout << std::endl
<< InformationMsg("Please note that view only wallets "
"can only track incoming transactions,")
<< std::endl
<< InformationMsg("and so your wallet balance may appear "
"inflated.") << std::endl;
}
if (localHeight < remoteHeight)
{
std::cout << std::endl
<< InformationMsg("Your daemon is not fully synced with "
"the network!")
<< std::endl
<< "Your balance may be incorrect until you are fully "
<< "synced!" << std::endl;
}
/* Small buffer because wallet height doesn't update instantly like node
height does */
else if (walletHeight + 1000 < remoteHeight)
{
std::cout << std::endl
<< InformationMsg("The blockchain is still being scanned for "
"your transactions.")
<< std::endl
<< "Balances might be incorrect whilst this is ongoing."
<< std::endl;
}
}
示例3: fusionTX
bool fusionTX(CryptoNote::WalletGreen &wallet,
CryptoNote::TransactionParameters p)
{
std::cout << WarningMsg("Your transaction is too large to be accepted by "
"the network!")
<< std::endl << "We're attempting to optimize your "
<< "wallet, which hopefully will make the transaction small "
<< "enough to fit in a block." << std::endl
<< "Please wait, this will take some time..." << std::endl
<< std::endl;
/* We could check if optimization succeeded, but it's not really needed
because we then check if the transaction is too large... it could have
potentially become valid because another payment came in. */
optimize(wallet, p.destinations[0].amount + p.fee);
const auto startTime = std::chrono::system_clock::now();
while (wallet.getActualBalance() < p.destinations[0].amount + p.fee)
{
/* Break after a minute just in case something has gone wrong */
if ((std::chrono::system_clock::now() - startTime) >
std::chrono::minutes(5))
{
std::cout << WarningMsg("Fusion transactions have "
"completed, however available "
"balance is less than transfer "
"amount specified.") << std::endl
<< WarningMsg("Transfer aborted, please review "
"and start a new transfer.")
<< std::endl;
return false;
}
std::cout << WarningMsg("Optimization completed, but balance "
"is not fully unlocked yet!")
<< std::endl
<< SuccessMsg("Will try again in 5 seconds...")
<< std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
}
return true;
}
示例4: sendMultipleTransactions
void sendMultipleTransactions(CryptoNote::WalletGreen &wallet,
std::vector<CryptoNote::TransactionParameters>
transfers)
{
size_t numTxs = transfers.size();
size_t currentTx = 1;
std::cout << "Your transaction has been split up into " << numTxs
<< " separate transactions of "
<< formatAmount(transfers[0].destinations[0].amount)
<< ". It may take some time to send all the transactions, "
<< "please be patient." << std::endl << std::endl;
for (auto tx : transfers)
{
while (true)
{
std::cout << "Attempting to send transaction "
<< InformationMsg(std::to_string(currentTx))
<< " of " << InformationMsg(std::to_string(numTxs))
<< std::endl;
wallet.updateInternalCache();
uint64_t neededBalance = tx.destinations[0].amount + tx.fee;
if (neededBalance < wallet.getActualBalance())
{
size_t id = wallet.transfer(tx);
CryptoNote::WalletTransaction sentTx
= wallet.getTransaction(id);
std::cout << SuccessMsg("Transaction has been sent!")
<< std::endl
<< SuccessMsg("Hash: "
+ Common::podToHex(sentTx.hash))
<< std::endl << std::endl;
break;
}
std::cout << "Not enough balance available to send transaction, "
<< "this is because some of your balance is used when "
<< "sending another transaction to help hide the size "
<< "of your transaction, and is locked for a short "
<< "time. It will return shortly." << std::endl
<< "Needed balance: " << formatAmount(neededBalance)
<< std::endl << "Available balance: "
<< formatAmount(wallet.getActualBalance())
<< std::endl << "Locked balance: "
<< formatAmount(wallet.getPendingBalance())
<< std::endl << "Will try again in 5 seconds..."
<< std::endl << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
}
currentTx++;
}
std::cout << SuccessMsg("All transactions sent!") << std::endl;
}
示例5: splitTx
void splitTx(CryptoNote::WalletGreen &wallet,
CryptoNote::TransactionParameters p)
{
std::cout << "Wallet optimization failed, transactions are still too large "
<< "to send in one chunk, splitting into multiple chunks."
<< std::endl << "This may take a long time as portions of your "
<< "balance get locked whilst sending a transaction."
<< std::endl << "It may also slightly raise the fee you have "
<< "to pay, and hence reduce the total amount you can send if "
<< "your balance cannot cover it." << std::endl;
if (!confirm("Is this OK?"))
{
std::cout << WarningMsg("Cancelling transaction.") << std::endl;
return;
}
CryptoNote::TransactionParameters restoreInitialTx = p;
uint64_t maxSize = wallet.getMaxTxSize();
size_t txSize = wallet.getTxSize(p);
uint64_t minFee = CryptoNote::parameters::MINIMUM_FEE;
for (int numTxMultiplier = 2; ; numTxMultiplier++)
{
p = restoreInitialTx;
int numTransactions
= int(numTxMultiplier *
(std::ceil(double(txSize) / double(maxSize))));
uint64_t feePerTx = std::max (p.fee / numTransactions, minFee);
uint64_t totalFee = feePerTx * numTransactions;
uint64_t totalCost = p.destinations[0].amount + totalFee;
if (totalCost > wallet.getActualBalance())
{
p.destinations[0].amount = wallet.getActualBalance() - totalFee;
}
uint64_t amountPerTx = p.destinations[0].amount / numTransactions;
uint64_t change = p.destinations[0].amount % numTransactions;
std::vector<CryptoNote::TransactionParameters> transfers;
for (int i = 0; i < numTransactions; i++)
{
CryptoNote::TransactionParameters tmp = p;
tmp.destinations[0].amount = amountPerTx;
tmp.fee = feePerTx;
transfers.push_back(tmp);
}
transfers[0].destinations[0].amount += change;
for (auto tx : transfers)
{
if (wallet.txIsTooLarge(tx))
{
std::cout << "Split up transactions are still too large! "
<< "Splitting up into smaller chunks." << std::endl;
continue;
}
}
sendMultipleTransactions(wallet, transfers);
return;
}
}
示例6: splitTx
void splitTx(CryptoNote::WalletGreen &wallet,
CryptoNote::TransactionParameters p)
{
std::cout << "Wallet optimization failed, transactions are still too large "
<< "to send in one chunk, splitting into multiple chunks."
<< std::endl << "This may take a long time as portions of your "
<< "balance get locked whilst sending a transaction."
<< std::endl << "It may also slightly raise the fee you have "
<< "to pay, and hence reduce the total amount you can send if "
<< "your balance cannot cover it." << std::endl;
if (!confirm("Is this OK?"))
{
std::cout << WarningMsg("Cancelling transaction.") << std::endl;
return;
}
CryptoNote::TransactionParameters restoreInitialTx = p;
uint64_t maxSize = wallet.getMaxTxSize();
size_t txSize = wallet.getTxSize(p);
uint64_t minFee = CryptoNote::parameters::MINIMUM_FEE;
for (int numTxMultiplier = 2; ; numTxMultiplier++)
{
/* We modify p a bit in this function, so restore back to initial
state each time */
p = restoreInitialTx;
/* We can't just evenly divide a transaction up to be < 115k bytes by
decreasing the amount we're sending, because depending upon the
inputs we might need to split into more transactions, so a good
start is attempting to split them into chunks of 55k bytes or so.
We then check at the end that each transaction is small enough, and
if not, we up the numTxMultiplier and try again with more
transactions. */
int numTransactions
= int(numTxMultiplier *
(std::ceil(double(txSize) / double(maxSize))));
/* Split the requested fee over each transaction, i.e. if a fee of 200
TRTL was requested and we split it into 4 transactions each one will
have a fee of 5 TRTL. If the fee per transaction is less than the
min fee, use the min fee. */
uint64_t feePerTx = std::max (p.fee / numTransactions, minFee);
uint64_t totalFee = feePerTx * numTransactions;
uint64_t totalCost = p.destinations[0].amount + totalFee;
/* If we have to use the minimum fee instead of splitting the total fee,
then it is possible the user no longer has the balance to cover this
transaction. So, we slightly lower the amount they are sending. */
if (totalCost > wallet.getActualBalance())
{
p.destinations[0].amount = wallet.getActualBalance() - totalFee;
}
uint64_t amountPerTx = p.destinations[0].amount / numTransactions;
/* Left over amount from integral division */
uint64_t change = p.destinations[0].amount % numTransactions;
std::vector<CryptoNote::TransactionParameters> transfers;
for (int i = 0; i < numTransactions; i++)
{
CryptoNote::TransactionParameters tmp = p;
tmp.destinations[0].amount = amountPerTx;
tmp.fee = feePerTx;
transfers.push_back(tmp);
}
/* Add the extra change to the first transaction */
transfers[0].destinations[0].amount += change;
for (auto tx : transfers)
{
/* One of the transfers is too large. Retry, cutting the
transactions into smaller pieces */
if (wallet.txIsTooLarge(tx))
{
std::cout << "Split up transactions are still too large! "
<< "Splitting up into smaller chunks." << std::endl;
continue;
}
}
sendMultipleTransactions(wallet, transfers);
return;
}
}