Official Go implementation of the Ethereum protocol
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
go-ethereum/core/vm/program
Martin HS 6d3d252a5e
core/vm/program: evm bytecode-building utility (#30725)
4 days ago
..
program.go core/vm/program: evm bytecode-building utility (#30725) 4 days ago
program_test.go core/vm/program: evm bytecode-building utility (#30725) 4 days ago
readme.md core/vm/program: evm bytecode-building utility (#30725) 4 days ago

readme.md

What is this

In many cases, we have a need to create somewhat nontrivial bytecode, for testing various quirks related to state transition or evm execution.

For example, we want to have a CREATE2- op create a contract, which is then invoked, and when invoked does a selfdestruct-to-self.

It is overkill to go full solidity, but it is also a bit tricky do assemble this by concatenating bytes.

This utility takes an approach from goevmlab where it has been used for several years, a go-lang utility to assemble evm bytecode.

Using this utility, the case above can be expressed as:

	// Some runtime code
	runtime := program.New().Ops(vm.ADDRESS, vm.SELFDESTRUCT).Bytecode()
	// A constructor returning the runtime code
	initcode := program.New().ReturnData(runtime).Bytecode()
	// A factory invoking the constructor
	outer := program.New().Create2AndCall(initcode, nil).Bytecode()

Warning

This package is a utility for testing, not for production. As such:

  • There are not package guarantees. We might iterate heavily on this package, and do backwards-incompatible changes without warning
  • There are no quality-guarantees. These utilities may produce evm-code that is non-functional. YMMV.
  • There are no stability-guarantees. The utility will panic if the inputs do not align / make sense.