mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 13:28:01 -05:00
Compare commits
7 Commits
ba2333069a
...
web3signer
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b492f8e62f | ||
|
|
2df96657a2 | ||
|
|
d344075274 | ||
|
|
b3ccaf4de0 | ||
|
|
45dcf1f1d4 | ||
|
|
906f35badc | ||
|
|
18d21ab3e3 |
@@ -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.
|
||||
|
||||
@@ -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",
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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",
|
||||
],
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user