func (result *ExecutionResult) Return() []byte {
	if result.Err != nil {
		return nil
	}
	return common.CopyBytes(result.ReturnData)
}
Return is a helper function to help caller distinguish between revert reason
and function return. Return returns the data after execution if no error occurs.
package evmcore
import (
	"fmt"
	"math"
	"math/big"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/core/vm"
	"github.com/ethereum/go-ethereum/log"
	"github.com/ethereum/go-ethereum/params"
)
type StateTransition struct {
	gp         *GasPool
	msg        Message
	gas        uint64
	gasPrice   *big.Int
	initialGas uint64
	value      *big.Int
	data       []byte
	state      vm.StateDB
	evm        *vm.EVM
}
type Message interface {
	From() common.Address
	To() *common.Address
	GasPrice() *big.Int
	Gas() uint64
	Value() *big.Int
	Nonce() uint64
	CheckNonce() bool
	Data() []byte
	AccessList() types.AccessList
}
type ExecutionResult struct {
	UsedGas    uint64  
	Err        error   
	ReturnData []byte  
}
func (result *ExecutionResult) Unwrap() error {
	return result.Err
}
func (result *ExecutionResult) Failed() bool { return result.Err != nil }