Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
19b2429
register precompile
JonathanOppenheimer Jul 10, 2025
6729fdb
fix import error
JonathanOppenheimer Jul 10, 2025
6f83897
update address
JonathanOppenheimer Jul 10, 2025
73d21c0
Add reserved address for acp-204
JonathanOppenheimer Jul 11, 2025
ad80f4d
convert to stateless precompile
JonathanOppenheimer Jul 15, 2025
a3d09f2
remove wrapping layer
JonathanOppenheimer Jul 15, 2025
56ac4c8
undo mocks change
JonathanOppenheimer Jul 15, 2025
dd5d1d0
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Jul 17, 2025
c25d8a8
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 15, 2025
32c9a35
Cey chanes
JonathanOppenheimer Aug 15, 2025
9fb49dd
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 19, 2025
1ba5e75
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 21, 2025
53f4e05
Merge branch 'master' into register-p256v-precompile
ceyonur Aug 25, 2025
f6b08d3
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 25, 2025
b0ff418
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 26, 2025
1bc2f99
Cey changes
JonathanOppenheimer Aug 26, 2025
8f1fbe9
Update params/hooks_libevm.go
JonathanOppenheimer Aug 26, 2025
0e375bf
cey feedback
JonathanOppenheimer Aug 26, 2025
e38996d
bump libevm
JonathanOppenheimer Aug 27, 2025
39c4486
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 27, 2025
915adcf
go mod tidy
JonathanOppenheimer Aug 27, 2025
a2e6b6e
reduce diff
JonathanOppenheimer Aug 27, 2025
66f12c2
reduce diff
JonathanOppenheimer Aug 27, 2025
9903558
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 28, 2025
6ace3ed
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 28, 2025
6fbdfc1
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Aug 29, 2025
561d92b
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Sep 2, 2025
55a0a77
explicitly set p256 verify address
JonathanOppenheimer Sep 2, 2025
a5fa6e3
to one interface
JonathanOppenheimer Sep 3, 2025
318ffa8
better abstraction
JonathanOppenheimer Sep 4, 2025
ce6f8ee
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Sep 9, 2025
fc21f7c
directly use p256verify contract
JonathanOppenheimer Sep 9, 2025
b55ca75
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Sep 10, 2025
b5a52bb
use libevm version by commit
JonathanOppenheimer Sep 10, 2025
f0d1769
Merge branch 'master' into register-p256v-precompile
JonathanOppenheimer Sep 12, 2025
4391b5a
Update params/hooks_libevm.go
JonathanOppenheimer Sep 12, 2025
fde69ef
Stephen suggestions
JonathanOppenheimer Sep 12, 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
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ require (
github.com/VictoriaMetrics/fastcache v1.12.1
github.com/ava-labs/avalanchego v1.13.5-rc.4
github.com/ava-labs/firewood-go-ethhash/ffi v0.0.12
github.com/ava-labs/libevm v1.13.14-0.3.0.rc.7
github.com/ava-labs/libevm v1.13.15-0.20250904180142-72e9ad796212
github.com/davecgh/go-spew v1.1.1
github.com/deckarep/golang-set/v2 v2.1.0
github.com/fjl/gencodec v0.1.1
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ github.com/ava-labs/avalanchego v1.13.5-rc.4 h1:5aPlOFQFbKBLvUzsxLgybGhOCqEyi74x
github.com/ava-labs/avalanchego v1.13.5-rc.4/go.mod h1:6bXxADKsAkU/f9Xme0gFJGRALp3IVzwq8NMDyx6ucRs=
github.com/ava-labs/firewood-go-ethhash/ffi v0.0.12 h1:aMcrLbpJ/dyu2kZDf/Di/4JIWsUcYPyTDKymiHpejt0=
github.com/ava-labs/firewood-go-ethhash/ffi v0.0.12/go.mod h1:cq89ua3iiZ5wPBALTEQS5eG8DIZcs7ov6OiL4YR1BVY=
github.com/ava-labs/libevm v1.13.14-0.3.0.rc.7 h1:z4rEAa/WTULwZOPiBj05Ba0iveMGek1x6MVhAhSu4aE=
github.com/ava-labs/libevm v1.13.14-0.3.0.rc.7/go.mod h1:zP/DOcABRWargBmUWv1jXplyWNcfmBy9cxr0lw3LW3g=
github.com/ava-labs/libevm v1.13.15-0.20250904180142-72e9ad796212 h1:z/X5qArZUrGLtCWmxhuj3qUVg15q+jTBvzrA8DRV2ic=
github.com/ava-labs/libevm v1.13.15-0.20250904180142-72e9ad796212/go.mod h1:zP/DOcABRWargBmUWv1jXplyWNcfmBy9cxr0lw3LW3g=
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
Expand Down
87 changes: 43 additions & 44 deletions params/hooks_libevm.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ import (
// (August 2nd, 2025, 04:00 UTC)
const invalidateDelegateUnix = 1754107200

// P256VerifyAddress is the address of the p256 signature verification precompile
var P256VerifyAddress = common.BytesToAddress([]byte{0x1, 0x00})

type RulesExtra extras.Rules

func GetRulesExtra(r Rules) *extras.Rules {
Expand All @@ -51,71 +54,66 @@ func (RulesExtra) MinimumGasConsumption(x uint64) uint64 {
return (ethparams.NOOPHooks{}).MinimumGasConsumption(x)
}

var PrecompiledContractsApricotPhase2 = map[common.Address]contract.StatefulPrecompiledContract{
nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{},
nativeasset.NativeAssetBalanceAddr: &nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot},
nativeasset.NativeAssetCallAddr: &nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas},
var PrecompiledContractsApricotPhase2 = map[common.Address]vm.PrecompiledContract{
nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot}),
nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas}),
}

