Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to go-ethereum 1.12.0 #199

Merged
merged 8 commits into from
Aug 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions chain/test_chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,14 @@ func NewTestChain(genesisAlloc core.GenesisAlloc, testChainConfig *config.TestCh
return nil, err
}

// TODO: go-ethereum doesn't set shanghai start time for THEIR test `ChainConfig` struct.
// Note: We have our own `TestChainConfig` definition that is different (second argument in this function).
// We should allow the user to provide a go-ethereum `ChainConfig` to do custom fork selection, inside of our
// `TestChainConfig` definition. Or we should wrap it in our own struct to simplify the options and not pollute
// our overall medusa project config.
shanghaiTime := uint64(0)
chainConfig.ShanghaiTime = &shanghaiTime

// Create our genesis definition with our default chain config.
genesisDefinition := &core.Genesis{
Config: chainConfig,
Expand Down Expand Up @@ -527,7 +535,7 @@ func (t *TestChain) RevertToBlockNumber(blockNumber uint64) error {
// It takes an optional state argument, which is the state to execute the message over. If not provided, the
// current pending state (or committed state if none is pending) will be used instead.
// The state executed over may be a pending block state.
func (t *TestChain) CallContract(msg core.Message, state *state.StateDB, additionalTracers ...vm.EVMLogger) (*core.ExecutionResult, error) {
func (t *TestChain) CallContract(msg *core.Message, state *state.StateDB, additionalTracers ...vm.EVMLogger) (*core.ExecutionResult, error) {
// If our provided state is nil, use our current chain state.
if state == nil {
state = t.state
Expand All @@ -537,7 +545,7 @@ func (t *TestChain) CallContract(msg core.Message, state *state.StateDB, additio
snapshot := state.Snapshot()

// Set infinite balance to the fake caller account
from := state.GetOrNewStateObject(msg.From())
from := state.GetOrNewStateObject(msg.From)
from.SetBalance(math.MaxBig256)

// Create our transaction and block contexts for the vm
Expand All @@ -552,7 +560,7 @@ func (t *TestChain) CallContract(msg core.Message, state *state.StateDB, additio

// Create our EVM instance.
evm := vm.NewEVM(blockContext, txContext, state, t.chainConfig, vm.Config{
Debug: true,
//Debug: true,
Tracer: extendedTracerRouter,
NoBaseFee: true,
ConfigExtensions: t.vmConfigExtensions,
Expand Down Expand Up @@ -672,7 +680,7 @@ func (t *TestChain) PendingBlockCreateWithParameters(blockNumber uint64, blockTi
// PendingBlockAddTx takes a message (internal txs) and adds it to the current pending block, updating the header
// with relevant execution information. If a pending block was not created, an error is returned.
// Returns the constructed block, or an error if one occurred.
func (t *TestChain) PendingBlockAddTx(message core.Message) error {
func (t *TestChain) PendingBlockAddTx(message *core.Message) error {
// If we don't have a pending block, return an error
if t.pendingBlock == nil {
return errors.New("could not add tx to the chain's pending block because no pending block was created")
Expand All @@ -692,7 +700,7 @@ func (t *TestChain) PendingBlockAddTx(message core.Message) error {

// Create our EVM instance.
evm := vm.NewEVM(blockContext, core.NewEVMTxContext(message), t.state, t.chainConfig, vm.Config{
Debug: true,
//Debug: true,
Tracer: t.transactionTracerRouter,
NoBaseFee: true,
ConfigExtensions: t.vmConfigExtensions,
Expand Down
64 changes: 56 additions & 8 deletions chain/test_chain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,14 +241,26 @@ func TestChainDynamicDeployments(t *testing.T) {
// Deploy the currently indexed contract next

// Create a message to represent our contract deployment.
msg := types.NewMessage(senders[0], nil, chain.State().GetNonce(senders[0]), big.NewInt(0), chain.BlockGasLimit, big.NewInt(1), big.NewInt(0), big.NewInt(0), contract.InitBytecode, nil, false)
msg := core.Message{
To: nil,
From: senders[0],
Nonce: chain.State().GetNonce(senders[0]),
Value: big.NewInt(0),
GasLimit: chain.BlockGasLimit,
GasPrice: big.NewInt(1),
GasFeeCap: big.NewInt(0),
GasTipCap: big.NewInt(0),
Data: contract.InitBytecode,
AccessList: nil,
SkipAccountChecks: false,
}

// Create a new pending block we'll commit to chain
block, err := chain.PendingBlockCreate()
assert.NoError(t, err)

// Add our transaction to the block
err = chain.PendingBlockAddTx(msg)
err = chain.PendingBlockAddTx(&msg)
assert.NoError(t, err)

// Commit the pending block to the chain, so it becomes the new head.
Expand Down Expand Up @@ -354,14 +366,26 @@ func TestChainDeploymentWithArgs(t *testing.T) {
assert.NoError(t, err)

// Create a message to represent our contract deployment.
msg := types.NewMessage(senders[0], nil, chain.State().GetNonce(senders[0]), big.NewInt(0), chain.BlockGasLimit, big.NewInt(1), big.NewInt(0), big.NewInt(0), msgData, nil, false)
msg := core.Message{
To: nil,
From: senders[0],
Nonce: chain.State().GetNonce(senders[0]),
Value: big.NewInt(0),
GasLimit: chain.BlockGasLimit,
GasPrice: big.NewInt(1),
GasFeeCap: big.NewInt(0),
GasTipCap: big.NewInt(0),
Data: msgData,
AccessList: nil,
SkipAccountChecks: false,
}

// Create a new pending block we'll commit to chain
block, err := chain.PendingBlockCreate()
assert.NoError(t, err)

// Add our transaction to the block
err = chain.PendingBlockAddTx(msg)
err = chain.PendingBlockAddTx(&msg)
assert.NoError(t, err)

// Commit the pending block to the chain, so it becomes the new head.
Expand Down Expand Up @@ -451,14 +475,26 @@ func TestChainCloning(t *testing.T) {
// Deploy the currently indexed contract next

// Create a message to represent our contract deployment.
msg := types.NewMessage(senders[0], nil, chain.State().GetNonce(senders[0]), big.NewInt(0), chain.BlockGasLimit, big.NewInt(1), big.NewInt(0), big.NewInt(0), contract.InitBytecode, nil, false)
msg := core.Message{
To: nil,
From: senders[0],
Nonce: chain.State().GetNonce(senders[0]),
Value: big.NewInt(0),
GasLimit: chain.BlockGasLimit,
GasPrice: big.NewInt(1),
GasFeeCap: big.NewInt(0),
GasTipCap: big.NewInt(0),
Data: contract.InitBytecode,
AccessList: nil,
SkipAccountChecks: false,
}

// Create a new pending block we'll commit to chain
block, err := chain.PendingBlockCreate()
assert.NoError(t, err)

// Add our transaction to the block
err = chain.PendingBlockAddTx(msg)
err = chain.PendingBlockAddTx(&msg)
assert.NoError(t, err)

// Commit the pending block to the chain, so it becomes the new head.
Expand Down Expand Up @@ -533,14 +569,26 @@ func TestChainCallSequenceReplayMatchSimple(t *testing.T) {
if len(contract.Abi.Constructor.Inputs) == 0 {
for i := 0; i < 10; i++ {
// Create a message to represent our contract deployment.
msg := types.NewMessage(senders[0], nil, chain.State().GetNonce(senders[0]), big.NewInt(0), chain.BlockGasLimit, big.NewInt(1), big.NewInt(0), big.NewInt(0), contract.InitBytecode, nil, false)
msg := core.Message{
To: nil,
From: senders[0],
Nonce: chain.State().GetNonce(senders[0]),
Value: big.NewInt(0),
GasLimit: chain.BlockGasLimit,
GasPrice: big.NewInt(1),
GasFeeCap: big.NewInt(0),
GasTipCap: big.NewInt(0),
Data: contract.InitBytecode,
AccessList: nil,
SkipAccountChecks: false,
}

// Create a new pending block we'll commit to chain
block, err := chain.PendingBlockCreate()
assert.NoError(t, err)

// Add our transaction to the block
err = chain.PendingBlockAddTx(msg)
err = chain.PendingBlockAddTx(&msg)
assert.NoError(t, err)

// Commit the pending block to the chain, so it becomes the new head.
Expand Down
4 changes: 2 additions & 2 deletions chain/types/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type Block struct {
// of a transaction occurs and can be thought of as an internal EVM transaction. It contains typical transaction
// fields plainly (e.g., no transaction signature is included, the sender is derived and simply supplied as a field
// in a message).
Messages []core.Message
Messages []*core.Message

// MessageResults represents the results recorded while executing transactions.
MessageResults []*MessageResults
Expand All @@ -30,7 +30,7 @@ func NewBlock(header *types.Header) *Block {
block := &Block{
Hash: header.Hash(),
Header: header,
Messages: make([]core.Message, 0),
Messages: make([]*core.Message, 0),
MessageResults: make([]*MessageResults, 0),
}
return block
Expand Down
4 changes: 2 additions & 2 deletions chain/vendored/apply_transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import (
// This executes on an underlying EVM and returns a transaction receipt, or an error if one occurs.
// Additional changes:
// - Exposed core.ExecutionResult as a return value.
func EVMApplyTransaction(msg Message, config *params.ChainConfig, author *common.Address, gp *GasPool, statedb *state.StateDB, blockNumber *big.Int, blockHash common.Hash, tx *types.Transaction, usedGas *uint64, evm *vm.EVM) (*types.Receipt, *ExecutionResult, error) {
func EVMApplyTransaction(msg *Message, config *params.ChainConfig, author *common.Address, gp *GasPool, statedb *state.StateDB, blockNumber *big.Int, blockHash common.Hash, tx *types.Transaction, usedGas *uint64, evm *vm.EVM) (*types.Receipt, *ExecutionResult, error) {
// Create a new context to be used in the EVM environment.
txContext := NewEVMTxContext(msg)
evm.Reset(txContext, statedb)
Expand Down Expand Up @@ -67,7 +67,7 @@ func EVMApplyTransaction(msg Message, config *params.ChainConfig, author *common
receipt.GasUsed = result.UsedGas

// If the transaction created a contract, store the creation address in the receipt.
if msg.To() == nil {
if msg.To == nil {
receipt.ContractAddress = crypto.CreateAddress(evm.TxContext.Origin, tx.Nonce())
}

Expand Down
2 changes: 1 addition & 1 deletion compilation/types/source_maps.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ func (s SourceMap) GetInstructionIndexToOffsetLookup(bytecode []byte) ([]int, er
operandCount := 0
if op.IsPush() {
if op == vm.PUSH0 {
operandCount = 1
operandCount = 0
} else {
operandCount = int(op) - int(vm.PUSH1) + 1
}
Expand Down
Loading