Coverage Summary for Class: BlockHeaderContractMethod (co.rsk.pcc.blockheader)

Class Class, % Method, % Line, %
BlockHeaderContractMethod 0% (0/1) 0% (0/5) 0% (0/13)


1 package co.rsk.pcc.blockheader; 2  3 import co.rsk.pcc.ExecutionEnvironment; 4 import co.rsk.pcc.NativeMethod; 5 import co.rsk.pcc.exception.NativeContractIllegalArgumentException; 6 import org.ethereum.core.Block; 7 import org.ethereum.util.ByteUtil; 8  9 import java.math.BigInteger; 10 import java.util.Optional; 11  12 /** 13  * Base class of BlockHeader contract methods to provide common functionality to all methods. 14  * 15  * @author Diego Masini 16  */ 17 public abstract class BlockHeaderContractMethod extends NativeMethod { 18  private final BlockAccessor blockAccessor; 19  20  public BlockHeaderContractMethod(ExecutionEnvironment executionEnvironment, BlockAccessor blockAccessor) { 21  super(executionEnvironment); 22  this.blockAccessor = blockAccessor; 23  } 24  25  @Override 26  public Object execute(Object[] arguments) throws NativeContractIllegalArgumentException { 27  short blockDepth; 28  try { 29  blockDepth = ((BigInteger) arguments[0]).shortValueExact(); 30  } catch (ArithmeticException e) { 31  return ByteUtil.EMPTY_BYTE_ARRAY; 32  } 33  34  Optional<Block> block = blockAccessor.getBlock(blockDepth, getExecutionEnvironment()); 35  if (block.isPresent()) { 36  return internalExecute(block.get(), arguments); 37  } 38  39  return ByteUtil.EMPTY_BYTE_ARRAY; 40  } 41  42  protected abstract Object internalExecute(Block block, Object[] arguments) throws NativeContractIllegalArgumentException; 43  44  @Override 45  public boolean isEnabled() { 46  return true; 47  } 48  49  @Override 50  public boolean onlyAllowsLocalCalls() { 51  return false; 52  } 53  54  @Override 55  public long getGas(Object[] parsedArguments, byte[] originalData) { 56  return 4000L + super.getGas(parsedArguments, originalData); 57  } 58 }