diff --git a/beacon-chain/core/validators/BUILD.bazel b/beacon-chain/core/validators/BUILD.bazel index cab8f53a7..0b6bac460 100644 --- a/beacon-chain/core/validators/BUILD.bazel +++ b/beacon-chain/core/validators/BUILD.bazel @@ -6,6 +6,7 @@ go_library( importpath = "github.com/prysmaticlabs/prysm/v3/beacon-chain/core/validators", visibility = [ "//beacon-chain:__subpackages__", + "//testing/endtoend:__subpackages__", "//testing/spectest:__subpackages__", ], deps = [ diff --git a/beacon-chain/execution/engine_client_fuzz_test.go b/beacon-chain/execution/engine_client_fuzz_test.go index ec626262a..157217cac 100644 --- a/beacon-chain/execution/engine_client_fuzz_test.go +++ b/beacon-chain/execution/engine_client_fuzz_test.go @@ -115,7 +115,7 @@ func FuzzExchangeTransitionConfiguration(f *testing.F) { func FuzzExecutionPayload(f *testing.F) { logsBloom := [256]byte{'j', 'u', 'n', 'k'} - execData := &beacon.ExecutableDataV1{ + execData := &beacon.ExecutableData{ ParentHash: common.Hash([32]byte{0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01}), FeeRecipient: common.Address([20]byte{0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF}), StateRoot: common.Hash([32]byte{0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x01}), @@ -135,7 +135,7 @@ func FuzzExecutionPayload(f *testing.F) { assert.NoError(f, err) f.Add(output) f.Fuzz(func(t *testing.T, jsonBlob []byte) { - gethResp := &beacon.ExecutableDataV1{} + gethResp := &beacon.ExecutableData{} prysmResp := &pb.ExecutionPayload{} gethErr := json.Unmarshal(jsonBlob, gethResp) prysmErr := json.Unmarshal(jsonBlob, prysmResp) @@ -147,10 +147,10 @@ func FuzzExecutionPayload(f *testing.F) { gethBlob, gethErr := json.Marshal(gethResp) prysmBlob, prysmErr := json.Marshal(prysmResp) assert.Equal(t, gethErr != nil, prysmErr != nil, "geth and prysm unmarshaller return inconsistent errors") - newGethResp := &beacon.ExecutableDataV1{} + newGethResp := &beacon.ExecutableData{} newGethErr := json.Unmarshal(prysmBlob, newGethResp) assert.NoError(t, newGethErr) - newGethResp2 := &beacon.ExecutableDataV1{} + newGethResp2 := &beacon.ExecutableData{} newGethErr = json.Unmarshal(gethBlob, newGethResp2) assert.NoError(t, newGethErr) diff --git a/beacon-chain/execution/rpc_connection.go b/beacon-chain/execution/rpc_connection.go index da8a0e673..5e2937f3f 100644 --- a/beacon-chain/execution/rpc_connection.go +++ b/beacon-chain/execution/rpc_connection.go @@ -115,7 +115,7 @@ func (s *Service) newRPCClientWithAuth(ctx context.Context, endpoint network.End } switch u.Scheme { case "http", "https": - client, err = gethRPC.DialHTTPWithClient(endpoint.Url, endpoint.HttpClient()) + client, err = gethRPC.DialOptions(ctx, endpoint.Url, gethRPC.WithHTTPClient(endpoint.HttpClient())) if err != nil { return nil, err } diff --git a/beacon-chain/execution/testing/genesis.go b/beacon-chain/execution/testing/genesis.go index ff350f6ae..20821738a 100644 --- a/beacon-chain/execution/testing/genesis.go +++ b/beacon-chain/execution/testing/genesis.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/params" clparams "github.com/prysmaticlabs/prysm/v3/config/params" + "github.com/prysmaticlabs/prysm/v3/time/slots" ) // defaultMinerAddress is used to send deposits and test transactions in the e2e test. @@ -83,6 +84,15 @@ func GethTestnetGenesis(genesisTime uint64, cfg *clparams.BeaconChainConfig) cor if !ok { panic(fmt.Sprintf("unable to parse TerminalTotalDifficulty as an integer = %s", clparams.BeaconConfig().TerminalTotalDifficulty)) } + var shanghaiTime *uint64 + if cfg.CapellaForkEpoch != math.MaxUint64 { + startSlot, err := slots.EpochStart(cfg.CapellaForkEpoch) + if err == nil { + startTime := slots.StartTime(genesisTime, startSlot) + newTime := uint64(startTime.Unix()) + shanghaiTime = &newTime + } + } cc := ¶ms.ChainConfig{ ChainID: big.NewInt(defaultTestChainId), HomesteadBlock: bigz, @@ -106,6 +116,7 @@ func GethTestnetGenesis(genesisTime uint64, cfg *clparams.BeaconChainConfig) cor Period: cfg.SecondsPerETH1Block, Epoch: 20000, }, + ShanghaiTime: shanghaiTime, } da := defaultDepositContractAllocation(cfg.DepositContractAddress) ma := minerAllocation() diff --git a/cmd/flags/enum.go b/cmd/flags/enum.go index 7864c63e7..5dde8c7b8 100644 --- a/cmd/flags/enum.go +++ b/cmd/flags/enum.go @@ -43,5 +43,5 @@ func (e *EnumValue) String() string { func (e EnumValue) GenericFlag() *cli.GenericFlag { *e.Destination = e.Value var i cli.Generic = &e - return &cli.GenericFlag{Name: e.Name, Usage: e.Usage, Destination: &i, Value: i} + return &cli.GenericFlag{Name: e.Name, Usage: e.Usage, Destination: i, Value: i} } diff --git a/config/params/loader.go b/config/params/loader.go index 599d02163..34d820954 100644 --- a/config/params/loader.go +++ b/config/params/loader.go @@ -189,6 +189,7 @@ func ConfigToYaml(cfg *BeaconChainConfig) []byte { fmt.Sprintf("EPOCHS_PER_ETH1_VOTING_PERIOD: %d", cfg.EpochsPerEth1VotingPeriod), fmt.Sprintf("SHARD_COMMITTEE_PERIOD: %d", cfg.ShardCommitteePeriod), fmt.Sprintf("MIN_VALIDATOR_WITHDRAWABILITY_DELAY: %d", cfg.MinValidatorWithdrawabilityDelay), + fmt.Sprintf("MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP: %d", cfg.MaxValidatorsPerWithdrawalsSweep), fmt.Sprintf("MAX_SEED_LOOKAHEAD: %d", cfg.MaxSeedLookahead), fmt.Sprintf("EJECTION_BALANCE: %d", cfg.EjectionBalance), fmt.Sprintf("MIN_PER_EPOCH_CHURN_LIMIT: %d", cfg.MinPerEpochChurnLimit), @@ -196,9 +197,10 @@ func ConfigToYaml(cfg *BeaconChainConfig) []byte { fmt.Sprintf("DEPOSIT_NETWORK_ID: %d", cfg.DepositNetworkID), fmt.Sprintf("ALTAIR_FORK_EPOCH: %d", cfg.AltairForkEpoch), fmt.Sprintf("ALTAIR_FORK_VERSION: %#x", cfg.AltairForkVersion), - fmt.Sprintf("CAPELLA_FORK_VERSION: %#x", cfg.CapellaForkVersion), fmt.Sprintf("BELLATRIX_FORK_EPOCH: %d", cfg.BellatrixForkEpoch), fmt.Sprintf("BELLATRIX_FORK_VERSION: %#x", cfg.BellatrixForkVersion), + fmt.Sprintf("CAPELLA_FORK_EPOCH: %d", cfg.CapellaForkEpoch), + fmt.Sprintf("CAPELLA_FORK_VERSION: %#x", cfg.CapellaForkVersion), fmt.Sprintf("INACTIVITY_SCORE_BIAS: %d", cfg.InactivityScoreBias), fmt.Sprintf("INACTIVITY_SCORE_RECOVERY_RATE: %d", cfg.InactivityScoreRecoveryRate), fmt.Sprintf("TERMINAL_TOTAL_DIFFICULTY: %s", cfg.TerminalTotalDifficulty), diff --git a/config/params/testdata/e2e_config.yaml b/config/params/testdata/e2e_config.yaml index 2df566d80..a62d9e468 100644 --- a/config/params/testdata/e2e_config.yaml +++ b/config/params/testdata/e2e_config.yaml @@ -40,7 +40,7 @@ BELLATRIX_FORK_VERSION: 0x020000fd BELLATRIX_FORK_EPOCH: 8 # Capella CAPELLA_FORK_VERSION: 0x030000fd -CAPELLA_FORK_EPOCH: 18446744073709551615 +CAPELLA_FORK_EPOCH: 10 # Time parameters @@ -49,8 +49,8 @@ CAPELLA_FORK_EPOCH: 18446744073709551615 SECONDS_PER_SLOT: 10 # Override for e2e tests # 14 (estimate from Eth1 mainnet) SECONDS_PER_ETH1_BLOCK: 2 # Override for e2e tests -# 2**8 (= 256) epochs -MIN_VALIDATOR_WITHDRAWABILITY_DELAY: 256 +# [customized] faster time for withdrawals +MIN_VALIDATOR_WITHDRAWABILITY_DELAY: 1 # [customized] higher frequency of committee turnover and faster time to acceptable voluntary exit SHARD_COMMITTEE_PERIOD: 4 # Override for e2e tests # [customized] process deposits more quickly, but insecure diff --git a/config/params/testnet_e2e_config.go b/config/params/testnet_e2e_config.go index b6d51fb4d..584d999e1 100644 --- a/config/params/testnet_e2e_config.go +++ b/config/params/testnet_e2e_config.go @@ -1,8 +1,9 @@ package params const ( - altairE2EForkEpoch = 6 - bellatrixE2EForkEpoch = 8 + AltairE2EForkEpoch = 6 + BellatrixE2EForkEpoch = 8 + CapellaE2EForkEpoch = 10 ) // E2ETestConfig retrieves the configurations made specifically for E2E testing. @@ -17,6 +18,7 @@ func E2ETestConfig() *BeaconChainConfig { e2eConfig.MinGenesisActiveValidatorCount = 256 e2eConfig.GenesisDelay = 10 // 10 seconds so E2E has enough time to process deposits and get started. e2eConfig.ChurnLimitQuotient = 65536 + e2eConfig.MaxValidatorsPerWithdrawalsSweep = 128 // Time parameters. e2eConfig.SecondsPerSlot = 10 @@ -26,14 +28,16 @@ func E2ETestConfig() *BeaconChainConfig { e2eConfig.EpochsPerEth1VotingPeriod = 2 e2eConfig.ShardCommitteePeriod = 4 e2eConfig.MaxSeedLookahead = 1 + e2eConfig.MinValidatorWithdrawabilityDelay = 1 // PoW parameters. e2eConfig.DepositChainID = 1337 // Chain ID of eth1 dev net. e2eConfig.DepositNetworkID = 1337 // Network ID of eth1 dev net. // Fork Parameters. - e2eConfig.AltairForkEpoch = altairE2EForkEpoch - e2eConfig.BellatrixForkEpoch = bellatrixE2EForkEpoch + e2eConfig.AltairForkEpoch = AltairE2EForkEpoch + e2eConfig.BellatrixForkEpoch = BellatrixE2EForkEpoch + e2eConfig.CapellaForkEpoch = CapellaE2EForkEpoch // Terminal Total Difficulty. e2eConfig.TerminalTotalDifficulty = "480" @@ -64,14 +68,16 @@ func E2EMainnetTestConfig() *BeaconChainConfig { e2eConfig.SqrRootSlotsPerEpoch = 5 e2eConfig.SecondsPerETH1Block = 2 e2eConfig.ShardCommitteePeriod = 4 + e2eConfig.MinValidatorWithdrawabilityDelay = 1 // PoW parameters. e2eConfig.DepositChainID = 1337 // Chain ID of eth1 dev net. e2eConfig.DepositNetworkID = 1337 // Network ID of eth1 dev net. // Altair Fork Parameters. - e2eConfig.AltairForkEpoch = altairE2EForkEpoch - e2eConfig.BellatrixForkEpoch = bellatrixE2EForkEpoch + e2eConfig.AltairForkEpoch = AltairE2EForkEpoch + e2eConfig.BellatrixForkEpoch = BellatrixE2EForkEpoch + e2eConfig.CapellaForkEpoch = CapellaE2EForkEpoch // Terminal Total Difficulty. e2eConfig.TerminalTotalDifficulty = "480" diff --git a/config/params/testnet_prater_config.go b/config/params/testnet_prater_config.go index 0d7fcab4f..402c68b6e 100644 --- a/config/params/testnet_prater_config.go +++ b/config/params/testnet_prater_config.go @@ -36,9 +36,9 @@ func PraterConfig() *BeaconChainConfig { cfg.DepositNetworkID = eth1Params.GoerliChainConfig.ChainID.Uint64() cfg.AltairForkEpoch = 36660 cfg.AltairForkVersion = []byte{0x1, 0x0, 0x10, 0x20} - cfg.CapellaForkVersion = []byte{0x3, 0x0, 0x10, 0x20} cfg.BellatrixForkEpoch = 112260 cfg.BellatrixForkVersion = []byte{0x2, 0x0, 0x10, 0x20} + cfg.CapellaForkVersion = []byte{0x3, 0x0, 0x10, 0x20} cfg.TerminalTotalDifficulty = "10790000" cfg.DepositContractAddress = "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b" cfg.InitializeForkSchedule() diff --git a/consensus-types/blocks/factory.go b/consensus-types/blocks/factory.go index 7c728f412..e9c2b4cf2 100644 --- a/consensus-types/blocks/factory.go +++ b/consensus-types/blocks/factory.go @@ -293,6 +293,10 @@ func BuildSignedBeaconBlockFromExecutionPayload( // This is particularly useful for using the values from API calls. func BeaconBlockContainerToSignedBeaconBlock(obj *eth.BeaconBlockContainer) (interfaces.ReadOnlySignedBeaconBlock, error) { switch obj.Block.(type) { + case *eth.BeaconBlockContainer_BlindedCapellaBlock: + return NewSignedBeaconBlock(obj.GetBlindedCapellaBlock()) + case *eth.BeaconBlockContainer_CapellaBlock: + return NewSignedBeaconBlock(obj.GetCapellaBlock()) case *eth.BeaconBlockContainer_BlindedBellatrixBlock: return NewSignedBeaconBlock(obj.GetBlindedBellatrixBlock()) case *eth.BeaconBlockContainer_BellatrixBlock: diff --git a/deps.bzl b/deps.bzl index 389dbb71c..f6cb516c9 100644 --- a/deps.bzl +++ b/deps.bzl @@ -37,8 +37,8 @@ def prysm_deps(): go_repository( name = "co_honnef_go_tools", importpath = "honnef.co/go/tools", - sum = "h1:qTakTkI6ni6LFD5sBwwsdSO+AQqbSIxOauHTTQKZ/7o=", - version = "v0.1.3", + sum = "h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=", + version = "v0.0.1-2020.1.4", ) go_repository( @@ -183,7 +183,6 @@ def prysm_deps(): sum = "h1:BS+UYpbsElC82gB+2E2jiCBg36i8HlubTB/dO/moQ9c=", version = "v1.2.0", ) - go_repository( name = "com_github_aws_aws_sdk_go_v2_config", importpath = "github.com/aws/aws-sdk-go-v2/config", @@ -232,7 +231,6 @@ def prysm_deps(): sum = "h1:D6CSsM3gdxaGaqXnPgOBCeL6Mophqzu7KJOu7zW78sU=", version = "v1.1.0", ) - go_repository( name = "com_github_azure_azure_sdk_for_go_sdk_azcore", importpath = "github.com/Azure/azure-sdk-for-go/sdk/azcore", @@ -356,8 +354,8 @@ def prysm_deps(): go_repository( name = "com_github_btcsuite_btcd_btcec_v2", importpath = "github.com/btcsuite/btcd/btcec/v2", - sum = "h1:xP60mv8fvp+0khmrN0zTdPC3cNm24rfeE6lh2R/Yv3E=", - version = "v2.2.1", + sum = "h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=", + version = "v2.3.2", ) go_repository( @@ -482,13 +480,13 @@ def prysm_deps(): sum = "h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=", version = "v0.3.4", ) - go_repository( name = "com_github_cloudflare_cloudflare_go", importpath = "github.com/cloudflare/cloudflare-go", sum = "h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA=", version = "v0.14.0", ) + go_repository( name = "com_github_cncf_udpa_go", importpath = "github.com/cncf/udpa/go", @@ -514,18 +512,17 @@ def prysm_deps(): sum = "h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=", version = "v0.0.0-20161010025455-3a0bb77429bd", ) - go_repository( name = "com_github_consensys_bavard", importpath = "github.com/consensys/bavard", - sum = "h1:+R8G1+Ftumd0DaveLgMIjrFPcAS4G8MsVXWXiyZL5BY=", - version = "v0.1.8-0.20210406032232-f3452dc9b572", + sum = "h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=", + version = "v0.1.13", ) go_repository( name = "com_github_consensys_gnark_crypto", importpath = "github.com/consensys/gnark-crypto", - sum = "h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8=", - version = "v0.4.1-0.20210426202927-39ac3d4b3f1f", + sum = "h1:llSLg4o9EgH3SrXky+Q5BqEYqV76NGKo07K5Ps2pIKo=", + version = "v0.9.1-0.20230105202408-1a7a29904a7c", ) go_repository( @@ -581,6 +578,12 @@ def prysm_deps(): sum = "h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=", version = "v2.0.2", ) + go_repository( + name = "com_github_crate_crypto_go_ipa", + importpath = "github.com/crate-crypto/go-ipa", + sum = "h1:6IrxszG5G+O7zhtkWxq6+unVvnrm1fqV2Pe+T95DUzw=", + version = "v0.0.0-20220523130400-f11357ae11c7", + ) go_repository( name = "com_github_creack_pty", @@ -633,6 +636,13 @@ def prysm_deps(): sum = "h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4=", version = "v1.8.0", ) + go_repository( + name = "com_github_deckarep_golang_set_v2", + importpath = "github.com/deckarep/golang-set/v2", + sum = "h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI=", + version = "v2.1.0", + ) + go_repository( name = "com_github_decred_dcrd_crypto_blake256", importpath = "github.com/decred/dcrd/crypto/blake256", @@ -693,8 +703,8 @@ def prysm_deps(): go_repository( name = "com_github_dlclark_regexp2", importpath = "github.com/dlclark/regexp2", - sum = "h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E=", - version = "v1.4.1-0.20201116162257-a2a8dda75c91", + sum = "h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo=", + version = "v1.7.0", ) go_repository( name = "com_github_dnaeon_go_vcr", @@ -702,13 +712,13 @@ def prysm_deps(): sum = "h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=", version = "v1.2.0", ) - go_repository( name = "com_github_docker_docker", importpath = "github.com/docker/docker", sum = "h1:HlFGsy+9/xrgMmhmN+NGhCc5SHGJ7I+kHosRR1xc/aI=", version = "v1.6.2", ) + go_repository( name = "com_github_docker_go_units", importpath = "github.com/docker/go-units", @@ -726,14 +736,14 @@ def prysm_deps(): go_repository( name = "com_github_dop251_goja", importpath = "github.com/dop251/goja", - sum = "h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ=", - version = "v0.0.0-20220405120441-9037c2b61cbf", + sum = "h1:kgvzE5wLsLa7XKfV85VZl40QXaMCaeFtHpPwJ8fhotY=", + version = "v0.0.0-20230122112309-96b1610dd4f7", ) go_repository( name = "com_github_dop251_goja_nodejs", importpath = "github.com/dop251/goja_nodejs", - sum = "h1:tYwu/z8Y0NkkzGEh3z21mSWggMg4LwLRFucLS7TjARg=", - version = "v0.0.0-20210225215109-d91c329300e7", + sum = "h1:W1n4DvpzZGOISgp7wWNtraLcHtnmnTwBlJidqtMIuwQ=", + version = "v0.0.0-20211022123610-8dd9abb0616d", ) go_repository( @@ -822,8 +832,9 @@ def prysm_deps(): patches = [ "//third_party:com_github_ethereum_go_ethereum_secp256k1.patch", ], - sum = "h1:5dFrKJDnYf8L6/5o42abCE6a9yJm9cs4EJVRyYMr55s=", - version = "v1.10.25", + replace = "github.com/ethereum/go-ethereum", + sum = "h1:6JJVl8gqGTpM7+zW+kP6ddON14qAvpAWIo8tQQ98XdI=", + version = "v1.10.24-0.20230201150825-5c8cc10d1e05", ) go_repository( @@ -914,8 +925,8 @@ def prysm_deps(): go_repository( name = "com_github_fsnotify_fsnotify", importpath = "github.com/fsnotify/fsnotify", - sum = "h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=", - version = "v1.5.4", + sum = "h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=", + version = "v1.6.0", ) go_repository( name = "com_github_garslo_gogen", @@ -936,6 +947,13 @@ def prysm_deps(): sum = "h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays=", version = "v0.0.0-20191108122812-4678299bea08", ) + go_repository( + name = "com_github_gballet_go_verkle", + importpath = "github.com/gballet/go-verkle", + sum = "h1:AB7YjNrzlVHsYz06zCULVV2zYCEft82P86dSmtwxKL0=", + version = "v0.0.0-20220902153445-097bd83b7732", + ) + go_repository( name = "com_github_gdamore_encoding", importpath = "github.com/gdamore/encoding", @@ -1295,6 +1313,12 @@ def prysm_deps(): sum = "h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=", version = "v0.1.0", ) + go_repository( + name = "com_github_google_subcommands", + importpath = "github.com/google/subcommands", + sum = "h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=", + version = "v1.2.0", + ) go_repository( name = "com_github_google_uuid", @@ -1544,6 +1568,12 @@ def prysm_deps(): sum = "h1:wCMygKUQhmcQAjlk2Gquzq6dLmyMv2kF+llRspoRgrk=", version = "v0.0.0-20210917013441-d37c07cfda4e", ) + go_repository( + name = "com_github_holiman_big", + importpath = "github.com/holiman/big", + sum = "h1:pIYdhNkDh+YENVNi3gto8n9hAmRxKxoar0iE6BLucjw=", + version = "v0.0.0-20221017200358-a027dc42d04e", + ) go_repository( name = "com_github_holiman_bloomfilter_v2", @@ -1764,13 +1794,13 @@ def prysm_deps(): sum = "h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8=", version = "v1.0.0", ) - go_repository( name = "com_github_jedisct1_go_minisign", importpath = "github.com/jedisct1/go-minisign", sum = "h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U=", version = "v0.0.0-20190909160543-45766022959e", ) + go_repository( name = "com_github_jellevandenhooff_dkim", importpath = "github.com/jellevandenhooff/dkim", @@ -1790,13 +1820,13 @@ def prysm_deps(): sum = "h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=", version = "v0.4.0", ) - go_repository( name = "com_github_jmespath_go_jmespath_internal_testify", importpath = "github.com/jmespath/go-jmespath/internal/testify", sum = "h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=", version = "v1.5.1", ) + go_repository( name = "com_github_jonboulle_clockwork", importpath = "github.com/jonboulle/clockwork", @@ -2004,13 +2034,13 @@ def prysm_deps(): sum = "h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=", version = "v0.3.0", ) - go_repository( name = "com_github_leanovate_gopter", importpath = "github.com/leanovate/gopter", sum = "h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=", version = "v0.2.9", ) + go_repository( name = "com_github_leodido_go_urn", importpath = "github.com/leodido/go-urn", @@ -2429,6 +2459,18 @@ def prysm_deps(): sum = "h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A=", version = "v1.2.0", ) + go_repository( + name = "com_github_mmcloughlin_addchain", + importpath = "github.com/mmcloughlin/addchain", + sum = "h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY=", + version = "v0.4.0", + ) + go_repository( + name = "com_github_mmcloughlin_profile", + importpath = "github.com/mmcloughlin/profile", + sum = "h1:jhDmAqPyebOsVDOCICJoINoLb/AnLBaUw58nFzxWS2w=", + version = "v0.1.1", + ) go_repository( name = "com_github_modern_go_concurrent", @@ -2997,13 +3039,6 @@ def prysm_deps(): version = "v0.3.4", ) - go_repository( - name = "com_github_rjeczalik_notify", - importpath = "github.com/rjeczalik/notify", - sum = "h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE=", - version = "v0.9.1", - ) - go_repository( name = "com_github_rogpeppe_fastuuid", importpath = "github.com/rogpeppe/fastuuid", @@ -3309,8 +3344,8 @@ def prysm_deps(): go_repository( name = "com_github_spf13_cobra", importpath = "github.com/spf13/cobra", - sum = "h1:O63eWlXlvyw4YdsuatjRIU6emvJ2fqz+PTdMEoxIT2s=", - version = "v1.0.1-0.20201006035406-b97b5ead31f7", + sum = "h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU=", + version = "v1.5.0", ) go_repository( name = "com_github_spf13_jwalterweatherman", @@ -3341,8 +3376,8 @@ def prysm_deps(): go_repository( name = "com_github_status_im_keycard_go", importpath = "github.com/status-im/keycard-go", - sum = "h1:Oo2KZNP70KE0+IUJSidPj/BFS/RXNHmKIJOdckzml2E=", - version = "v0.0.0-20200402102358-957c09536969", + sum = "h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA=", + version = "v0.2.0", ) go_repository( @@ -3498,8 +3533,8 @@ def prysm_deps(): go_repository( name = "com_github_urfave_cli_v2", importpath = "github.com/urfave/cli/v2", - sum = "h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y=", - version = "v2.10.2", + sum = "h1:5SqCsI/2Qya2bCzK15ozrqo2sZxkh0FHynJZOTVoV6Q=", + version = "v2.17.2-0.20221006022127-8f469abc00aa", ) go_repository( name = "com_github_uudashr_gocognit", @@ -3870,12 +3905,7 @@ def prysm_deps(): sum = "h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU=", version = "v2.0.0-20160621034901-c1b8fa8bdcce", ) - go_repository( - name = "in_gopkg_olebedev_go_duktape_v3", - importpath = "gopkg.in/olebedev/go-duktape.v3", - sum = "h1:a6cXbcDDUkSBlpnkWV1bJ+vv3mOgQEltEJ2rPxroVu0=", - version = "v3.0.0-20200619000410-60c24ae608a6", - ) + go_repository( name = "in_gopkg_redis_v4", importpath = "gopkg.in/redis.v4", @@ -4045,6 +4075,13 @@ def prysm_deps(): sum = "h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=", version = "v1.3.0", ) + go_repository( + name = "io_rsc_tmplfunc", + importpath = "rsc.io/tmplfunc", + sum = "h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU=", + version = "v0.0.3", + ) + go_repository( name = "org_apache_git_thrift_git", importpath = "git.apache.org/thrift.git", @@ -4119,8 +4156,8 @@ def prysm_deps(): go_repository( name = "org_golang_x_crypto", importpath = "golang.org/x/crypto", - sum = "h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A=", - version = "v0.3.0", + sum = "h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=", + version = "v0.5.0", ) go_repository( name = "org_golang_x_exp", @@ -4158,8 +4195,8 @@ def prysm_deps(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:VWL6FNY2bEEmsGVKabSlHu5Irp34xmMRoqb/9lF9lxk=", - version = "v0.3.0", + sum = "h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=", + version = "v0.5.0", ) go_repository( name = "org_golang_x_oauth2", @@ -4183,21 +4220,21 @@ def prysm_deps(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=", - version = "v0.3.0", + sum = "h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=", + version = "v0.4.0", ) go_repository( name = "org_golang_x_term", importpath = "golang.org/x/term", - sum = "h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI=", - version = "v0.3.0", + sum = "h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg=", + version = "v0.4.0", ) go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=", - version = "v0.5.0", + sum = "h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=", + version = "v0.6.0", ) go_repository( name = "org_golang_x_time", @@ -4292,12 +4329,6 @@ def prysm_deps(): sum = "h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=", version = "v1.24.0", ) - go_repository( - name = "tools_gotest", - importpath = "gotest.tools", - sum = "h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=", - version = "v2.2.0+incompatible", - ) # Note: go_repository is already wrapped with maybe! maybe( diff --git a/encoding/ssz/detect/configfork.go b/encoding/ssz/detect/configfork.go index e454afa9f..8bf5fa741 100644 --- a/encoding/ssz/detect/configfork.go +++ b/encoding/ssz/detect/configfork.go @@ -167,6 +167,8 @@ func (cf *VersionedUnmarshaler) UnmarshalBeaconBlock(marshaled []byte) (interfac blk = ðpb.SignedBeaconBlockAltair{} case version.Bellatrix: blk = ðpb.SignedBeaconBlockBellatrix{} + case version.Capella: + blk = ðpb.SignedBeaconBlockCapella{} default: forkName := version.String(cf.Fork) return nil, fmt.Errorf("unable to initialize ReadOnlyBeaconBlock for fork version=%s at slot=%d", forkName, slot) @@ -198,6 +200,8 @@ func (cf *VersionedUnmarshaler) UnmarshalBlindedBeaconBlock(marshaled []byte) (i blk = ðpb.SignedBeaconBlockAltair{} case version.Bellatrix: blk = ðpb.SignedBlindedBeaconBlockBellatrix{} + case version.Capella: + blk = ðpb.SignedBlindedBeaconBlockCapella{} default: forkName := version.String(cf.Fork) return nil, fmt.Errorf("unable to initialize ReadOnlyBeaconBlock for fork version=%s at slot=%d", forkName, slot) diff --git a/go.mod b/go.mod index 8bf42521d..397e4715b 100644 --- a/go.mod +++ b/go.mod @@ -5,17 +5,17 @@ go 1.19 require ( contrib.go.opencensus.io/exporter/jaeger v0.2.1 github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20220901111237-4348e62e228d - github.com/MariusVanDerWijden/tx-fuzz v0.0.0-20220321065247-ebb195301a27 + github.com/MariusVanDerWijden/tx-fuzz v0.0.0-00010101000000-000000000000 github.com/aristanetworks/goarista v0.0.0-20200805130819-fd197cf57d96 github.com/bazelbuild/rules_go v0.23.2 - github.com/btcsuite/btcd/btcec/v2 v2.2.1 + github.com/btcsuite/btcd/btcec/v2 v2.3.2 github.com/d4l3k/messagediff v1.2.1 github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018 github.com/dustin/go-humanize v1.0.0 github.com/emicklei/dot v0.11.0 - github.com/ethereum/go-ethereum v1.10.25 + github.com/ethereum/go-ethereum v1.10.26 github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 - github.com/fsnotify/fsnotify v1.5.4 + github.com/fsnotify/fsnotify v1.6.0 github.com/ghodss/yaml v1.0.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/gogo/protobuf v1.3.2 @@ -66,13 +66,13 @@ require ( github.com/rs/cors v1.7.0 github.com/schollz/progressbar/v3 v3.3.4 github.com/sirupsen/logrus v1.8.1 - github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969 + github.com/status-im/keycard-go v0.2.0 github.com/stretchr/testify v1.8.1 github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e github.com/trailofbits/go-mutexasserts v0.0.0-20200708152505-19999e7d3cef github.com/tyler-smith/go-bip39 v1.1.0 - github.com/urfave/cli/v2 v2.10.2 + github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa github.com/uudashr/gocognit v1.0.5 github.com/wealdtech/go-bytesutil v1.1.1 github.com/wealdtech/go-eth2-util v1.6.3 @@ -81,7 +81,7 @@ require ( go.etcd.io/bbolt v1.3.5 go.opencensus.io v0.24.0 go.uber.org/automaxprocs v1.3.0 - golang.org/x/crypto v0.3.0 + golang.org/x/crypto v0.5.0 golang.org/x/exp v0.0.0-20221205204356-47842c84f3db golang.org/x/mod v0.7.0 golang.org/x/sync v0.1.0 @@ -107,12 +107,12 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/deckarep/golang-set v1.8.0 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/deepmap/oapi-codegen v1.8.2 // indirect - github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect + github.com/dlclark/regexp2 v1.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf // indirect + github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7 // indirect github.com/edsrzf/mmap-go v1.1.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect github.com/ferranbt/fastssz v0.0.0-20210120143747-11b9eff30ea9 // indirect @@ -131,6 +131,7 @@ require ( github.com/gorilla/websocket v1.5.0 // indirect github.com/graph-gophers/graphql-go v1.3.0 // indirect github.com/hashicorp/go-bexpr v0.1.10 // indirect + github.com/holiman/big v0.0.0-20221017200358-a027dc42d04e // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/goevmlab v0.0.0-20220902091028-02faf03e18e4 // indirect github.com/huin/goupnp v1.0.3 // indirect @@ -198,7 +199,6 @@ require ( github.com/prometheus/procfs v0.8.0 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.3.4 // indirect - github.com/rjeczalik/notify v0.9.1 // indirect github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect @@ -217,10 +217,10 @@ require ( go.uber.org/fx v1.18.2 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/net v0.3.0 // indirect + golang.org/x/net v0.5.0 // indirect golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect - golang.org/x/term v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect + golang.org/x/term v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -245,7 +245,7 @@ require ( github.com/peterh/liner v1.2.0 // indirect github.com/prometheus/tsdb v0.10.0 // indirect github.com/prysmaticlabs/gohashtree v0.0.2-alpha - golang.org/x/sys v0.3.0 // indirect + golang.org/x/sys v0.4.0 // indirect google.golang.org/api v0.34.0 // indirect google.golang.org/appengine v1.6.7 // indirect k8s.io/klog/v2 v2.80.0 // indirect @@ -256,5 +256,7 @@ replace github.com/json-iterator/go => github.com/prestonvanloon/go v1.1.7-0.201 replace github.com/MariusVanDerWijden/tx-fuzz => github.com/marcopolo/tx-fuzz v0.0.0-20220927011827-b5c461bc7cae +replace github.com/ethereum/go-ethereum => github.com/ethereum/go-ethereum v1.10.24-0.20230201150825-5c8cc10d1e05 + // See https://github.com/prysmaticlabs/grpc-gateway/issues/2 replace github.com/grpc-ecosystem/grpc-gateway/v2 => github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20220721162526-0d1c40b5f064 diff --git a/go.sum b/go.sum index 2c2900fd3..417031b3a 100644 --- a/go.sum +++ b/go.sum @@ -132,11 +132,10 @@ github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+Wji github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/bradfitz/gomemcache v0.0.0-20170208213004-1952afaa557d/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= -github.com/btcsuite/btcd/btcec/v2 v2.2.1 h1:xP60mv8fvp+0khmrN0zTdPC3cNm24rfeE6lh2R/Yv3E= github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/buf v0.37.0/go.mod h1:lQ1m2HkIaGOFba6w/aC3KYBHhKEOESP3gaAEpS3dAFM= @@ -172,8 +171,8 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.9.1-0.20230105202408-1a7a29904a7c/go.mod h1:CkbdF9hbRidRJYMRzmfX8TMOr95I2pYXRHF18MzRrvA= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= @@ -195,6 +194,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -206,8 +206,9 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= @@ -223,21 +224,22 @@ github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMa github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.6.2 h1:HlFGsy+9/xrgMmhmN+NGhCc5SHGJ7I+kHosRR1xc/aI= github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7 h1:kgvzE5wLsLa7XKfV85VZl40QXaMCaeFtHpPwJ8fhotY= +github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7/go.mod h1:yRkwfj0CBpOGre+TwBsqPV0IH0Pk73e4PXJOeNDboGs= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -264,10 +266,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/ethereum/go-ethereum v1.10.23/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= -github.com/ethereum/go-ethereum v1.10.25 h1:5dFrKJDnYf8L6/5o42abCE6a9yJm9cs4EJVRyYMr55s= -github.com/ethereum/go-ethereum v1.10.25/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= +github.com/ethereum/go-ethereum v1.10.24-0.20230201150825-5c8cc10d1e05 h1:6JJVl8gqGTpM7+zW+kP6ddON14qAvpAWIo8tQQ98XdI= +github.com/ethereum/go-ethereum v1.10.24-0.20230201150825-5c8cc10d1e05/go.mod h1:C5Xij/C5W1rXkm7pCvr7p2HWUiVk6RmTF3EUvp8LXMY= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= @@ -290,14 +290,16 @@ github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03D github.com/fsnotify/fsnotify v1.4.3-0.20170329110642-4da3e2cfbabc/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= github.com/garyburd/redigo v1.1.1-0.20170914051019-70e1b1943d4f/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gballet/go-verkle v0.0.0-20220902153445-097bd83b7732/go.mod h1:o/XfIXWi4/GqbQirfRm5uTbXMG5NpqxkxblnbZ+QM9I= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= github.com/gdamore/tcell/v2 v2.5.1/go.mod h1:wSkrPaXoiIWZqW/g7Px4xc79di6FTcpB8tvaKJ6uGBo= @@ -465,6 +467,7 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20221203041831-ce31453925ec h1:fR20TYVVwhK4O7r7y+McjRYyaTH6/vjwJOajE+XhlzM= github.com/google/pprof v0.0.0-20221203041831-ce31453925ec/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -539,6 +542,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/herumi/bls-eth-go-binary v0.0.0-20210130185500-57372fb27371/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= github.com/herumi/bls-eth-go-binary v0.0.0-20210917013441-d37c07cfda4e h1:wCMygKUQhmcQAjlk2Gquzq6dLmyMv2kF+llRspoRgrk= github.com/herumi/bls-eth-go-binary v0.0.0-20210917013441-d37c07cfda4e/go.mod h1:luAnRm3OsMQeokhGzpYmc0ZKwawY7o87PUEP11Z7r7U= +github.com/holiman/big v0.0.0-20221017200358-a027dc42d04e h1:pIYdhNkDh+YENVNi3gto8n9hAmRxKxoar0iE6BLucjw= +github.com/holiman/big v0.0.0-20221017200358-a027dc42d04e/go.mod h1:j9cQbcqHQujT0oKJ38PylVfqohClLr3CvDC+Qcg+lhU= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/goevmlab v0.0.0-20220511132401-0a7fe67b5caf/go.mod h1:RU5Nsnjw+pnq2mS7/2FXf1wZZrc2yl/9fqk2Kb4ujAo= @@ -549,7 +554,6 @@ github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -784,6 +788,8 @@ github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxd github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1008,8 +1014,6 @@ github.com/rivo/tview v0.0.0-20220812085834-0e6b21a48e96/go.mod h1:hyzpnqn4KWzZo github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.3.4 h1:3Z3Eu6FGHZWSfNKJTOUiPatWwfc7DzJRU04jFUqJODw= github.com/rivo/uniseg v0.3.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1081,6 +1085,7 @@ github.com/spf13/cast v1.1.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgK github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.0.1-0.20201006035406-b97b5ead31f7/go.mod h1:yk5b0mALVusDL5fMM6Rd1wgnoO5jUPhwsQ6LQAJTidQ= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/jwalterweatherman v0.0.0-20170901151539-12bd96e66386/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -1091,9 +1096,8 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.0.0/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969 h1:Oo2KZNP70KE0+IUJSidPj/BFS/RXNHmKIJOdckzml2E= -github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1140,7 +1144,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/trailofbits/go-mutexasserts v0.0.0-20200708152505-19999e7d3cef h1:8LRP+2JK8piIUU16ZDgWDXwjJcuJNTtCzadjTZj8Jf0= github.com/trailofbits/go-mutexasserts v0.0.0-20200708152505-19999e7d3cef/go.mod h1:+SV/613m53DNAmlXPTWGZhIyt4E/qDvn9g/lOPRiy0A= github.com/twitchtv/twirp v7.1.0+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= @@ -1149,8 +1152,8 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= -github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= +github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa h1:5SqCsI/2Qya2bCzK15ozrqo2sZxkh0FHynJZOTVoV6Q= +github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI= github.com/uudashr/gocognit v1.0.5 h1:rrSex7oHr3/pPLQ0xoWq108XMU8s678FJcQ+aSfOHa4= github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -1187,6 +1190,7 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -1261,9 +1265,11 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220507011949-2cf3adece122/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1308,6 +1314,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1372,8 +1379,10 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.3.0 h1:VWL6FNY2bEEmsGVKabSlHu5Irp34xmMRoqb/9lF9lxk= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1400,6 +1409,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1479,15 +1489,14 @@ golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1496,12 +1505,18 @@ golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1509,8 +1524,9 @@ golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1521,8 +1537,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1599,6 +1616,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1761,7 +1779,6 @@ gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuv gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -1782,7 +1799,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1792,7 +1808,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= k8s.io/api v0.18.3 h1:2AJaUQdgUZLoDZHrun21PW2Nx9+ll6cUzvn3IKhSIn0= k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= k8s.io/apimachinery v0.18.3 h1:pOGcbVAhxADgUYnjS08EFXs9QMl8qaH5U4fr5LGUrSk= @@ -1817,6 +1832,7 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= diff --git a/runtime/interop/generate_genesis_state.go b/runtime/interop/generate_genesis_state.go index 064e0f526..ac4168a2e 100644 --- a/runtime/interop/generate_genesis_state.go +++ b/runtime/interop/generate_genesis_state.go @@ -15,6 +15,7 @@ import ( "github.com/prysmaticlabs/prysm/v3/container/trie" "github.com/prysmaticlabs/prysm/v3/crypto/bls" "github.com/prysmaticlabs/prysm/v3/crypto/hash" + "github.com/prysmaticlabs/prysm/v3/encoding/bytesutil" ethpb "github.com/prysmaticlabs/prysm/v3/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/v3/time" ) @@ -119,7 +120,7 @@ func DepositDataFromKeys(privKeys []bls.SecretKey, pubKeys []bls.PublicKey) ([]* depositDataItems := make([]*ethpb.Deposit_Data, len(privKeys)) depositDataRoots := make([][]byte, len(privKeys)) results, err := async.Scatter(len(privKeys), func(offset int, entries int, _ *sync.RWMutex) (interface{}, error) { - items, roots, err := depositDataFromKeys(privKeys[offset:offset+entries], pubKeys[offset:offset+entries]) + items, roots, err := depositDataFromKeys(privKeys[offset:offset+entries], pubKeys[offset:offset+entries], 0) return &depositData{items: items, roots: roots}, err }) if err != nil { @@ -136,11 +137,17 @@ func DepositDataFromKeys(privKeys []bls.SecretKey, pubKeys []bls.PublicKey) ([]* return depositDataItems, depositDataRoots, nil } -func depositDataFromKeys(privKeys []bls.SecretKey, pubKeys []bls.PublicKey) ([]*ethpb.Deposit_Data, [][]byte, error) { +// DepositDataFromKeysWithExecCreds generates a list of deposit data items from a set of BLS validator keys. +func DepositDataFromKeysWithExecCreds(privKeys []bls.SecretKey, pubKeys []bls.PublicKey, numOfCreds uint64) ([]*ethpb.Deposit_Data, [][]byte, error) { + return depositDataFromKeys(privKeys, pubKeys, numOfCreds) +} + +func depositDataFromKeys(privKeys []bls.SecretKey, pubKeys []bls.PublicKey, numOfCreds uint64) ([]*ethpb.Deposit_Data, [][]byte, error) { dataRoots := make([][]byte, len(privKeys)) depositDataItems := make([]*ethpb.Deposit_Data, len(privKeys)) for i := 0; i < len(privKeys); i++ { - data, err := createDepositData(privKeys[i], pubKeys[i]) + withCred := uint64(i) < numOfCreds + data, err := createDepositData(privKeys[i], pubKeys[i], withCred) if err != nil { return nil, nil, errors.Wrapf(err, "could not create deposit data for key: %#x", privKeys[i].Marshal()) } @@ -155,12 +162,18 @@ func depositDataFromKeys(privKeys []bls.SecretKey, pubKeys []bls.PublicKey) ([]* } // Generates a deposit data item from BLS keys and signs the hash tree root of the data. -func createDepositData(privKey bls.SecretKey, pubKey bls.PublicKey) (*ethpb.Deposit_Data, error) { +func createDepositData(privKey bls.SecretKey, pubKey bls.PublicKey, withExecCreds bool) (*ethpb.Deposit_Data, error) { depositMessage := ðpb.DepositMessage{ PublicKey: pubKey.Marshal(), WithdrawalCredentials: withdrawalCredentialsHash(pubKey.Marshal()), Amount: params.BeaconConfig().MaxEffectiveBalance, } + if withExecCreds { + newCredentials := make([]byte, 12) + newCredentials[0] = params.BeaconConfig().ETH1AddressWithdrawalPrefixByte + execAddr := bytesutil.ToBytes20(pubKey.Marshal()) + depositMessage.WithdrawalCredentials = append(newCredentials, execAddr[:]...) + } sr, err := depositMessage.HashTreeRoot() if err != nil { return nil, err diff --git a/testing/endtoend/components/beacon_node.go b/testing/endtoend/components/beacon_node.go index 7f5f24b5f..3716893bd 100644 --- a/testing/endtoend/components/beacon_node.go +++ b/testing/endtoend/components/beacon_node.go @@ -268,6 +268,7 @@ func (node *BeaconNode) Start(ctx context.Context) error { fmt.Sprintf("--%s=%s", cmdshared.VerbosityFlag.Name, "debug"), fmt.Sprintf("--%s=%d", flags.BlockBatchLimitBurstFactor.Name, 8), fmt.Sprintf("--%s=%s", cmdshared.ChainConfigFileFlag.Name, cfgPath), + fmt.Sprintf("--%s", features.EnableOnlyBlindedBeaconBlocks.Name), "--" + cmdshared.ForceClearDB.Name, "--" + cmdshared.AcceptTosFlag.Name, "--" + flags.EnableDebugRPCEndpoints.Name, @@ -350,7 +351,8 @@ func generateGenesis(ctx context.Context) (state.BeaconState, error) { } gb := e2e.TestParams.Eth1GenesisBlock t := e2e.TestParams.CLGenesisTime + pcreds := e2e.TestParams.NumberOfExecutionCreds nvals := params.BeaconConfig().MinGenesisActiveValidatorCount version := e2etypes.GenesisFork() - return util.NewPreminedGenesis(ctx, t, nvals, version, gb) + return util.NewPreminedGenesis(ctx, t, nvals, pcreds, version, gb) } diff --git a/testing/endtoend/components/eth1/miner.go b/testing/endtoend/components/eth1/miner.go index e5b7819b2..fd9a76a7b 100644 --- a/testing/endtoend/components/eth1/miner.go +++ b/testing/endtoend/components/eth1/miner.go @@ -147,6 +147,7 @@ func (m *Miner) initAttempt(ctx context.Context, attempt int) (*os.File, error) fmt.Sprintf("--unlock=%s", EthAddress), "--allow-insecure-unlock", "--syncmode=full", + fmt.Sprintf("--miner.etherbase=%s", EthAddress), fmt.Sprintf("--txpool.locals=%s", EthAddress), fmt.Sprintf("--password=%s", pwFile), } diff --git a/testing/endtoend/endtoend_setup_test.go b/testing/endtoend/endtoend_setup_test.go index 67d97d6f0..88de63426 100644 --- a/testing/endtoend/endtoend_setup_test.go +++ b/testing/endtoend/endtoend_setup_test.go @@ -21,7 +21,7 @@ func e2eMinimal(t *testing.T, v int, cfgo ...types.E2EConfigOpt) *testRunner { // Run for 12 epochs if not in long-running to confirm long-running has no issues. var err error - epochsToRun := 10 + epochsToRun := 12 epochStr, longRunning := os.LookupEnv("E2E_EPOCHS") if longRunning { epochsToRun, err = strconv.Atoi(epochStr) @@ -46,6 +46,8 @@ func e2eMinimal(t *testing.T, v int, cfgo ...types.E2EConfigOpt) *testRunner { ev.PeersCheck, ev.ProposeVoluntaryExit, ev.ValidatorsHaveExited, + ev.SubmitWithdrawal, + ev.ValidatorsHaveWithdrawn, ev.ProcessesDepositsInBlocks, ev.ActivatesDepositedValidators, ev.DepositedValidatorsAreActive, @@ -53,6 +55,7 @@ func e2eMinimal(t *testing.T, v int, cfgo ...types.E2EConfigOpt) *testRunner { ev.ColdStateCheckpoint, ev.AltairForkTransition, ev.BellatrixForkTransition, + ev.CapellaForkTransition, ev.APIMiddlewareVerifyIntegrity, ev.APIGatewayV1Alpha1VerifyIntegrity, ev.FinishedSyncing, @@ -123,6 +126,7 @@ func e2eMainnet(t *testing.T, usePrysmSh, useMultiClient bool, cfg *params.Beaco ev.ColdStateCheckpoint, ev.AltairForkTransition, ev.BellatrixForkTransition, + ev.CapellaForkTransition, ev.APIMiddlewareVerifyIntegrity, ev.APIGatewayV1Alpha1VerifyIntegrity, ev.FinishedSyncing, @@ -175,6 +179,7 @@ func scenarioEvals() []types.Evaluator { ev.ColdStateCheckpoint, ev.AltairForkTransition, ev.BellatrixForkTransition, + ev.CapellaForkTransition, ev.APIMiddlewareVerifyIntegrity, ev.APIGatewayV1Alpha1VerifyIntegrity, ev.FinishedSyncing, @@ -195,6 +200,7 @@ func scenarioEvalsMulti() []types.Evaluator { ev.ColdStateCheckpoint, ev.AltairForkTransition, ev.BellatrixForkTransition, + ev.CapellaForkTransition, ev.APIMiddlewareVerifyIntegrity, ev.APIGatewayV1Alpha1VerifyIntegrity, ev.FinishedSyncing, diff --git a/testing/endtoend/evaluators/BUILD.bazel b/testing/endtoend/evaluators/BUILD.bazel index 171ee35c5..13fcac9fc 100644 --- a/testing/endtoend/evaluators/BUILD.bazel +++ b/testing/endtoend/evaluators/BUILD.bazel @@ -25,6 +25,7 @@ go_library( "//beacon-chain/core/helpers:go_default_library", "//beacon-chain/core/signing:go_default_library", "//beacon-chain/p2p:go_default_library", + "//beacon-chain/state:go_default_library", "//config/fieldparams:go_default_library", "//config/params:go_default_library", "//consensus-types/blocks:go_default_library", @@ -32,6 +33,7 @@ go_library( "//consensus-types/primitives:go_default_library", "//container/slice:go_default_library", "//encoding/bytesutil:go_default_library", + "//encoding/ssz/detect:go_default_library", "//math:go_default_library", "//network/forks:go_default_library", "//proto/eth/service:go_default_library", diff --git a/testing/endtoend/evaluators/fork.go b/testing/endtoend/evaluators/fork.go index 840ff4d64..1c06fd23c 100644 --- a/testing/endtoend/evaluators/fork.go +++ b/testing/endtoend/evaluators/fork.go @@ -40,6 +40,13 @@ var BellatrixForkTransition = types.Evaluator{ Evaluation: bellatrixForkOccurs, } +// CapellaForkTransition ensures that the Capella hard fork has occurred successfully. +var CapellaForkTransition = types.Evaluator{ + Name: "capella_fork_transition_%d", + Policy: policies.OnEpoch(helpers.CapellaE2EForkEpoch), + Evaluation: capellaForkOccurs, +} + func altairForkOccurs(_ *types.EvaluationContext, conns ...*grpc.ClientConn) error { conn := conns[0] client := ethpb.NewBeaconNodeValidatorClient(conn) @@ -126,3 +133,46 @@ func bellatrixForkOccurs(_ *types.EvaluationContext, conns ...*grpc.ClientConn) } return nil } + +func capellaForkOccurs(_ *types.EvaluationContext, conns ...*grpc.ClientConn) error { + conn := conns[0] + client := ethpb.NewBeaconNodeValidatorClient(conn) + ctx, cancel := context.WithTimeout(context.Background(), streamDeadline) + defer cancel() + stream, err := client.StreamBlocksAltair(ctx, ðpb.StreamBlocksRequest{VerifiedOnly: true}) + if err != nil { + return errors.Wrap(err, "failed to get stream") + } + fSlot, err := slots.EpochStart(helpers.CapellaE2EForkEpoch) + if err != nil { + return err + } + if ctx.Err() == context.Canceled { + return errors.New("context canceled prematurely") + } + res, err := stream.Recv() + if err != nil { + return err + } + if res == nil || res.Block == nil { + return errors.New("nil block returned by beacon node") + } + + if res.GetBlock() == nil { + return errors.New("nil block returned by beacon node") + } + if res.GetCapellaBlock() == nil { + return errors.Errorf("non-capella block returned after the fork with type %T", res.Block) + } + blk, err := blocks.NewSignedBeaconBlock(res.GetCapellaBlock()) + if err != nil { + return err + } + if err := blocks.BeaconBlockIsNil(blk); err != nil { + return err + } + if blk.Block().Slot() < fSlot { + return errors.Errorf("wanted a block at slot >= %d but received %d", fSlot, blk.Block().Slot()) + } + return nil +} diff --git a/testing/endtoend/evaluators/operations.go b/testing/endtoend/evaluators/operations.go index bd6ef0fab..ebb6527f7 100644 --- a/testing/endtoend/evaluators/operations.go +++ b/testing/endtoend/evaluators/operations.go @@ -10,10 +10,14 @@ import ( "github.com/pkg/errors" corehelpers "github.com/prysmaticlabs/prysm/v3/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/v3/beacon-chain/core/signing" + "github.com/prysmaticlabs/prysm/v3/beacon-chain/state" "github.com/prysmaticlabs/prysm/v3/config/params" "github.com/prysmaticlabs/prysm/v3/consensus-types/blocks" "github.com/prysmaticlabs/prysm/v3/consensus-types/primitives" "github.com/prysmaticlabs/prysm/v3/encoding/bytesutil" + "github.com/prysmaticlabs/prysm/v3/encoding/ssz/detect" + ethpbservice "github.com/prysmaticlabs/prysm/v3/proto/eth/service" + v2 "github.com/prysmaticlabs/prysm/v3/proto/eth/v2" ethpb "github.com/prysmaticlabs/prysm/v3/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/v3/testing/endtoend/helpers" e2e "github.com/prysmaticlabs/prysm/v3/testing/endtoend/params" @@ -28,6 +32,7 @@ import ( // churnLimit is normally 4 unless the validator set is extremely large. var churnLimit = 4 var depositValCount = e2e.DepositCount +var numOfExits = 2 // Deposits should be processed in twice the length of the epochs per eth1 voting period. var depositsInBlockStart = params.E2ETestConfig().EpochsPerEth1VotingPeriod * 2 @@ -78,6 +83,20 @@ var ValidatorsHaveExited = e2etypes.Evaluator{ Evaluation: validatorsHaveExited, } +// SubmitWithdrawal sends a withdrawal from a previously exited validator. +var SubmitWithdrawal = e2etypes.Evaluator{ + Name: "submit_withdrawal_epoch_%d", + Policy: policies.BetweenEpochs(helpers.CapellaE2EForkEpoch-2, helpers.CapellaE2EForkEpoch+1), + Evaluation: submitWithdrawal, +} + +// ValidatorsHaveWithdrawn checks the beacon state for the withdrawn validator and ensures it has been withdrawn. +var ValidatorsHaveWithdrawn = e2etypes.Evaluator{ + Name: "validator_has_withdrawn_%d", + Policy: policies.OnEpoch(helpers.CapellaE2EForkEpoch + 1), + Evaluation: validatorsAreWithdrawn, +} + // ValidatorsVoteWithTheMajority verifies whether validator vote for eth1data using the majority algorithm. var ValidatorsVoteWithTheMajority = e2etypes.Evaluator{ Name: "validators_vote_with_the_majority_%d", @@ -312,47 +331,93 @@ func proposeVoluntaryExit(ec *e2etypes.EvaluationContext, conns ...*grpc.ClientC conn := conns[0] valClient := ethpb.NewBeaconNodeValidatorClient(conn) beaconClient := ethpb.NewBeaconChainClient(conn) + debugClient := ethpb.NewDebugClient(conn) ctx := context.Background() chainHead, err := beaconClient.GetChainHead(ctx, &emptypb.Empty{}) if err != nil { return errors.Wrap(err, "could not get chain head") } + stObj, err := debugClient.GetBeaconState(ctx, ðpb.BeaconStateRequest{QueryFilter: ðpb.BeaconStateRequest_Slot{Slot: chainHead.HeadSlot}}) + if err != nil { + return errors.Wrap(err, "could not get state object") + } + versionedMarshaler, err := detect.FromState(stObj.Encoded) + if err != nil { + return errors.Wrap(err, "could not get state marshaler") + } + st, err := versionedMarshaler.UnmarshalBeaconState(stObj.Encoded) + if err != nil { + return errors.Wrap(err, "could not get state") + } + execIndices := []int{} + err = st.ReadFromEveryValidator(func(idx int, val state.ReadOnlyValidator) error { + if val.WithdrawalCredentials()[0] == params.BeaconConfig().ETH1AddressWithdrawalPrefixByte { + execIndices = append(execIndices, idx) + } + return nil + }) + if err != nil { + return err + } + if len(execIndices) > numOfExits { + execIndices = execIndices[:numOfExits] + } deposits, privKeys, err := util.DeterministicDepositsAndKeys(params.BeaconConfig().MinGenesisActiveValidatorCount) if err != nil { return err } - exitedIndex := primitives.ValidatorIndex(rand.Uint64() % params.BeaconConfig().MinGenesisActiveValidatorCount) + var sendExit = func(exitedIndex primitives.ValidatorIndex) error { + voluntaryExit := ðpb.VoluntaryExit{ + Epoch: chainHead.HeadEpoch, + ValidatorIndex: exitedIndex, + } + req := ðpb.DomainRequest{ + Epoch: chainHead.HeadEpoch, + Domain: params.BeaconConfig().DomainVoluntaryExit[:], + } + domain, err := valClient.DomainData(ctx, req) + if err != nil { + return err + } + signingData, err := signing.ComputeSigningRoot(voluntaryExit, domain.SignatureDomain) + if err != nil { + return err + } + signature := privKeys[exitedIndex].Sign(signingData[:]) + signedExit := ðpb.SignedVoluntaryExit{ + Exit: voluntaryExit, + Signature: signature.Marshal(), + } - voluntaryExit := ðpb.VoluntaryExit{ - Epoch: chainHead.HeadEpoch, - ValidatorIndex: exitedIndex, - } - req := ðpb.DomainRequest{ - Epoch: chainHead.HeadEpoch, - Domain: params.BeaconConfig().DomainVoluntaryExit[:], - } - domain, err := valClient.DomainData(ctx, req) - if err != nil { - return err - } - signingData, err := signing.ComputeSigningRoot(voluntaryExit, domain.SignatureDomain) - if err != nil { - return err - } - signature := privKeys[exitedIndex].Sign(signingData[:]) - signedExit := ðpb.SignedVoluntaryExit{ - Exit: voluntaryExit, - Signature: signature.Marshal(), + if _, err = valClient.ProposeExit(ctx, signedExit); err != nil { + return errors.Wrap(err, "could not propose exit") + } + pubk := bytesutil.ToBytes48(deposits[exitedIndex].Data.PublicKey) + ec.ExitedVals[pubk] = true + return nil } - if _, err = valClient.ProposeExit(ctx, signedExit); err != nil { - return errors.Wrap(err, "could not propose exit") + // Send exits for keys which already contain execution credentials. + for _, idx := range execIndices { + if err := sendExit(primitives.ValidatorIndex(idx)); err != nil { + return err + } + } + + // Send an exit for a non-exited validator. + for i := 0; i < numOfExits; { + randIndex := primitives.ValidatorIndex(rand.Uint64() % params.BeaconConfig().MinGenesisActiveValidatorCount) + if ec.ExitedVals[bytesutil.ToBytes48(privKeys[randIndex].PublicKey().Marshal())] { + continue + } + if err := sendExit(randIndex); err != nil { + return err + } + i++ } - pubk := bytesutil.ToBytes48(deposits[exitedIndex].Data.PublicKey) - ec.ExitedVals[pubk] = true return nil } @@ -417,6 +482,14 @@ func validatorsVoteWithTheMajority(ec *e2etypes.EvaluationContext, conns ...*grp b := blk.GetBlindedBellatrixBlock().Block slot = b.Slot vote = b.Body.Eth1Data.BlockHash + case *ethpb.BeaconBlockContainer_CapellaBlock: + b := blk.GetCapellaBlock().Block + slot = b.Slot + vote = b.Body.Eth1Data.BlockHash + case *ethpb.BeaconBlockContainer_BlindedCapellaBlock: + b := blk.GetBlindedCapellaBlock().Block + slot = b.Slot + vote = b.Body.Eth1Data.BlockHash default: return errors.New("block neither phase0,altair or bellatrix") } @@ -455,3 +528,124 @@ func validatorsVoteWithTheMajority(ec *e2etypes.EvaluationContext, conns ...*grp } return nil } + +func submitWithdrawal(ec *e2etypes.EvaluationContext, conns ...*grpc.ClientConn) error { + conn := conns[0] + beaconAPIClient := ethpbservice.NewBeaconChainClient(conn) + beaconClient := ethpb.NewBeaconChainClient(conn) + debugClient := ethpb.NewDebugClient(conn) + + ctx := context.Background() + chainHead, err := beaconClient.GetChainHead(ctx, &emptypb.Empty{}) + if err != nil { + return errors.Wrap(err, "could not get chain head") + } + stObj, err := debugClient.GetBeaconState(ctx, ðpb.BeaconStateRequest{QueryFilter: ðpb.BeaconStateRequest_Slot{Slot: chainHead.HeadSlot}}) + if err != nil { + return errors.Wrap(err, "could not get state object") + } + versionedMarshaler, err := detect.FromState(stObj.Encoded) + if err != nil { + return errors.Wrap(err, "could not get state marshaler") + } + st, err := versionedMarshaler.UnmarshalBeaconState(stObj.Encoded) + if err != nil { + return errors.Wrap(err, "could not get state") + } + exitedIndices := make([]primitives.ValidatorIndex, 0) + + for key := range ec.ExitedVals { + valIdx, ok := st.ValidatorIndexByPubkey(key) + if !ok { + return errors.Errorf("pubkey %#x does not exist in our state", key) + } + exitedIndices = append(exitedIndices, valIdx) + } + + _, privKeys, err := util.DeterministicDepositsAndKeys(params.BeaconConfig().MinGenesisActiveValidatorCount) + if err != nil { + return err + } + changes := make([]*v2.SignedBLSToExecutionChange, 0) + // Only send half the number of changes each time, to allow us to test + // at the fork boundary. + wantedChanges := numOfExits / 2 + for _, idx := range exitedIndices { + // Exit sending more change messages. + if len(changes) >= wantedChanges { + break + } + val, err := st.ValidatorAtIndex(idx) + if err != nil { + return err + } + if val.WithdrawalCredentials[0] == params.BeaconConfig().ETH1AddressWithdrawalPrefixByte { + continue + } + if !bytes.Equal(val.PublicKey, privKeys[idx].PublicKey().Marshal()) { + return errors.Errorf("pubkey is not equal, wanted %#x but received %#x", val.PublicKey, privKeys[idx].PublicKey().Marshal()) + } + message := &v2.BLSToExecutionChange{ + ValidatorIndex: idx, + FromBlsPubkey: privKeys[idx].PublicKey().Marshal(), + ToExecutionAddress: bytesutil.ToBytes(uint64(idx), 20), + } + domain, err := signing.ComputeDomain(params.BeaconConfig().DomainBLSToExecutionChange, params.BeaconConfig().GenesisForkVersion, st.GenesisValidatorsRoot()) + if err != nil { + return err + } + sigRoot, err := signing.ComputeSigningRoot(message, domain) + if err != nil { + return err + } + signature := privKeys[idx].Sign(sigRoot[:]).Marshal() + change := &v2.SignedBLSToExecutionChange{ + Message: message, + Signature: signature, + } + changes = append(changes, change) + } + _, err = beaconAPIClient.SubmitSignedBLSToExecutionChanges(ctx, &v2.SubmitBLSToExecutionChangesRequest{Changes: changes}) + + return err +} + +func validatorsAreWithdrawn(ec *e2etypes.EvaluationContext, conns ...*grpc.ClientConn) error { + conn := conns[0] + beaconClient := ethpb.NewBeaconChainClient(conn) + debugClient := ethpb.NewDebugClient(conn) + + ctx := context.Background() + chainHead, err := beaconClient.GetChainHead(ctx, &emptypb.Empty{}) + if err != nil { + return errors.Wrap(err, "could not get chain head") + } + stObj, err := debugClient.GetBeaconState(ctx, ðpb.BeaconStateRequest{QueryFilter: ðpb.BeaconStateRequest_Slot{Slot: chainHead.HeadSlot}}) + if err != nil { + return errors.Wrap(err, "could not get state object") + } + versionedMarshaler, err := detect.FromState(stObj.Encoded) + if err != nil { + return errors.Wrap(err, "could not get state marshaler") + } + st, err := versionedMarshaler.UnmarshalBeaconState(stObj.Encoded) + if err != nil { + return errors.Wrap(err, "could not get state") + } + + for key := range ec.ExitedVals { + valIdx, ok := st.ValidatorIndexByPubkey(key) + if !ok { + return errors.Errorf("pubkey %#x does not exist in our state", key) + } + bal, err := st.BalanceAtIndex(valIdx) + if err != nil { + return err + } + if bal != 0 { + return errors.Errorf("Validator index %d with key %#x hasn't withdrawn. Their balance is %d.", valIdx, key, bal) + } + + } + return nil +} diff --git a/testing/endtoend/evaluators/validator.go b/testing/endtoend/evaluators/validator.go index b43108a64..5c79543ba 100644 --- a/testing/endtoend/evaluators/validator.go +++ b/testing/endtoend/evaluators/validator.go @@ -49,7 +49,7 @@ var ValidatorsParticipatingAtEpoch = func(epoch primitives.Epoch) types.Evaluato // are active. var ValidatorSyncParticipation = types.Evaluator{ Name: "validator_sync_participation_%d", - Policy: policies.AfterNthEpoch(helpers.AltairE2EForkEpoch - 1), + Policy: policies.OnwardsNthEpoch(helpers.AltairE2EForkEpoch), Evaluation: validatorsSyncParticipation, } @@ -177,7 +177,10 @@ func validatorsSyncParticipation(_ *types.EvaluationContext, conns ...*grpc.Clie } currSlot := slots.CurrentSlot(uint64(genesis.GenesisTime.AsTime().Unix())) currEpoch := slots.ToEpoch(currSlot) - lowestBound := currEpoch - 1 + lowestBound := primitives.Epoch(0) + if currEpoch >= 1 { + lowestBound = currEpoch - 1 + } if lowestBound < helpers.AltairE2EForkEpoch { lowestBound = helpers.AltairE2EForkEpoch @@ -276,6 +279,12 @@ func syncCompatibleBlockFromCtr(container *ethpb.BeaconBlockContainer) (interfac if container.GetBlindedBellatrixBlock() != nil { return blocks.NewSignedBeaconBlock(container.GetBlindedBellatrixBlock()) } + if container.GetCapellaBlock() != nil { + return blocks.NewSignedBeaconBlock(container.GetCapellaBlock()) + } + if container.GetBlindedCapellaBlock() != nil { + return blocks.NewSignedBeaconBlock(container.GetBlindedCapellaBlock()) + } return nil, errors.New("no supported block type in container") } diff --git a/testing/endtoend/helpers/helpers.go b/testing/endtoend/helpers/helpers.go index cefea3c8f..cc13dcd35 100644 --- a/testing/endtoend/helpers/helpers.go +++ b/testing/endtoend/helpers/helpers.go @@ -37,8 +37,9 @@ const ( cpuProfileFileName = "node_cpu_profile_%d.pb.gz" fileBufferSize = 64 * 1024 maxFileBufferSize = 1024 * 1024 - AltairE2EForkEpoch = 6 - BellatrixE2EForkEpoch = 8 + AltairE2EForkEpoch = params.AltairE2EForkEpoch + BellatrixE2EForkEpoch = params.BellatrixE2EForkEpoch + CapellaE2EForkEpoch = params.CapellaE2EForkEpoch ) // Graffiti is a list of sample graffiti strings. diff --git a/testing/endtoend/params/params.go b/testing/endtoend/params/params.go index e9b6bce0e..35c4d67a0 100644 --- a/testing/endtoend/params/params.go +++ b/testing/endtoend/params/params.go @@ -33,6 +33,7 @@ type params struct { StartTime time.Time CLGenesisTime uint64 Eth1GenesisTime uint64 + NumberOfExecutionCreds uint64 } type ports struct { @@ -119,6 +120,9 @@ var StandardLighthouseNodeCount = 2 // DepositCount is the number of deposits the E2E runner should make to evaluate post-genesis deposit processing. var DepositCount = uint64(64) +// PregenesisExecCreds is the number of withdrawal credentials of genesis validators which use an execution address. +var PregenesisExecCreds = uint64(8) + // NumOfExecEngineTxs is the number of transaction sent to the execution engine. var NumOfExecEngineTxs = uint64(200) @@ -207,13 +211,14 @@ func Init(t *testing.T, beaconNodeCount int) error { genTime := uint64(time.Now().Unix()) + StartupBufferSecs TestParams = ¶ms{ - TestPath: filepath.Join(testPath, fmt.Sprintf("shard-%d", testShardIndex)), - LogPath: logPath, - TestShardIndex: testShardIndex, - BeaconNodeCount: beaconNodeCount, - Ports: testPorts, - CLGenesisTime: genTime, - Eth1GenesisTime: genTime, + TestPath: filepath.Join(testPath, fmt.Sprintf("shard-%d", testShardIndex)), + LogPath: logPath, + TestShardIndex: testShardIndex, + BeaconNodeCount: beaconNodeCount, + Ports: testPorts, + CLGenesisTime: genTime, + Eth1GenesisTime: genTime, + NumberOfExecutionCreds: PregenesisExecCreds, } return nil } @@ -267,6 +272,7 @@ func InitMultiClient(t *testing.T, beaconNodeCount int, lighthouseNodeCount int) Ports: testPorts, CLGenesisTime: genTime, Eth1GenesisTime: genTime, + NumberOfExecutionCreds: PregenesisExecCreds, } return nil } diff --git a/testing/endtoend/policies/policies.go b/testing/endtoend/policies/policies.go index 8785a29d5..31c0385d5 100644 --- a/testing/endtoend/policies/policies.go +++ b/testing/endtoend/policies/policies.go @@ -9,6 +9,13 @@ func AfterNthEpoch(afterEpoch primitives.Epoch) func(epoch primitives.Epoch) boo } } +// OnwardsNthEpoch runs for every epoch from the provided epoch. +func OnwardsNthEpoch(onwardsEpoch primitives.Epoch) func(epoch primitives.Epoch) bool { + return func(currentEpoch primitives.Epoch) bool { + return currentEpoch >= onwardsEpoch + } +} + // AllEpochs runs for all epochs. func AllEpochs(_ primitives.Epoch) bool { return true diff --git a/testing/endtoend/types/fork.go b/testing/endtoend/types/fork.go index e617126b7..83f8f2c92 100644 --- a/testing/endtoend/types/fork.go +++ b/testing/endtoend/types/fork.go @@ -2,6 +2,7 @@ package types import ( "fmt" + "math" "github.com/prysmaticlabs/prysm/v3/config/params" "github.com/prysmaticlabs/prysm/v3/runtime/version" @@ -22,5 +23,10 @@ func StartAt(v int, c *params.BeaconChainConfig) *params.BeaconChainConfig { // E2E sets EL block production rate equal to SecondsPerETH1Block to keep the math simple. ttd := uint64(c.BellatrixForkEpoch) * uint64(c.SlotsPerEpoch) * c.SecondsPerSlot c.TerminalTotalDifficulty = fmt.Sprintf("%d", ttd) + // TODO: Remove this once lighthouse has released a capella + // compatible release. + if c.ConfigName == params.EndToEndMainnetName { + c.CapellaForkEpoch = math.MaxUint64 + } return c } diff --git a/testing/util/premine-state.go b/testing/util/premine-state.go index b8c8a953f..d0f6c277f 100644 --- a/testing/util/premine-state.go +++ b/testing/util/premine-state.go @@ -26,19 +26,21 @@ import ( var errUnsupportedVersion = errors.New("schema version not supported by premineGenesisConfig") type premineGenesisConfig struct { - GenesisTime uint64 - NVals uint64 - Version int // as in "github.com/prysmaticlabs/prysm/v3/runtime/version" - GB *types.Block // geth genesis block + GenesisTime uint64 + NVals uint64 + PregenesisCreds uint64 + Version int // as in "github.com/prysmaticlabs/prysm/v3/runtime/version" + GB *types.Block // geth genesis block } // NewPreminedGenesis creates a genesis BeaconState at the given fork version, suitable for using as an e2e genesis. -func NewPreminedGenesis(ctx context.Context, t, nvals uint64, version int, gb *types.Block) (state.BeaconState, error) { +func NewPreminedGenesis(ctx context.Context, t, nvals, pCreds uint64, version int, gb *types.Block) (state.BeaconState, error) { return (&premineGenesisConfig{ - GenesisTime: t, - NVals: nvals, - Version: version, - GB: gb, + GenesisTime: t, + NVals: nvals, + PregenesisCreds: pCreds, + Version: version, + GB: gb, }).prepare(ctx) } @@ -150,7 +152,7 @@ func (s *premineGenesisConfig) deposits() ([]*ethpb.Deposit, error) { if err != nil { return nil, err } - items, roots, err := interop.DepositDataFromKeys(prv, pub) + items, roots, err := interop.DepositDataFromKeysWithExecCreds(prv, pub, s.PregenesisCreds) if err != nil { return nil, errors.Wrap(err, "could not generate deposit data from keys") }