@polygon-hermez/vm
Version:
An Ethereum VM implementation
111 lines (110 loc) • 3.5 kB
TypeScript
/// <reference types="node" />
/// <reference types="bn.js" />
import Common from '@ethereumjs/common';
import { BN } from 'ethereumjs-util';
import { RunState } from './../interpreter';
/**
* Proxy function for ethereumjs-util's setLengthLeft, except it returns a zero
*
* length buffer in case the buffer is full of zeros.
* @param {Buffer} value Buffer which we want to pad
*/
export declare function setLengthLeftStorage(value: Buffer): Buffer;
/**
* Wraps error message as VMError
*
* @param {string} err
*/
export declare function trap(err: string): void;
/**
* Converts BN address (they're stored like this on the stack) to buffer address
*
* @param {BN} address
* @return {Buffer}
*/
export declare function addressToBuffer(address: BN | Buffer): Buffer;
/**
* Error message helper - generates location string
*
* @param {RunState} runState
* @return {string}
*/
export declare function describeLocation(runState: RunState): string;
/**
* Find Ceil(a / b)
*
* @param {BN} a
* @param {BN} b
* @return {BN}
*/
export declare function divCeil(a: BN, b: BN): BN;
export declare function short(buffer: Buffer): string;
/**
/**
* Returns an overflow-safe slice of an array. It right-pads
* the data with zeros to `length`.
*
* @param {BN} offset
* @param {BN} length
* @param {Buffer} data
* @returns {Buffer}
*/
export declare function getDataSlice(data: Buffer, offset: BN, length: BN): Buffer;
/**
* Get full opcode name from its name and code.
*
* @param code {number} Integer code of opcode.
* @param name {string} Short name of the opcode.
* @returns {string} Full opcode name
*/
export declare function getFullname(code: number, name: string): string;
/**
* Checks if a jump is valid given a destination (defined as a 1 in the validJumps array)
*
* @param {RunState} runState
* @param {number} dest
* @return {boolean}
*/
export declare function jumpIsValid(runState: RunState, dest: number): boolean;
/**
* Checks if a jumpsub is valid given a destination (defined as a 2 in the validJumps array)
*
* @param {RunState} runState
* @param {number} dest
* @return {boolean}
*/
export declare function jumpSubIsValid(runState: RunState, dest: number): boolean;
/**
* Returns an overflow-safe slice of an array. It right-pads
*
* the data with zeros to `length`.
* @param {BN} gasLimit - requested gas Limit
* @param {BN} gasLeft - current gas left
* @param {RunState} runState - the current runState
* @param {Common} common - the common
*/
export declare function maxCallGas(gasLimit: BN, gasLeft: BN, runState: RunState, common: Common): BN;
/**
* Subtracts the amount needed for memory usage from `runState.gasLeft`
*
* @method subMemUsage
* @param {Object} runState
* @param {BN} offset
* @param {BN} length
*/
export declare function subMemUsage(runState: RunState, offset: BN, length: BN, common: Common): BN;
/**
* Writes data returned by eei.call* methods to memory
*
* @param {RunState} runState
* @param {BN} outOffset
* @param {BN} outLength
*/
export declare function writeCallOutput(runState: RunState, outOffset: BN, outLength: BN): void;
/** The first rule set of SSTORE rules, which are the rules pre-Constantinople and in Petersburg
* @param {RunState} runState
* @param {Buffer} currentStorage
* @param {Buffer} value
* @param {Buffer} keyBuf
*/
export declare function updateSstoreGas(runState: RunState, currentStorage: Buffer, value: Buffer, common: Common): BN;