Compare commits

...

7 Commits

Author SHA1 Message Date
james-prysm
b492f8e62f fixing more tests 2024-09-20 17:07:30 -05:00
james-prysm
2df96657a2 changelog 2024-09-20 17:06:35 -05:00
james-prysm
d344075274 missed unit test 2024-09-20 17:05:13 -05:00
james-prysm
b3ccaf4de0 gaz 2024-09-20 16:57:46 -05:00
james-prysm
45dcf1f1d4 Merge branch 'develop' into web3signer-use-config-gvr 2024-09-20 16:55:58 -05:00
james-prysm
906f35badc adding some missed changes 2024-09-20 16:55:24 -05:00
james-prysm
18d21ab3e3 removing need to get genesis validators root from db and using the hardcoded one 2024-09-20 16:44:57 -05:00
14 changed files with 74 additions and 209 deletions

View File

@@ -38,6 +38,7 @@ The format is based on Keep a Changelog, and this project adheres to Semantic Ve
- Updated k8s-io/client-go to v0.30.4 and k8s-io/apimachinery to v0.30.4
- Migrated tracing library from opencensus to opentelemetry for both the beacon node and validator.
- Refactored light client code to make it more readable and make future PRs easier.
- remote signer (web3signer) uses the hardcoded genesis validators root returned from beacon configs
### Deprecated
- `--disable-grpc-gateway` flag is deprecated due to grpc gateway removal.

View File

@@ -14,12 +14,10 @@ go_library(
importpath = "github.com/prysmaticlabs/prysm/v5/cmd/validator/accounts",
visibility = ["//visibility:public"],
deps = [
"//api/grpc:go_default_library",
"//cmd:go_default_library",
"//cmd/validator/flags:go_default_library",
"//config/features:go_default_library",
"//io/prompt:go_default_library",
"//proto/prysm/v1alpha1:go_default_library",
"//runtime/tos:go_default_library",
"//validator/accounts:go_default_library",
"//validator/accounts/iface:go_default_library",
@@ -30,11 +28,9 @@ go_library(
"//validator/keymanager/local:go_default_library",
"//validator/keymanager/remote-web3signer:go_default_library",
"//validator/node:go_default_library",
"@com_github_golang_protobuf//ptypes/empty",
"@com_github_pkg_errors//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_urfave_cli_v2//:go_default_library",
"@org_golang_google_grpc//:go_default_library",
],
)

View File

@@ -4,12 +4,9 @@ import (
"io"
"strings"
"github.com/golang/protobuf/ptypes/empty"
"github.com/pkg/errors"
grpcutil "github.com/prysmaticlabs/prysm/v5/api/grpc"
"github.com/prysmaticlabs/prysm/v5/cmd"
"github.com/prysmaticlabs/prysm/v5/cmd/validator/flags"
ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1"
"github.com/prysmaticlabs/prysm/v5/validator/accounts"
"github.com/prysmaticlabs/prysm/v5/validator/accounts/wallet"
"github.com/prysmaticlabs/prysm/v5/validator/client"
@@ -17,7 +14,6 @@ import (
"github.com/prysmaticlabs/prysm/v5/validator/keymanager/local"
"github.com/prysmaticlabs/prysm/v5/validator/node"
"github.com/urfave/cli/v2"
"google.golang.org/grpc"
)
func Exit(c *cli.Context, r io.Reader) error {
@@ -47,24 +43,10 @@ func Exit(c *cli.Context, r io.Reader) error {
}
w = &wallet.Wallet{}
} else if c.IsSet(flags.Web3SignerURLFlag.Name) {
ctx := grpcutil.AppendHeaders(c.Context, grpcHeaders)
conn, err := grpc.DialContext(ctx, beaconRPCProvider, dialOpts...)
if err != nil {
return errors.Wrapf(err, "could not dial endpoint %s", beaconRPCProvider)
}
nodeClient := ethpb.NewNodeClient(conn)
resp, err := nodeClient.GetGenesis(c.Context, &empty.Empty{})
if err != nil {
return errors.Wrapf(err, "failed to get genesis info")
}
if err := conn.Close(); err != nil {
log.WithError(err).Error("Failed to close connection")
}
config, err := node.Web3SignerConfig(c)
if err != nil {
return errors.Wrapf(err, "could not configure remote signer")
}
config.GenesisValidatorsRoot = resp.GenesisValidatorsRoot
w, km, err = walletWithWeb3SignerKeymanager(c, config)
if err != nil {
return err

View File

@@ -88,11 +88,8 @@ func TestWalletWithKeymanager_web3signer(t *testing.T) {
require.NoError(t, set.Set(flags.Web3SignerURLFlag.Name, "http://localhost:12345"))
require.NoError(t, set.Set(flags.Web3SignerPublicValidatorKeysFlag.Name, "0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"))
ctx := cli.NewContext(&app, set, nil)
bytes, err := hexutil.Decode("0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2")
require.NoError(t, err)
config, err := node.Web3SignerConfig(ctx)
require.NoError(t, err)
config.GenesisValidatorsRoot = bytes
w, k, err := walletWithWeb3SignerKeymanager(ctx, config)
require.NoError(t, err)
keys, err := k.FetchValidatingPublicKeys(ctx.Context)

View File

@@ -14,7 +14,6 @@ go_library(
],
deps = [
"//cmd/validator/flags:go_default_library",
"//encoding/bytesutil:go_default_library",
"//io/file:go_default_library",
"//io/prompt:go_default_library",
"//validator/accounts/iface:go_default_library",
@@ -41,7 +40,6 @@ go_test(
"//validator/accounts/iface:go_default_library",
"//validator/keymanager:go_default_library",
"//validator/keymanager/remote-web3signer:go_default_library",
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_urfave_cli_v2//:go_default_library",
],

View File

@@ -10,7 +10,6 @@ import (
"github.com/pkg/errors"
"github.com/prysmaticlabs/prysm/v5/cmd/validator/flags"
"github.com/prysmaticlabs/prysm/v5/encoding/bytesutil"
"github.com/prysmaticlabs/prysm/v5/io/file"
"github.com/prysmaticlabs/prysm/v5/io/prompt"
"github.com/prysmaticlabs/prysm/v5/validator/accounts/iface"
@@ -350,16 +349,7 @@ func (w *Wallet) InitializeKeymanager(ctx context.Context, cfg iface.InitKeymana
return nil, errors.Wrap(err, "could not initialize derived keymanager")
}
case keymanager.Web3Signer:
config := cfg.Web3SignerConfig
if config == nil {
return nil, errors.New("web3signer config is nil")
}
// TODO(9883): future work needs to address how initialize keymanager is called for web3signer.
// an error may be thrown for genesis validators root for some InitializeKeymanager calls.
if !bytesutil.IsValidRoot(config.GenesisValidatorsRoot) {
return nil, errors.New("web3signer requires a genesis validators root value")
}
km, err = remoteweb3signer.NewKeymanager(ctx, config)
km, err = remoteweb3signer.NewKeymanager(ctx, cfg.Web3SignerConfig)
if err != nil {
return nil, errors.Wrap(err, "could not initialize web3signer keymanager")
}

View File

@@ -9,7 +9,6 @@ import (
"reflect"
"testing"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/prysmaticlabs/prysm/v5/cmd/validator/flags"
"github.com/prysmaticlabs/prysm/v5/config/params"
"github.com/prysmaticlabs/prysm/v5/testing/assert"
@@ -67,13 +66,10 @@ func TestWallet_InitializeKeymanager_web3Signer_HappyPath(t *testing.T) {
set.String(flags.WalletDirFlag.Name, newDir, "")
w := wallet.NewWalletForWeb3Signer(cli.NewContext(&app, set, nil))
ctx := context.Background()
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
config := iface.InitKeymanagerConfig{
ListenForChanges: false,
Web3SignerConfig: &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://localhost:8545",
GenesisValidatorsRoot: root,
BaseEndpoint: "http://localhost:8545",
},
}
km, err := w.InitializeKeymanager(ctx, config)

View File

@@ -136,11 +136,6 @@ func (v *validator) WaitForKeymanagerInitialization(ctx context.Context) error {
ctx, span := trace.StartSpan(ctx, "validator.WaitForKeymanagerInitialization")
defer span.End()
genesisRoot, err := v.db.GenesisValidatorsRoot(ctx)
if err != nil {
return errors.Wrap(err, "unable to retrieve valid genesis validators root while initializing key manager")
}
if v.useWeb && v.wallet == nil {
log.Info("Waiting for keymanager to initialize validator client with web UI")
// if wallet is not set, wait for it to be set through the UI
@@ -159,9 +154,6 @@ func (v *validator) WaitForKeymanagerInitialization(ctx context.Context) error {
} else if v.wallet == nil {
return errors.New("wallet not set")
} else {
if v.web3SignerConfig != nil {
v.web3SignerConfig.GenesisValidatorsRoot = genesisRoot
}
keyManager, err := v.wallet.InitializeKeymanager(ctx, accountsiface.InitKeymanagerConfig{ListenForChanges: true, Web3SignerConfig: v.web3SignerConfig})
if err != nil {
return errors.Wrap(err, "could not initialize key manager")

View File

@@ -15,6 +15,7 @@ go_library(
deps = [
"//async/event:go_default_library",
"//config/fieldparams:go_default_library",
"//config/params:go_default_library",
"//crypto/bls:go_default_library",
"//encoding/bytesutil:go_default_library",
"//io/file:go_default_library",

View File

@@ -19,6 +19,7 @@ import (
"github.com/pkg/errors"
"github.com/prysmaticlabs/prysm/v5/async/event"
fieldparams "github.com/prysmaticlabs/prysm/v5/config/fieldparams"
"github.com/prysmaticlabs/prysm/v5/config/params"
"github.com/prysmaticlabs/prysm/v5/crypto/bls"
"github.com/prysmaticlabs/prysm/v5/encoding/bytesutil"
"github.com/prysmaticlabs/prysm/v5/io/file"
@@ -41,9 +42,8 @@ const (
// a keymanager, such as passwords, the wallet, and more.
// Web3Signer contains one public keys option. Either through a URL or a static key list.
type SetupConfig struct {
KeyFilePath string
BaseEndpoint string
GenesisValidatorsRoot []byte
KeyFilePath string
BaseEndpoint string
// Either URL or keylist must be set.
// If the URL is set, the keymanager will fetch the public keys from the URL.
@@ -73,8 +73,11 @@ type Keymanager struct {
func NewKeymanager(ctx context.Context, cfg *SetupConfig) (*Keymanager, error) {
ctx, span := trace.StartSpan(ctx, "remote-keymanager.NewKeymanager")
defer span.End()
if cfg.BaseEndpoint == "" || !bytesutil.IsValidRoot(cfg.GenesisValidatorsRoot) {
return nil, fmt.Errorf("invalid setup config, one or more configs are empty: BaseEndpoint: %v, GenesisValidatorsRoot: %#x", cfg.BaseEndpoint, cfg.GenesisValidatorsRoot)
if cfg == nil {
return nil, errors.New("web3signer config is nil")
}
if cfg.BaseEndpoint == "" {
return nil, fmt.Errorf("invalid setup config, one or more configs are empty: BaseEndpoint: %v", cfg.BaseEndpoint)
}
client, err := internal.NewApiClient(cfg.BaseEndpoint)
if err != nil {
@@ -83,7 +86,7 @@ func NewKeymanager(ctx context.Context, cfg *SetupConfig) (*Keymanager, error) {
km := &Keymanager{
client: internal.HttpSignerClient(client),
genesisValidatorsRoot: cfg.GenesisValidatorsRoot,
genesisValidatorsRoot: params.BeaconConfig().GenesisValidatorsRoot[:],
accountsChangedFeed: new(event.Feed),
validator: validator.New(),
retriesRemaining: maxRetries,

View File

@@ -51,10 +51,6 @@ func TestNewKeymanager(t *testing.T) {
err := json.NewEncoder(w).Encode([]string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"})
require.NoError(t, err)
}))
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
tests := []struct {
name string
args *SetupConfig
@@ -66,54 +62,48 @@ func TestNewKeymanager(t *testing.T) {
{
name: "happy path public key url",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
PublicKeysURL: srv.URL + "/public_keys",
BaseEndpoint: "http://prysm.xyz/",
PublicKeysURL: srv.URL + "/public_keys",
},
want: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
},
{
name: "bad public key url",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
PublicKeysURL: "0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69",
BaseEndpoint: "http://prysm.xyz/",
PublicKeysURL: "0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69",
},
wantErr: "could not get public keys from remote server URL",
},
{
name: "happy path provided public keys",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
BaseEndpoint: "http://prysm.xyz/",
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
},
want: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
},
{
name: "path provided public keys, some bad key",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820", "http://prysm.xyz/"},
BaseEndpoint: "http://prysm.xyz/",
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820", "http://prysm.xyz/"},
},
wantErr: "could not decode public key",
},
{
name: "path provided public keys, some bad hex for key",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937"},
BaseEndpoint: "http://prysm.xyz/",
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937"},
},
wantErr: "has invalid length",
},
{
name: "happy path key file",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
KeyFilePath: filepath.Join(t.TempDir(), "good_keyfile.txt"),
BaseEndpoint: "http://prysm.xyz/",
KeyFilePath: filepath.Join(t.TempDir(), "good_keyfile.txt"),
},
fileContents: []string{"8000a9a6d3f5e22d783eefaadbcf0298146adb5d95b04db910a0d4e16976b30229d0b1e7b9cda6c7e0bfa11f72efe055", "0x800057e262bfe42413c2cfce948ff77f11efeea19721f590c8b5b2f32fecb0e164cafba987c80465878408d05b97c9be"},
want: []string{"0x8000a9a6d3f5e22d783eefaadbcf0298146adb5d95b04db910a0d4e16976b30229d0b1e7b9cda6c7e0bfa11f72efe055", "0x800057e262bfe42413c2cfce948ff77f11efeea19721f590c8b5b2f32fecb0e164cafba987c80465878408d05b97c9be"},
@@ -121,10 +111,9 @@ func TestNewKeymanager(t *testing.T) {
{
name: "happy path public key url with good keyfile",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
PublicKeysURL: srv.URL + "/public_keys",
KeyFilePath: filepath.Join(t.TempDir(), "good_keyfile.txt"),
BaseEndpoint: "http://prysm.xyz/",
PublicKeysURL: srv.URL + "/public_keys",
KeyFilePath: filepath.Join(t.TempDir(), "good_keyfile.txt"),
},
fileContents: []string{"0x8000a9a6d3f5e22d783eefaadbcf0298146adb5d95b04db910a0d4e16976b30229d0b1e7b9cda6c7e0bfa11f72efe055", "800057e262bfe42413c2cfce948ff77f11efeea19721f590c8b5b2f32fecb0e164cafba987c80465878408d05b97c9be"},
want: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820", "0x8000a9a6d3f5e22d783eefaadbcf0298146adb5d95b04db910a0d4e16976b30229d0b1e7b9cda6c7e0bfa11f72efe055", "0x800057e262bfe42413c2cfce948ff77f11efeea19721f590c8b5b2f32fecb0e164cafba987c80465878408d05b97c9be"},
@@ -132,9 +121,8 @@ func TestNewKeymanager(t *testing.T) {
{
name: "happy path provided public keys with good keyfile",
args: &SetupConfig{
BaseEndpoint: "http://prysm.xyz/",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
BaseEndpoint: "http://prysm.xyz/",
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
},
want: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820", "0x8000a9a6d3f5e22d783eefaadbcf0298146adb5d95b04db910a0d4e16976b30229d0b1e7b9cda6c7e0bfa11f72efe055", "0x800057e262bfe42413c2cfce948ff77f11efeea19721f590c8b5b2f32fecb0e164cafba987c80465878408d05b97c9be"},
},
@@ -152,7 +140,7 @@ func TestNewKeymanager(t *testing.T) {
_, err = bytesBuf.WriteString("\n")
require.NoError(t, err)
}
err = file.WriteFile(tt.args.KeyFilePath, bytesBuf.Bytes())
err := file.WriteFile(tt.args.KeyFilePath, bytesBuf.Bytes())
require.NoError(t, err)
}
@@ -175,13 +163,10 @@ func TestNewKeymanager(t *testing.T) {
func TestNewKeyManager_fileMissing(t *testing.T) {
keyFilePath := filepath.Join(t.TempDir(), "keyfile.txt")
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
_, err = NewKeymanager(context.TODO(), &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
KeyFilePath: keyFilePath,
ProvidedPublicKeys: []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6"},
_, err := NewKeymanager(context.TODO(), &SetupConfig{
BaseEndpoint: "http://example.com",
KeyFilePath: keyFilePath,
ProvidedPublicKeys: []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6"},
})
require.ErrorContains(t, "no file exists in remote signer key file path", err)
}
@@ -203,13 +188,10 @@ func TestNewKeyManager_ChangingFileCreated(t *testing.T) {
err = file.WriteFile(keyFilePath, bytesBuf.Bytes())
require.NoError(t, err)
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
km, err := NewKeymanager(ctx, &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
KeyFilePath: keyFilePath,
ProvidedPublicKeys: []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6"},
BaseEndpoint: "http://example.com",
KeyFilePath: keyFilePath,
ProvidedPublicKeys: []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6"},
})
require.NoError(t, err)
wantSlice := []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6", "0x8000a9a6d3f5e22d783eefaadbcf0298146adb5d95b04db910a0d4e16976b30229d0b1e7b9cda6c7e0bfa11f72efe055", "0x800057e262bfe42413c2cfce948ff77f11efeea19721f590c8b5b2f32fecb0e164cafba987c80465878408d05b97c9be"}
@@ -252,13 +234,10 @@ func TestNewKeyManager_FileAndFlagsWithDifferentKeys(t *testing.T) {
err = file.WriteFile(keyFilePath, bytesBuf.Bytes())
require.NoError(t, err)
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
km, err := NewKeymanager(ctx, &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
KeyFilePath: keyFilePath,
ProvidedPublicKeys: []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6"},
BaseEndpoint: "http://example.com",
KeyFilePath: keyFilePath,
ProvidedPublicKeys: []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6"},
})
require.NoError(t, err)
wantSlice := []string{"0x800077e04f8d7496099b3d30ac5430aea64873a45e5bcfe004d2095babcbf55e21138ff0d5691abc29da190aa32755c6",
@@ -290,14 +269,10 @@ func TestNewKeyManager_FileAndFlagsWithDifferentKeys(t *testing.T) {
func TestRefreshRemoteKeysFromFileChangesWithRetry(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
logHook := logTest.NewGlobal()
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
keyFilePath := filepath.Join(t.TempDir(), "keyfile.txt")
require.NoError(t, err)
km, err := NewKeymanager(ctx, &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
BaseEndpoint: "http://example.com",
})
require.NoError(t, err)
go func() {
@@ -324,13 +299,8 @@ func TestRefreshRemoteKeysFromFileChangesWithRetry(t *testing.T) {
}
func TestReadKeyFile_PathMissing(t *testing.T) {
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
require.NoError(t, err)
km, err := NewKeymanager(context.TODO(), &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
BaseEndpoint: "http://example.com",
})
require.NoError(t, err)
_, _, err = km.readKeyFile()
@@ -339,14 +309,9 @@ func TestReadKeyFile_PathMissing(t *testing.T) {
func TestRefreshRemoteKeysFromFileChangesWithRetry_maxRetryReached(t *testing.T) {
ctx := context.Background()
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
keyFilePath := filepath.Join(t.TempDir(), "keyfile.txt")
require.NoError(t, err)
km, err := NewKeymanager(ctx, &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
BaseEndpoint: "http://example.com",
})
require.NoError(t, err)
km.keyFilePath = keyFilePath
@@ -360,14 +325,9 @@ func TestKeymanager_Sign(t *testing.T) {
Signature: "0xb3baa751d0a9132cfe93e4e3d5ff9075111100e3789dca219ade5a24d27e19d16b3353149da1833e9b691bb38634e8dc04469be7032132906c927d7e1a49b414730612877bc6b2810c8f202daf793d1ab0d6b5cb21d52f9e52e883859887a5d9",
}
ctx := context.Background()
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
PublicKeysURL: "http://example2.com/api/v1/eth2/publicKeys",
BaseEndpoint: "http://example.com",
PublicKeysURL: "http://example2.com/api/v1/eth2/publicKeys",
}
km, err := NewKeymanager(ctx, config)
if err != nil {
@@ -500,12 +460,9 @@ func TestKeymanager_FetchValidatingPublicKeys_HappyPath_WithKeyList(t *testing.T
keys := [][48]byte{
bytesutil.ToBytes48(decodedKey),
}
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
require.NoError(t, err)
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
BaseEndpoint: "http://example.com",
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
}
km, err := NewKeymanager(ctx, config)
if err != nil {
@@ -529,10 +486,6 @@ func TestKeymanager_FetchValidatingPublicKeys_HappyPath_WithExternalURL(t *testi
keys := [][48]byte{
bytesutil.ToBytes48(decodedKey),
}
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Header().Set("Content-Type", "application/json")
@@ -541,9 +494,8 @@ func TestKeymanager_FetchValidatingPublicKeys_HappyPath_WithExternalURL(t *testi
}))
defer srv.Close()
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
PublicKeysURL: srv.URL + "/api/v1/eth2/publicKeys",
BaseEndpoint: "http://example.com",
PublicKeysURL: srv.URL + "/api/v1/eth2/publicKeys",
}
km, err := NewKeymanager(ctx, config)
if err != nil {
@@ -564,14 +516,9 @@ func TestKeymanager_FetchValidatingPublicKeys_WithExternalURL_ThrowsError(t *tes
}))
defer srv.Close()
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
PublicKeysURL: srv.URL + "/api/v1/eth2/publicKeys",
BaseEndpoint: "http://example.com",
PublicKeysURL: srv.URL + "/api/v1/eth2/publicKeys",
}
km, err := NewKeymanager(ctx, config)
require.ErrorContains(t, fmt.Sprintf("could not get public keys from remote server URL %s/api/v1/eth2/publicKeys", srv.URL), err)
@@ -580,13 +527,8 @@ func TestKeymanager_FetchValidatingPublicKeys_WithExternalURL_ThrowsError(t *tes
func TestKeymanager_AddPublicKeys(t *testing.T) {
ctx := context.Background()
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
BaseEndpoint: "http://example.com",
}
km, err := NewKeymanager(ctx, config)
if err != nil {
@@ -613,14 +555,9 @@ func TestKeymanager_AddPublicKeys_WithFile(t *testing.T) {
require.NoError(t, err)
require.NoError(t, stdOutFile.Chmod(os.FileMode(0600)))
keyFilePath := filepath.Join(dir, "keyfile.txt")
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
KeyFilePath: keyFilePath,
BaseEndpoint: "http://example.com",
KeyFilePath: keyFilePath,
}
km, err := NewKeymanager(ctx, config)
if err != nil {
@@ -645,13 +582,8 @@ func TestKeymanager_AddPublicKeys_WithFile(t *testing.T) {
func TestKeymanager_DeletePublicKeys(t *testing.T) {
ctx := context.Background()
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
BaseEndpoint: "http://example.com",
}
km, err := NewKeymanager(ctx, config)
if err != nil {
@@ -685,14 +617,9 @@ func TestKeymanager_DeletePublicKeys_WithFile(t *testing.T) {
require.NoError(t, err)
require.NoError(t, stdOutFile.Chmod(os.FileMode(0600)))
keyFilePath := filepath.Join(dir, "keyfile.txt")
root, err := hexutil.Decode("0x270d43e74ce340de4bca2b1936beca0f4f5408d9e78aec4850920baf659d5b69")
if err != nil {
fmt.Printf("error: %v", err)
}
config := &SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
KeyFilePath: keyFilePath,
BaseEndpoint: "http://example.com",
KeyFilePath: keyFilePath,
}
km, err := NewKeymanager(ctx, config)
if err != nil {

View File

@@ -529,8 +529,7 @@ func Web3SignerConfig(cliCtx *cli.Context) (*remoteweb3signer.SetupConfig, error
return nil, fmt.Errorf("web3signer url must be in the format of http(s)://host:port url used: %v", urlStr)
}
web3signerConfig = &remoteweb3signer.SetupConfig{
BaseEndpoint: u.String(),
GenesisValidatorsRoot: nil,
BaseEndpoint: u.String(),
}
if cliCtx.IsSet(flags.WalletPasswordFileFlag.Name) {
log.Warnf("%s was provided while using web3signer and will be ignored", flags.WalletPasswordFileFlag.Name)

View File

@@ -228,9 +228,8 @@ func TestWeb3SignerConfig(t *testing.T) {
"0xb89bebc699769726a318c8e9971bd3171297c61aea4a6578a7a4f94b547dcba5bac16a89108b6b6a1fe3695d1a874a0b"},
},
want: &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://localhost:8545",
GenesisValidatorsRoot: nil,
PublicKeysURL: "",
BaseEndpoint: "http://localhost:8545",
PublicKeysURL: "",
ProvidedPublicKeys: []string{
"0xa99a76ed7796f7be22d5b7e85deeb7c5677e88e511e0b337618f8c4eb61349b4bf2d153f649f7b53359fe8b94a38e44c",
"0xb89bebc699769726a318c8e9971bd3171297c61aea4a6578a7a4f94b547dcba5bac16a89108b6b6a1fe3695d1a874a0b",
@@ -244,10 +243,9 @@ func TestWeb3SignerConfig(t *testing.T) {
publicKeysOrURLs: []string{"http://localhost:8545/api/v1/eth2/publicKeys"},
},
want: &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://localhost:8545",
GenesisValidatorsRoot: nil,
PublicKeysURL: "http://localhost:8545/api/v1/eth2/publicKeys",
ProvidedPublicKeys: nil,
BaseEndpoint: "http://localhost:8545",
PublicKeysURL: "http://localhost:8545/api/v1/eth2/publicKeys",
ProvidedPublicKeys: nil,
},
},
{

View File

@@ -350,12 +350,9 @@ func TestServer_ImportKeystores_WrongKeymanagerKind(t *testing.T) {
require.NoError(t, os.MkdirAll(newDir, 0700))
set.String(flags.WalletDirFlag.Name, newDir, "")
w := wallet.NewWalletForWeb3Signer(cli.NewContext(&app, set, nil))
root := make([]byte, fieldparams.RootLength)
root[0] = 1
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false, Web3SignerConfig: &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
BaseEndpoint: "http://example.com",
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
}})
require.NoError(t, err)
vs, err := client.NewValidatorService(ctx, &client.Config{
@@ -633,13 +630,10 @@ func TestServer_DeleteKeystores_WrongKeymanagerKind(t *testing.T) {
require.NoError(t, os.MkdirAll(newDir, 0700))
set.String(flags.WalletDirFlag.Name, newDir, "")
w := wallet.NewWalletForWeb3Signer(cli.NewContext(&app, set, nil))
root := make([]byte, fieldparams.RootLength)
root[0] = 1
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false,
Web3SignerConfig: &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
BaseEndpoint: "http://example.com",
ProvidedPublicKeys: []string{"0xa2b5aaad9c6efefe7bb9b1243a043404f3362937cfb6b31833929833173f476630ea2cfeb0d9ddf15f97ca8685948820"},
}})
require.NoError(t, err)
vs, err := client.NewValidatorService(ctx, &client.Config{
@@ -1329,12 +1323,9 @@ func TestServer_ListRemoteKeys(t *testing.T) {
newDir := filepath.Join(t.TempDir(), "new")
set.String(flags.WalletDirFlag.Name, newDir, "")
w := wallet.NewWalletForWeb3Signer(cli.NewContext(&app, set, nil))
root := make([]byte, fieldparams.RootLength)
root[0] = 1
config := &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"},
BaseEndpoint: "http://example.com",
ProvidedPublicKeys: []string{"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"},
}
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false, Web3SignerConfig: config})
require.NoError(t, err)
@@ -1375,12 +1366,9 @@ func TestServer_ImportRemoteKeys(t *testing.T) {
newDir := filepath.Join(t.TempDir(), "new")
set.String(flags.WalletDirFlag.Name, newDir, "")
w := wallet.NewWalletForWeb3Signer(cli.NewContext(&app, set, nil))
root := make([]byte, fieldparams.RootLength)
root[0] = 1
config := &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: nil,
BaseEndpoint: "http://example.com",
ProvidedPublicKeys: nil,
}
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false, Web3SignerConfig: config})
require.NoError(t, err)
@@ -1436,13 +1424,10 @@ func TestServer_DeleteRemoteKeys(t *testing.T) {
newDir := filepath.Join(t.TempDir(), "new")
set.String(flags.WalletDirFlag.Name, newDir, "")
w := wallet.NewWalletForWeb3Signer(cli.NewContext(&app, set, nil))
root := make([]byte, fieldparams.RootLength)
root[0] = 1
pkey := "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
config := &remoteweb3signer.SetupConfig{
BaseEndpoint: "http://example.com",
GenesisValidatorsRoot: root,
ProvidedPublicKeys: []string{pkey},
BaseEndpoint: "http://example.com",
ProvidedPublicKeys: []string{pkey},
}
km, err := w.InitializeKeymanager(ctx, iface.InitKeymanagerConfig{ListenForChanges: false, Web3SignerConfig: config})
require.NoError(t, err)