core, vm: make use of pointers instead of large structs

This commit is contained in:
Martin Holst Swende 2018-04-09 23:07:33 +02:00
parent 53fbd7ce63
commit 2b511fce4e
No known key found for this signature in database
GPG key ID: 683B438C05A5DDF0
6 changed files with 11 additions and 11 deletions

View file

@ -111,7 +111,7 @@ func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) {
Difficulty: b.header.Difficulty, Difficulty: b.header.Difficulty,
} }
receipt, _, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, vm.Config{}, blockContext) receipt, _, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, &vm.Config{}, blockContext)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View file

@ -36,8 +36,8 @@ type ChainContext interface {
} }
// NewEVMContext creates a new context for use in the EVM. // NewEVMContext creates a new context for use in the EVM.
func NewEVMContext(msg Message, header *types.Header, chain ChainContext, author *common.Address) vm.Context { func NewEVMContext(msg Message, header *types.Header, chain ChainContext, author *common.Address) *vm.Context {
return vm.Context{ return &vm.Context{
CanTransfer: CanTransfer, CanTransfer: CanTransfer,
Transfer: Transfer, Transfer: Transfer,
GetHash: GetHashFn(header, chain), GetHash: GetHashFn(header, chain),

View file

@ -88,7 +88,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
receipts = make([]*types.Receipt, len(block.Transactions())) receipts = make([]*types.Receipt, len(block.Transactions()))
for i, tx := range block.Transactions() { for i, tx := range block.Transactions() {
statedb.Prepare(tx.Hash(), block.Hash(), i) statedb.Prepare(tx.Hash(), block.Hash(), i)
receipt, _, err := ApplyTransaction(p.config, p.bc, nil, gp, statedb, header, tx, usedGas, cfg, blockContext) receipt, _, err := ApplyTransaction(p.config, p.bc, nil, gp, statedb, header, tx, usedGas, &cfg, blockContext)
if err != nil { if err != nil {
return nil, nil, 0, err return nil, nil, 0, err
} }
@ -105,7 +105,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
// and uses the input parameters for its environment. It returns the receipt // and uses the input parameters for its environment. It returns the receipt
// for the transaction, gas used and an error if the transaction failed, // for the transaction, gas used and an error if the transaction failed,
// indicating the block was invalid. // indicating the block was invalid.
func ApplyTransaction(config *params.ChainConfig, bc *BlockChain, author *common.Address, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *uint64, cfg vm.Config, blockContext *vm.BlockContext) (*types.Receipt, uint64, error) { func ApplyTransaction(config *params.ChainConfig, bc *BlockChain, author *common.Address, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *uint64, cfg *vm.Config, blockContext *vm.BlockContext) (*types.Receipt, uint64, error) {
msg, err := tx.AsMessage(blockContext.Signer) msg, err := tx.AsMessage(blockContext.Signer)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err

View file

@ -98,7 +98,7 @@ type BlockContext struct{
type EVM struct { type EVM struct {
BlockContext *BlockContext BlockContext *BlockContext
// Context provides auxiliary blockchain related information // Context provides auxiliary blockchain related information
Context *Context
// StateDB gives access to the underlying state // StateDB gives access to the underlying state
StateDB StateDB StateDB StateDB
// Depth is the current call stack // Depth is the current call stack
@ -110,7 +110,7 @@ type EVM struct {
chainRules params.Rules chainRules params.Rules
// virtual machine configuration options used to initialise the // virtual machine configuration options used to initialise the
// evm. // evm.
vmConfig Config vmConfig *Config
// global (to this context) ethereum virtual machine // global (to this context) ethereum virtual machine
// used throughout the execution of the tx. // used throughout the execution of the tx.
interpreter *Interpreter interpreter *Interpreter
@ -125,7 +125,7 @@ type EVM struct {
// NewEVM returns a new EVM. The returned EVM is not thread safe and should // NewEVM returns a new EVM. The returned EVM is not thread safe and should
// only ever be used *once*. // only ever be used *once*.
func NewEVM(ctx Context, statedb StateDB, chainConfig *params.ChainConfig, vmConfig Config,blockContext *BlockContext) *EVM { func NewEVM(ctx *Context, statedb StateDB, chainConfig *params.ChainConfig, vmConfig *Config,blockContext *BlockContext) *EVM {
evm := &EVM{ evm := &EVM{
Context: ctx, Context: ctx,
StateDB: statedb, StateDB: statedb,

View file

@ -47,7 +47,7 @@ type Config struct {
// configuration. // configuration.
type Interpreter struct { type Interpreter struct {
evm *EVM evm *EVM
cfg Config cfg *Config
gasTable params.GasTable gasTable params.GasTable
readOnly bool // Whether to throw on stateful modifications readOnly bool // Whether to throw on stateful modifications
@ -56,7 +56,7 @@ type Interpreter struct {
} }
// NewInterpreter returns a new instance of the Interpreter. // NewInterpreter returns a new instance of the Interpreter.
func NewInterpreter(evm *EVM, cfg Config,blockContext *BlockContext) *Interpreter { func NewInterpreter(evm *EVM, cfg *Config,blockContext *BlockContext) *Interpreter {
// We use the STOP instruction whether to see // We use the STOP instruction whether to see
// the jump table was initialised. If it was not // the jump table was initialised. If it was not
// we'll set the default jump table. // we'll set the default jump table.

View file

@ -514,7 +514,7 @@ func (jst *Tracer) CaptureState(env *vm.EVM, pc uint64, op vm.OpCode, gas, cost
if jst.err == nil { if jst.err == nil {
// Initialize the context if it wasn't done yet // Initialize the context if it wasn't done yet
if !jst.inited { if !jst.inited {
jst.ctx["block"] = env.BlockNumber.Uint64() jst.ctx["block"] = env.BlockContext.BlockNumber.Uint64()
jst.inited = true jst.inited = true
} }
// If tracing was interrupted, set the error and stop // If tracing was interrupted, set the error and stop