Update Prater config to include Altair fork epoch (#9467)

* Update Prater config after https://github.com/eth2-clients/eth2-networks/pull/58. Add tests to enforce compliance.

* gofmt

* spec: true

* fix test

Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com>
This commit is contained in:
Preston Van Loon 2021-08-25 12:18:29 -05:00 committed by GitHub
parent ffbb722777
commit 3d6fad3121
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 83 additions and 24 deletions

View File

@ -263,6 +263,22 @@ filegroup(
url = "https://github.com/ethereum/consensus-specs/archive/refs/tags/%s.tar.gz" % consensus_spec_version,
)
http_archive(
name = "eth2_networks",
build_file_content = """
filegroup(
name = "configs",
srcs = glob([
"shared/**/config.yaml",
]),
visibility = ["//visibility:public"],
)
""",
sha256 = "9dc47bf6b14aed7fac8833e35ab83a69131b43fa5789b3256bf1ac3d4861aeb8",
strip_prefix = "eth2-networks-7fa1b868985ee24aad65567f9250cf7fa86f97b1",
url = "https://github.com/eth2-clients/eth2-networks/archive/7fa1b868985ee24aad65567f9250cf7fa86f97b1.tar.gz",
)
http_archive(
name = "com_github_bazelbuild_buildtools",
sha256 = "7a182df18df1debabd9e36ae07c8edfa1378b8424a04561b674d933b965372b3",

View File

@ -124,7 +124,7 @@ func TestGetSpec(t *testing.T) {
resp, err := server.GetSpec(context.Background(), &emptypb.Empty{})
require.NoError(t, err)
assert.Equal(t, 89, len(resp.Data))
assert.Equal(t, 90, len(resp.Data))
for k, v := range resp.Data {
switch k {
case "CONFIG_NAME":
@ -313,6 +313,8 @@ func TestGetSpec(t *testing.T) {
assert.Equal(t, "0x08000000", v)
case "DOMAIN_CONTRIBUTION_AND_PROOF":
assert.Equal(t, "0x09000000", v)
case "TRANSITION_TOTAL_DIFFICULTY":
assert.Equal(t, "0", v)
default:
t.Errorf("Incorrect key: %s", k)
}

View File

@ -37,11 +37,14 @@ go_test(
"checktags_test.go",
"config_test.go",
"loader_test.go",
"testnet_config_test.go",
"testnet_prater_config_test.go",
],
data = glob(["*.yaml"]) + [
"@consensus_spec//:spec_data",
"@consensus_spec_tests_mainnet//:test_data",
"@consensus_spec_tests_minimal//:test_data",
"@eth2_networks//:configs",
],
embed = [":go_default_library"],
gotags = ["develop"],

View File

@ -138,6 +138,7 @@ type BeaconChainConfig struct {
ShardingForkEpoch types.Epoch `yaml:"SHARDING_FORK_EPOCH" spec:"true"` // ShardingForkEpoch is used to represent the assigned fork epoch for sharding.
ForkVersionSchedule map[[4]byte]types.Epoch // Schedule of fork epochs by version.
MinAnchorPowBlockDifficulty uint64 `yaml:"MIN_ANCHOR_POW_BLOCK_DIFFICULTY" spec:"true"` // MinAnchorPowBlockDifficulty specifies the target chain difficulty at the time of the merge.
TransitionTotalDifficulty uint64 `yaml:"TRANSITION_TOTAL_DIFFICULTY" spec:"true"` // TransitionTotalDifficulty is part of the experimental merge spec. This value is not used (yet) and is expected to be a uint256.
// Weak subjectivity values.
SafetyDecay uint64 // SafetyDecay is defined as the loss in the 1/3 consensus safety margin of the casper FFG mechanism.

View File

@ -100,28 +100,7 @@ func TestLoadConfigFileMainnet(t *testing.T) {
assert.Equal(t, c1.DomainSelectionProof, c2.DomainSelectionProof, "%s: DomainSelectionProof", name)
assert.Equal(t, c1.DomainAggregateAndProof, c2.DomainAggregateAndProof, "%s: DomainAggregateAndProof", name)
// Ensure all fields from the yaml file exist, were set, and correctly match the expected value.
ft1 := reflect.TypeOf(*c1)
for _, field := range fields {
var found bool
for i := 0; i < ft1.NumField(); i++ {
v, ok := ft1.Field(i).Tag.Lookup("yaml")
if ok && v == field {
found = true
v1 := reflect.ValueOf(*c1).Field(i).Interface()
v2 := reflect.ValueOf(*c2).Field(i).Interface()
if reflect.ValueOf(v1).Kind() == reflect.Slice {
assert.DeepEqual(t, v1, v2, "%s: %s", name, field)
} else {
assert.Equal(t, v1, v2, "%s: %s", name, field)
}
break
}
}
if !found {
t.Errorf("No struct tag found `yaml:%s`", field)
}
}
assertYamlFieldsMatch(t, name, fields, c1, c2)
}
t.Run("mainnet", func(t *testing.T) {
@ -263,3 +242,28 @@ func fieldsFromYaml(t *testing.T, fp string) []string {
return keys
}
func assertYamlFieldsMatch(t *testing.T, name string, fields []string, c1, c2 *BeaconChainConfig) {
// Ensure all fields from the yaml file exist, were set, and correctly match the expected value.
ft1 := reflect.TypeOf(*c1)
for _, field := range fields {
var found bool
for i := 0; i < ft1.NumField(); i++ {
v, ok := ft1.Field(i).Tag.Lookup("yaml")
if ok && v == field {
found = true
v1 := reflect.ValueOf(*c1).Field(i).Interface()
v2 := reflect.ValueOf(*c2).Field(i).Interface()
if reflect.ValueOf(v1).Kind() == reflect.Slice {
assert.DeepEqual(t, v1, v2, "%s: %s", name, field)
} else {
assert.Equal(t, v1, v2, "%s: %s", name, field)
}
break
}
}
if !found {
t.Errorf("No struct tag found `yaml:%s`", field)
}
}
}

View File

@ -0,0 +1,16 @@
package params
import (
"path"
"testing"
"github.com/bazelbuild/rules_go/go/tools/bazel"
"github.com/prysmaticlabs/prysm/shared/testutil/require"
)
func testnetConfigFilePath(t *testing.T, network string) string {
filepath, err := bazel.Runfile("external/eth2_networks")
require.NoError(t, err)
configFilePath := path.Join(filepath, "shared", network, "config.yaml")
return configFilePath
}

View File

@ -39,6 +39,11 @@ func PraterConfig() *BeaconChainConfig {
cfg.SecondsPerETH1Block = 14
cfg.DepositChainID = eth1Params.GoerliChainConfig.ChainID.Uint64()
cfg.DepositNetworkID = eth1Params.GoerliChainConfig.ChainID.Uint64()
cfg.DepositContractAddress = "0xff50ed3d0ec03ac01d4c79aad74928bff48a7b2b"
cfg.AltairForkEpoch = 36660
cfg.AltairForkVersion = []byte{0x1, 0x0, 0x10, 0x20}
cfg.ShardingForkVersion = []byte{0x3, 0x0, 0x10, 0x20}
cfg.MergeForkVersion = []byte{0x2, 0x0, 0x10, 0x20}
cfg.TransitionTotalDifficulty = 4294967296
cfg.DepositContractAddress = "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b"
return cfg
}

View File

@ -0,0 +1,12 @@
package params
import (
"testing"
)
func TestPraterConfigMatchesUpstreamYaml(t *testing.T) {
configFP := testnetConfigFilePath(t, "prater")
LoadChainConfigFile(configFP)
fields := fieldsFromYaml(t, configFP)
assertYamlFieldsMatch(t, "prater", fields, BeaconConfig(), PraterConfig())
}