@Override
  public OperationResult execute(final MessageFrame frame, final EVM evm) {
    try {
      final Account account = frame.getWorldUpdater().get(frame.getRecipientAddress());
      final Address address = account.getAddress();
      final Bytes32 key = UInt256.fromBytes(frame.popStackItem());
      final boolean slotIsWarm = frame.warmUpStorage(address, key);
      final long cost = slotIsWarm ? warmCost : coldCost;
      if (frame.getRemainingGas() < cost) {
        return new OperationResult(cost, ExceptionalHaltReason.INSUFFICIENT_GAS);
      } else {
        frame.pushStackItem(account.getStorageValue(UInt256.fromBytes(key)));

        return slotIsWarm ? warmSuccess : coldSuccess;
      }
    } catch (final UnderflowException ufe) {
      return new OperationResult(warmCost, ExceptionalHaltReason.INSUFFICIENT_STACK_ITEMS);
    } catch (final OverflowException ofe) {
      return new OperationResult(warmCost, ExceptionalHaltReason.TOO_MANY_STACK_ITEMS);
    }
  }
Instantiates a new SLoad operation.

@param gasCalculator the gas calculator
evm/src/main/java/org/hyperledger/besu/evm/operation/SLoadOperation.java