Skip to content
Merged
Show file tree
Hide file tree
Changes from 71 commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
ea9895f
chore(plugin/evm/header): SetPredicateBytesInExtra uses an else block…
qdm12 Mar 7, 2025
729d9a2
chore(consensus/dummy): use already existing variable headerExtra
qdm12 Mar 7, 2025
3d316ed
chore(consensus/dummy/consensus.go): simplify big int assign in Final…
qdm12 Mar 10, 2025
a20ef87
chore(accounts/abi/bind): fix comment for TestGetSenderNativeAssetCall
qdm12 Mar 10, 2025
c250b3c
accounts/abi/bind/utils_test.go: revert error check in TestWaitDeploy…
qdm12 Mar 11, 2025
aaf9a47
consensus/dummy/consensus.go: rename configExtra to config in verifyH…
qdm12 Mar 11, 2025
81b6aa3
consensus/dummy/consensus.go: rename configExtra to config in DummyEn…
qdm12 Mar 11, 2025
4dfcdaf
core/blockchain.go: revert comment on CacheConfig.triedbConfig
qdm12 Mar 11, 2025
993c38e
core/chain_makers.go: rename configExtra to config in chainMaker.make…
qdm12 Mar 11, 2025
b67c9c0
core/txpool/blobpool/blobpool_test.go: rename configExtra to config i…
qdm12 Mar 11, 2025
1587d63
core/txpool/legacypool/legacypool.go: assign ap3Timestamp variable in…
qdm12 Mar 11, 2025
6f347d2
core/txpool/legacypool/legacypool.go: assign ap3Time variable in Lega…
qdm12 Mar 11, 2025
3e6a155
accounts/abi/bind/bind_extra_test.go: improve `TestGetSenderNativeAss…
qdm12 Mar 10, 2025
8a47b05
metrics/prometheus/prometheus.go: revert newline
qdm12 Mar 14, 2025
fb6417a
core/blockain_ext.go: improve comment of `getOrOverrideAsRegisteredCo…
qdm12 Mar 14, 2025
dcd3a33
core/blockain_ext.go: simplify switch to if check in `getOrOverrideAs…
qdm12 Mar 14, 2025
d309f24
core/blockain_test.go: revert genesis config field
qdm12 Mar 14, 2025
871af97
core/evm.go: improve comment of `OverrideNewEVMArgs`
qdm12 Mar 14, 2025
f70bd1c
core/evm.go: revert newline in `NewEVMBlockContext`
qdm12 Mar 14, 2025
abb9192
plugin/evm/header/extra_test.go: TestPredicateBytesExtra
qdm12 Mar 17, 2025
e17f934
metrics: improve/fix comments on function calls change
qdm12 Mar 19, 2025
fc9a392
plugin/evm/rawdb: use ethrawdb alias for consistency
qdm12 Mar 19, 2025
f9bbbc3
Pin github.com/fjl/gencodec to v0.1.1
qdm12 Mar 19, 2025
46b3b91
core/state_processor_ext.go: fix incomplete copyright notice
qdm12 Mar 20, 2025
a0f5897
core/state_processor_ext.go: simplify if else block in `ApplyPrecompi…
qdm12 Mar 20, 2025
6e08a05
plugin/evm/block.go: use `rulesExtra` variable in Block.verifyPredicates
qdm12 Mar 20, 2025
abcdfea
core/evm.go: rename `predicateResults` -> `predicateBytes` in `NewEVM…
qdm12 Mar 20, 2025
5eaa6d2
core/extstate/statedb.go: fix comment of StateDB.predicateStorageSlots
qdm12 Mar 24, 2025
1c331e0
core/blochain.go: simplify assign in BlockChain.writeBlockWithState
qdm12 Mar 24, 2025
5f4ea42
utils/key.go: inline body of unused NewKeyFromECDSA
qdm12 Mar 24, 2025
8c8bd6c
utils/key.go: NewKey always uses crypto/rand.Reader
qdm12 Mar 24, 2025
c970f31
utils/key.go: add comments to `Key` and `NewKey`
qdm12 Mar 24, 2025
6f857b1
utils/key.go: NewKey takes a *testing.T argument and does not return …
qdm12 Mar 24, 2025
b1226a4
core/extstate/statedb.go: improve comment for StateDB.GetLogData
qdm12 Mar 24, 2025
3b6c2b4
core/extstate/statedb.go: remove unneeded newline in VmStateDB interface
qdm12 Mar 24, 2025
75ce0e9
core/extstate/statedb.go: combine ifs in StateDB.GetPredicateStorageS…
qdm12 Mar 24, 2025
a262e46
core/blockchain.go: improve comment within BlockChain.commitWithSnap
qdm12 Mar 24, 2025
2e06410
Replace GetLogData with Logs direct calls
qdm12 Mar 24, 2025
9522649
core/state/database.go: extend type and function imports
qdm12 Mar 24, 2025
5b670a4
core/state/snapshot/iterator.go: extend type imports to Iterator and …
qdm12 Mar 24, 2025
751e7ee
core/state/statedb.go: fix usage of godoc links in comments of Normal…
qdm12 Mar 24, 2025
0fbd50f
core/state/statedb_multicoin_test.go: improve existing tests
qdm12 Mar 24, 2025
c48b9e7
revert: new lines removed and added
qdm12 Mar 24, 2025
dd9f276
revert: ProcessBeaconBlockRoot argument evm -> vmenv
qdm12 Mar 24, 2025
8e44b56
core/state_processor_ext.go: improve NewBlockContext comment
qdm12 Mar 24, 2025
bc28ce7
core/state_processor_ext.go: improve ApplyPrecompileActivations comments
qdm12 Mar 24, 2025
95c07c5
eth/tracers/tracers.go: extend imports to GetMemoryCopyPadded
qdm12 Mar 24, 2025
7e874a7
nativeasset/contract.go: improve comments for NativeAssetCall.Run
qdm12 Mar 24, 2025
0108b8e
plugin/evm/rawdb/accessors_state_sync.go: fix import alias from rawdb…
qdm12 Mar 24, 2025
f4fb263
plugin/evm/rawdb/accessors_state_sync.go: alias import of rawdb as et…
qdm12 Mar 24, 2025
825d6f1
predicate/predicate_slots.go: export predicaters as `Predicaters`
qdm12 Mar 24, 2025
9c5d6ce
predicate/predicate_slots.go: rename `Predicaters` as `PredicaterExis…
qdm12 Mar 24, 2025
421feb9
predicate/predicate_results.go: rename `tx` -> `results` in `GetPredi…
qdm12 Mar 24, 2025
ae07060
predicate/predicate_bytes.go: remove now unused `HeaderFeeWindowSize`
qdm12 Mar 24, 2025
a9e0b7d
revert: precompile/contracts/warp/contract_warp_handler.go: revert `r…
qdm12 Mar 24, 2025
23a26a5
revert: precompile/contracts/warp/contract_test.go: use existing aval…
qdm12 Mar 24, 2025
52eb34a
revert: precompile/contract:interfaces.go: remove unused StateReader …
qdm12 Mar 24, 2025
3de4237
revert: plugin/evm/vm_warp_test.go: revert to not empty-check
qdm12 Mar 24, 2025
696eca5
revert: plugin/evm/vm.go: use `rules` instead of `rulesExtra` variabl…
qdm12 Mar 24, 2025
5b8792b
plugin/evm/header/block_gas_cost.go: use a single `headerExtra` variable
qdm12 Mar 24, 2025
3ce4213
params/config_libevm.go: fix godoc link in comment of `libevmInit`
qdm12 Mar 24, 2025
fc17046
params/config.go: fix godoc link in comment for `libevmInit`
qdm12 Mar 24, 2025
81a00c5
params/extras: move `ptrToString` in network_upgrades.go
qdm12 Mar 24, 2025
5e4c5d7
params/extras/config.go: improve comments (godoc syntax only)
qdm12 Mar 24, 2025
9ef2ca6
params/extras/config.go: remove isBlockForked comment mention (removed)
qdm12 Mar 24, 2025
8768772
params: remove unneeded type alias `ConfigCompatError`
qdm12 Mar 24, 2025
b68e9fc
Fix copyright headers with wrong dates
qdm12 Mar 24, 2025
f754344
core/genesis.go: update deprecation comment on `GenesisAccount`
qdm12 Mar 24, 2025
d7f1d8f
params/hooks_libevm.go: rename accessableState to accessibleState
qdm12 Mar 24, 2025
d57da13
params/extras/rules.go: fix godoc link in comment of IsPrecompileEnabled
qdm12 Mar 24, 2025
5ed8784
precompile/contract/mocks.go: regenerated
qdm12 Mar 24, 2025
f266ed2
core/state_processor_ext.go: fix double backticks into one backtick
qdm12 Mar 25, 2025
b94c676
triedb/hashdb/database.go: BackendConstructor always uses merkle reso…
qdm12 Mar 25, 2025
197e8a0
core/extstate: `New` constructor initializing `predicateStorageSlots`…
qdm12 Mar 25, 2025
89583db
core/state_processor_ext.go: replace Suicide with SelfDestruct in com…
qdm12 Mar 25, 2025
b9e3645
nativeasset/contract.go: remove commented code in NativeAssetCall.run
qdm12 Mar 25, 2025
d1816a9
precompiles/contract/interfaces.go: use types.Log directly instead of…
qdm12 Mar 25, 2025
b3427fc
params/hooks_libevm.go: use "maps" and "slices" packages instead of e…
qdm12 Mar 25, 2025
6f60756
Fix previous commit
qdm12 Mar 25, 2025
9bd298e
params/extras/config.go: remove no longer valid TODO comment
qdm12 Mar 25, 2025
567fecd
eth/api_debug_test.go: one block of imports similar to upstream
qdm12 Mar 25, 2025
4bff6b7
precompile/contracts/warp/config.go: change Config.Verify receiver to…
qdm12 Mar 25, 2025
7099e4f
plugin/evm/types/block_test.go: only import libevm types with dot
qdm12 Mar 25, 2025
2b30696
predicate/predicate_slots.go: unexport PredicaterExistChecker
qdm12 Mar 25, 2025
7e426d6
predicate/predicate_slots.go: re-export PredicaterExistChecker
qdm12 Mar 25, 2025
a71a671
plugin/evm/typesblock_test.go: only dot-import package under test
ARR4N Mar 25, 2025
fdbe6d9
chore(deps): use libevm avalanchego based on `v1.12.3-name-fortuna` (…
qdm12 Mar 26, 2025
569524d
chore(rawdb): move plugin/evm/rawdb to plugin/evm/customrawdb (#888)
qdm12 Mar 26, 2025
c197fab
chore(interfaces): use upstream code (#883)
qdm12 Mar 26, 2025
91ef4d7
chore(deps): bump libevm to v1.13.14-0.2.0.rc.4 (#889)
qdm12 Mar 26, 2025
5a9b54f
chore(types): move plugin/evm/types to plugin/evm/customtypes (#890)
qdm12 Mar 26, 2025
4d145b2
Merge branch 'libevm' into qdm12/libevm-last-changes
qdm12 Mar 26, 2025
6c4d6d5
params/extras/config.go: removed commented code
qdm12 Mar 26, 2025
0d6a6a3
core/exstate/statedb.go: unexport internal StateDB vmStateDB field
qdm12 Mar 26, 2025
eac14dc
plugin/evm/header/extra_test.go: deep copy wantPredicate from predica…
qdm12 Mar 26, 2025
1804c92
Merge branch 'libevm' into qdm12/libevm-last-changes
qdm12 Mar 26, 2025
cf8b6cb
params/extras: use upstream NewTimestampCompatError
qdm12 Mar 26, 2025
fc8fcc7
params/extras: use upstream ConfigCompatError
qdm12 Mar 26, 2025
5c7e279
params/hooks_libevm.go: clarify TODO comment foro accessibleState.Get…
qdm12 Mar 26, 2025
5c21e8b
sload.json: remove berlinBlock key
qdm12 Mar 26, 2025
c0accdf
Merge branch 'libevm' into qdm12/libevm-last-changes
qdm12 Mar 26, 2025
a9ec9ad
Revert "sload.json: remove berlinBlock key"
qdm12 Mar 26, 2025
91e152a
params/extras: use alias ethparams to import libevm/params
qdm12 Mar 26, 2025
ebb2492
revert: core/blockchain.go: re-add previousRoot != root check
qdm12 Mar 27, 2025
b09d1a9
accounts/abi/bind/util_test.go: revert reversion of error check
qdm12 Mar 27, 2025
8e252d2
core/state/database.go: actual functions that propagate values
qdm12 Mar 27, 2025
bf869bb
plugin/evm/customrawdb: remove ethrawdb alias and use simply rawdb
qdm12 Mar 27, 2025
1f3ca87
plugin/evm: add vm.rulesExtra helper function
qdm12 Mar 27, 2025
28055c6
plugin/evm/header/block_gas_cost.go: revert headerExtra -> extra
qdm12 Mar 27, 2025
f7edced
core/state/statedb_multicoin_test.go: clearer assertion for expected …
qdm12 Mar 27, 2025
2f5be5c
plugin/evm/header/extra_test.go: re-add previous tests
qdm12 Mar 27, 2025
8a75d6c
core/state/statedb_multicoin_test.go: clearer assertion for zero mult…
qdm12 Mar 27, 2025
8b5354b
plugin/evm: rename rulesExtra -> rules
qdm12 Mar 27, 2025
4b092e7
Merge branch 'libevm' into qdm12/libevm-last-changes
qdm12 Mar 28, 2025
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
52 changes: 24 additions & 28 deletions accounts/abi/bind/bind_extra_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,12 @@ import (
"github.com/ava-labs/libevm/common"
"github.com/ava-labs/libevm/core/types"
"github.com/ava-labs/libevm/crypto"
"github.com/stretchr/testify/require"
)

// TestGetSenderNativeAssetCall checks that the NativeAssetCall proxies the
// caller address This behavior is disabled on the network and is only to test
// previous behavior. Note the test uses ApricotPhase2Config.
// previous behavior. Note the test uses [params.TestApricotPhase2Config].
func TestGetSenderNativeAssetCall(t *testing.T) {
// pragma solidity >=0.8.0 <0.9.0;
// contract GetSenderNativeAssetCall {
Expand All @@ -34,7 +35,7 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
// _sender = msg.sender;
// }
// }
rawABI := `[
const rawABI = `[
{
"inputs": [],
"name": "getSender",
Expand All @@ -51,17 +52,17 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
}
]`
bytecode := common.FromHex(`6080604052348015600f57600080fd5b506101608061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806350c36a521461003b5780635e01eb5a14610045575b600080fd5b610043610063565b005b61004d6100a5565b60405161005a919061010f565b60405180910390f35b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100f9826100ce565b9050919050565b610109816100ee565b82525050565b60006020820190506101246000830184610100565b9291505056fea26469706673582212209023ce54f38e749b58f44e8da750354578080ce16df95037b7305ed7e480c36d64736f6c634300081b0033`)
setSenderMethodName := "setSender"
getSenderMethodName := "getSender"
const setSenderMethodName = "setSender"
const getSenderMethodName = "getSender"

parsedABI, err := abi.JSON(bytes.NewReader([]byte(rawABI)))
if err != nil {
t.Fatalf("Failed to parse ABI: %v", err)
}
require.NoError(t, err, "Failed to parse ABI")

// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
auth, _ := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
key, err := crypto.GenerateKey()
require.NoError(t, err, "Failed to generate key")
auth, err := bind.NewKeyedTransactorWithChainID(key, big.NewInt(1337))
require.NoError(t, err, "Failed to create transactor")
alloc := types.GenesisAlloc{auth.From: {Balance: big.NewInt(1000000000000000000)}}
atApricotPhase2 := func(nodeConf *node.Config, ethConf *ethconfig.Config) {
chainConfig := *params.TestApricotPhase2Config
Expand All @@ -73,13 +74,14 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
Backend: b,
Client: b.Client(),
}
defer sim.Close()
t.Cleanup(func() {
err = sim.Close()
require.NoError(t, err, "Failed to close simulator")
})

// Deploy the get/setSender contract
_, _, interactor, err := bind.DeployContract(auth, parsedABI, bytecode, sim)
if err != nil {
t.Fatalf("Failed to deploy interactor contract: %v", err)
}
require.NoError(t, err, "Failed to deploy interactor contract")
sim.Commit(false)

// Setting NativeAssetCall in the transact opts will proxy the call through
Expand All @@ -91,21 +93,15 @@ func TestGetSenderNativeAssetCall(t *testing.T) {
AssetAmount: big.NewInt(0),
},
}
if _, err := interactor.Transact(opts, setSenderMethodName); err != nil {
t.Fatalf("Failed to set sender: %v", err)
}
_, err = interactor.Transact(opts, setSenderMethodName)
require.NoError(t, err, "Failed to set sender")
sim.Commit(true)

var results []interface{}
if err := interactor.Call(nil, &results, getSenderMethodName); err != nil {
t.Fatalf("Failed to get sender: %v", err)
}
if len(results) != 1 {
t.Fatalf("Expected one result, got %d", len(results))
}
if addr, ok := results[0].(common.Address); !ok {
t.Fatalf("Expected address, got %T", results[0])
} else if addr != auth.From {
t.Fatalf("Address mismatch: have '%v'", addr)
}
var results []any
err = interactor.Call(nil, &results, getSenderMethodName)
require.NoError(t, err, "Failed to get sender")
require.Len(t, results, 1)
addr, ok := results[0].(common.Address)
require.Truef(t, ok, "Expected %T, got %T", common.Address{}, results[0])
require.Equal(t, addr, auth.From, "Address mismatch")
}
5 changes: 1 addition & 4 deletions accounts/abi/bind/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,7 @@ func TestWaitDeployedCornerCases(t *testing.T) {
// Create a transaction to an account.
code := "6060604052600a8060106000396000f360606040526008565b00"
tx := types.NewTransaction(0, common.HexToAddress("0x01"), big.NewInt(0), 3000000, gasPrice, common.FromHex(code))
tx, err := types.SignTx(tx, types.LatestSignerForChainID(big.NewInt(1337)), testKey)
if err != nil {
t.Fatalf("Failed to sign transaction: %s", err)
}
tx, _ = types.SignTx(tx, types.LatestSignerForChainID(big.NewInt(1337)), testKey)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if err := backend.Client().SendTransaction(ctx, tx); err != nil {
Expand Down
27 changes: 13 additions & 14 deletions consensus/dummy/consensus.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,19 +148,19 @@ func NewFullFaker() *DummyEngine {
}
}

func verifyHeaderGasFields(configExtra *extras.ChainConfig, header *types.Header, parent *types.Header) error {
if err := customheader.VerifyGasUsed(configExtra, parent, header); err != nil {
func verifyHeaderGasFields(config *extras.ChainConfig, header *types.Header, parent *types.Header) error {
if err := customheader.VerifyGasUsed(config, parent, header); err != nil {
return err
}
if err := customheader.VerifyGasLimit(configExtra, parent, header); err != nil {
if err := customheader.VerifyGasLimit(config, parent, header); err != nil {
return err
}
if err := customheader.VerifyExtraPrefix(configExtra, parent, header); err != nil {
if err := customheader.VerifyExtraPrefix(config, parent, header); err != nil {
return err
}

// Verify header.BaseFee matches the expected value.
expectedBaseFee, err := customheader.BaseFee(configExtra, parent, header.Time)
expectedBaseFee, err := customheader.BaseFee(config, parent, header.Time)
if err != nil {
return fmt.Errorf("failed to calculate base fee: %w", err)
}
Expand All @@ -172,7 +172,7 @@ func verifyHeaderGasFields(configExtra *extras.ChainConfig, header *types.Header

// Enforce BlockGasCost constraints
expectedBlockGasCost := customheader.BlockGasCost(
configExtra,
config,
parent,
header.Time,
)
Expand All @@ -181,7 +181,7 @@ func verifyHeaderGasFields(configExtra *extras.ChainConfig, header *types.Header
}

// Verify ExtDataGasUsed not present before AP4
if !configExtra.IsApricotPhase4(header.Time) {
if !config.IsApricotPhase4(header.Time) {
if headerExtra.ExtDataGasUsed != nil {
return fmt.Errorf("invalid extDataGasUsed before fork: have %d, want <nil>", headerExtra.ExtDataGasUsed)
}
Expand Down Expand Up @@ -377,19 +377,19 @@ func (eng *DummyEngine) Finalize(chain consensus.ChainHeaderReader, block *types
}
}

configExtra := params.GetExtra(chain.Config())
config := params.GetExtra(chain.Config())
timestamp := block.Time()
// Verify the BlockGasCost set in the header matches the expected value.
blockGasCost := customtypes.BlockGasCost(block)
expectedBlockGasCost := customheader.BlockGasCost(
configExtra,
config,
parent,
timestamp,
)
if !utils.BigEqual(blockGasCost, expectedBlockGasCost) {
return fmt.Errorf("invalid blockGasCost: have %d, want %d", blockGasCost, expectedBlockGasCost)
}
if configExtra.IsApricotPhase4(timestamp) {
if config.IsApricotPhase4(timestamp) {
// Validate extDataGasUsed and BlockGasCost match expectations
//
// NOTE: This is a duplicate check of what is already performed in
Expand Down Expand Up @@ -440,10 +440,9 @@ func (eng *DummyEngine) FinalizeAndAssemble(chain consensus.ChainHeaderReader, h
header.Time,
)
if configExtra.IsApricotPhase4(header.Time) {
ext := customtypes.GetHeaderExtra(header)
ext.ExtDataGasUsed = extDataGasUsed
if ext.ExtDataGasUsed == nil {
ext.ExtDataGasUsed = new(big.Int).Set(common.Big0)
headerExtra.ExtDataGasUsed = extDataGasUsed
if headerExtra.ExtDataGasUsed == nil {
headerExtra.ExtDataGasUsed = new(big.Int)
}

// Verify that this block covers the block fee.
Expand Down
23 changes: 12 additions & 11 deletions core/blockchain.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,15 @@ import (

// ====== If resolving merge conflicts ======
//
// All calls to metrics.NewRegistered*() have been replaced with
// metrics.GetOrRegister*() and this package's corresponding libevm package
// imported above. Together these ensure that the metric here is the same as the
// one with the same name in libevm.
// All calls to metrics.NewRegistered*() for metrics also defined in libevm/core have been
// replaced either with:
// - metrics.GetOrRegister*() to get a metric already registered in libevm/core, or register it
// here otherwise
// - [getOrOverrideAsRegisteredCounter] to get a metric already registered in libevm/core
// only if it is a [metrics.Counter]. If it is not, the metric is unregistered and registered
// as a [metrics.Counter] here.
//
// Note, however, those that have had their types overridden as
// [metrics.Counter].
// These replacements ensure the same metrics are shared between the two packages.
var (
accountReadTimer = getOrOverrideAsRegisteredCounter("chain/account/reads", nil)
accountHashTimer = getOrOverrideAsRegisteredCounter("chain/account/hashes", nil)
Expand Down Expand Up @@ -195,7 +197,7 @@ func (c *CacheConfig) triedbConfig() *triedb.Config {
config.DBOverride = hashdb.Config{
CleanCacheSize: c.TrieCleanLimit * 1024 * 1024,
StatsPrefix: trieCleanCacheStatsNamespace,
ReferenceRootAtomicallyOnUpdate: true, // Automatically reference root nodes when an update is made
ReferenceRootAtomicallyOnUpdate: true,
}.BackendConstructor
}
if c.StateScheme == rawdb.PathScheme {
Expand Down Expand Up @@ -1172,8 +1174,7 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, parentRoot common.
}

// Commit all cached state changes into underlying memory database.
var err error
_, err = bc.commitWithSnap(block, parentRoot, state)
_, err := bc.commitWithSnap(block, parentRoot, state)
if err != nil {
return err
}
Expand Down Expand Up @@ -1695,8 +1696,8 @@ func (bc *BlockChain) reprocessBlock(parent *types.Block, current *types.Block)
func (bc *BlockChain) commitWithSnap(
current *types.Block, parentRoot common.Hash, statedb *state.StateDB,
) (common.Hash, error) {
// blockHashes must be passed through Commit since snapshots are based on the
// block hash.
// blockHashes must be passed through [state.StateDB]'s Commit since snapshots
// are based on the block hash.
blockHashes := snapshot.WithBlockHashes(current.Hash(), current.ParentHash())
root, err := statedb.Commit(current.NumberU64(), bc.chainConfig.IsEIP158(current.Number()), blockHashes)
if err != nil {
Expand Down
15 changes: 7 additions & 8 deletions core/blockchain_ext.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ package core
import "github.com/ava-labs/libevm/metrics"

// getOrOverrideAsRegisteredCounter searches for a metric already registered
// with`name`. If a metric is found and it is a Counter, it is returned. If a
// metric is found and it is not a Counter, it is unregistered and replaced with
// a new registered Counter. If no metric is found, a new Counter is constructed
// with `name`. If a metric is found and it is a [metrics.Counter], it is returned. If a
// metric is found and it is not a [metrics.Counter], it is unregistered and replaced with
// a new registered [metrics.Counter]. If no metric is found, a new [metrics.Counter] is constructed
// and registered.
//
// This is necessary for a metric defined in libevm with the same name but a
Expand All @@ -17,11 +17,10 @@ func getOrOverrideAsRegisteredCounter(name string, r metrics.Registry) metrics.C
r = metrics.DefaultRegistry
}

switch c := r.GetOrRegister(name, metrics.NewCounter).(type) {
case metrics.Counter:
if c, ok := r.GetOrRegister(name, metrics.NewCounter).(metrics.Counter); ok {
return c
default: // `name` must have already been registered to be any other type
r.Unregister(name)
return metrics.NewRegisteredCounter(name, r)
}
// `name` must have already been registered to be any other type
r.Unregister(name)
return metrics.NewRegisteredCounter(name, r)
}
8 changes: 2 additions & 6 deletions core/blockchain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/ava-labs/coreth/core/state"
"github.com/ava-labs/coreth/core/state/pruner"
"github.com/ava-labs/coreth/params"
"github.com/ava-labs/coreth/params/extras"
customrawdb "github.com/ava-labs/coreth/plugin/evm/rawdb"
"github.com/ava-labs/coreth/plugin/evm/upgrade/ap3"
"github.com/ava-labs/libevm/common"
Expand Down Expand Up @@ -425,11 +424,8 @@ func TestUngracefulAsyncShutdown(t *testing.T) {
// Ensure that key1 has some funds in the genesis block.
genesisBalance := big.NewInt(1000000)
gspec := &Genesis{
Config: params.WithExtra(
&params.ChainConfig{HomesteadBlock: new(big.Int)},
&extras.ChainConfig{},
),
Alloc: types.GenesisAlloc{addr1: {Balance: genesisBalance}},
Config: &params.ChainConfig{HomesteadBlock: new(big.Int)},
Alloc: types.GenesisAlloc{addr1: {Balance: genesisBalance}},
}

blockchain, err := create(chainDB, gspec, common.Hash{})
Expand Down
6 changes: 3 additions & 3 deletions core/chain_makers.go
Original file line number Diff line number Diff line change
Expand Up @@ -373,12 +373,12 @@ func GenerateChainWithGenesis(genesis *Genesis, engine consensus.Engine, n int,
func (cm *chainMaker) makeHeader(parent *types.Block, gap uint64, state *state.StateDB, engine consensus.Engine) *types.Header {
time := parent.Time() + gap // block time is fixed at [gap] seconds

configExtra := params.GetExtra(cm.config)
gasLimit, err := header.GasLimit(configExtra, parent.Header(), time)
config := params.GetExtra(cm.config)
gasLimit, err := header.GasLimit(config, parent.Header(), time)
if err != nil {
panic(err)
}
baseFee, err := header.BaseFee(configExtra, parent.Header(), time)
baseFee, err := header.BaseFee(config, parent.Header(), time)
if err != nil {
panic(err)
}
Expand Down
9 changes: 4 additions & 5 deletions core/evm.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,14 @@ func init() {

type hooks struct{}

// OverrideNewEVMArgs is a hook that is called back when a new EVM is created.
// OverrideNewEVMArgs is a hook that is called in [vm.NewEVM].
// It allows for the modification of the EVM arguments before the EVM is created.
// Specifically, we set Random to be the same as Difficulty since Shanghai.
// This allows using the same jump table as upstream.
// Then we set Difficulty to 0 as it is post Merge in upstream.
// Additionally we wrap the StateDB with the appropriate StateDB wrapper,
// which is used in coreth to process historical pre-AP1 blocks with the
// GetCommittedState method as it was historically.
// [StateDbAP1.GetCommittedState] method as it was historically.
func (hooks) OverrideNewEVMArgs(args *vm.NewEVMArgs) *vm.NewEVMArgs {
rules := args.ChainConfig.Rules(args.BlockContext.BlockNumber, params.IsMergeTODO, args.BlockContext.Time)
args.StateDB = wrapStateDB(rules, args.StateDB)
Expand Down Expand Up @@ -121,7 +121,6 @@ func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common
if header.ExcessBlobGas != nil {
blobBaseFee = eip4844.CalcBlobFee(*header.ExcessBlobGas)
}

return vm.BlockContext{
CanTransfer: CanTransfer,
Transfer: Transfer,
Expand All @@ -144,14 +143,14 @@ func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common
// NewEVMBlockContextWithPredicateResults creates a new context for use in the
// EVM with an override for the predicate results. The miner uses this to pass
// predicate results to the EVM when header.Extra is not fully formed yet.
func NewEVMBlockContextWithPredicateResults(rules extras.AvalancheRules, header *types.Header, chain ChainContext, author *common.Address, predicateResults []byte) vm.BlockContext {
func NewEVMBlockContextWithPredicateResults(rules extras.AvalancheRules, header *types.Header, chain ChainContext, author *common.Address, predicateBytes []byte) vm.BlockContext {
blockCtx := NewEVMBlockContext(header, chain, author)
// Note this only sets the block context, which is the hand-off point for
// the EVM. The actual header is not modified.
blockCtx.Header.Extra = customheader.SetPredicateBytesInExtra(
rules,
bytes.Clone(header.Extra),
predicateResults,
predicateBytes,
)
return blockCtx
}
Expand Down
10 changes: 3 additions & 7 deletions core/extstate/statedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
type VmStateDB interface {
vm.StateDB
Logs() []*types.Log

GetTxHash() common.Hash
GetBalanceMultiCoin(common.Address, common.Hash) *big.Int
AddBalanceMultiCoin(common.Address, common.Hash, *big.Int)
Expand All @@ -27,7 +26,7 @@ type StateDB struct {
VmStateDB

// Ordered storage slots to be used in predicate verification as set in the tx access list.
// Only set in PrepareAccessList, and un-modified through execution.
// Only set in [StateDB.Prepare], and un-modified through execution.
predicateStorageSlots map[common.Address][][]byte
}

Expand All @@ -37,7 +36,7 @@ func (s *StateDB) Prepare(rules params.Rules, sender, coinbase common.Address, d
s.VmStateDB.Prepare(rules, sender, coinbase, dst, precompiles, list)
}

// GetLogData returns the underlying topics and data from each log included in the StateDB
// GetLogData returns the underlying topics and data from each log included in the [StateDB].
// Test helper function.
func (s *StateDB) GetLogData() (topics [][]common.Hash, data [][]byte) {
for _, log := range s.Logs() {
Expand All @@ -59,10 +58,7 @@ func (s *StateDB) GetLogData() (topics [][]common.Hash, data [][]byte) {
// GetPredicateStorageSlots(AddrA, 1) -> Predicate3
func (s *StateDB) GetPredicateStorageSlots(address common.Address, index int) ([]byte, bool) {
predicates, exists := s.predicateStorageSlots[address]
if !exists {
return nil, false
}
if index >= len(predicates) {
if !exists || index >= len(predicates) {
return nil, false
}
return predicates[index], true
Expand Down
2 changes: 1 addition & 1 deletion core/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ import (

var errGenesisNoConfig = errors.New("genesis has no chain configuration")

// Deprecated: use types.GenesisAccount instead.
// Deprecated: use types.Account instead.
type GenesisAccount = types.Account

// Deprecated: use types.GenesisAlloc instead.
Expand Down
Loading
Loading