Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.49 KB | None | 0 0
  1.     auto sb = ScriptBuilder::BeginScript()
  2.         .AllowGas(gasWallet, Address(), MinimumGasFee, 1500 + 500 * itemIds.size() + item.failures * 1000 + item.valueTTRS.size() * 500);
  3.     for( int64_t itemId : itemIds )
  4.     {
  5.         GOATiNftType type = TypeFromItemId(itemId);
  6.         const Byte* extraData = 0;
  7.         int extraDataSize = 0;
  8.         int64_t salt;
  9.         if( GOATiNftType::Crate == type )
  10.         {
  11.             salt = crateSecrets.back().salt;
  12.             extraData = crateSecrets.back().data;
  13.             extraDataSize = CrateSecret::LENGTH;
  14.         }
  15.         else
  16.         {
  17.             salt = RandomSeed64();
  18.             if( GOATiNftType::License == type )
  19.             {
  20.                 extraData = &licenses.back().front();
  21.                 extraDataSize = (int)licenses.back().size();
  22.             }
  23.         }
  24.  
  25.         auto stateId = mintingState.nftMintingStateId.find(itemId);
  26.         if( stateId == mintingState.nftMintingStateId.end() )
  27.         {
  28.             TxLog(item.txHash, "\tCan't find minting state for NFT (%d)!", (int)itemId);
  29.             return {};
  30.         }
  31.         TxLog(item.txHash, "\tPurchasing NFT (%d)", (int)itemId);
  32.  
  33.         eiASSERT( itemId >= 0 );
  34.         MintItem(sb, tokenWallet, customer, itemId, stateId->second,
  35.             GOATiNftMintingSource::Store,
  36.             storeSource,
  37.             GOATiNftSeason::PreSeason, item.txTimestamp, salt, extraData, extraDataSize);
  38.         if( GOATiNftType::Crate == type )
  39.             crateSecrets.pop_back();
  40.         if( GOATiNftType::License == type )
  41.             licenses.pop_back();
  42.     }
  43.     for( int64_t itemId : bundles )
  44.     {//Update the "minted" counter for the bundles that were purchased
  45.         auto stateId = mintingState.nftMintingStateId.find(itemId);
  46.         if( stateId == mintingState.nftMintingStateId.end() )
  47.         {
  48.             TxLog(item.txHash, "\tCan't find minting state for NFT (%d)!", (int)itemId);
  49.             return {};
  50.         }
  51.         IncrementRAM(sb, String("TTRS"), stateId->second);
  52.     }
  53.  
  54.     if( hasReferral )
  55.     {//Mint the referral bonus
  56.         sb
  57.             .MintTokens(rde::string("GOATI"), tokenWallet, customer, referralBonusGOATI)
  58.             .MintTokens(rde::string("GOATI"), tokenWallet, cart.referrer, referralBonusGOATI);
  59.     }
  60.  
  61.     if( hasRevenueInGOATi )
  62.     {// destroy any GOATI being earned by the auction/shop wallet, and move the prize pool split out
  63.         sb.BurnTokens(shop, rde::string("GOATI"), revenueGOATI);
  64.         sb.TransferTokens(rde::string("GOATI"), shop, keys.prizePool, prizePoolGOATI);
  65.     }
  66.     if( hasRevenueInSoul )
  67.     {// move our revenue out of the auction/shop wallet
  68.         sb.TransferTokens(rde::string("SOUL"), shop, keys.stash.Address(), revenueSOUL);
  69.         sb.TransferTokens(rde::string("SOUL"), shop, keys.prizePool, prizePoolSOUL);
  70.     }
  71.  
  72.     if( hasRefundInSoul )
  73.     {
  74.         sb.TransferTokens(rde::string("SOUL"), shop, customer, cart.refundInSOUL);
  75.     }
  76.     if( hasRefundInGOATi )
  77.     {
  78.         sb.TransferTokens(rde::string("GOATI"), shop, customer, cart.refundInGOATI);
  79.     }
  80.  
  81.     if( openingCrate )
  82.     {
  83.         //Write the audit trail into the now-opened crates before burning them
  84.         eiASSERT( cart.fromCrate.size() == cart.openCrateRam.size() );
  85.         for( int i=0, end=cart.fromCrate.size(); i!=end; ++i )
  86.         {
  87.             const BigInteger& crateId = cart.fromCrate[i];
  88.             sb.WriteToken(rde::string("TTRS"), crateId, cart.openCrateRam[i]);
  89.             sb.BurnToken(shop, rde::string("TTRS"), crateId);
  90.         }
  91.         for( int i=0, end=cart.returnItems.size(); i!=end; ++i )
  92.         {
  93.             const BigInteger& crateId = cart.returnItems[i];
  94.             sb.TransferToken(rde::string("TTRS"), shop, customer, crateId);
  95.         }
  96.     }
  97.     else
  98.     {
  99.         eiASSERT( cart.returnItems.empty() );
  100.         for( const auto& id : item.valueTTRS )
  101.         {//return any items they sent us - wtf
  102.             sb.TransferToken(rde::string("TTRS"), shop, customer, id);
  103.         }
  104.     }
  105.     auto script = sb
  106.         .SpendGas(gasWallet)
  107.         .EndScript();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement