protected override Keccak Handle(TransactionForRpc transaction, IWeb3EthApi api)
        {
            var    deltaWithCid = api.GetLatestDeltaWithCid();
            var    parentDelta  = deltaWithCid.Delta;
            Keccak root         = parentDelta.StateRoot.ToKeccak();
            var    publicEntry  = api.ToPublicEntry(transaction, root);

            return(api.SendTransaction(publicEntry));
        }
        public static CallOutputTracer CallAndRestore(this IWeb3EthApi api, TransactionForRpc transactionCall, DeltaWithCid deltaWithCid)
        {
            var    parentDelta = deltaWithCid.Delta;
            Keccak root        = parentDelta.StateRoot.ToKeccak();

            if (transactionCall.Gas == null)
            {
                transactionCall.Gas = parentDelta.GasLimit;
            }

            var publicEntry = api.ToPublicEntry(transactionCall, root);

            var newDelta = deltaWithCid.CreateOneOffDelta(publicEntry);

            CallOutputTracer callOutputTracer = new CallOutputTracer();

            api.StateProvider.StateRoot = root;
            api.Executor.CallAndReset(newDelta, callOutputTracer);
            api.StateProvider.Reset();
            api.StorageProvider.Reset();
            return(callOutputTracer);
        }