func NewEVMTxContext(msg Message) vm.TxContext {
	return vm.TxContext{
		Origin:   msg.From(),
		GasPrice: new(big.Int).Set(msg.GasPrice()),
	}
}
NewEVMTxContext creates a new transaction context for a single transaction.
package evmcore
import (
	"math/big"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/vm"
)
type DummyChain interface {
	GetHeader(common.Hash, uint64) *EvmHeader
}
func NewEVMBlockContext(header *EvmHeader, chain DummyChain, author *common.Address) vm.BlockContext {
	var beneficiary common.Address
	if author == nil {
		beneficiary = header.Coinbase
	} else {
		beneficiary = *author
	}
	return vm.BlockContext{
		CanTransfer: CanTransfer,
		Transfer:    Transfer,
		GetHash:     GetHashFn(header, chain),
		Coinbase:    beneficiary,
		BlockNumber: new(big.Int).Set(header.Number),
		Time:        new(big.Int).SetUint64(uint64(header.Time.Unix())),
		Difficulty:  big.NewInt(1),
		GasLimit:    header.GasLimit,
	}
}