feat(waku2)_: allow using an env variable to set the node's key (#5152)
This commit is contained in:
parent
9e0fb30f8d
commit
82ae41f6d5
|
@ -54,7 +54,7 @@ func (s *MessengerRawMessageResendTest) SetupTest() {
|
|||
UseShardAsDefaultTopic: true,
|
||||
DefaultShardPubsubTopic: shard.DefaultShardPubsubTopic(),
|
||||
}
|
||||
s.exchangeBootNode, err = wakuv2.New("", "", exchangeNodeConfig, logger.Named("pxServerNode"), nil, nil, nil, nil)
|
||||
s.exchangeBootNode, err = wakuv2.New(nil, "", exchangeNodeConfig, logger.Named("pxServerNode"), nil, nil, nil, nil)
|
||||
s.Require().NoError(err)
|
||||
s.Require().NoError(s.exchangeBootNode.Start())
|
||||
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package node
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
|
@ -13,6 +15,7 @@ import (
|
|||
"github.com/status-im/status-go/signal"
|
||||
"github.com/status-im/status-go/transactions"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||
"github.com/ethereum/go-ethereum/event"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
gethrpc "github.com/ethereum/go-ethereum/rpc"
|
||||
|
@ -20,6 +23,7 @@ import (
|
|||
"github.com/status-im/status-go/appmetrics"
|
||||
"github.com/status-im/status-go/common"
|
||||
gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
|
||||
"github.com/status-im/status-go/eth-node/crypto"
|
||||
"github.com/status-im/status-go/eth-node/types"
|
||||
"github.com/status-im/status-go/logutils"
|
||||
"github.com/status-im/status-go/mailserver"
|
||||
|
@ -347,7 +351,29 @@ func (b *StatusNode) wakuV2Service(nodeConfig *params.NodeConfig, telemetryServe
|
|||
cfg.MaxMessageSize = nodeConfig.WakuV2Config.MaxMessageSize
|
||||
}
|
||||
|
||||
w, err := wakuv2.New(nodeConfig.NodeKey, nodeConfig.ClusterConfig.Fleet, cfg, logutils.ZapLogger(), b.appDB, b.timeSource(), signal.SendHistoricMessagesRequestFailed, signal.SendPeerStats)
|
||||
var nodeKey *ecdsa.PrivateKey
|
||||
var err error
|
||||
if nodeConfig.NodeKey != "" {
|
||||
nodeKey, err = crypto.HexToECDSA(nodeConfig.NodeKey)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not convert nodekey into a valid private key: %v", err)
|
||||
}
|
||||
} else {
|
||||
nodeKeyStr := os.Getenv("WAKUV2_NODE_KEY")
|
||||
if nodeKeyStr != "" {
|
||||
nodeKeyBytes, err := hexutil.Decode(nodeKeyStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to decode the go-waku private key: %v", err)
|
||||
}
|
||||
|
||||
nodeKey, err = crypto.ToECDSA(nodeKeyBytes)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not convert nodekey into a valid private key: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
w, err := wakuv2.New(nodeKey, nodeConfig.ClusterConfig.Fleet, cfg, logutils.ZapLogger(), b.appDB, b.timeSource(), signal.SendHistoricMessagesRequestFailed, signal.SendPeerStats)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -44,7 +44,7 @@ func NewTestWakuV2(s *suite.Suite, cfg testWakuV2Config) *waku2.Waku {
|
|||
}
|
||||
|
||||
wakuNode, err := waku2.New(
|
||||
"",
|
||||
nil,
|
||||
"",
|
||||
wakuConfig,
|
||||
cfg.logger,
|
||||
|
|
|
@ -30,7 +30,7 @@ import (
|
|||
)
|
||||
|
||||
func TestMultipleTopicCopyInNewMessageFilter(t *testing.T) {
|
||||
w, err := New("", "", nil, nil, nil, nil, nil, nil)
|
||||
w, err := New(nil, "", nil, nil, nil, nil, nil, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("Error creating WakuV2 client: %v", err)
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@ func newTTLCache() *ttlcache.Cache[gethcommon.Hash, *common.ReceivedMessage] {
|
|||
}
|
||||
|
||||
// New creates a WakuV2 client ready to communicate through the LibP2P network.
|
||||
func New(nodeKey string, fleet string, cfg *Config, logger *zap.Logger, appDB *sql.DB, ts *timesource.NTPTimeSource, onHistoricMessagesRequestFailed func([]byte, peer.ID, error), onPeerStats func(types.ConnStatus)) (*Waku, error) {
|
||||
func New(nodeKey *ecdsa.PrivateKey, fleet string, cfg *Config, logger *zap.Logger, appDB *sql.DB, ts *timesource.NTPTimeSource, onHistoricMessagesRequestFailed func([]byte, peer.ID, error), onPeerStats func(types.ConnStatus)) (*Waku, error) {
|
||||
var err error
|
||||
if logger == nil {
|
||||
logger, err = zap.NewDevelopment()
|
||||
|
@ -216,16 +216,12 @@ func New(nodeKey string, fleet string, cfg *Config, logger *zap.Logger, appDB *s
|
|||
waku.filters = common.NewFilters(waku.cfg.DefaultShardPubsubTopic, waku.logger)
|
||||
waku.bandwidthCounter = metrics.NewBandwidthCounter()
|
||||
|
||||
var privateKey *ecdsa.PrivateKey
|
||||
if nodeKey != "" {
|
||||
privateKey, err = crypto.HexToECDSA(nodeKey)
|
||||
} else {
|
||||
// If no nodekey is provided, create an ephemeral key
|
||||
privateKey, err = crypto.GenerateKey()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to setup the go-waku private key: %v", err)
|
||||
if nodeKey == nil {
|
||||
// No nodekey is provided, create an ephemeral key
|
||||
nodeKey, err = crypto.GenerateKey()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to generate a random go-waku private key: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
hostAddr, err := net.ResolveTCPAddr("tcp", fmt.Sprint(cfg.Host, ":", cfg.Port))
|
||||
|
@ -243,7 +239,7 @@ func New(nodeKey string, fleet string, cfg *Config, logger *zap.Logger, appDB *s
|
|||
|
||||
opts := []node.WakuNodeOption{
|
||||
node.WithLibP2POptions(libp2pOpts...),
|
||||
node.WithPrivateKey(privateKey),
|
||||
node.WithPrivateKey(nodeKey),
|
||||
node.WithHostAddress(hostAddr),
|
||||
node.WithTopicHealthStatusChannel(waku.topicHealthStatusChan),
|
||||
node.WithKeepAlive(time.Duration(cfg.KeepAliveInterval) * time.Second),
|
||||
|
|
|
@ -42,7 +42,7 @@ func TestDiscoveryV5(t *testing.T) {
|
|||
config.EnableDiscV5 = true
|
||||
config.DiscV5BootstrapNodes = []string{testENRBootstrap}
|
||||
config.DiscoveryLimit = 20
|
||||
w, err := New("", "", config, nil, nil, nil, nil, nil)
|
||||
w, err := New(nil, "", config, nil, nil, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, w.Start())
|
||||
|
@ -67,7 +67,7 @@ func TestRestartDiscoveryV5(t *testing.T) {
|
|||
config.DiscV5BootstrapNodes = []string{"enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@1.1.1.2"}
|
||||
config.DiscoveryLimit = 20
|
||||
config.UDPPort = 9002
|
||||
w, err := New("", "", config, nil, nil, nil, nil, nil)
|
||||
w, err := New(nil, "", config, nil, nil, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, w.Start())
|
||||
|
@ -120,7 +120,7 @@ func TestBasicWakuV2(t *testing.T) {
|
|||
config.DiscV5BootstrapNodes = []string{enrTreeAddress}
|
||||
config.DiscoveryLimit = 20
|
||||
config.WakuNodes = []string{enrTreeAddress}
|
||||
w, err := New("", "", config, nil, nil, nil, nil, nil)
|
||||
w, err := New(nil, "", config, nil, nil, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, w.Start())
|
||||
|
||||
|
@ -229,7 +229,7 @@ func TestPeerExchange(t *testing.T) {
|
|||
config.EnableDiscV5 = true
|
||||
config.EnablePeerExchangeServer = true
|
||||
config.EnablePeerExchangeClient = false
|
||||
pxServerNode, err := New("", "", config, logger.Named("pxServerNode"), nil, nil, nil, nil)
|
||||
pxServerNode, err := New(nil, "", config, logger.Named("pxServerNode"), nil, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, pxServerNode.Start())
|
||||
|
||||
|
@ -241,7 +241,7 @@ func TestPeerExchange(t *testing.T) {
|
|||
config.EnablePeerExchangeServer = false
|
||||
config.EnablePeerExchangeClient = false
|
||||
config.DiscV5BootstrapNodes = []string{pxServerNode.node.ENR().String()}
|
||||
discV5Node, err := New("", "", config, logger.Named("discV5Node"), nil, nil, nil, nil)
|
||||
discV5Node, err := New(nil, "", config, logger.Named("discV5Node"), nil, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, discV5Node.Start())
|
||||
|
||||
|
@ -259,7 +259,7 @@ func TestPeerExchange(t *testing.T) {
|
|||
config.Resolver = resolver
|
||||
|
||||
config.WakuNodes = []string{url}
|
||||
lightNode, err := New("", "", config, logger.Named("lightNode"), nil, nil, nil, nil)
|
||||
lightNode, err := New(nil, "", config, logger.Named("lightNode"), nil, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, lightNode.Start())
|
||||
|
||||
|
@ -301,7 +301,7 @@ func TestWakuV2Filter(t *testing.T) {
|
|||
config.DiscoveryLimit = 20
|
||||
config.WakuNodes = []string{enrTreeAddress}
|
||||
fleet := "status.test" // Need a name fleet so that LightClient is not set to false
|
||||
w, err := New("", fleet, config, nil, nil, nil, nil, nil)
|
||||
w, err := New(nil, fleet, config, nil, nil, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, w.Start())
|
||||
|
||||
|
@ -390,7 +390,7 @@ func TestWakuV2Store(t *testing.T) {
|
|||
w1PeersCh := make(chan []string, 100) // buffered not to block on the send side
|
||||
|
||||
// Start the first Waku node
|
||||
w1, err := New("", "", config1, nil, nil, nil, nil, func(cs types.ConnStatus) {
|
||||
w1, err := New(nil, "", config1, nil, nil, nil, nil, func(cs types.ConnStatus) {
|
||||
w1PeersCh <- maps.Keys(cs.Peers)
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
@ -414,7 +414,7 @@ func TestWakuV2Store(t *testing.T) {
|
|||
}
|
||||
|
||||
// Start the second Waku node
|
||||
w2, err := New("", "", config2, nil, sql2, nil, nil, nil)
|
||||
w2, err := New(nil, "", config2, nil, sql2, nil, nil, nil)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, w2.Start())
|
||||
w2EnvelopeCh := make(chan common.EnvelopeEvent, 100)
|
||||
|
|
Loading…
Reference in New Issue