Skip to content

Commit

Permalink
Spend remaining sigma coins in lelantustospark rpc
Browse files Browse the repository at this point in the history
  • Loading branch information
levonpetrosyan93 committed Oct 28, 2023
1 parent 0414c97 commit 4a91cbb
Showing 1 changed file with 19 additions and 9 deletions.
28 changes: 19 additions & 9 deletions src/wallet/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5759,6 +5759,8 @@ CWalletTx CWallet::SpendAndStoreSpark(

bool CWallet::LelantusToSpark(std::string& strFailReason) {
std::list<CLelantusEntry> coins = GetAvailableLelantusCoins();
std::list<CSigmaEntry> sigmaCoins = GetAvailableCoins();

CScript scriptChange;
{
// Reserve a new key pair from key pool
Expand All @@ -5774,21 +5776,29 @@ bool CWallet::LelantusToSpark(std::string& strFailReason) {
scriptChange = GetScriptForDestination(vchPubKey.GetID());
}

while (coins.size() > 0) {
while (coins.size() > 0 || sigmaCoins.size() > 0) {
bool addMoreCoins = true;
std::size_t selectedNum = 0;
CCoinControl coinControl;
CAmount spendValue = 0;
while (true) {
auto coin = coins.begin();
COutPoint outPoint;
lelantus::GetOutPoint(outPoint, coin->value);
coinControl.Select(outPoint);
spendValue += coin->amount;
selectedNum ++;
coins.erase(coin);
if (!coins.size())
break;
if (sigmaCoins.size() > 0) {
auto coin = sigmaCoins.begin();
sigma::GetOutPoint(outPoint, coin->value);
coinControl.Select(outPoint);
spendValue += coin->get_denomination_value();
selectedNum++;
sigmaCoins.erase(coin);
} else if (coins.size() > 0) {
auto coin = coins.begin();
lelantus::GetOutPoint(outPoint, coin->value);
coinControl.Select(outPoint);
spendValue += coin->amount;
selectedNum++;
coins.erase(coin);
} else
break;

if ((spendValue + coins.begin()->amount) > Params().GetConsensus().nMaxValueLelantusSpendPerTransaction)
break;
Expand Down

0 comments on commit 4a91cbb

Please sign in to comment.