core: add Metropolis pre-compiles (EIP 197, 198 and 213)

This commit is contained in:
Jeffrey Wilcke
2017-08-10 14:07:11 +03:00
committed by Péter Szilágyi
parent 6ca59d98f8
commit 7bbdf3e268
3 changed files with 242 additions and 2 deletions

View File

@ -37,6 +37,10 @@ type (
func run(evm *EVM, snapshot int, contract *Contract, input []byte) ([]byte, error) {
if contract.CodeAddr != nil {
precompiledContracts := PrecompiledContracts
if evm.ChainConfig().IsMetropolis(evm.BlockNumber) {
precompiledContracts = PrecompiledContractsMetropolis
}
if p := precompiledContracts[*contract.CodeAddr]; p != nil {
return RunPrecompiledContract(p, input, contract)
}
@ -100,8 +104,8 @@ type EVM struct {
abort int32
}
// NewEVM retutrns a new EVM evmironment. The returned EVM is not thread safe
// and should only ever be used *once*.
// NewEVM retutrns a new EVM . The returned EVM is not thread safe and should
// only ever be used *once*.
func NewEVM(ctx Context, statedb StateDB, chainConfig *params.ChainConfig, vmConfig Config) *EVM {
evm := &EVM{
Context: ctx,