diff --git a/Modules/Common/RippleLikeFTModule.php b/Modules/Common/RippleLikeFTModule.php index 3fd571b..475bc4e 100644 --- a/Modules/Common/RippleLikeFTModule.php +++ b/Modules/Common/RippleLikeFTModule.php @@ -1,8 +1,8 @@ select_node(), params: [ @@ -157,338 +156,383 @@ final public function pre_process_block($block_id) foreach ($tx_data as $tx) { $tx = $tx['result']; - $currency = null; - $amount = '0'; - $issuer = null; - $account = $tx['Account']; + $currency = null; // IN ONE transaction can be SEVERAL currencies + $amount = null; if (!isset($tx['meta'])) throw new ModuleException("Transactions haven't been fully processed by the node yet"); - $tx_result = $tx['meta']['TransactionResult'] === 'tesSUCCESS' ? false : true; // yes, it's success but for is_failed it will be correct + $tx_result = !($tx['meta']['TransactionResult'] === 'tesSUCCESS'); // yes, it's success but for is_failed it will be correct + $currencies_in_tx = []; // an array with currencies from tx in currency.issuer format switch($tx['TransactionType']) { - case 'CheckCash': + // https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0039d-clawback#332-example-clawback-transaction + // https://github.com/XRPLF/rippled/blob/2d1854f354ff8bb2b5671fd51252c5acd837c433/src/ripple/app/tx/impl/Clawback.cpp#L55 + // In source code we can see that for accounts it's possible to have negative balance + // However, in our realization we have bcsub(NEW, BEFORE) that returns negative in a case when NEW < BEFORE + case "Clawback": { - $account_destination = null; - $account = null; - if (is_array($tx['Amount'])) - { - $currency = $tx['Amount']['currency']; - $amount = $this->to_96($tx['Amount']['value']); - $issuer = $tx['Amount']['issuer']; - } else { - break; - } - if (isset($tx['meta']['AffectedNodes'])) + foreach ($tx['meta']['AffectedNodes'] ?? [] as $id => $affection) { - $affected_nodes = $tx['meta']['AffectedNodes']; - foreach ($affected_nodes as $id => $affection) + if (isset($affection['ModifiedNode']) && $affection['ModifiedNode']['LedgerEntryType'] === 'RippleState') { - if (isset($affection['DeletedNode'])) // this means that check that was created by account in meta - { // will be deleted and money will come to Destination. - if ($affection['DeletedNode']['LedgerEntryType'] === 'Check') - { - $account_destination = $affection['DeletedNode']['FinalFields']['Destination']; - $account = $affection['DeletedNode']['FinalFields']['Account']; - break; - } - } + // problem that ripple developers don't want add new fields to their API + // so we have to take a real issuer/currency from another fields, not from Amount['issuer'] + // btw in source code they do this: + // ```cpp + // AccountID const& issuer = account_; + // STAmount clawAmount = ctx_.tx[sfAmount]; + // AccountID const holder = clawAmount.getIssuer(); // cannot be reference + // ``` + $issuer = $tx['Account']; + $currency = $tx['Amount']['currency']; + // the difference should always be > 0 + $claw_back = bcsub( + $this->bcabs($this->to_96($affection['ModifiedNode']['PreviousFields']['Balance']['value'])), + $this->bcabs($this->to_96($affection['ModifiedNode']['FinalFields']['Balance']['value'])) + ); + $holder = $tx['Amount']['issuer']; + $events[] = [ + 'currency' => $currency . '.' . $issuer, + 'transaction' => $tx['hash'], + 'address' => $holder, + 'sort_key' => $sort_key++, + 'effect' => '-' . $claw_back, + 'failed' => $tx_result, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $events[] = [ + 'currency' => $currency . '.' . $issuer, + 'transaction' => $tx['hash'], + 'address' => $issuer, + 'sort_key' => $sort_key++, + 'effect' => $claw_back, + 'failed' => $tx_result, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $this->insert_currency_to_process($currency_by_id, $currency . '.' . $issuer); + break; } - } else { - throw new ModuleError("Incorrect flow for CheckCash"); } - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => '-' . $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $account_destination, - 'sort_key' => $sort_key++, - 'effect' => $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; break; } - case 'Payment': + // in NFT we have two ways of selling it: + // - p2p + // - brokers + // It's very interesting, if one of the payment (broker fee a.e.) is in tokens and others in XRP? -- No it's imposible by SC + // funny situation with this transfer 015C6C15DED3E76A089321BDA9090B718F32EA3925DB188EC88DA6B77180BF76 + // here we have a suitable transfer, but it ends with error and doesn't contain meta any offers -- Now will not affect us + // so we need to make a third wheel for bike ;(0) + // sell offer example 356DE89390EBB12E621D6AE8EF89F1A4B6184013EB8E94AB84F2A1D8AB9ED3E6 + // buy offer haven't found + // By the Ripple code it's important to check Flag, but we don't do it because glue_balances magic will solve it + // we just need a currency + // ```cpp + // bool const isSell = offer->isFlag(lsfSellNFToken); + // AccountID const owner = (*offer)[sfOwner]; + // AccountID const& seller = isSell ? owner : account_; + // AccountID const& buyer = isSell ? account_ : owner; + // ``` + case 'NFTokenAcceptOffer': { - if (is_array($tx['Amount'])) + if(isset($tx['NFTokenBrokerFee']) && is_array($tx['NFTokenBrokerFee']) && count($tx['NFTokenBrokerFee']) > 1) { - $currency = $tx['Amount']['currency']; - $amount = $this->to_96($tx['Amount']['value']); // situation is the same - $issuer = $tx['Amount']['issuer']; - } else { + $currencies_in_tx[] = $tx['NFTokenBrokerFee']['currency'] . '.' . $tx['NFTokenBrokerFee']['issuer']; break; + } else { + foreach ($tx['meta']['AffectedNodes'] ?? [] as $id => $affection) + { + if (isset($affection['DeletedNode']) && $affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer' && + is_array($affection['DeletedNode']['FinalFields']['Amount'])) + { + $currencies_in_tx[] = $affection['DeletedNode']['FinalFields']['Amount']['currency'] . '.' . + $affection['DeletedNode']['FinalFields']['Amount']['issuer']; + break; + } + } } - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => '-' . $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $tx['Destination'], - 'sort_key' => $sort_key++, - 'effect' => $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - break; + // i'd like to use here goto } - case 'NFTokenAcceptOffer': + case 'AMMBid': + case 'AMMCreate': + case 'AMMDeposit': + case 'AMMWithdraw': + case 'AMMDelete': + { + foreach ($tx['meta']['AffectedNodes'] ?? [] as $id => $affection) { - // in NFT we have two ways of selling it: - // - p2p - // - brokers - // It's very interesting, if one of the payment (broker fee a.e.) is in tokens and others in XRP? - - // funny situation with this transfer 015C6C15DED3E76A089321BDA9090B718F32EA3925DB188EC88DA6B77180BF76 - // here we have a suitable transfer, but it ends with error and doesn't contain meta any offers - // so we need to make a third wheel for bike ;(0) - $broker_op = isset($tx['NFTokenBrokerFee']); - $prev_pay = '0'; - $pay = '0'; - $new_owner = null; - $prev_owner = null; - $broker_fee = '0'; - $flag_assets = 0; - if ($broker_op) + if (isset($affection['ModifiedNode']) || isset($affection['DeletedNode'])) { - if (is_array($tx['NFTokenBrokerFee'])) + $affected = $affection['ModifiedNode'] ?? $affection['DeletedNode']; + if($affected['LedgerEntryType'] === 'AMM') { - $currency = $tx['NFTokenBrokerFee']['currency']; - $broker_fee = $this->to_96($tx['NFTokenBrokerFee']['value']); - $issuer = $tx['NFTokenBrokerFee']['issuer']; - $flag_assets++; + $currencies_in_tx[] = $affected['FinalFields']['LPTokenBalance']['currency'] . '.' . + $affected['FinalFields']['Account']; + break; } } - if (isset($tx['meta']['AffectedNodes'])) + if (isset($affection['CreatedNode']) && $affection['LedgerEntryType'] === 'AMM') + { + $currencies_in_tx[] = $affection['CreatedNode']['NewFields']['LPTokenBalance']['currency'] . '.' . + $affection['CreatedNode']['NewFields']['Account']; + break; + } + } + } + case 'Payment': + { + if(isset($tx['SendMax']) && is_array($tx['SendMax']) && count($tx['SendMax']) > 1) + { + $currencies_in_tx[] = $tx['SendMax']['currency'] . '.' . $tx['SendMax']['issuer']; + } + if(isset($tx['Paths']) && is_array($tx['Paths'])) + { + foreach($tx['Paths'] as $path) // https://github.com/XRPLF/rippled/blob/2d1854f354ff8bb2b5671fd51252c5acd837c433/src/ripple/app/paths/impl/PaySteps.cpp#L539 { - $affected_nodes = $tx['meta']['AffectedNodes']; - foreach ($affected_nodes as $id => $affection) + for($i = 0; $i < count($path); $i++) // https://github.com/XRPLF/rippled/blob/2d1854f354ff8bb2b5671fd51252c5acd837c433/src/ripple/app/paths/impl/PaySteps.cpp#L286 { - if (isset($affection['DeletedNode'])) { - if (!$broker_op && $affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer') - { - $prev_owner = $affection['DeletedNode']['FinalFields']['Owner']; - $new_owner = $tx['Account']; - if (is_array($affection['DeletedNode']['FinalFields']['Amount'])) - { - if((!is_null($currency) && !is_null($issuer)) && ($currency . '.' . $issuer) !== $affection['DeletedNode']['FinalFields']['Amount']['currency'] . '.' . - $affection['DeletedNode']['FinalFields']['Amount']['issuer']) - { - throw new ModuleError("Change of currency in NFTokenAcceptOffer"); - } - $pay = $this->to_96($affection['DeletedNode']['FinalFields']['Amount']['value']); - $flag_assets++; - } - break; - } - if ($broker_op && $affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer') - { - // https://xrpl.org/nftokencreateoffer.html#nftokencreateoffer-flags - if ($affection['DeletedNode']['FinalFields']['Flags'] == 0) // it means that it's NFT buy offer - { - $new_owner = $affection['DeletedNode']['FinalFields']['Owner']; - if (is_array($affection['DeletedNode']['FinalFields']['Amount'])) - { - if((!is_null($currency) && !is_null($issuer)) && - ($currency . '.' . $issuer) !== - $affection['DeletedNode']['FinalFields']['Amount']['currency'] . '.' . - $affection['DeletedNode']['FinalFields']['Amount']['issuer']) - { - throw new ModuleError("Change of currency in NFTokenAcceptOffer"); - } - $pay = $this->to_96($affection['DeletedNode']['FinalFields']['Amount']['value']); - $flag_assets++; - } - } - if ($affection['DeletedNode']['FinalFields']['Flags'] == 1) // it means that it's NFT sell offer - { - $prev_owner = $affection['DeletedNode']['FinalFields']['Owner']; - if (is_array($affection['DeletedNode']['FinalFields']['Amount'])) - { - if((!is_null($currency) && !is_null($issuer)) && - ($currency . '.' . $issuer) !== - $affection['DeletedNode']['FinalFields']['Amount']['currency'] . '.' . - $affection['DeletedNode']['FinalFields']['Amount']['issuer']) - { - throw new ModuleError("Change of currency in NFTokenAcceptOffer"); - } - $prev_pay = $this->to_96($affection['DeletedNode']['FinalFields']['Amount']['value']); - $flag_assets++; - } - } - } + if(isset($path[$i]['account'])) + { + continue; + } + if(isset($path[$i]['issuer']) && isset($path[$i]['currency'])) + { + $currencies_in_tx[] =$path[$i]['currency'] . '.' . $path[$i]['issuer']; + continue; + } + if(isset($path[$i]['issuer']) && !isset($path[$i]['currency'])) + { + if($i === 0) + throw new ModuleError("Unknown situation, needs to be solved in tx: " . $tx['hash']); + $currencies_in_tx[] =$path[$i - 1]['currency'] . '.' . $path[$i]['issuer']; + continue; + } + if(!isset($path[$i]['issuer']) && isset($path[$i]['currency'])) + { + if($path[$i]['currency'] !== 'XRP') + throw new ModuleError("Unknown situation, needs to be solved in tx: " . $tx['hash']); } } } - if(!$flag_assets) + } + + } + case 'CheckCash': + case 'OfferCreate': + { + // for correct working we should correctly find currency and issuer + // Maybe it's better to make a pool of assets and don't care about what equals to what??? + // the key currency.issuer should be unique for all of it + if(isset($tx['Asset']) && is_array($tx['Asset']) && count($tx['Asset']) > 1) { - break; + $currencies_in_tx[] = $tx['Asset']['currency'] . '.' . $tx['Asset']['issuer']; } - if($broker_op && is_null($prev_owner) && is_null($new_owner)) - { // this is for situation when the transaction fallen - // mostly in this situations we don't need to pay anything in Token module - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $tx['Account'], - 'sort_key' => $sort_key++, - 'effect' => '-0', - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => 'the-void', - 'sort_key' => $sort_key++, - 'effect' => '0', - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $currency = null; + if(isset($tx['Asset2']) && is_array($tx['Asset2']) && count($tx['Asset2']) > 1) + { + $currencies_in_tx[] = $tx['Asset2']['currency']. '.' . $tx['Asset2']['issuer']; + } + if(isset($tx['Amount']) && is_array($tx['Amount']) && count($tx['Amount']) > 1) + { + $currencies_in_tx[] = $tx['Amount']['currency'] . '.' . $tx['Amount']['issuer']; + } + if(isset($tx['Amount2']) && is_array($tx['Amount2']) && count($tx['Amount2']) > 1) + { + $currencies_in_tx[] = $tx['Amount2']['currency'] . '.' . $tx['Amount2']['issuer']; + } + if(isset($tx['TakerGets']) && is_array($tx['TakerGets']) && count($tx['TakerGets']) > 1) + { + $currencies_in_tx[] = $tx['TakerGets']['currency'] . '.' . $tx['TakerGets']['issuer']; + } + if(isset($tx['TakerPays']) && is_array($tx['TakerPays']) && count($tx['TakerPays']) > 1) + { + $currencies_in_tx[] = $tx['TakerPays']['currency'] . '.' . $tx['TakerPays']['issuer']; + } + // By documentation it's APIv2 and replace Amount field in Payment tx + if(isset($tx['DeliverMax']) && is_array($tx['DeliverMax']) && count($tx['DeliverMax']) > 1) + { + $currencies_in_tx[] = $tx['DeliverMax']['currency'] . '.' . $tx['DeliverMax']['issuer']; + } + if(isset($tx['DeliverMin']) && is_array($tx['DeliverMin']) && count($tx['DeliverMin']) > 1) + { + $currencies_in_tx[] = $tx['DeliverMin']['currency'] . '.' . $tx['DeliverMin']['issuer']; + } + $currencies_in_tx = array_unique($currencies_in_tx, SORT_STRING); + if(!count($currencies_in_tx)) + { + // if we haven't found anything -- just pass it + // for be more sure we can scan for RippleState break; } - if ($broker_op) + // maybe for a fallen transactions we can generate a simple event from account to the-void and check failed = true + if($tx_result) { - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $new_owner, - 'sort_key' => $sort_key++, - 'effect' => '-' . $prev_pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $prev_owner, - 'sort_key' => $sort_key++, - 'effect' => $prev_pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $new_owner, - 'sort_key' => $sort_key++, - 'effect' => '-' . $broker_fee, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $tx['Account'], - 'sort_key' => $sort_key++, - 'effect' => $broker_fee, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - } else { - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $new_owner, - 'sort_key' => $sort_key++, - 'effect' => '-' . $pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $prev_owner, - 'sort_key' => $sort_key++, - 'effect' => $pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; + // here we will lose effect generated by Payment, but 'Amount' there can be different (it can be approximate) + // also we are not sure in asset here, because for + foreach($currencies_in_tx as $cr) + { + $events[] = [ + 'currency' => $cr, + 'transaction' => $tx['hash'], + 'address' => $tx['Account'], + 'sort_key' => $sort_key++, + 'effect' => '-0', + 'failed' => true, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $events[] = [ + 'currency' => $cr, + 'transaction' => $tx['hash'], + 'address' => 'the-void', + 'sort_key' => $sort_key++, + 'effect' => '0', + 'failed' => true, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $this->insert_currency_to_process($currency_by_id, $cr); + } + break; } - break; - } - case "Clawback": - { - // https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0039d-clawback#332-example-clawback-transaction - // src/ripple/app/tx/impl/Clawback.cpp:55 - // In source code we can see that for accounts it's possible to have negative balance - // However, in our realization we have bcsub(NEW, BEFORE) that returns negative in a case when NEW < BEFORE - if (isset($tx['meta']['AffectedNodes'])) + // And now we can try to map addresses or not + // For simple tokens it's possible to find mapping + // For LP tokens I think - no + foreach ($tx['meta']['AffectedNodes'] ?? [] as $id => $affection) { - $affected_nodes = $tx['meta']['AffectedNodes']; - foreach ($affected_nodes as $id => $affection) + $account1 = null; + $account2 = null; + if (isset($affection['ModifiedNode']) || isset($affection['DeletedNode'])) { - if (isset($affection['ModifiedNode'])) + $affected = isset($affection['ModifiedNode']) ? $affection['ModifiedNode'] : $affection['DeletedNode']; + if ($affected['LedgerEntryType'] !== 'RippleState') + { + continue; + } + // we need to check every HL and LL if it's currency or LP + // now we always have token account as account1 + if(in_array($affected['FinalFields']['HighLimit']['currency'] . '.' . + $affected['FinalFields']['HighLimit']['issuer'], + $currencies_in_tx, true)) + { + $currency = $affected['FinalFields']['HighLimit']['currency'] . '.' . + $affected['FinalFields']['HighLimit']['issuer']; + $account1 = $affected['FinalFields']['HighLimit']['issuer']; // token + $account2 = $affected['FinalFields']['LowLimit']['issuer']; // user + } + if(in_array($affected['FinalFields']['LowLimit']['currency'] . '.' . + $affected['FinalFields']['LowLimit']['issuer'], + $currencies_in_tx, true)) + { + $currency = $affected['FinalFields']['LowLimit']['currency'] . '.' . + $affected['FinalFields']['LowLimit']['issuer']; + $account1 = $affected['FinalFields']['LowLimit']['issuer']; // token + $account2 = $affected['FinalFields']['HighLimit']['issuer']; // user + } + $amount = bcsub( + $this->bcabs($this->to_96($affected['PreviousFields']['Balance']['value'])), + $this->bcabs($this->to_96($affected['FinalFields']['Balance']['value'])) + ); + // Funny thing this TrustLine - in reality it's a connection between account and + // account-manager (of token) and difference can be negative, but in reality + // it means that we just need to swap account1 and account2 + // BUT IT SHOULD BE CHECKED + // If diff is negative -- it's from token to user + // positive -- from user to token + if($amount[0] !== '-') { - if ($affection['ModifiedNode']['LedgerEntryType'] === 'RippleState') + $account_x = $account1; + $account1 = $account2; + $account2 = $account_x; + } else { + $amount = substr($amount, 1); + } + $events[] = [ + 'currency' => $currency, + 'transaction' => $tx['hash'], + 'address' => $account1, + 'sort_key' => $sort_key++, + 'effect' => '-' . $amount, + 'failed' => false, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $events[] = [ + 'currency' => $currency, + 'transaction' => $tx['hash'], + 'address' => $account2, + 'sort_key' => $sort_key++, + 'effect' => $amount, + 'failed' => false, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $this->insert_currency_to_process($currency_by_id, $currency); + } + if (isset($affection['CreatedNode'])) + { + $affected = $affection['CreatedNode']; + if ($affected['LedgerEntryType'] === 'RippleState') + { + if(in_array($affected['NewFields']['HighLimit']['currency'] . '.' . + $affected['NewFields']['HighLimit']['issuer'], + $currencies_in_tx, true)) + { + $currency = $affected['NewFields']['HighLimit']['currency'] . '.' . + $affected['NewFields']['HighLimit']['issuer']; + $account1 = $affected['NewFields']['HighLimit']['issuer']; // token + $account2 = $affected['NewFields']['LowLimit']['issuer']; // user + } + if(in_array($affected['NewFields']['LowLimit']['currency'] . '.' . + $affected['NewFields']['LowLimit']['issuer'], + $currencies_in_tx, true)) + { + $currency = $affected['NewFields']['LowLimit']['currency'] . '.' . + $affected['NewFields']['LowLimit']['issuer']; + $account1 = $affected['NewFields']['LowLimit']['issuer']; // token + $account2 = $affected['NewFields']['HighLimit']['issuer']; // user + } + + $amount = bcsub( + "0", + $this->bcabs($this->to_96($affected['NewFields']['Balance']['value'])) + ); + // Funny thing this TrustLine - in reality it's a connection between account and + // account-manager (of token) and difference can be negative, but in reality + // it means that we just need to swap account1 and account2 + // BUT IT SHOULD BE CHECKED + // If diff is negative -- it's from token to user + // positive -- from user to token + if($amount[0] !== '-') { - $new_fields = $affection['ModifiedNode']['FinalFields']['Balance']; - $prev_fields = $affection['ModifiedNode']['PreviousFields']['Balance']; - $issuer = $new_fields['issuer']; - $currency = $new_fields['currency']; - $claw_back = bcsub($this->to_96($new_fields['value']), $this->to_96($prev_fields['value'])); - if($claw_back[0] === '-') - $claw_back = substr($claw_back, 1); - $from_address = $tx['Amount']['issuer']; - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => $from_address, - 'sort_key' => $sort_key++, - 'effect' => '-' . $claw_back, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'currency' => $currency . '.' . $issuer, - 'transaction' => $tx['hash'], - 'address' => 'the-void', - 'sort_key' => $sort_key++, - 'effect' => $claw_back, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - break; + $account_x = $account1; + $account1 = $account2; + $account2 = $account_x; + } else { + $amount = substr($amount, 1); } + $events[] = [ + 'currency' => $currency, + 'transaction' => $tx['hash'], + 'address' => $account1, + 'sort_key' => $sort_key++, + 'effect' => '-' . $amount, + 'failed' => false, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $events[] = [ + 'currency' => $currency, + 'transaction' => $tx['hash'], + 'address' => $account2, + 'sort_key' => $sort_key++, + 'effect' => $amount, + 'failed' => false, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $this->insert_currency_to_process($currency_by_id, $currency); } } } + break; } default: break; }; - - if ($currency != null) - { - if (!isset($currency_by_id[$currency . "." . $issuer])) - { - $currency_by_id[$currency . "." . $issuer] = [ - 'id' => $currency . "." . $issuer, - 'name' => $currency, - 'symbol' => $currency, - 'decimals' => 96, - ]; - } - } } $currencies_to_process = check_existing_currencies(array_keys($currency_by_id), $this->currency_format); // Removes already known currencies @@ -525,14 +569,13 @@ final public function pre_process_block($block_id) ]; } - //////////////// - // Processing // - //////////////// - + $events = $this->glue_events($events); + $sort_key = 0; foreach ($events as &$event) { $event['block'] = $block_id; $event['time'] = $this->block_time; + $event['sort_key'] = $sort_key++; $event['transaction'] = strtolower($event['transaction']); } @@ -597,4 +640,106 @@ final function api_get_balance(string $address, array $currencies): array return $return; } + + private function insert_currency_to_process(&$currency_by_id, $currency) + { + $currency_composed = explode('.', $currency); + if (!isset($currency_by_id[$currency])) + { + $currency_by_id[$currency] = [ + 'id' => $currency, + 'name' => $currency_composed[0], + 'symbol' => $currency_composed[0], + 'decimals' => 96, + ]; + } + } + + private function glue_events($events) + { + $events_by_tx = []; + $new_events = []; + for($i = 0; $i < count($events); $i++) + { + if($i + 1 < count($events) && $events[$i]['transaction'] != $events[$i + 1]['transaction'] || $i + 1 == count($events)) + { + $events_by_tx[] = $events[$i]; + if(count($events_by_tx) == 2) + { + $new_events[] = $events_by_tx[0]; + $new_events[] = $events_by_tx[1]; + unset($events_by_tx); + continue; + } + // IN FT module we don't have fees + + // events can be: + // - (-)void - (+)account1 - (-)account2 - (+)void -> (-)account2 - (+)account1 + // - (-)account2 - (+)void - (-)void - (+)account1 -> (-)account2 - (+)account1 + // unfortunately this it's not fully correct, because in chain can be inserted other events with other balances + // - (-)void - (+)account1 effect1 - (-)account3 - (+)void effect2 - (-)account2 - (+)void effect1 -> (-)account2 - (+)account1 + // in addition it can be some situations + // - (-)void - (+)account1 effect1 - (-)account3 - (+)void effect2 - (-)account2 - (+)void effect1 -> (-)account2 - (+)account1 + // where effect1 == effect2, but real event will be (-)account2 - (+)account3 + // HERE THE-VOID is a currency issuer (address) + // I suppose that it should be very rare situation, but can be + // Now it will be like that: + // 1. Take first pair of events + // 2. Search for the first same pair (same balance and opposite void) + // 3. Delete this and do (1) + for($y = 0; $y < count($events_by_tx);) + { + $ev_pair1 = $events_by_tx[$y]; + $ev_pair2 = $events_by_tx[$y + 1]; + $the_void_replacement = explode(".", $ev_pair1['currency'])[1]; + if($the_void_replacement !== explode(".", $ev_pair2['currency'])[1]) + { + throw new ModuleError("Events are not even"); + } + array_splice($events_by_tx, $y + 1, 1); + array_splice($events_by_tx, $y, 1); + $found = false; + // the amount of events should be even + for($z = 0; $z < count($events_by_tx); $z += 2) + { + if ( $z + 1 < count($events_by_tx) && + $ev_pair1['effect'] === $events_by_tx[$z]['effect'] && + $ev_pair2['effect'] === $events_by_tx[$z + 1]['effect']) + { + if ($ev_pair1['address'] === $the_void_replacement && + $events_by_tx[$z + 1]['address'] === $the_void_replacement) + { + $new_events[] = $events_by_tx[$z]; + $new_events[] = $ev_pair2; + $found = true; + array_splice($events_by_tx, $z + 1, 1); + array_splice($events_by_tx, $z, 1); + break; + } + if ($ev_pair2['address'] === $the_void_replacement && + $events_by_tx[$z]['address'] === $the_void_replacement) + { + $new_events[] = $ev_pair1; + $new_events[] = $events_by_tx[$z + 1]; + $found = true; + array_splice($events_by_tx, $z + 1, 1); + array_splice($events_by_tx, $z, 1); + break; + } + // it's possible that nothing will be found here + } + } + if(!$found) + { + $new_events[] = $ev_pair1; + $new_events[] = $ev_pair2; + } + } + unset($events_by_tx); + continue; + } + $events_by_tx[] = $events[$i]; + } + return $new_events; + } } diff --git a/Modules/Common/RippleLikeMainModule.php b/Modules/Common/RippleLikeMainModule.php index 70c7c2a..1493ee3 100644 --- a/Modules/Common/RippleLikeMainModule.php +++ b/Modules/Common/RippleLikeMainModule.php @@ -1,8 +1,8 @@ $affection) - { - if (isset($affection['DeletedNode'])) - { // If we say that they send all money before being dead - ok - if ($affection['DeletedNode']['LedgerEntryType'] === 'AccountRoot') - { - $amount = $affection['DeletedNode']['PreviousFields']['Balance'] - $fee; - break; - } - } - } - } else { - throw new ModuleError("Incorrect flow for AccountDelete"); - } - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => '-' . $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $tx['Destination'], - 'sort_key' => $sort_key++, - 'effect' => (string)$amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } - case 'CheckCash': - { - $account_destination = null; - if (is_array($tx['Amount'])) - { - // it's a token module work - $amount = '0'; - } else { - $amount = $tx['Amount']; - } - if (isset($tx['meta']['AffectedNodes'])) - { - $affected_nodes = $tx['meta']['AffectedNodes']; - foreach ($affected_nodes as $id => $affection) - { - if (isset($affection['DeletedNode'])) // this means that check that was created by account in meta - { // will be deleted and money will come to Destination. - if ($affection['DeletedNode']['LedgerEntryType'] === 'Check') - { - $account_destination = $affection['DeletedNode']['FinalFields']['Destination']; - $account = $affection['DeletedNode']['FinalFields']['Account']; - break; - } - } - } - } else { - throw new ModuleError("Incorrect flow for CheckCash"); - } - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => '-' . $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account_destination, - 'sort_key' => $sort_key++, - 'effect' => $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } - case 'EscrowCreate': - { - $amount = $tx['Amount']; - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => '-' . $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => 'the-escrow', - 'sort_key' => $sort_key++, - 'effect' => $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } - case 'EscrowCancel': - case 'EscrowFinish': - { - if (isset($tx['meta']['AffectedNodes'])) - { - $affected_nodes = $tx['meta']['AffectedNodes']; - foreach ($affected_nodes as $id => $affection) - { - if (isset($affection['DeletedNode'])) - { - if ($affection['DeletedNode']['LedgerEntryType'] === 'Escrow') - { - $amount = $affection['DeletedNode']['FinalFields']['Amount']; - break; - } - } - } - } else { - throw new ModuleError("Incorrect flow for EscrowFinish and EscrowCancel"); - } - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => 'the-escrow', - 'sort_key' => $sort_key++, - 'effect' => '-' . $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } - case 'Payment': - { - if (is_array($tx['Amount'])) - { - // it's a token module work - $amount = '0'; - } else { - $amount = $tx['Amount']; - } - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => '-' . $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $tx['Destination'], - 'sort_key' => $sort_key++, - 'effect' => $amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } + $tx_result = !($tx['meta']['TransactionResult'] === 'tesSUCCESS'); + + switch($tx['TransactionType']) { + case 'AccountDelete': + case 'AMMBid': + case 'AMMCreate': + case 'AMMDeposit': + case 'AMMWithdraw': + // 371a4a5f0d4f446f5a41661c937eba74c50afd99b716ab345158325bb6e6fd7d -- fee payment for nft trading + case 'NFTokenAcceptOffer': // we don't care who is broker,seller, buyer because we will glue everything however if Amount is 0 we'll not have any event (only fee) case 'PaymentChannelCreate': case 'PaymentChannelFund': + case 'PaymentChannelClaim': + case 'AccountDelete': + case 'EscrowCancel': + case 'EscrowFinish': + case 'OfferCreate': + case 'Payment': + case 'CheckCash': + case 'EscrowCreate': { - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => '-' . $tx['Amount'], - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => 'payment-channels', - 'sort_key' => $sort_key++, - 'effect' => $tx['Amount'], - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } - case 'PaymentChannelClaim': { - if (isset($tx['meta']['AffectedNodes'])) - { - $affected_nodes = $tx['meta']['AffectedNodes']; - foreach ($affected_nodes as $id => $affection) - { - if (isset($affection['DeletedNode'])) - { - // really it's an interesting question that Claim can close and send money to the creator, but I don't have proofs - if ($affection['DeletedNode']['LedgerEntryType'] === 'PayChannel') // it means deleting the channel, it can happened in this type of transaction - { - $amount = bcsub($affection['DeletedNode']['FinalFields']['Balance'], - $affection['DeletedNode']['PreviousFields']['Balance']); - $account = $affection['DeletedNode']['FinalFields']['Destination']; - break; - } - } - if (isset($affection['ModifiedNode']['LedgerEntryType'])) - { - if ($affection['ModifiedNode']['LedgerEntryType'] === 'PayChannel') - { - $amount = bcsub($affection['ModifiedNode']['FinalFields']['Balance'], - $affection['ModifiedNode']['PreviousFields']['Balance']); - $account = $affection['ModifiedNode']['FinalFields']['Destination']; - break; - } - } - } - } - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => 'payment-channels', - 'sort_key' => $sort_key++, - 'effect' => '-' . (string)$amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $account, - 'sort_key' => $sort_key++, - 'effect' => (string)$amount, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } - case 'NFTokenAcceptOffer': - { - // in NFT we have two ways of selling it: - // - p2p - // - brokers - $broker_op = isset($tx['NFTokenBrokerFee']); - $prev_pay = '0'; - $pay = '0'; - $new_owner = null; - $broker_fee = '0'; - $prev_owner = null; - if ($broker_op) + // https://github.com/XRPLF/rippled/blob/2d1854f354ff8bb2b5671fd51252c5acd837c433/src/ripple/app/tx/impl/AMMVote.cpp#L239 + // ```cpp + // if (result.second) + // sb.apply(ctx_.rawView()); + // ``` + // This part of code means that in any situation if the transaction was fallen -- they just do nothing + // So we can ignore fallen transactions and generate null events + if ($tx_result) { - if (is_array($tx['NFTokenBrokerFee'])) - { - // it's a token module work - $broker_fee = '0'; - } else { - $broker_fee = $tx['NFTokenBrokerFee']; - } - } - - if (isset($tx['meta']['AffectedNodes'])) { - $affected_nodes = $tx['meta']['AffectedNodes']; - foreach ($affected_nodes as $id => $affection) - { - if (isset($affection['DeletedNode'])) { - if (!$broker_op && $affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer') - { - $prev_owner = $affection['DeletedNode']['FinalFields']['Owner']; - $new_owner = $tx['Account']; - if (is_array($affection['DeletedNode']['FinalFields']['Amount'])) - { - // it's a token module work - $pay = '0'; - } else { - $pay = $affection['DeletedNode']['FinalFields']['Amount']; - } - break; - } - if ($broker_op && $affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer') - { - // https://xrpl.org/nftokencreateoffer.html#nftokencreateoffer-flags - if ($affection['DeletedNode']['FinalFields']['Flags'] == 0) // it means that it's NFT buy offer - { - $new_owner = $affection['DeletedNode']['FinalFields']['Owner']; - if (is_array($affection['DeletedNode']['FinalFields']['Amount'])) - { - // it's a token module work - $pay = '0'; - } else { - $pay = $affection['DeletedNode']['FinalFields']['Amount']; - } - } - if ($affection['DeletedNode']['FinalFields']['Flags'] == 1) // it means that it's NFT sell offer - { - $prev_owner = $affection['DeletedNode']['FinalFields']['Owner']; - if (is_array($affection['DeletedNode']['FinalFields']['Amount'])) - { - // it's a token module work - $prev_pay = '0'; - } else { - $prev_pay = $affection['DeletedNode']['FinalFields']['Amount']; - } - } - } - } - } - } - if($broker_op && is_null($prev_owner) && is_null($new_owner)) - { // this is for situation when the transaction is fallen - // mostly in this situations we don't need to pay - // 83084012 - here is error $events[] = [ 'transaction' => $tx['hash'], 'address' => $tx['Account'], 'sort_key' => $sort_key++, 'effect' => '-0', - 'failed' => $tx_result, + 'failed' => 't', 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), ]; $events[] = [ @@ -500,91 +203,104 @@ final public function pre_process_block($block_id) 'address' => 'the-void', 'sort_key' => $sort_key++, 'effect' => '0', - 'failed' => $tx_result, + 'failed' => 't', 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), ]; goto FEES; - break; - } elseif(!$broker_op && is_null($prev_owner)) - { // this is for situation when the transaction is fallen - // mostly in this situations we don't need to pay - // 83083328 - here is a second - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $tx['Account'], - 'sort_key' => $sort_key++, - 'effect' => '-0', - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => 'the-void', - 'sort_key' => $sort_key++, - 'effect' => '0', - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - goto FEES; - break; - } - if ($broker_op) + } + $fee_charged = false; + foreach ($tx['meta']['AffectedNodes'] ?? [] as $id => $affection) { - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $new_owner, - 'sort_key' => $sort_key++, - 'effect' => '-' . $prev_pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $prev_owner, - 'sort_key' => $sort_key++, - 'effect' => $prev_pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $new_owner, - 'sort_key' => $sort_key++, - 'effect' => '-' . $broker_fee, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $new_owner, - 'sort_key' => $sort_key++, - 'effect' => $broker_fee, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - } else { - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $new_owner, - 'sort_key' => $sort_key++, - 'effect' => '-' . $pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; - $events[] = [ - 'transaction' => $tx['hash'], - 'address' => $prev_owner, - 'sort_key' => $sort_key++, - 'effect' => $pay, - 'failed' => $tx_result, - 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), - ]; + if (!isset($affection['ModifiedNode']) && !isset($affection['DeletedNode']) && !isset($affection['CreatedNode'])) + { + break; + } + $affected = $affection['ModifiedNode'] ?? ($affection['DeletedNode'] ?? $affection['CreatedNode']); + // AccountRoot is about changing xrp state of account + // For AMM Create also will have CreatedNode + if($affected['LedgerEntryType'] !== 'AccountRoot') + { + continue; + } + if( (!isset($affected['PreviousFields']['Balance']) || !isset($affected['FinalFields']['Balance'])) && + !isset($affected['NewFields']['Balance'])) + { + continue; + } + if(isset($affected['NewFields']['Balance'])) + { + $account = $affected['NewFields']['Account']; + $amount = '-' . $affected['NewFields']['Balance']; + } else { + $account = $affected['FinalFields']['Account']; + $amount = bcsub($affected['PreviousFields']['Balance'], + $affected['FinalFields']['Balance']); + } + // negative -- money is credited to account + // positive -- is credited from account + if($tx['Account'] === $account && !$fee_charged) + { + if($amount[0] === '-') + { + $amount = '-' . bcadd($this->bcabs($amount), $tx['Fee']); + } else { + $amount = bcsub($amount, $tx['Fee']); + } + $fee_charged = true; // we charge the fee only once + } + // Question, do we need to show transfer from 'the-void' + // to account and vice versa if it's 0 + if($amount === '0') + { + continue; + } + if($amount[0] === '-') + { + $events[] = [ + 'transaction' => $tx['hash'], + 'address' => 'the-void', + 'sort_key' => $sort_key++, + 'effect' => $amount, + 'failed' => $tx_result, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $events[] = [ + 'transaction' => $tx['hash'], + 'address' => $account, + 'sort_key' => $sort_key++, + 'effect' => substr($amount, 1), + 'failed' => $tx_result, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + } else { + $events[] = [ + 'transaction' => $tx['hash'], + 'address' => $account, + 'sort_key' => $sort_key++, + 'effect' => '-' . $amount, + 'failed' => $tx_result, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + $events[] = [ + 'transaction' => $tx['hash'], + 'address' => 'the-void', + 'sort_key' => $sort_key++, + 'effect' => $amount, + 'failed' => $tx_result, + 'extra' => RippleSpecialTransactions::fromName($tx['TransactionType']), + ]; + } + } goto FEES; break; } // Yes it's only fees here ;) + // case 'AMMDelete': Hadn't found in our DB --> will be exception until we find it + case 'EscrowCancel': + case 'Payment': + case 'OfferCancel': + case 'AMMVote': case 'AccountSet': case 'CheckCancel': case 'CheckCreate': @@ -593,8 +309,6 @@ final public function pre_process_block($block_id) case 'NFTokenCancelOffer': case 'NFTokenCreateOffer': case 'NFTokenMint': - case 'OfferCancel': - case 'OfferCreate': case 'SetRegularKey': case 'SignerListSet': case 'TicketCreate': @@ -602,6 +316,8 @@ final public function pre_process_block($block_id) case 'UNLModify': case 'EnableAmendment': case 'Clawback': + case 'OracleSet': + case 'OracleDelete': FEES: { $events[] = [ 'transaction' => $tx['hash'], @@ -630,11 +346,13 @@ final public function pre_process_block($block_id) //////////////// // Processing // //////////////// - + $events = $this->glue_events($events); + $sort_key = 0; foreach ($events as &$event) { $event['block'] = $block_id; $event['time'] = $this->block_time; + $event['sort_key'] = $sort_key++; $event['transaction'] = strtolower($event['transaction']); } @@ -664,4 +382,93 @@ final public function api_get_balance(string $address): string else return (string)$request['account_data']['Balance']; } + + private function glue_events($events) + { + $events_by_tx = []; + $new_events = []; + for($i = 0; $i < count($events); $i++) + { + if($i + 1 < count($events) && $events[$i]['transaction'] != $events[$i + 1]['transaction'] || $i + 1 == count($events)) + { + $events_by_tx[] = $events[$i]; + // here we should leave fee events and do nothing with them + if(count($events_by_tx) == 2) + { + $new_events[] = $events_by_tx[0]; + $new_events[] = $events_by_tx[1]; + unset($events_by_tx); + continue; + } + $events_by_tx_amount = count($events_by_tx) - 2; + $ev1_fee = $events_by_tx[$events_by_tx_amount]; + $ev2_fee = $events_by_tx[$events_by_tx_amount + 1]; + // $events_by_tx = array_diff_key($events_by_tx, [$events_by_tx_amount => 0, $events_by_tx_amount + 1 => 0]); + array_splice($events_by_tx, $events_by_tx_amount + 1, 1); + array_splice($events_by_tx, $events_by_tx_amount, 1); + // events can be: + // - (-)void - (+)account1 - (-)account2 - (+)void -> (-)account2 - (+)account1 + // - (-)account2 - (+)void - (-)void - (+)account1 -> (-)account2 - (+)account1 + // unfortunately this it's not fully correct, because in chain can be inserted other events with other balances + // - (-)void - (+)account1 effect1 - (-)account3 - (+)void effect2 - (-)account2 - (+)void effect1 -> (-)account2 - (+)account1 + // in addition it can be some situations + // - (-)void - (+)account1 effect1 - (-)account3 - (+)void effect2 - (-)account2 - (+)void effect1 -> (-)account2 - (+)account1 + // where effect1 == effect2, but real event will be (-)account2 - (+)account3 + // I suppose that it should be very rare situation, but can be + // Now it will be like that: + // 1. Take first pair of events + // 2. Search for the first same pair (same balance and opposite void) + // 3. Delete this and do (1) + for($y = 0; $y < count($events_by_tx);) + { + $ev_pair1 = $events_by_tx[$y]; + $ev_pair2 = $events_by_tx[$y + 1]; + array_splice($events_by_tx, $y + 1, 1); + array_splice($events_by_tx, $y, 1); + $found = false; + // the amount of events should be even + for($z = 0; $z < count($events_by_tx); $z += 2) + { + if ( $z + 1 < count($events_by_tx) && + $ev_pair1['effect'] === $events_by_tx[$z]['effect'] && + $ev_pair2['effect'] === $events_by_tx[$z + 1]['effect']) + { + if ($ev_pair1['address'] === 'the-void' && + $events_by_tx[$z + 1]['address'] === 'the-void') + { + $new_events[] = $events_by_tx[$z]; + $new_events[] = $ev_pair2; + $found = true; + array_splice($events_by_tx, $z + 1, 1); + array_splice($events_by_tx, $z, 1); + break; + } + if ($ev_pair2['address'] === 'the-void' && + $events_by_tx[$z]['address'] === 'the-void') + { + $new_events[] = $ev_pair1; + $new_events[] = $events_by_tx[$z + 1]; + $found = true; + array_splice($events_by_tx, $z + 1, 1); + array_splice($events_by_tx, $z, 1); + break; + } + // it's possible that nothing will be found here + } + } + if(!$found) + { + $new_events[] = $ev_pair1; + $new_events[] = $ev_pair2; + } + } + $new_events[] = $ev1_fee; + $new_events[] = $ev2_fee; + unset($events_by_tx); + continue; + } + $events_by_tx[] = $events[$i]; + } + return $new_events; + } } diff --git a/Modules/Common/RippleLikeNFTModule.php b/Modules/Common/RippleLikeNFTModule.php index de07a19..3b750ca 100644 --- a/Modules/Common/RippleLikeNFTModule.php +++ b/Modules/Common/RippleLikeNFTModule.php @@ -1,8 +1,8 @@ we must have 2 offers if (isset($tx['meta']['AffectedNodes'])) { $affected_nodes = $tx['meta']['AffectedNodes']; foreach ($affected_nodes as $id => $affection) { - if (isset($affection['DeletedNode'])) { - if ($affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer') + if (isset($affection['DeletedNode'])) + { + if ($affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer' && !$broker_op) { - $prev_owner = $affection['DeletedNode']['FinalFields']['Owner']; - $new_owner = $tx['Account']; + $isSell = $affection['DeletedNode']['FinalFields']['Flags']; + $prev_owner = $isSell ? $affection['DeletedNode']['FinalFields']['Owner'] : $tx['Account']; // seller + $new_owner = $isSell ? $tx['Account'] : $affection['DeletedNode']['FinalFields']['Owner']; // buyer $nft = $affection['DeletedNode']['FinalFields']['NFTokenID']; break; } - if ($affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer' && $broker) + if ($affection['DeletedNode']['LedgerEntryType'] === 'NFTokenOffer' && $broker_op) { - if ($affection['DeletedNode']['FinalFields']['Flags'] == 0) // it means that it's NFT buy offer https://xrpl.org/nftokencreateoffer.html#nftokencreateoffer-flags + switch ($affection['DeletedNode']['FinalFields']['Flags']) { - $new_owner = $affection['DeletedNode']['FinalFields']['Owner']; + case 0: // flag = 0 -- buying + $new_owner = $affection['DeletedNode']['FinalFields']['Owner']; // buyer + break; + case 1: // flag = 1 -- selling + $prev_owner = $affection['DeletedNode']['FinalFields']['Owner']; // seller + break; } - if ($affection['DeletedNode']['FinalFields']['Flags'] == 1) // it means that it's NFT sell offer https://xrpl.org/nftokencreateoffer.html#nftokencreateoffer-flags - { - $prev_owner = $affection['DeletedNode']['FinalFields']['Owner']; - } - $nft = $affection['DeletedNode']['FinalFields']['NFTokenID']; + $nft = $affection['DeletedNode']['FinalFields']['NFTokenID']; } } } } if(is_null($prev_owner) && is_null($new_owner)) - { // this is for situation when the transaction fallen - // mostly in this situations we don't need to pay - // anything in Token module + { // this is for a fallen transaction + // in this situations we don't need to pay break; } $events[] = [ @@ -234,7 +236,7 @@ final public function pre_process_block($block_id) { $events[] = [ 'transaction' => $tx['hash'], - 'address' => $tx['Account'], + 'address' => $tx['Owner'] ?? $tx['Account'], 'sort_key' => $sort_key++, 'effect' => '-1', 'failed' => $tx_result, diff --git a/Modules/Common/RippleTraits.php b/Modules/Common/RippleTraits.php index bd213ac..e8e3363 100644 --- a/Modules/Common/RippleTraits.php +++ b/Modules/Common/RippleTraits.php @@ -1,8 +1,8 @@ y => error private function to_96($number) { + if($number === '0') + return $number; $decimals = 96; $e = strpos($number, 'e'); $e_num = 0; @@ -210,4 +212,12 @@ private function to_96($number) return $num; } } + + private function bcabs(string $number) + { + if($number[0] === '-') + return substr($number, 1); + else + return $number; + } } diff --git a/Modules/RippleFTModule.php b/Modules/RippleFTModule.php index df5b06f..7e62bbb 100644 --- a/Modules/RippleFTModule.php +++ b/Modules/RippleFTModule.php @@ -1,8 +1,10 @@ first_block_id = 32570; $this->tests = [ - ['block' => 86029048, 'result' => 'a:2:{s:6:"events";a:2:{i:0;a:9:{s:8:"currency";s:67:"594F494E4B000000000000000000000000000000.rrrrrrrrrrrrrrrrrrrrBZbvji";s:11:"transaction";s:64:"abe84848188b1a9ed69018a0edf08c8ded9e50d209efe029829a2513a656b4c7";s:7:"address";s:34:"rMo7g7CJLYbERMvf1taHSEkNuyL4BqecD8";s:8:"sort_key";i:0;s:6:"effect";s:97:"-956620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86029048;s:4:"time";s:19:"2024-02-17 13:26:31";}i:1;a:9:{s:8:"currency";s:67:"594F494E4B000000000000000000000000000000.rrrrrrrrrrrrrrrrrrrrBZbvji";s:11:"transaction";s:64:"abe84848188b1a9ed69018a0edf08c8ded9e50d209efe029829a2513a656b4c7";s:7:"address";s:8:"the-void";s:8:"sort_key";i:1;s:6:"effect";s:96:"956620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86029048;s:4:"time";s:19:"2024-02-17 13:26:31";}}s:10:"currencies";a:1:{i:0;a:4:{s:2:"id";s:67:"594F494E4B000000000000000000000000000000.rrrrrrrrrrrrrrrrrrrrBZbvji";s:4:"name";s:5:"YOINK";s:6:"symbol";s:5:"YOINK";s:8:"decimals";i:96;}}}'], - ['block' => 86028986, 'result' => 'a:2:{s:6:"events";a:2:{i:0;a:9:{s:8:"currency";s:67:"594F494E4B000000000000000000000000000000.rrrrrrrrrrrrrrrrrrrrBZbvji";s:11:"transaction";s:64:"712246cf95073c254d12cddf7f8d93887562a5eb5a2f7b97dd2af1f3eb81af76";s:7:"address";s:34:"rHZCZ9M3LdDhk85Ax7DsAYywheqh83YQyC";s:8:"sort_key";i:0;s:6:"effect";s:97:"-956670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:1;a:9:{s:8:"currency";s:67:"594F494E4B000000000000000000000000000000.rrrrrrrrrrrrrrrrrrrrBZbvji";s:11:"transaction";s:64:"712246cf95073c254d12cddf7f8d93887562a5eb5a2f7b97dd2af1f3eb81af76";s:7:"address";s:8:"the-void";s:8:"sort_key";i:1;s:6:"effect";s:96:"956670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}}s:10:"currencies";a:1:{i:0;a:4:{s:2:"id";s:67:"594F494E4B000000000000000000000000000000.rrrrrrrrrrrrrrrrrrrrBZbvji";s:4:"name";s:5:"YOINK";s:6:"symbol";s:5:"YOINK";s:8:"decimals";i:96;}}}'], - ['block' => 9060986, 'result' => 'a:2:{s:6:"events";a:4:{i:0;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"370121a3af5ee118b04965579f690de6eceba744f6223253f2fccc46c18742f2";s:7:"address";s:34:"rshTJgRVZDo2EXfPVeBxFWEAMTFBJDWzo6";s:8:"sort_key";i:0;s:6:"effect";s:99:"-10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:1;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"370121a3af5ee118b04965579f690de6eceba744f6223253f2fccc46c18742f2";s:7:"address";s:34:"r4BV3UiUNa2WjRk6xC5QVSfGbMKwZhZfVA";s:8:"sort_key";i:1;s:6:"effect";s:98:"10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:2;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"67d2263c7264021b01ae9e8c9f78f14e4805aa4e08cc3a4d01710c94c46b114b";s:7:"address";s:34:"rshTJgRVZDo2EXfPVeBxFWEAMTFBJDWzo6";s:8:"sort_key";i:2;s:6:"effect";s:99:"-10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:3;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"67d2263c7264021b01ae9e8c9f78f14e4805aa4e08cc3a4d01710c94c46b114b";s:7:"address";s:34:"r4BV3UiUNa2WjRk6xC5QVSfGbMKwZhZfVA";s:8:"sort_key";i:3;s:6:"effect";s:98:"10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}}s:10:"currencies";a:1:{i:0;a:4:{s:2:"id";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:4:"name";s:3:"CNY";s:6:"symbol";s:3:"CNY";s:8:"decimals";i:96;}}}'], + ['block' => 9060986, 'result' => 'a:2:{s:6:"events";a:8:{i:0;a:9:{s:8:"currency";s:38:"CNY.razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA";s:11:"transaction";s:64:"370121a3af5ee118b04965579f690de6eceba744f6223253f2fccc46c18742f2";s:7:"address";s:34:"rshTJgRVZDo2EXfPVeBxFWEAMTFBJDWzo6";s:8:"sort_key";i:0;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:1;a:9:{s:8:"currency";s:38:"CNY.razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA";s:11:"transaction";s:64:"370121a3af5ee118b04965579f690de6eceba744f6223253f2fccc46c18742f2";s:7:"address";s:8:"the-void";s:8:"sort_key";i:1;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:2;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"370121a3af5ee118b04965579f690de6eceba744f6223253f2fccc46c18742f2";s:7:"address";s:34:"rshTJgRVZDo2EXfPVeBxFWEAMTFBJDWzo6";s:8:"sort_key";i:2;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:3;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"370121a3af5ee118b04965579f690de6eceba744f6223253f2fccc46c18742f2";s:7:"address";s:8:"the-void";s:8:"sort_key";i:3;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:4;a:9:{s:8:"currency";s:38:"CNY.razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA";s:11:"transaction";s:64:"67d2263c7264021b01ae9e8c9f78f14e4805aa4e08cc3a4d01710c94c46b114b";s:7:"address";s:34:"rshTJgRVZDo2EXfPVeBxFWEAMTFBJDWzo6";s:8:"sort_key";i:4;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:5;a:9:{s:8:"currency";s:38:"CNY.razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA";s:11:"transaction";s:64:"67d2263c7264021b01ae9e8c9f78f14e4805aa4e08cc3a4d01710c94c46b114b";s:7:"address";s:8:"the-void";s:8:"sort_key";i:5;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:6;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"67d2263c7264021b01ae9e8c9f78f14e4805aa4e08cc3a4d01710c94c46b114b";s:7:"address";s:34:"rshTJgRVZDo2EXfPVeBxFWEAMTFBJDWzo6";s:8:"sort_key";i:6;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}i:7;a:9:{s:8:"currency";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:11:"transaction";s:64:"67d2263c7264021b01ae9e8c9f78f14e4805aa4e08cc3a4d01710c94c46b114b";s:7:"address";s:8:"the-void";s:8:"sort_key";i:7;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:9060986;s:4:"time";s:19:"2014-09-26 04:42:40";}}s:10:"currencies";a:2:{i:0;a:4:{s:2:"id";s:38:"CNY.razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA";s:4:"name";s:3:"CNY";s:6:"symbol";s:3:"CNY";s:8:"decimals";i:96;}i:1;a:4:{s:2:"id";s:38:"CNY.rnuF96W4SZoCJmbHYBFoJZpR8eCaxNvekK";s:4:"name";s:3:"CNY";s:6:"symbol";s:3:"CNY";s:8:"decimals";i:96;}}}'], + ['block' => 86029048, 'result' => 'a:2:{s:6:"events";a:2:{i:0;a:9:{s:8:"currency";s:74:"594F494E4B000000000000000000000000000000.rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:11:"transaction";s:64:"abe84848188b1a9ed69018a0edf08c8ded9e50d209efe029829a2513a656b4c7";s:7:"address";s:34:"rMo7g7CJLYbERMvf1taHSEkNuyL4BqecD8";s:8:"sort_key";i:0;s:6:"effect";s:97:"-956620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86029048;s:4:"time";s:19:"2024-02-17 13:26:31";}i:1;a:9:{s:8:"currency";s:74:"594F494E4B000000000000000000000000000000.rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:11:"transaction";s:64:"abe84848188b1a9ed69018a0edf08c8ded9e50d209efe029829a2513a656b4c7";s:7:"address";s:33:"rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:8:"sort_key";i:1;s:6:"effect";s:96:"956620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86029048;s:4:"time";s:19:"2024-02-17 13:26:31";}}s:10:"currencies";a:1:{i:0;a:4:{s:2:"id";s:74:"594F494E4B000000000000000000000000000000.rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:4:"name";s:5:"YOINK";s:6:"symbol";s:5:"YOINK";s:8:"decimals";i:96;}}}'], + ['block' => 86028986, 'result' => 'a:2:{s:6:"events";a:8:{i:0;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"163e4f6831df8dce9aa6b8414ab2cc5af80071348e4f8763886dd2f055a4ce78";s:7:"address";s:34:"rJUG3PqxaDpwKNcfrS3bhni4Rub2nb1azi";s:8:"sort_key";i:0;s:6:"effect";s:101:"-1628228842000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:1;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"163e4f6831df8dce9aa6b8414ab2cc5af80071348e4f8763886dd2f055a4ce78";s:7:"address";s:34:"rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:8:"sort_key";i:1;s:6:"effect";s:100:"1628228842000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:2;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"163e4f6831df8dce9aa6b8414ab2cc5af80071348e4f8763886dd2f055a4ce78";s:7:"address";s:34:"rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:8:"sort_key";i:2;s:6:"effect";s:101:"-2001722821852668000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:3;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"163e4f6831df8dce9aa6b8414ab2cc5af80071348e4f8763886dd2f055a4ce78";s:7:"address";s:34:"rUcdQmhQmu1t9Q334k6zbn1yG9TPJSspx5";s:8:"sort_key";i:3;s:6:"effect";s:100:"2001722821852668000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:4;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"163e4f6831df8dce9aa6b8414ab2cc5af80071348e4f8763886dd2f055a4ce78";s:7:"address";s:34:"rabbnCGT51GuseDra3dXGXnk2iFXmk45Qp";s:8:"sort_key";i:4;s:6:"effect";s:100:"-373493979852670000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:5;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"163e4f6831df8dce9aa6b8414ab2cc5af80071348e4f8763886dd2f055a4ce78";s:7:"address";s:34:"rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:8:"sort_key";i:5;s:6:"effect";s:99:"373493979852670000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:6;a:9:{s:8:"currency";s:74:"594F494E4B000000000000000000000000000000.rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:11:"transaction";s:64:"712246cf95073c254d12cddf7f8d93887562a5eb5a2f7b97dd2af1f3eb81af76";s:7:"address";s:34:"rHZCZ9M3LdDhk85Ax7DsAYywheqh83YQyC";s:8:"sort_key";i:6;s:6:"effect";s:97:"-956670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}i:7;a:9:{s:8:"currency";s:74:"594F494E4B000000000000000000000000000000.rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:11:"transaction";s:64:"712246cf95073c254d12cddf7f8d93887562a5eb5a2f7b97dd2af1f3eb81af76";s:7:"address";s:33:"rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:8:"sort_key";i:7;s:6:"effect";s:96:"956670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"cb";s:5:"block";i:86028986;s:4:"time";s:19:"2024-02-17 13:22:31";}}s:10:"currencies";a:2:{i:0;a:4:{s:2:"id";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:4:"name";s:3:"ARK";s:6:"symbol";s:3:"ARK";s:8:"decimals";i:96;}i:1;a:4:{s:2:"id";s:74:"594F494E4B000000000000000000000000000000.rYNKrtQaf3vUVWVK5sw9rJdPGDLbxZu89";s:4:"name";s:5:"YOINK";s:6:"symbol";s:5:"YOINK";s:8:"decimals";i:96;}}}'], + ['block' => 87251890, 'result' => 'a:2:{s:6:"events";a:48:{i:0;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rQp7Ef2VfuxeM1Qsxg5F44XtXgerzmsyk8";s:8:"sort_key";i:0;s:6:"effect";s:102:"-41624297455572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:1;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:8:"sort_key";i:1;s:6:"effect";s:101:"41624297455572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:2;a:9:{s:8:"currency";s:38:"USD.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:33:"rogue5HnPRSszD9CWGSUz8UGHMVwSSKF6";s:8:"sort_key";i:2;s:6:"effect";s:99:"-75606874931510510000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:3;a:9:{s:8:"currency";s:38:"USD.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:8:"sort_key";i:3;s:6:"effect";s:98:"75606874931510510000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:4;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:8:"sort_key";i:4;s:6:"effect";s:102:"-41624297455571690000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:5;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:33:"rogue5HnPRSszD9CWGSUz8UGHMVwSSKF6";s:8:"sort_key";i:5;s:6:"effect";s:101:"41624297455571690000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:6;a:9:{s:8:"currency";s:38:"XLM.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:8:"sort_key";i:6;s:6:"effect";s:100:"-577151717034431400000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:7;a:9:{s:8:"currency";s:38:"XLM.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rQp7Ef2VfuxeM1Qsxg5F44XtXgerzmsyk8";s:8:"sort_key";i:7;s:6:"effect";s:99:"577151717034431400000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:8;a:9:{s:8:"currency";s:38:"USD.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:8:"sort_key";i:8;s:6:"effect";s:99:"-75606874931511000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:9;a:9:{s:8:"currency";s:38:"USD.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rJc7YLvi1kcKTFrCYWitcT2BXmvEXPWhrL";s:8:"sort_key";i:9;s:6:"effect";s:98:"75606874931511000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:10;a:9:{s:8:"currency";s:38:"XLM.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rJc7YLvi1kcKTFrCYWitcT2BXmvEXPWhrL";s:8:"sort_key";i:10;s:6:"effect";s:100:"-577151717034400000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:11;a:9:{s:8:"currency";s:38:"XLM.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"026649d11dd15fbb4e53771c0671faa83f96ef6cffc4d124dd44268d9b53e59e";s:7:"address";s:34:"rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:8:"sort_key";i:11;s:6:"effect";s:99:"577151717034400000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:12;a:9:{s:8:"currency";s:38:"USD.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"3d3a7c97b9b3b3c537c0ae1fe9d875ef8d85e0a15dddd8bff22c030cdd231299";s:7:"address";s:34:"rfCVjkbDHdsv2W5rQPCLB94CgwJiJLEBCL";s:8:"sort_key";i:12;s:6:"effect";s:99:"-75606874931510510000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:13;a:9:{s:8:"currency";s:38:"USD.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:11:"transaction";s:64:"3d3a7c97b9b3b3c537c0ae1fe9d875ef8d85e0a15dddd8bff22c030cdd231299";s:7:"address";s:33:"rogue5HnPRSszD9CWGSUz8UGHMVwSSKF6";s:8:"sort_key";i:13;s:6:"effect";s:98:"75606874931510510000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:14;a:9:{s:8:"currency";s:37:"USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:11:"transaction";s:64:"3d3a7c97b9b3b3c537c0ae1fe9d875ef8d85e0a15dddd8bff22c030cdd231299";s:7:"address";s:33:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:8:"sort_key";i:14;s:6:"effect";s:99:"-75606874931511000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:15;a:9:{s:8:"currency";s:37:"USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:11:"transaction";s:64:"3d3a7c97b9b3b3c537c0ae1fe9d875ef8d85e0a15dddd8bff22c030cdd231299";s:7:"address";s:34:"rfCVjkbDHdsv2W5rQPCLB94CgwJiJLEBCL";s:8:"sort_key";i:15;s:6:"effect";s:98:"75606874931511000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:16;a:9:{s:8:"currency";s:37:"USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:11:"transaction";s:64:"3d3a7c97b9b3b3c537c0ae1fe9d875ef8d85e0a15dddd8bff22c030cdd231299";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:16;s:6:"effect";s:99:"-75720285243910000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:17;a:9:{s:8:"currency";s:37:"USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:11:"transaction";s:64:"3d3a7c97b9b3b3c537c0ae1fe9d875ef8d85e0a15dddd8bff22c030cdd231299";s:7:"address";s:33:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:8:"sort_key";i:17;s:6:"effect";s:98:"75720285243910000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:18;a:9:{s:8:"currency";s:75:"534F4C4F00000000000000000000000000000000.rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz";s:11:"transaction";s:64:"7abe44d2b8d26f7ebe61226af396a9b7f29731380ae9a9eb0ba9344e5b885bf8";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:18;s:6:"effect";s:92:"-4140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:19;a:9:{s:8:"currency";s:75:"534F4C4F00000000000000000000000000000000.rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz";s:11:"transaction";s:64:"7abe44d2b8d26f7ebe61226af396a9b7f29731380ae9a9eb0ba9344e5b885bf8";s:7:"address";s:34:"rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz";s:8:"sort_key";i:19;s:6:"effect";s:91:"4140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:20;a:9:{s:8:"currency";s:75:"534F4C4F00000000000000000000000000000000.rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz";s:11:"transaction";s:64:"7abe44d2b8d26f7ebe61226af396a9b7f29731380ae9a9eb0ba9344e5b885bf8";s:7:"address";s:34:"rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz";s:8:"sort_key";i:20;s:6:"effect";s:92:"-4139586000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:21;a:9:{s:8:"currency";s:75:"534F4C4F00000000000000000000000000000000.rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz";s:11:"transaction";s:64:"7abe44d2b8d26f7ebe61226af396a9b7f29731380ae9a9eb0ba9344e5b885bf8";s:7:"address";s:34:"rNb2KazxBbb5ixpjrXAYm5sXLx3wcqETE4";s:8:"sort_key";i:21;s:6:"effect";s:91:"4139586000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:22;a:9:{s:8:"currency";s:37:"LTC.rcRzGWq6Ng3jeYhqnmM4zcWcUh69hrQ8V";s:11:"transaction";s:64:"87b6b6f8c37fda1f1a180b6edf30ef85ed479863e07aba4cfa661cf27d0c9c7a";s:7:"address";s:33:"rcRzGWq6Ng3jeYhqnmM4zcWcUh69hrQ8V";s:8:"sort_key";i:22;s:6:"effect";s:90:"-99700897308000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:23;a:9:{s:8:"currency";s:37:"LTC.rcRzGWq6Ng3jeYhqnmM4zcWcUh69hrQ8V";s:11:"transaction";s:64:"87b6b6f8c37fda1f1a180b6edf30ef85ed479863e07aba4cfa661cf27d0c9c7a";s:7:"address";s:34:"rNb2KazxBbb5ixpjrXAYm5sXLx3wcqETE4";s:8:"sort_key";i:23;s:6:"effect";s:89:"99700897308000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:24;a:9:{s:8:"currency";s:37:"LTC.rcRzGWq6Ng3jeYhqnmM4zcWcUh69hrQ8V";s:11:"transaction";s:64:"87b6b6f8c37fda1f1a180b6edf30ef85ed479863e07aba4cfa661cf27d0c9c7a";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:24;s:6:"effect";s:91:"-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:25;a:9:{s:8:"currency";s:37:"LTC.rcRzGWq6Ng3jeYhqnmM4zcWcUh69hrQ8V";s:11:"transaction";s:64:"87b6b6f8c37fda1f1a180b6edf30ef85ed479863e07aba4cfa661cf27d0c9c7a";s:7:"address";s:33:"rcRzGWq6Ng3jeYhqnmM4zcWcUh69hrQ8V";s:8:"sort_key";i:25;s:6:"effect";s:90:"100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:26;a:9:{s:8:"currency";s:38:"AAU.rGho1zZBxtiiyQgMfReAju9Sc2MMtvtAAU";s:11:"transaction";s:64:"9768d3346028f35327e1d4f54579b2e659f1cb892b47f17cb6332c55689e63a0";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:26;s:6:"effect";s:91:"-150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:27;a:9:{s:8:"currency";s:38:"AAU.rGho1zZBxtiiyQgMfReAju9Sc2MMtvtAAU";s:11:"transaction";s:64:"9768d3346028f35327e1d4f54579b2e659f1cb892b47f17cb6332c55689e63a0";s:7:"address";s:34:"rNb2KazxBbb5ixpjrXAYm5sXLx3wcqETE4";s:8:"sort_key";i:27;s:6:"effect";s:90:"150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:28;a:9:{s:8:"currency";s:75:"58525061794E6574000000000000000000000000.r9rRLst96Ue4YTDQkWWkX1ePB6p6Ye4FkA";s:11:"transaction";s:64:"ad1fee48b6b3d01f9292c5fdbed55cdb7b6da79c7bc623ad17bc165d98bfeec6";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:28;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:29;a:9:{s:8:"currency";s:75:"58525061794E6574000000000000000000000000.r9rRLst96Ue4YTDQkWWkX1ePB6p6Ye4FkA";s:11:"transaction";s:64:"ad1fee48b6b3d01f9292c5fdbed55cdb7b6da79c7bc623ad17bc165d98bfeec6";s:7:"address";s:8:"the-void";s:8:"sort_key";i:29;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:30;a:9:{s:8:"currency";s:38:"BOX.rhy4FUHtXrMZhbkBfeYvDv4nz6R7M4cu1t";s:11:"transaction";s:64:"d411d9794b6d8b46b3ce6751199d9c5d3cfbb9cc2b3dbbb5f311e9a5242e9fc2";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:30;s:6:"effect";s:96:"-27290150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:31;a:9:{s:8:"currency";s:38:"BOX.rhy4FUHtXrMZhbkBfeYvDv4nz6R7M4cu1t";s:11:"transaction";s:64:"d411d9794b6d8b46b3ce6751199d9c5d3cfbb9cc2b3dbbb5f311e9a5242e9fc2";s:7:"address";s:34:"rNb2KazxBbb5ixpjrXAYm5sXLx3wcqETE4";s:8:"sort_key";i:31;s:6:"effect";s:95:"27290150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:32;a:9:{s:8:"currency";s:74:"434F524500000000000000000000000000000000.rcoreNywaoz2ZCQ8Lg2EbSLnGuRBmun6D";s:11:"transaction";s:64:"e887af5024038f230b5089152b312c122e854a83ecee53a9c9e9dab53351a5e8";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:32;s:6:"effect";s:93:"-96440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:33;a:9:{s:8:"currency";s:74:"434F524500000000000000000000000000000000.rcoreNywaoz2ZCQ8Lg2EbSLnGuRBmun6D";s:11:"transaction";s:64:"e887af5024038f230b5089152b312c122e854a83ecee53a9c9e9dab53351a5e8";s:7:"address";s:34:"rNb2KazxBbb5ixpjrXAYm5sXLx3wcqETE4";s:8:"sort_key";i:33;s:6:"effect";s:92:"96440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:34;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"e92d214b2074b02e325f734c9fe79aaefb41f32d7e168c0a95ae641c7d1ff1e1";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:34;s:6:"effect";s:97:"-213771060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:35;a:9:{s:8:"currency";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:11:"transaction";s:64:"e92d214b2074b02e325f734c9fe79aaefb41f32d7e168c0a95ae641c7d1ff1e1";s:7:"address";s:34:"rNb2KazxBbb5ixpjrXAYm5sXLx3wcqETE4";s:8:"sort_key";i:35;s:6:"effect";s:96:"213771060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:36;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:8:"sort_key";i:36;s:6:"effect";s:102:"-21500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:37;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"r91fd6EYwfDv6NPuAstDpWKvNrXtyarSHK";s:8:"sort_key";i:37;s:6:"effect";s:101:"21500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:38;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:33:"rogue5HnPRSszD9CWGSUz8UGHMVwSSKF6";s:8:"sort_key";i:38;s:6:"effect";s:102:"-41624297455571690000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:39;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:8:"sort_key";i:39;s:6:"effect";s:101:"41624297455571690000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:40;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:8:"sort_key";i:40;s:6:"effect";s:102:"-11637589919720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:41;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"rLLgJmQxrLEXrSDNkQEr9tvGoUdafFHTKP";s:8:"sort_key";i:41;s:6:"effect";s:101:"11637589919720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:42;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:8:"sort_key";i:42;s:6:"effect";s:101:"-7818927903050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:43;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:33:"rdrBYMcjBo9zVExL7V3DicH48FXgKW5RX";s:8:"sort_key";i:43;s:6:"effect";s:100:"7818927903050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:44;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:8:"sort_key";i:44;s:6:"effect";s:100:"-667779632799980000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:45;a:9:{s:8:"currency";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:11:"transaction";s:64:"f300290405ab138ece8240c00b27ee84cd1c0e247f47f7d83503541dea4d1440";s:7:"address";s:34:"r3kKmQrorb8NwzYWWALYrLY4RkToHr3CCf";s:8:"sort_key";i:45;s:6:"effect";s:99:"667779632799980000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:2:"oc";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:46;a:9:{s:8:"currency";s:37:"STX.rSTAYKxF2K77ZLZ8GoAwTqPGaphAqMyXV";s:11:"transaction";s:64:"fb91b493680c6488b2624b38b933784fc61f786a5f1b7471ac3c7c634182f2a7";s:7:"address";s:34:"rsTAYkk7VQfBdD5btt2WzXYphER6F2BTuN";s:8:"sort_key";i:46;s:6:"effect";s:97:"-230077120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}i:47;a:9:{s:8:"currency";s:37:"STX.rSTAYKxF2K77ZLZ8GoAwTqPGaphAqMyXV";s:11:"transaction";s:64:"fb91b493680c6488b2624b38b933784fc61f786a5f1b7471ac3c7c634182f2a7";s:7:"address";s:34:"rNb2KazxBbb5ixpjrXAYm5sXLx3wcqETE4";s:8:"sort_key";i:47;s:6:"effect";s:96:"230077120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:87251890;s:4:"time";s:19:"2024-04-12 04:38:30";}}s:10:"currencies";a:12:{i:0;a:4:{s:2:"id";s:75:"5852505300000000000000000000000000000000.rN1bCPAxHDvyJzvkUso1L2wvXufgE4gXPL";s:4:"name";s:4:"XRPS";s:6:"symbol";s:4:"XRPS";s:8:"decimals";i:96;}i:1;a:4:{s:2:"id";s:38:"USD.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:4:"name";s:3:"USD";s:6:"symbol";s:3:"USD";s:8:"decimals";i:96;}i:2;a:4:{s:2:"id";s:38:"XLM.rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y";s:4:"name";s:3:"XLM";s:6:"symbol";s:3:"XLM";s:8:"decimals";i:96;}i:3;a:4:{s:2:"id";s:37:"USD.rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:4:"name";s:3:"USD";s:6:"symbol";s:3:"USD";s:8:"decimals";i:96;}i:4;a:4:{s:2:"id";s:75:"534F4C4F00000000000000000000000000000000.rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz";s:4:"name";s:4:"SOLO";s:6:"symbol";s:4:"SOLO";s:8:"decimals";i:96;}i:5;a:4:{s:2:"id";s:37:"LTC.rcRzGWq6Ng3jeYhqnmM4zcWcUh69hrQ8V";s:4:"name";s:3:"LTC";s:6:"symbol";s:3:"LTC";s:8:"decimals";i:96;}i:6;a:4:{s:2:"id";s:38:"AAU.rGho1zZBxtiiyQgMfReAju9Sc2MMtvtAAU";s:4:"name";s:3:"AAU";s:6:"symbol";s:3:"AAU";s:8:"decimals";i:96;}i:7;a:4:{s:2:"id";s:75:"58525061794E6574000000000000000000000000.r9rRLst96Ue4YTDQkWWkX1ePB6p6Ye4FkA";s:4:"name";s:8:"XRPayNet";s:6:"symbol";s:8:"XRPayNet";s:8:"decimals";i:96;}i:8;a:4:{s:2:"id";s:38:"BOX.rhy4FUHtXrMZhbkBfeYvDv4nz6R7M4cu1t";s:4:"name";s:3:"BOX";s:6:"symbol";s:3:"BOX";s:8:"decimals";i:96;}i:9;a:4:{s:2:"id";s:74:"434F524500000000000000000000000000000000.rcoreNywaoz2ZCQ8Lg2EbSLnGuRBmun6D";s:4:"name";s:4:"CORE";s:6:"symbol";s:4:"CORE";s:8:"decimals";i:96;}i:10;a:4:{s:2:"id";s:38:"ARK.rf5Jzzy6oAFBJjLhokha1v8pXVgYYjee3b";s:4:"name";s:3:"ARK";s:6:"symbol";s:3:"ARK";s:8:"decimals";i:96;}i:11;a:4:{s:2:"id";s:37:"STX.rSTAYKxF2K77ZLZ8GoAwTqPGaphAqMyXV";s:4:"name";s:3:"STX";s:6:"symbol";s:3:"STX";s:8:"decimals";i:96;}}}'], ]; } } diff --git a/Modules/RippleMainModule.php b/Modules/RippleMainModule.php index 32a63e3..cb5a2ba 100644 --- a/Modules/RippleMainModule.php +++ b/Modules/RippleMainModule.php @@ -1,8 +1,10 @@ tests = [ ['block' => 960986, 'result' => 'a:2:{s:6:"events";a:12:{i:0;a:8:{s:11:"transaction";s:64:"3f07e5680e4a1a6eb1ab6ccc2907c8ffadd5a11cb7f0c4e3452b2b8f4ddb759e";s:7:"address";s:34:"rf6nVZPkV85VXq8RtE1esRf3sDMpQ1Dw6U";s:8:"sort_key";i:0;s:6:"effect";s:9:"-16000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:1;a:8:{s:11:"transaction";s:64:"3f07e5680e4a1a6eb1ab6ccc2907c8ffadd5a11cb7f0c4e3452b2b8f4ddb759e";s:7:"address";s:34:"rpyUV8W6XRvss6SBkAS8PyzGwMsSDxgNXW";s:8:"sort_key";i:1;s:6:"effect";s:8:"16000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:2;a:8:{s:11:"transaction";s:64:"3f07e5680e4a1a6eb1ab6ccc2907c8ffadd5a11cb7f0c4e3452b2b8f4ddb759e";s:7:"address";s:34:"rf6nVZPkV85VXq8RtE1esRf3sDMpQ1Dw6U";s:8:"sort_key";i:2;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:3;a:8:{s:11:"transaction";s:64:"3f07e5680e4a1a6eb1ab6ccc2907c8ffadd5a11cb7f0c4e3452b2b8f4ddb759e";s:7:"address";s:8:"the-void";s:8:"sort_key";i:3;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:4;a:8:{s:11:"transaction";s:64:"93162ee071a0b54bb0b7122324509a1598369c62c6cf5275d23ea3124b22f458";s:7:"address";s:34:"rw7KGprEtiY2g7RCoYuyD9mF3zDQEWNzqh";s:8:"sort_key";i:4;s:6:"effect";s:8:"-1000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:5;a:8:{s:11:"transaction";s:64:"93162ee071a0b54bb0b7122324509a1598369c62c6cf5275d23ea3124b22f458";s:7:"address";s:34:"rpyUV8W6XRvss6SBkAS8PyzGwMsSDxgNXW";s:8:"sort_key";i:5;s:6:"effect";s:7:"1000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:6;a:8:{s:11:"transaction";s:64:"93162ee071a0b54bb0b7122324509a1598369c62c6cf5275d23ea3124b22f458";s:7:"address";s:34:"rw7KGprEtiY2g7RCoYuyD9mF3zDQEWNzqh";s:8:"sort_key";i:6;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:7;a:8:{s:11:"transaction";s:64:"93162ee071a0b54bb0b7122324509a1598369c62c6cf5275d23ea3124b22f458";s:7:"address";s:8:"the-void";s:8:"sort_key";i:7;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:8;a:8:{s:11:"transaction";s:64:"e23ee2c6c5c27ab55c2c0e2419c2b0a82b06d7d3b81760b2861682742d2fe904";s:7:"address";s:34:"rKKgjpgxooi38dveFfZX1wKcP2KmWcmMsz";s:8:"sort_key";i:8;s:6:"effect";s:12:"-14799000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:9;a:8:{s:11:"transaction";s:64:"e23ee2c6c5c27ab55c2c0e2419c2b0a82b06d7d3b81760b2861682742d2fe904";s:7:"address";s:34:"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun";s:8:"sort_key";i:9;s:6:"effect";s:11:"14799000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:10;a:8:{s:11:"transaction";s:64:"e23ee2c6c5c27ab55c2c0e2419c2b0a82b06d7d3b81760b2861682742d2fe904";s:7:"address";s:34:"rKKgjpgxooi38dveFfZX1wKcP2KmWcmMsz";s:8:"sort_key";i:10;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}i:11;a:8:{s:11:"transaction";s:64:"e23ee2c6c5c27ab55c2c0e2419c2b0a82b06d7d3b81760b2861682742d2fe904";s:7:"address";s:8:"the-void";s:8:"sort_key";i:11;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:960986;s:4:"time";s:19:"2013-06-07 12:25:50";}}s:10:"currencies";N;}'], - ['block' => 3960046, 'result' => 'a:2:{s:6:"events";a:22:{i:0;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:34:"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt";s:8:"sort_key";i:0;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:1;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:34:"rMqdo8H2QeyHHW1dpJh5Ma2GgmvsU2fUHH";s:8:"sort_key";i:1;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:2;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:34:"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt";s:8:"sort_key";i:2;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:3;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:8:"the-void";s:8:"sort_key";i:3;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:4;a:8:{s:11:"transaction";s:64:"8252716f6ea0ad8ecc51670984256c812c8e6e7c35e0a3bf4af9581c75360002";s:7:"address";s:34:"rpvRmcPgqvunkXQg5qNCjsoKFwb2uB6PeT";s:8:"sort_key";i:4;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:5;a:8:{s:11:"transaction";s:64:"8252716f6ea0ad8ecc51670984256c812c8e6e7c35e0a3bf4af9581c75360002";s:7:"address";s:8:"the-void";s:8:"sort_key";i:5;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:6;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:34:"r9GyWDa9ep66pqVdvGAq7FkgsEKwnNEux4";s:8:"sort_key";i:6;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:7;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:33:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B";s:8:"sort_key";i:7;s:6:"effect";s:1:"0";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:8;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:34:"r9GyWDa9ep66pqVdvGAq7FkgsEKwnNEux4";s:8:"sort_key";i:8;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:9;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:8:"the-void";s:8:"sort_key";i:9;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:10;a:8:{s:11:"transaction";s:64:"a851faa0d892e976d7c5c5b3054df0391a81915a53dfc3772f13d451e9b54a46";s:7:"address";s:34:"rDotEHT93xJLUAvM3WAyNHY2iwpgTb9P8Z";s:8:"sort_key";i:10;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:11;a:8:{s:11:"transaction";s:64:"a851faa0d892e976d7c5c5b3054df0391a81915a53dfc3772f13d451e9b54a46";s:7:"address";s:8:"the-void";s:8:"sort_key";i:11;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:12;a:8:{s:11:"transaction";s:64:"ab328ae324681c70e9185158a7534dc4140ec8772c3a87b35af6941ba1e181c2";s:7:"address";s:34:"rGBoiaky7DcgpZN8PkUfW2YQF2jfBWAsqx";s:8:"sort_key";i:12;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:13;a:8:{s:11:"transaction";s:64:"ab328ae324681c70e9185158a7534dc4140ec8772c3a87b35af6941ba1e181c2";s:7:"address";s:8:"the-void";s:8:"sort_key";i:13;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:14;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:34:"rwHejp63Uns3BtwjBoYNDHkpQeKcgx5EH9";s:8:"sort_key";i:14;s:6:"effect";s:9:"-12000000";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:15;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:34:"r4hbm18fKYtjgu4cywkj3FtH9A5rjTkHyT";s:8:"sort_key";i:15;s:6:"effect";s:8:"12000000";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:16;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:34:"rwHejp63Uns3BtwjBoYNDHkpQeKcgx5EH9";s:8:"sort_key";i:16;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:17;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:8:"the-void";s:8:"sort_key";i:17;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:18;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:34:"rNKXT1p7jpt5WxSRSzmUV6ZB6kY7jdqHmx";s:8:"sort_key";i:18;s:6:"effect";s:9:"-30000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:19;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:34:"r9UHbxPjWQCHLz5PUCRubjR19zTFhEGUoR";s:8:"sort_key";i:19;s:6:"effect";s:8:"30000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:20;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:34:"rNKXT1p7jpt5WxSRSzmUV6ZB6kY7jdqHmx";s:8:"sort_key";i:20;s:6:"effect";s:4:"-250";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:21;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:8:"the-void";s:8:"sort_key";i:21;s:6:"effect";s:3:"250";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}}s:10:"currencies";N;}'], + ['block' => 3960046, 'result' => 'a:2:{s:6:"events";a:24:{i:0;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:34:"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt";s:8:"sort_key";i:0;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:1;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:8:"the-void";s:8:"sort_key";i:1;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:2;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:34:"ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt";s:8:"sort_key";i:2;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:3;a:8:{s:11:"transaction";s:64:"02aafec4e6a282622aaaff23dab79ba4c9def1d1d488bc19ff91923dc96b7f9f";s:7:"address";s:8:"the-void";s:8:"sort_key";i:3;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:4;a:8:{s:11:"transaction";s:64:"8252716f6ea0ad8ecc51670984256c812c8e6e7c35e0a3bf4af9581c75360002";s:7:"address";s:34:"rpvRmcPgqvunkXQg5qNCjsoKFwb2uB6PeT";s:8:"sort_key";i:4;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:2:"oc";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:5;a:8:{s:11:"transaction";s:64:"8252716f6ea0ad8ecc51670984256c812c8e6e7c35e0a3bf4af9581c75360002";s:7:"address";s:8:"the-void";s:8:"sort_key";i:5;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:2:"oc";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:6;a:8:{s:11:"transaction";s:64:"8252716f6ea0ad8ecc51670984256c812c8e6e7c35e0a3bf4af9581c75360002";s:7:"address";s:34:"rpvRmcPgqvunkXQg5qNCjsoKFwb2uB6PeT";s:8:"sort_key";i:6;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:7;a:8:{s:11:"transaction";s:64:"8252716f6ea0ad8ecc51670984256c812c8e6e7c35e0a3bf4af9581c75360002";s:7:"address";s:8:"the-void";s:8:"sort_key";i:7;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:8;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:34:"r9GyWDa9ep66pqVdvGAq7FkgsEKwnNEux4";s:8:"sort_key";i:8;s:6:"effect";s:11:"-6094715598";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:9;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:34:"rwBYyfufTzk77zUSKEu4MvixfarC35av1J";s:8:"sort_key";i:9;s:6:"effect";s:10:"6094715598";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:10;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:34:"r9GyWDa9ep66pqVdvGAq7FkgsEKwnNEux4";s:8:"sort_key";i:10;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:11;a:8:{s:11:"transaction";s:64:"91fe86ce880019cff9d00a0cbafee07cd366ec37be9238ce9e7b992bab766603";s:7:"address";s:8:"the-void";s:8:"sort_key";i:11;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:12;a:8:{s:11:"transaction";s:64:"a851faa0d892e976d7c5c5b3054df0391a81915a53dfc3772f13d451e9b54a46";s:7:"address";s:34:"rDotEHT93xJLUAvM3WAyNHY2iwpgTb9P8Z";s:8:"sort_key";i:12;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:13;a:8:{s:11:"transaction";s:64:"a851faa0d892e976d7c5c5b3054df0391a81915a53dfc3772f13d451e9b54a46";s:7:"address";s:8:"the-void";s:8:"sort_key";i:13;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:14;a:8:{s:11:"transaction";s:64:"ab328ae324681c70e9185158a7534dc4140ec8772c3a87b35af6941ba1e181c2";s:7:"address";s:34:"rGBoiaky7DcgpZN8PkUfW2YQF2jfBWAsqx";s:8:"sort_key";i:14;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:15;a:8:{s:11:"transaction";s:64:"ab328ae324681c70e9185158a7534dc4140ec8772c3a87b35af6941ba1e181c2";s:7:"address";s:8:"the-void";s:8:"sort_key";i:15;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:16;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:34:"rwHejp63Uns3BtwjBoYNDHkpQeKcgx5EH9";s:8:"sort_key";i:16;s:6:"effect";s:2:"-0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:17;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:8:"the-void";s:8:"sort_key";i:17;s:6:"effect";s:1:"0";s:6:"failed";s:1:"t";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:18;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:34:"rwHejp63Uns3BtwjBoYNDHkpQeKcgx5EH9";s:8:"sort_key";i:18;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:19;a:8:{s:11:"transaction";s:64:"bb5957ff0658015c466e76eda8b6019d5db5fc91e43fc3518448c99b443a76c6";s:7:"address";s:8:"the-void";s:8:"sort_key";i:19;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:20;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:34:"rNKXT1p7jpt5WxSRSzmUV6ZB6kY7jdqHmx";s:8:"sort_key";i:20;s:6:"effect";s:9:"-30000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:21;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:34:"r9UHbxPjWQCHLz5PUCRubjR19zTFhEGUoR";s:8:"sort_key";i:21;s:6:"effect";s:8:"30000000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:22;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:34:"rNKXT1p7jpt5WxSRSzmUV6ZB6kY7jdqHmx";s:8:"sort_key";i:22;s:6:"effect";s:4:"-250";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}i:23;a:8:{s:11:"transaction";s:64:"d5d22eaea5255ff3c9c9db230671d97241fffdc95f29d61d6d80d7f7c0f5db58";s:7:"address";s:8:"the-void";s:8:"sort_key";i:23;s:6:"effect";s:3:"250";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:3960046;s:4:"time";s:19:"2013-12-19 05:42:10";}}s:10:"currencies";N;}'], + ['block' => 83305991, 'result' => 'a:2:{s:6:"events";a:128:{i:0;a:8:{s:11:"transaction";s:64:"0015685dc89b468efd703d69979262c55158893f7076890ff98d0db346cd023f";s:7:"address";s:34:"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W";s:8:"sort_key";i:0;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:1;a:8:{s:11:"transaction";s:64:"0015685dc89b468efd703d69979262c55158893f7076890ff98d0db346cd023f";s:7:"address";s:8:"the-void";s:8:"sort_key";i:1;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:2;a:8:{s:11:"transaction";s:64:"03519e59b1c82a8cb0015dbac4084c5dda8d294ed49bc8ef9bf2585ee8c805ba";s:7:"address";s:34:"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W";s:8:"sort_key";i:2;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:3;a:8:{s:11:"transaction";s:64:"03519e59b1c82a8cb0015dbac4084c5dda8d294ed49bc8ef9bf2585ee8c805ba";s:7:"address";s:8:"the-void";s:8:"sort_key";i:3;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:4;a:8:{s:11:"transaction";s:64:"0d24cc3f8bc3f2f02af337edcdd4146e59e5db1e9211771af5a4ffd8e0890df8";s:7:"address";s:34:"r4dgY6Mzob3NVq8CFYdEiPnXKboRScsXRu";s:8:"sort_key";i:4;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:5;a:8:{s:11:"transaction";s:64:"0d24cc3f8bc3f2f02af337edcdd4146e59e5db1e9211771af5a4ffd8e0890df8";s:7:"address";s:8:"the-void";s:8:"sort_key";i:5;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:6;a:8:{s:11:"transaction";s:64:"11ebf648dd5917304bf630f3d38813509a5495052bf6e2f74ef51c890dcb25a9";s:7:"address";s:34:"rar4Qnqrp4KJued6q693sESS2vydE3AcFg";s:8:"sort_key";i:6;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:7;a:8:{s:11:"transaction";s:64:"11ebf648dd5917304bf630f3d38813509a5495052bf6e2f74ef51c890dcb25a9";s:7:"address";s:8:"the-void";s:8:"sort_key";i:7;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:8;a:8:{s:11:"transaction";s:64:"162544f7912131e2390ca4803b4d0673168c5e87e1ee93c5fdb88530727d03df";s:7:"address";s:34:"r4AZpDKVoBxVcYUJCWMcqZzyWsHTteC4ZE";s:8:"sort_key";i:8;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:9;a:8:{s:11:"transaction";s:64:"162544f7912131e2390ca4803b4d0673168c5e87e1ee93c5fdb88530727d03df";s:7:"address";s:8:"the-void";s:8:"sort_key";i:9;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:10;a:8:{s:11:"transaction";s:64:"16372c10db8a75b14129d0b5ea438539ab5242020e24305850ddadc3c283b429";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:10;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:11;a:8:{s:11:"transaction";s:64:"16372c10db8a75b14129d0b5ea438539ab5242020e24305850ddadc3c283b429";s:7:"address";s:8:"the-void";s:8:"sort_key";i:11;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:12;a:8:{s:11:"transaction";s:64:"18b1e10532aa540098af3dc367930b962bf52ce6532711dc138a9028e81002db";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:12;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:13;a:8:{s:11:"transaction";s:64:"18b1e10532aa540098af3dc367930b962bf52ce6532711dc138a9028e81002db";s:7:"address";s:8:"the-void";s:8:"sort_key";i:13;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:14;a:8:{s:11:"transaction";s:64:"18e2fc3ef82a6e9c627d1c14aad5d68af7f4c4b33d19b1d24201857927adf23b";s:7:"address";s:34:"rh3VLyj1GbQjX7eA15BwUagEhSrPHmLkSR";s:8:"sort_key";i:14;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:15;a:8:{s:11:"transaction";s:64:"18e2fc3ef82a6e9c627d1c14aad5d68af7f4c4b33d19b1d24201857927adf23b";s:7:"address";s:8:"the-void";s:8:"sort_key";i:15;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:16;a:8:{s:11:"transaction";s:64:"1b67ff24c56a0c550a0ba538259e0c853141afca523f2d7e6f01230337a8ff7f";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:16;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:17;a:8:{s:11:"transaction";s:64:"1b67ff24c56a0c550a0ba538259e0c853141afca523f2d7e6f01230337a8ff7f";s:7:"address";s:8:"the-void";s:8:"sort_key";i:17;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:18;a:8:{s:11:"transaction";s:64:"1e03b3e7653a93d3710d234c151eb419e24f1d4a5078279b96068271799f3915";s:7:"address";s:34:"rQ3fNyLjbvcDaPNS4EAJY8aT9zR3uGk17c";s:8:"sort_key";i:18;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:19;a:8:{s:11:"transaction";s:64:"1e03b3e7653a93d3710d234c151eb419e24f1d4a5078279b96068271799f3915";s:7:"address";s:8:"the-void";s:8:"sort_key";i:19;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:20;a:8:{s:11:"transaction";s:64:"1e41db219d5de556d54c3586f035f39c891e2d0c0be246393286fe6451b2d3fe";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:20;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:21;a:8:{s:11:"transaction";s:64:"1e41db219d5de556d54c3586f035f39c891e2d0c0be246393286fe6451b2d3fe";s:7:"address";s:8:"the-void";s:8:"sort_key";i:21;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:22;a:8:{s:11:"transaction";s:64:"288ee0e167217bcf32749e8ce8c895aec113faf6001911da26eea21f0571c353";s:7:"address";s:34:"rQ3fNyLjbvcDaPNS4EAJY8aT9zR3uGk17c";s:8:"sort_key";i:22;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:23;a:8:{s:11:"transaction";s:64:"288ee0e167217bcf32749e8ce8c895aec113faf6001911da26eea21f0571c353";s:7:"address";s:8:"the-void";s:8:"sort_key";i:23;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:24;a:8:{s:11:"transaction";s:64:"2b44d8df52482373057da79484ea2b990ea5b734986bc3402a77ba7a4feaa1d1";s:7:"address";s:34:"r4LsiRFSwAmJWvDYR2MxCUw1dUTiYUB4ou";s:8:"sort_key";i:24;s:6:"effect";s:3:"-25";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:25;a:8:{s:11:"transaction";s:64:"2b44d8df52482373057da79484ea2b990ea5b734986bc3402a77ba7a4feaa1d1";s:7:"address";s:34:"rNxp4h8apvRis6mJf9Sh8C6iRxfrDWN7AV";s:8:"sort_key";i:25;s:6:"effect";s:2:"25";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:26;a:8:{s:11:"transaction";s:64:"2b44d8df52482373057da79484ea2b990ea5b734986bc3402a77ba7a4feaa1d1";s:7:"address";s:34:"r4LsiRFSwAmJWvDYR2MxCUw1dUTiYUB4ou";s:8:"sort_key";i:26;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:27;a:8:{s:11:"transaction";s:64:"2b44d8df52482373057da79484ea2b990ea5b734986bc3402a77ba7a4feaa1d1";s:7:"address";s:8:"the-void";s:8:"sort_key";i:27;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:28;a:8:{s:11:"transaction";s:64:"344f9a1fa8296b0ec4ec17adc347be78e336943d4c5bea31acc4502c1442e159";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:28;s:6:"effect";s:6:"-24900";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:29;a:8:{s:11:"transaction";s:64:"344f9a1fa8296b0ec4ec17adc347be78e336943d4c5bea31acc4502c1442e159";s:7:"address";s:34:"rpK8LYQbxGUo4bEviprGHBznvRYYCgJcxy";s:8:"sort_key";i:29;s:6:"effect";s:5:"24900";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:30;a:8:{s:11:"transaction";s:64:"344f9a1fa8296b0ec4ec17adc347be78e336943d4c5bea31acc4502c1442e159";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:30;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:31;a:8:{s:11:"transaction";s:64:"344f9a1fa8296b0ec4ec17adc347be78e336943d4c5bea31acc4502c1442e159";s:7:"address";s:8:"the-void";s:8:"sort_key";i:31;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:32;a:8:{s:11:"transaction";s:64:"35934a935afaea010ec8bfcd710edf4da5aa736dc0818735b3c3e1618d5cbeaf";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:32;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:33;a:8:{s:11:"transaction";s:64:"35934a935afaea010ec8bfcd710edf4da5aa736dc0818735b3c3e1618d5cbeaf";s:7:"address";s:8:"the-void";s:8:"sort_key";i:33;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:34;a:8:{s:11:"transaction";s:64:"3e386aae714eb31ccc29ba260045d6e377f7d79b8cc9c49753e611b38929d588";s:7:"address";s:34:"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W";s:8:"sort_key";i:34;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:35;a:8:{s:11:"transaction";s:64:"3e386aae714eb31ccc29ba260045d6e377f7d79b8cc9c49753e611b38929d588";s:7:"address";s:8:"the-void";s:8:"sort_key";i:35;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:36;a:8:{s:11:"transaction";s:64:"3ff635200035645ca436bee709aed78fb4ba492d6f89e0377545ab10e7f6d429";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:36;s:6:"effect";s:3:"-20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:37;a:8:{s:11:"transaction";s:64:"3ff635200035645ca436bee709aed78fb4ba492d6f89e0377545ab10e7f6d429";s:7:"address";s:8:"the-void";s:8:"sort_key";i:37;s:6:"effect";s:2:"20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:38;a:8:{s:11:"transaction";s:64:"4240e9e21ce095bafb29ef4db3143b59c20362629e1132d57677ec6d3c91e805";s:7:"address";s:34:"rfcBGSNFH6AJCtC3YEJqNNj6QXuD14Jn1d";s:8:"sort_key";i:38;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:39;a:8:{s:11:"transaction";s:64:"4240e9e21ce095bafb29ef4db3143b59c20362629e1132d57677ec6d3c91e805";s:7:"address";s:8:"the-void";s:8:"sort_key";i:39;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:40;a:8:{s:11:"transaction";s:64:"49ce417c43d1828c58810b5af26f8bc875539546e82ca8b5ff0dd9a95c354670";s:7:"address";s:34:"rpAepkGqJnQSNTxozKSu9KPrxHVgyLpL8p";s:8:"sort_key";i:40;s:6:"effect";s:3:"-27";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:41;a:8:{s:11:"transaction";s:64:"49ce417c43d1828c58810b5af26f8bc875539546e82ca8b5ff0dd9a95c354670";s:7:"address";s:34:"rNxp4h8apvRis6mJf9Sh8C6iRxfrDWN7AV";s:8:"sort_key";i:41;s:6:"effect";s:2:"27";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:42;a:8:{s:11:"transaction";s:64:"49ce417c43d1828c58810b5af26f8bc875539546e82ca8b5ff0dd9a95c354670";s:7:"address";s:34:"rpAepkGqJnQSNTxozKSu9KPrxHVgyLpL8p";s:8:"sort_key";i:42;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:43;a:8:{s:11:"transaction";s:64:"49ce417c43d1828c58810b5af26f8bc875539546e82ca8b5ff0dd9a95c354670";s:7:"address";s:8:"the-void";s:8:"sort_key";i:43;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:44;a:8:{s:11:"transaction";s:64:"4b745aefbb7f2154f692a50c7ebc6db9f72b635ec158158dc3a0dc2e2291b064";s:7:"address";s:34:"r4dgY6Mzob3NVq8CFYdEiPnXKboRScsXRu";s:8:"sort_key";i:44;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:45;a:8:{s:11:"transaction";s:64:"4b745aefbb7f2154f692a50c7ebc6db9f72b635ec158158dc3a0dc2e2291b064";s:7:"address";s:8:"the-void";s:8:"sort_key";i:45;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:46;a:8:{s:11:"transaction";s:64:"4e276432da007148440fa1b5f9aaa147d36793f15196fedeec0db56ffa43ea45";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:46;s:6:"effect";s:3:"-20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:47;a:8:{s:11:"transaction";s:64:"4e276432da007148440fa1b5f9aaa147d36793f15196fedeec0db56ffa43ea45";s:7:"address";s:8:"the-void";s:8:"sort_key";i:47;s:6:"effect";s:2:"20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:48;a:8:{s:11:"transaction";s:64:"5080fb10c55b4e71b588fc4597c4cfe265937707d31d6090e0bd63e62f23ce50";s:7:"address";s:34:"rh3VLyj1GbQjX7eA15BwUagEhSrPHmLkSR";s:8:"sort_key";i:48;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:49;a:8:{s:11:"transaction";s:64:"5080fb10c55b4e71b588fc4597c4cfe265937707d31d6090e0bd63e62f23ce50";s:7:"address";s:8:"the-void";s:8:"sort_key";i:49;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:50;a:8:{s:11:"transaction";s:64:"549a17423977614ef7a91d31d395ca723ca6a6bfd882dc92a2f2e32ed48c7fca";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:50;s:6:"effect";s:3:"-20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:51;a:8:{s:11:"transaction";s:64:"549a17423977614ef7a91d31d395ca723ca6a6bfd882dc92a2f2e32ed48c7fca";s:7:"address";s:8:"the-void";s:8:"sort_key";i:51;s:6:"effect";s:2:"20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:52;a:8:{s:11:"transaction";s:64:"58ed14fb80342e60acc42b6eea3541ed15ab6c979a13b973d5f703f7eadc538b";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:52;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:53;a:8:{s:11:"transaction";s:64:"58ed14fb80342e60acc42b6eea3541ed15ab6c979a13b973d5f703f7eadc538b";s:7:"address";s:8:"the-void";s:8:"sort_key";i:53;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:54;a:8:{s:11:"transaction";s:64:"5d0670eb8b042c6f28878e3cfa56e11b37cfc18b57a9c1e7e1d88963927c4847";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:54;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:55;a:8:{s:11:"transaction";s:64:"5d0670eb8b042c6f28878e3cfa56e11b37cfc18b57a9c1e7e1d88963927c4847";s:7:"address";s:8:"the-void";s:8:"sort_key";i:55;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:56;a:8:{s:11:"transaction";s:64:"5d7a9cfeb0219c2a6312e431abc4107ea7d5c560fbaf091c8e903fdb49cd452c";s:7:"address";s:34:"r4dgY6Mzob3NVq8CFYdEiPnXKboRScsXRu";s:8:"sort_key";i:56;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:57;a:8:{s:11:"transaction";s:64:"5d7a9cfeb0219c2a6312e431abc4107ea7d5c560fbaf091c8e903fdb49cd452c";s:7:"address";s:8:"the-void";s:8:"sort_key";i:57;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:58;a:8:{s:11:"transaction";s:64:"5e8e09c5a5b0d00dda4e545589e1032e3e122bc45d007fe695e3aecd5eee600f";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:58;s:6:"effect";s:6:"-13100";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:59;a:8:{s:11:"transaction";s:64:"5e8e09c5a5b0d00dda4e545589e1032e3e122bc45d007fe695e3aecd5eee600f";s:7:"address";s:34:"rnskoeeyeTmTfPodgmp4qguuiMNWybKkuo";s:8:"sort_key";i:59;s:6:"effect";s:5:"13100";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:60;a:8:{s:11:"transaction";s:64:"5e8e09c5a5b0d00dda4e545589e1032e3e122bc45d007fe695e3aecd5eee600f";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:60;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:61;a:8:{s:11:"transaction";s:64:"5e8e09c5a5b0d00dda4e545589e1032e3e122bc45d007fe695e3aecd5eee600f";s:7:"address";s:8:"the-void";s:8:"sort_key";i:61;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:62;a:8:{s:11:"transaction";s:64:"61fdaa1cc0058466b381d9b2a6329e86d1fef9f0ecfb8704c08b062f03037dd3";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:62;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:63;a:8:{s:11:"transaction";s:64:"61fdaa1cc0058466b381d9b2a6329e86d1fef9f0ecfb8704c08b062f03037dd3";s:7:"address";s:8:"the-void";s:8:"sort_key";i:63;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:64;a:8:{s:11:"transaction";s:64:"622fc99294dd0a8a883d92d17a8d2999d34662b35c953222a5aed3eca94cfe97";s:7:"address";s:34:"r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W";s:8:"sort_key";i:64;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:65;a:8:{s:11:"transaction";s:64:"622fc99294dd0a8a883d92d17a8d2999d34662b35c953222a5aed3eca94cfe97";s:7:"address";s:8:"the-void";s:8:"sort_key";i:65;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:66;a:8:{s:11:"transaction";s:64:"637e667d90c40b16cd26ff68a49db1bbc9fb0e30a56fdf994dc8cb9222cc6296";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:66;s:6:"effect";s:3:"-20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:67;a:8:{s:11:"transaction";s:64:"637e667d90c40b16cd26ff68a49db1bbc9fb0e30a56fdf994dc8cb9222cc6296";s:7:"address";s:8:"the-void";s:8:"sort_key";i:67;s:6:"effect";s:2:"20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:68;a:8:{s:11:"transaction";s:64:"63d52758206f805869468c69c4731f2616ef22187b041327b58c17a75c2144fd";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:68;s:6:"effect";s:5:"-2000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:69;a:8:{s:11:"transaction";s:64:"63d52758206f805869468c69c4731f2616ef22187b041327b58c17a75c2144fd";s:7:"address";s:34:"rLuE2So4cUuF4DbpA84tsUSe72NB6VCZ9v";s:8:"sort_key";i:69;s:6:"effect";s:4:"2000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:70;a:8:{s:11:"transaction";s:64:"63d52758206f805869468c69c4731f2616ef22187b041327b58c17a75c2144fd";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:70;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:71;a:8:{s:11:"transaction";s:64:"63d52758206f805869468c69c4731f2616ef22187b041327b58c17a75c2144fd";s:7:"address";s:8:"the-void";s:8:"sort_key";i:71;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:72;a:8:{s:11:"transaction";s:64:"641d238d3949404aa8bfd465527626d807d28c77843a2564dad5c964769942c6";s:7:"address";s:34:"r4AZpDKVoBxVcYUJCWMcqZzyWsHTteC4ZE";s:8:"sort_key";i:72;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:73;a:8:{s:11:"transaction";s:64:"641d238d3949404aa8bfd465527626d807d28c77843a2564dad5c964769942c6";s:7:"address";s:8:"the-void";s:8:"sort_key";i:73;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:74;a:8:{s:11:"transaction";s:64:"66598af484d1c4febc8cb0cc4bf779ad2fbf10857008e7534ae401ee34e1bea5";s:7:"address";s:34:"r4dgY6Mzob3NVq8CFYdEiPnXKboRScsXRu";s:8:"sort_key";i:74;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:75;a:8:{s:11:"transaction";s:64:"66598af484d1c4febc8cb0cc4bf779ad2fbf10857008e7534ae401ee34e1bea5";s:7:"address";s:8:"the-void";s:8:"sort_key";i:75;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:76;a:8:{s:11:"transaction";s:64:"6bce9e01dab44810fc07e48730e88168fd3d9eec5dc73c552b7193679b5c65e0";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:76;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:77;a:8:{s:11:"transaction";s:64:"6bce9e01dab44810fc07e48730e88168fd3d9eec5dc73c552b7193679b5c65e0";s:7:"address";s:8:"the-void";s:8:"sort_key";i:77;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:78;a:8:{s:11:"transaction";s:64:"6c1a0f33ae1689bf82bdc21d58c7b837ff4a2743e4dc32f3766352aab345e7b1";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:78;s:6:"effect";s:4:"-900";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:79;a:8:{s:11:"transaction";s:64:"6c1a0f33ae1689bf82bdc21d58c7b837ff4a2743e4dc32f3766352aab345e7b1";s:7:"address";s:34:"rLLZ2rMcMzyyGDarHeksXMeDaJH82YfWM4";s:8:"sort_key";i:79;s:6:"effect";s:3:"900";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:80;a:8:{s:11:"transaction";s:64:"6c1a0f33ae1689bf82bdc21d58c7b837ff4a2743e4dc32f3766352aab345e7b1";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:80;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:81;a:8:{s:11:"transaction";s:64:"6c1a0f33ae1689bf82bdc21d58c7b837ff4a2743e4dc32f3766352aab345e7b1";s:7:"address";s:8:"the-void";s:8:"sort_key";i:81;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:82;a:8:{s:11:"transaction";s:64:"7442fb5b621ac71432e8853413fe1b3cc71fb4d9a07b8ea69a2e4fe1ddb92c87";s:7:"address";s:34:"r4AZpDKVoBxVcYUJCWMcqZzyWsHTteC4ZE";s:8:"sort_key";i:82;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:83;a:8:{s:11:"transaction";s:64:"7442fb5b621ac71432e8853413fe1b3cc71fb4d9a07b8ea69a2e4fe1ddb92c87";s:7:"address";s:8:"the-void";s:8:"sort_key";i:83;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:84;a:8:{s:11:"transaction";s:64:"801ede845e8d2c6d8043bb9d4ae1e8f3fee1cd15958a41957371f5a61431d9ea";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:84;s:6:"effect";s:6:"-13100";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:85;a:8:{s:11:"transaction";s:64:"801ede845e8d2c6d8043bb9d4ae1e8f3fee1cd15958a41957371f5a61431d9ea";s:7:"address";s:34:"rhQvpUSbEbP73iumzyBd59Kw56iBViZu1c";s:8:"sort_key";i:85;s:6:"effect";s:5:"13100";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:86;a:8:{s:11:"transaction";s:64:"801ede845e8d2c6d8043bb9d4ae1e8f3fee1cd15958a41957371f5a61431d9ea";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:86;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:87;a:8:{s:11:"transaction";s:64:"801ede845e8d2c6d8043bb9d4ae1e8f3fee1cd15958a41957371f5a61431d9ea";s:7:"address";s:8:"the-void";s:8:"sort_key";i:87;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:88;a:8:{s:11:"transaction";s:64:"87610c6766ea0f283378f7e2604338466cb9788cf75f2440decea111146f7b5f";s:7:"address";s:34:"rQ3fNyLjbvcDaPNS4EAJY8aT9zR3uGk17c";s:8:"sort_key";i:88;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:89;a:8:{s:11:"transaction";s:64:"87610c6766ea0f283378f7e2604338466cb9788cf75f2440decea111146f7b5f";s:7:"address";s:8:"the-void";s:8:"sort_key";i:89;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:90;a:8:{s:11:"transaction";s:64:"90aa5049d8fb718431c0872d70ad599a9747bdfa824ca4431e597fe34e295679";s:7:"address";s:34:"rh3VLyj1GbQjX7eA15BwUagEhSrPHmLkSR";s:8:"sort_key";i:90;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:91;a:8:{s:11:"transaction";s:64:"90aa5049d8fb718431c0872d70ad599a9747bdfa824ca4431e597fe34e295679";s:7:"address";s:8:"the-void";s:8:"sort_key";i:91;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:92;a:8:{s:11:"transaction";s:64:"b2486ab867040575c75d4b3e27f08aff839ad1d318f1c73d23dd0520657583f1";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:92;s:6:"effect";s:3:"-20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:93;a:8:{s:11:"transaction";s:64:"b2486ab867040575c75d4b3e27f08aff839ad1d318f1c73d23dd0520657583f1";s:7:"address";s:8:"the-void";s:8:"sort_key";i:93;s:6:"effect";s:2:"20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:94;a:8:{s:11:"transaction";s:64:"b40f9f50983cf49a106912374a38581e33865069ee333ec30c6b970b20c8dd97";s:7:"address";s:34:"rh3VLyj1GbQjX7eA15BwUagEhSrPHmLkSR";s:8:"sort_key";i:94;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:95;a:8:{s:11:"transaction";s:64:"b40f9f50983cf49a106912374a38581e33865069ee333ec30c6b970b20c8dd97";s:7:"address";s:8:"the-void";s:8:"sort_key";i:95;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:96;a:8:{s:11:"transaction";s:64:"b88cdb46941c3f5a6ba4742ddd64f494f69ecdcbaca351dec1460e0ff3d3b9a0";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:96;s:6:"effect";s:3:"-20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:97;a:8:{s:11:"transaction";s:64:"b88cdb46941c3f5a6ba4742ddd64f494f69ecdcbaca351dec1460e0ff3d3b9a0";s:7:"address";s:8:"the-void";s:8:"sort_key";i:97;s:6:"effect";s:2:"20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:98;a:8:{s:11:"transaction";s:64:"be5f8c92efb50bee2106f4aad0c6fb112fc13239259e084dbc733deea794116e";s:7:"address";s:34:"rBTwLga3i2gz3doX6Gva3MgEV8ZCD8jjah";s:8:"sort_key";i:98;s:6:"effect";s:3:"-20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:99;a:8:{s:11:"transaction";s:64:"be5f8c92efb50bee2106f4aad0c6fb112fc13239259e084dbc733deea794116e";s:7:"address";s:8:"the-void";s:8:"sort_key";i:99;s:6:"effect";s:2:"20";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:100;a:8:{s:11:"transaction";s:64:"c23d697b65412e79fd6894fef0ea0b4d7df98e3201ed839581580f7f76ec646d";s:7:"address";s:33:"rNEWSizmnEsBAFxRT8xEUhC6bAk7T3ewK";s:8:"sort_key";i:100;s:6:"effect";s:2:"-7";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:101;a:8:{s:11:"transaction";s:64:"c23d697b65412e79fd6894fef0ea0b4d7df98e3201ed839581580f7f76ec646d";s:7:"address";s:34:"rPbGtcqfvu4DtX84yegjYxejzi2MFiFvht";s:8:"sort_key";i:101;s:6:"effect";s:1:"7";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:102;a:8:{s:11:"transaction";s:64:"c23d697b65412e79fd6894fef0ea0b4d7df98e3201ed839581580f7f76ec646d";s:7:"address";s:33:"rNEWSizmnEsBAFxRT8xEUhC6bAk7T3ewK";s:8:"sort_key";i:102;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:103;a:8:{s:11:"transaction";s:64:"c23d697b65412e79fd6894fef0ea0b4d7df98e3201ed839581580f7f76ec646d";s:7:"address";s:8:"the-void";s:8:"sort_key";i:103;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:104;a:8:{s:11:"transaction";s:64:"c55ee0f11b11b05aff1105e99c7a31f2f35032ae9204e0e37deec89856c9bbdf";s:7:"address";s:34:"rQ3fNyLjbvcDaPNS4EAJY8aT9zR3uGk17c";s:8:"sort_key";i:104;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:105;a:8:{s:11:"transaction";s:64:"c55ee0f11b11b05aff1105e99c7a31f2f35032ae9204e0e37deec89856c9bbdf";s:7:"address";s:8:"the-void";s:8:"sort_key";i:105;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:106;a:8:{s:11:"transaction";s:64:"c87e7b2c95bda30480da83f564366c7ffa594271a674f7dca86d911e8536d362";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:106;s:6:"effect";s:5:"-3100";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:107;a:8:{s:11:"transaction";s:64:"c87e7b2c95bda30480da83f564366c7ffa594271a674f7dca86d911e8536d362";s:7:"address";s:34:"rMrHthZvtztoYxnTrFr5yGNSQy3NMba36o";s:8:"sort_key";i:107;s:6:"effect";s:4:"3100";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:108;a:8:{s:11:"transaction";s:64:"c87e7b2c95bda30480da83f564366c7ffa594271a674f7dca86d911e8536d362";s:7:"address";s:34:"rJ55NJHNj3CzMQ1SyiTHpyDKgf6gEqh4Ch";s:8:"sort_key";i:108;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:109;a:8:{s:11:"transaction";s:64:"c87e7b2c95bda30480da83f564366c7ffa594271a674f7dca86d911e8536d362";s:7:"address";s:8:"the-void";s:8:"sort_key";i:109;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:110;a:8:{s:11:"transaction";s:64:"ce18a16bcef1c928f45694af025bf69ffd7553239587f2f95c8f991217759b12";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:110;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:111;a:8:{s:11:"transaction";s:64:"ce18a16bcef1c928f45694af025bf69ffd7553239587f2f95c8f991217759b12";s:7:"address";s:8:"the-void";s:8:"sort_key";i:111;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:112;a:8:{s:11:"transaction";s:64:"d40898d74584c567216854bf4aae7eb12fe1f225f9839fda922d13b80c12a5a0";s:7:"address";s:34:"rUHvugWgwr81XRd3f6NzQ52K7NWP1tTXgm";s:8:"sort_key";i:112;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:113;a:8:{s:11:"transaction";s:64:"d40898d74584c567216854bf4aae7eb12fe1f225f9839fda922d13b80c12a5a0";s:7:"address";s:8:"the-void";s:8:"sort_key";i:113;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:114;a:8:{s:11:"transaction";s:64:"d5698b955aa32d7c9d24fc936223154f7218f474e2f362b83186a5e329726327";s:7:"address";s:34:"r4AZpDKVoBxVcYUJCWMcqZzyWsHTteC4ZE";s:8:"sort_key";i:114;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:115;a:8:{s:11:"transaction";s:64:"d5698b955aa32d7c9d24fc936223154f7218f474e2f362b83186a5e329726327";s:7:"address";s:8:"the-void";s:8:"sort_key";i:115;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:116;a:8:{s:11:"transaction";s:64:"d5e86454288e3fc0ae78cb16d2f6f53f41c0fd93becd612d4c237116c49dcac1";s:7:"address";s:34:"rpXCfDds782Bd6eK9Hsn15RDnGMtxf752m";s:8:"sort_key";i:116;s:6:"effect";s:3:"-10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:117;a:8:{s:11:"transaction";s:64:"d5e86454288e3fc0ae78cb16d2f6f53f41c0fd93becd612d4c237116c49dcac1";s:7:"address";s:8:"the-void";s:8:"sort_key";i:117;s:6:"effect";s:2:"10";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:118;a:8:{s:11:"transaction";s:64:"e23fe25c586a624c1c8939afdace9d1528798ff29c62994078f35e3dcf0286d4";s:7:"address";s:34:"rpAepkGqJnQSNTxozKSu9KPrxHVgyLpL8p";s:8:"sort_key";i:118;s:6:"effect";s:3:"-27";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:119;a:8:{s:11:"transaction";s:64:"e23fe25c586a624c1c8939afdace9d1528798ff29c62994078f35e3dcf0286d4";s:7:"address";s:34:"rNxp4h8apvRis6mJf9Sh8C6iRxfrDWN7AV";s:8:"sort_key";i:119;s:6:"effect";s:2:"27";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:120;a:8:{s:11:"transaction";s:64:"e23fe25c586a624c1c8939afdace9d1528798ff29c62994078f35e3dcf0286d4";s:7:"address";s:34:"rpAepkGqJnQSNTxozKSu9KPrxHVgyLpL8p";s:8:"sort_key";i:120;s:6:"effect";s:3:"-12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:121;a:8:{s:11:"transaction";s:64:"e23fe25c586a624c1c8939afdace9d1528798ff29c62994078f35e3dcf0286d4";s:7:"address";s:8:"the-void";s:8:"sort_key";i:121;s:6:"effect";s:2:"12";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:122;a:8:{s:11:"transaction";s:64:"eacaa6a394cd0e8f8f2db9d2c4907158b8e577bcb76090a00e47a93557732b75";s:7:"address";s:34:"rrsSUzrT2mYAMiL46pm7cwn6MmMmxVkEWM";s:8:"sort_key";i:122;s:6:"effect";s:11:"-2378604700";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:123;a:8:{s:11:"transaction";s:64:"eacaa6a394cd0e8f8f2db9d2c4907158b8e577bcb76090a00e47a93557732b75";s:7:"address";s:34:"rNxp4h8apvRis6mJf9Sh8C6iRxfrDWN7AV";s:8:"sort_key";i:123;s:6:"effect";s:10:"2378604700";s:6:"failed";s:1:"f";s:5:"extra";s:1:"p";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:124;a:8:{s:11:"transaction";s:64:"eacaa6a394cd0e8f8f2db9d2c4907158b8e577bcb76090a00e47a93557732b75";s:7:"address";s:34:"rrsSUzrT2mYAMiL46pm7cwn6MmMmxVkEWM";s:8:"sort_key";i:124;s:6:"effect";s:5:"-8000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:125;a:8:{s:11:"transaction";s:64:"eacaa6a394cd0e8f8f2db9d2c4907158b8e577bcb76090a00e47a93557732b75";s:7:"address";s:8:"the-void";s:8:"sort_key";i:125;s:6:"effect";s:4:"8000";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:126;a:8:{s:11:"transaction";s:64:"f4707ef6596e4daaac6bfe3ad8d6f2424cbb20ddd4ab1d93b394a1a45759b7d3";s:7:"address";s:34:"rhqTdSsJAaEReRsR27YzddqyGoWTNMhEvC";s:8:"sort_key";i:126;s:6:"effect";s:3:"-15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}i:127;a:8:{s:11:"transaction";s:64:"f4707ef6596e4daaac6bfe3ad8d6f2424cbb20ddd4ab1d93b394a1a45759b7d3";s:7:"address";s:8:"the-void";s:8:"sort_key";i:127;s:6:"effect";s:2:"15";s:6:"failed";s:1:"f";s:5:"extra";s:1:"f";s:5:"block";i:83305991;s:4:"time";s:19:"2023-10-18 15:39:21";}}s:10:"currencies";N;}'], ]; } } diff --git a/Modules/RippleNFTModule.php b/Modules/RippleNFTModule.php index 473a227..1109505 100644 --- a/Modules/RippleNFTModule.php +++ b/Modules/RippleNFTModule.php @@ -1,8 +1,10 @@ first_block_id = 32570; $this->tests = [ - ['block' => 82834311, 'result' => 'a:2:{s:6:"events";a:2:{i:0;a:8:{s:11:"transaction";s:64:"a046ff9c68877853e46dac85df2e53ea174cbf38d856f4813ce29f46ff9abadd";s:7:"address";s:34:"rhTEeYTzZn3tL1BrYrxQtS6f5Jf83BYT5z";s:8:"sort_key";i:0;s:6:"effect";s:2:"-1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00080000640FD1B918CE562578FE15FBF388ED724CA452B7C13F5C1000000754";s:5:"block";i:82834311;s:4:"time";s:19:"2023-09-27 19:18:21";}i:1;a:8:{s:11:"transaction";s:64:"a046ff9c68877853e46dac85df2e53ea174cbf38d856f4813ce29f46ff9abadd";s:7:"address";s:34:"rpZqTPC8GvrSvEfFsUuHkmPCg29GdQuXhC";s:8:"sort_key";i:1;s:6:"effect";s:1:"1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00080000640FD1B918CE562578FE15FBF388ED724CA452B7C13F5C1000000754";s:5:"block";i:82834311;s:4:"time";s:19:"2023-09-27 19:18:21";}}s:10:"currencies";N;}'], + /*NFTokenAcceptOffer*/ ['block' => 86727556, 'result' => 'a:2:{s:6:"events";a:4:{i:0;a:8:{s:11:"transaction";s:64:"356de89390ebb12e621d6ae8ef89f1a4b6184013eb8e94ab84f2a1d8ab9ed3e6";s:7:"address";s:34:"rUU4dn8yMXYRzD59AHqpkQXoPE6GfXaX5i";s:8:"sort_key";i:0;s:6:"effect";s:2:"-1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"000813887AD00228AFC1C2CD67791597449BC2E6B9AD99CD546CCCDB0521FAD3";s:5:"block";i:86727556;s:4:"time";s:19:"2024-03-19 19:51:40";}i:1;a:8:{s:11:"transaction";s:64:"356de89390ebb12e621d6ae8ef89f1a4b6184013eb8e94ab84f2a1d8ab9ed3e6";s:7:"address";s:34:"rUmmkSsdCYpHy1XHHTwBAhKKnaeWQgcGoo";s:8:"sort_key";i:1;s:6:"effect";s:1:"1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"000813887AD00228AFC1C2CD67791597449BC2E6B9AD99CD546CCCDB0521FAD3";s:5:"block";i:86727556;s:4:"time";s:19:"2024-03-19 19:51:40";}i:2;a:8:{s:11:"transaction";s:64:"8700587adb12dedd106324f4fdbf18ca6e85d7adba9d7058be22eab2c310c624";s:7:"address";s:34:"rfx2mVhTZzc6bLXKeYyFKtpha2LHrkNZFT";s:8:"sort_key";i:2;s:6:"effect";s:2:"-1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00081B582A24B5A29CB415BF89A68FC2C44E148DB61D10A633A7821D05022781";s:5:"block";i:86727556;s:4:"time";s:19:"2024-03-19 19:51:40";}i:3;a:8:{s:11:"transaction";s:64:"8700587adb12dedd106324f4fdbf18ca6e85d7adba9d7058be22eab2c310c624";s:7:"address";s:34:"r4zJ9FjK9oP4imstea8gjVx6Kmc58GvHJA";s:8:"sort_key";i:3;s:6:"effect";s:1:"1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00081B582A24B5A29CB415BF89A68FC2C44E148DB61D10A633A7821D05022781";s:5:"block";i:86727556;s:4:"time";s:19:"2024-03-19 19:51:40";}}s:10:"currencies";N;}'], + /*NFTokenBurn, NFTokenMint*/ ['block' => 87252395, 'result' => 'a:2:{s:6:"events";a:4:{i:0;a:8:{s:11:"transaction";s:64:"4c78def9ea7028768299c987d63d05104a316aeed97b2564a4bade7c6c69ee0a";s:7:"address";s:8:"the-void";s:8:"sort_key";i:0;s:6:"effect";s:2:"-1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00080000413DEC6E282BBCEA55B71140D0CB35F01673BBE02C27385104AC98B6";s:5:"block";i:87252395;s:4:"time";s:19:"2024-04-12 05:10:42";}i:1;a:8:{s:11:"transaction";s:64:"4c78def9ea7028768299c987d63d05104a316aeed97b2564a4bade7c6c69ee0a";s:7:"address";s:34:"raAyazbgEkwzLByXipQuPLWFfnsPS1v1q9";s:8:"sort_key";i:1;s:6:"effect";s:1:"1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00080000413DEC6E282BBCEA55B71140D0CB35F01673BBE02C27385104AC98B6";s:5:"block";i:87252395;s:4:"time";s:19:"2024-04-12 05:10:42";}i:2;a:8:{s:11:"transaction";s:64:"b1331eaab15fcec6bf5645f1a8a29f2fd2d270c3a81e900f7b3e7eb3a8d89af9";s:7:"address";s:34:"rpS1epLNv2Vg4mPjVoJaR8exegzqq4UMHB";s:8:"sort_key";i:2;s:6:"effect";s:2:"-1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"0008138861554D5FC1D746D61B369DF847546C6AFFDF71FBE14961DF000004D8";s:5:"block";i:87252395;s:4:"time";s:19:"2024-04-12 05:10:42";}i:3;a:8:{s:11:"transaction";s:64:"b1331eaab15fcec6bf5645f1a8a29f2fd2d270c3a81e900f7b3e7eb3a8d89af9";s:7:"address";s:8:"the-void";s:8:"sort_key";i:3;s:6:"effect";s:1:"1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"0008138861554D5FC1D746D61B369DF847546C6AFFDF71FBE14961DF000004D8";s:5:"block";i:87252395;s:4:"time";s:19:"2024-04-12 05:10:42";}}s:10:"currencies";N;}'], ['block' => 82477530, 'result' => 'a:2:{s:6:"events";a:2:{i:0;a:8:{s:11:"transaction";s:64:"7b34ae6e6a4c2b562a7de7e1dfe347b3a42195c1e30057ebaa872542f13d72c7";s:7:"address";s:34:"rhssY88ZGmw82A1wXnxxG6ayQgpH3WMnJg";s:8:"sort_key";i:0;s:6:"effect";s:2:"-1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00080000214B5618CDD949616DE1F1217B6AC97B60C663F4DEFF4B2600000058";s:5:"block";i:82477530;s:4:"time";s:19:"2023-09-11 23:22:01";}i:1;a:8:{s:11:"transaction";s:64:"7b34ae6e6a4c2b562a7de7e1dfe347b3a42195c1e30057ebaa872542f13d72c7";s:7:"address";s:34:"r4hfwL6FmzfTsFKGctf4VJE9XwBafUmm2N";s:8:"sort_key";i:1;s:6:"effect";s:1:"1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00080000214B5618CDD949616DE1F1217B6AC97B60C663F4DEFF4B2600000058";s:5:"block";i:82477530;s:4:"time";s:19:"2023-09-11 23:22:01";}}s:10:"currencies";N;}'], + ['block' => 87249376, 'result' => 'a:2:{s:6:"events";a:2:{i:0;a:8:{s:11:"transaction";s:64:"371a4a5f0d4f446f5a41661c937eba74c50afd99b716ab345158325bb6e6fd7d";s:7:"address";s:34:"rJcCJyJkiTXGcxU4Lt4ZvKJz8YmorZXu8r";s:8:"sort_key";i:0;s:6:"effect";s:2:"-1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00081F40609A31E3C78F708610A91730BB8315A5341355EC173DF7E504ED27E6";s:5:"block";i:87249376;s:4:"time";s:19:"2024-04-12 01:57:31";}i:1;a:8:{s:11:"transaction";s:64:"371a4a5f0d4f446f5a41661c937eba74c50afd99b716ab345158325bb6e6fd7d";s:7:"address";s:34:"rffedbARyZzJsW6CM1D81V3KGreJ4F3ZE3";s:8:"sort_key";i:1;s:6:"effect";s:1:"1";s:6:"failed";s:1:"f";s:5:"extra";s:64:"00081F40609A31E3C78F708610A91730BB8315A5341355EC173DF7E504ED27E6";s:5:"block";i:87249376;s:4:"time";s:19:"2024-04-12 01:57:31";}}s:10:"currencies";N;}'], ]; } }