var PrecompiledContractsApricotPhasePre6 = map[common.Address]contract.StatefulPrecompiledContract{
nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{},
nativeasset.NativeAssetBalanceAddr: &nativeasset.DeprecatedContract{},
nativeasset.NativeAssetCallAddr: &nativeasset.DeprecatedContract{},
var PrecompiledContractsApricotPhasePre6 = map[common.Address]vm.PrecompiledContract{
nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
}

var PrecompiledContractsApricotPhase6 = map[common.Address]contract.StatefulPrecompiledContract{
nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{},
nativeasset.NativeAssetBalanceAddr: &nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot},
nativeasset.NativeAssetCallAddr: &nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas},
var PrecompiledContractsApricotPhase6 = map[common.Address]vm.PrecompiledContract{
nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.NativeAssetBalance{GasCost: AssetBalanceApricot}),
nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.NativeAssetCall{GasCost: AssetCallApricot, CallNewAccountGas: ethparams.CallNewAccountGas}),
}

var PrecompiledContractsBanff = map[common.Address]contract.StatefulPrecompiledContract{
nativeasset.GenesisContractAddr: &nativeasset.DeprecatedContract{},
nativeasset.NativeAssetBalanceAddr: &nativeasset.DeprecatedContract{},
nativeasset.NativeAssetCallAddr: &nativeasset.DeprecatedContract{},
var PrecompiledContractsBanff = map[common.Address]vm.PrecompiledContract{
nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
}

func (r RulesExtra) ActivePrecompiles(existing []common.Address) []common.Address {
var precompiles map[common.Address]contract.StatefulPrecompiledContract
switch {
case r.IsBanff:
precompiles = PrecompiledContractsBanff
case r.IsApricotPhase6:
precompiles = PrecompiledContractsApricotPhase6
case r.IsApricotPhasePre6:
precompiles = PrecompiledContractsApricotPhasePre6
case r.IsApricotPhase2:
precompiles = PrecompiledContractsApricotPhase2
}
var PrecompiledContractsGranite = map[common.Address]vm.PrecompiledContract{
nativeasset.GenesisContractAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetBalanceAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
nativeasset.NativeAssetCallAddr: makePrecompile(&nativeasset.DeprecatedContract{}),
P256VerifyAddress: &vm.P256Verify{},
}

func (r RulesExtra) ActivePrecompiles(existing []common.Address) []common.Address {
var addresses []common.Address
addresses = slices.AppendSeq(addresses, maps.Keys(precompiles))
addresses = slices.AppendSeq(addresses, maps.Keys(r.currentPrecompiles()))
addresses = append(addresses, existing...)
return addresses
}

// precompileOverrideBuiltin specifies precompiles that were activated prior to the
// dynamic precompile activation registry.
// These were only active historically and are not active in the current network.
func (r RulesExtra) precompileOverrideBuiltin(addr common.Address) (libevm.PrecompiledContract, bool) {
var precompiles map[common.Address]contract.StatefulPrecompiledContract
func (r RulesExtra) currentPrecompiles() map[common.Address]vm.PrecompiledContract {
switch {
case r.IsGranite:
return PrecompiledContractsGranite
case r.IsBanff:
precompiles = PrecompiledContractsBanff
return PrecompiledContractsBanff
case r.IsApricotPhase6:
precompiles = PrecompiledContractsApricotPhase6
return PrecompiledContractsApricotPhase6
case r.IsApricotPhasePre6:
precompiles = PrecompiledContractsApricotPhasePre6
return PrecompiledContractsApricotPhasePre6
case r.IsApricotPhase2:
precompiles = PrecompiledContractsApricotPhase2
}

precompile, ok := precompiles[addr]
if !ok {
return nil, false
return PrecompiledContractsApricotPhase2
}
return nil
}

return makePrecompile(precompile), true
// precompileOverrideBuiltin specifies precompiles that were activated prior to the
// dynamic precompile activation registry.
// These were only active historically and are not active in the current network.
func (r RulesExtra) precompileOverrideBuiltin(addr common.Address) (libevm.PrecompiledContract, bool) {
precompile, ok := r.currentPrecompiles()[addr]
return precompile, ok
}

func makePrecompile(contract contract.StatefulPrecompiledContract) libevm.PrecompiledContract {
Expand Down Expand Up @@ -159,6 +157,7 @@ func (r RulesExtra) PrecompileOverride(addr common.Address) (libevm.PrecompiledC
if p, ok := r.precompileOverrideBuiltin(addr); ok {
return p, true
}

if _, ok := r.Precompiles[addr]; !ok {
return nil, false
}
Expand Down
Loading