Skip to content

Commit

Permalink
Update nimbus light client integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Vitaliy Vlasov authored and vitvly committed Feb 10, 2024
1 parent ec1238e commit a44e50b
Show file tree
Hide file tree
Showing 42 changed files with 901 additions and 4,844 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -419,10 +419,10 @@ migration-protocol: DEFAULT_PROTOCOL_PATH := protocol/migrations/sqlite
migration-protocol:
touch $(DEFAULT_PROTOCOL_PATH)/$(shell date +%s)_$(D).up.sql

PROXY_WRAPPER_PATH = $(CURDIR)/vendor/github.com/siphiuel/lc-proxy-wrapper
PROXY_WRAPPER_PATH = $(CURDIR)/vendor/github.com/vitvly/lc-proxy-wrapper
-include $(PROXY_WRAPPER_PATH)/Makefile.vars

#export VERIF_PROXY_OUT_PATH = $(CURDIR)/vendor/github.com/siphiuel/lc-proxy-wrapper
#export VERIF_PROXY_OUT_PATH = $(CURDIR)/vendor/github.com/vitvly/lc-proxy-wrapper
build-verif-proxy:
$(MAKE) -C $(NIMBUS_ETH1_PATH) libverifproxy

Expand Down
2 changes: 2 additions & 0 deletions api/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,8 @@ func defaultNodeConfig(installationID string, request *requests.CreateAccount) (

nodeConfig.Networks = BuildDefaultNetworks(request)

nodeConfig.NimbusProxyConfig.Enabled = false

return nodeConfig, nil
}

Expand Down
787 changes: 456 additions & 331 deletions appdatabase/migrations/bindata.go

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE node_config ADD COLUMN nimbus_proxy_enabled DEFAULT FALSE;
ALTER TABLE node_config ADD COLUMN nimbus_proxy_trusted_block_root VARCHAR NOT NULL DEFAULT "";
3 changes: 1 addition & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ require (
github.com/meirf/gopart v0.0.0-20180520194036-37e9492a85a8
github.com/mutecomm/go-sqlcipher/v4 v4.4.2
github.com/schollz/peerdiscovery v1.7.0
github.com/siphiuel/lc-proxy-wrapper v0.0.0-20230516150924-246507cee8c7
github.com/vitvly/lc-proxy-wrapper v0.0.0-20240210131537-0f48377f5a71
github.com/waku-org/go-waku v0.8.1-0.20240130093642-77ea359ef873
github.com/wk8/go-ordered-map/v2 v2.1.7
github.com/yeqown/go-qrcode/v2 v2.2.1
Expand All @@ -101,7 +101,6 @@ require (
)

require (
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/PuerkitoBio/goquery v1.6.1 // indirect
github.com/RoaringBitmap/roaring v0.9.4 // indirect
github.com/VictoriaMetrics/fastcache v1.6.0 // indirect
Expand Down
5 changes: 2 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/ClickHouse/clickhouse-go v1.4.3/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
Expand Down Expand Up @@ -1938,8 +1937,6 @@ github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4=
github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw=
github.com/siphiuel/lc-proxy-wrapper v0.0.0-20230516150924-246507cee8c7 h1:l7v5b3ghketKidVR6QjJlsgrrgzRnRRCc0lywjjONjQ=
github.com/siphiuel/lc-proxy-wrapper v0.0.0-20230516150924-246507cee8c7/go.mod h1:Cpir2acMsYVjrwbmRKN+2w1mYbBZdWwmoIyqc7x470U=
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
Expand Down Expand Up @@ -2097,6 +2094,8 @@ github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmF
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
github.com/vitvly/lc-proxy-wrapper v0.0.0-20240210131537-0f48377f5a71 h1:TeMNNsC6mh1CeR3jUQkeGMwQF7unSvCcd/QMMiHWX6o=
github.com/vitvly/lc-proxy-wrapper v0.0.0-20240210131537-0f48377f5a71/go.mod h1:GSbaCtfOEqcJRIYkoy+JC0Kh/ZHcQOfNSsVMzo+peno=
github.com/waku-org/go-discover v0.0.0-20240129014929-85f2c00b96a3 h1:Kk0KYXZE/uNnARF2TbCQyvyZ/w4SgF8VhquNdOVVsNU=
github.com/waku-org/go-discover v0.0.0-20240129014929-85f2c00b96a3/go.mod h1:eBHgM6T4EG0RZzxpxKy+rGz/6Dw2Nd8DWxS0lm9ESDw=
github.com/waku-org/go-libp2p-rendezvous v0.0.0-20230628220917-7b4e5ae4c0e7 h1:0e1h+p84yBp0IN7AqgbZlV7lgFBjm214lgSOE7CeJmE=
Expand Down
3 changes: 2 additions & 1 deletion node/get_status_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ func (n *StatusNode) setupRPCClient() (err error) {
if err != nil {
return
}
n.rpcClient, err = rpc.NewClient(gethNodeClient, n.config.NetworkID, n.config.UpstreamConfig, n.config.Networks, n.appDB)
n.rpcClient, err = rpc.NewClient(gethNodeClient, n.config.NetworkID, n.config.UpstreamConfig, n.config.Networks, n.config.NimbusProxyConfig.Enabled, n.appDB)
if err != nil {
return
}
Expand Down Expand Up @@ -461,6 +461,7 @@ func (n *StatusNode) stop() error {
return err
}

n.rpcClient.Close()
n.rpcClient = nil
// We need to clear `gethNode` because config is passed to `Start()`
// and may be completely different. Similarly with `config`.
Expand Down
14 changes: 10 additions & 4 deletions nodecfg/node_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ func insertNodeConfig(tx *sql.Tx, c *params.NodeConfig) error {
max_peers, max_pending_peers, enable_status_service, enable_ntp_sync,
bridge_enabled, wallet_enabled, local_notifications_enabled,
browser_enabled, permissions_enabled, mailservers_enabled,
swarm_enabled, mailserver_registry_address, web3provider_enabled, synthetic_id
swarm_enabled, mailserver_registry_address, web3provider_enabled, nimbus_proxy_enabled, nimbus_proxy_trusted_block_root, synthetic_id
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, 'id'
?, ?, ?, ?, ?, ?, ?, 'id'
)`,
c.NetworkID, c.DataDir, c.KeyStoreDir, c.NodeKey, c.NoDiscovery, c.Rendezvous,
c.ListenAddr, c.AdvertiseAddr, c.Name, c.Version, c.APIModules,
Expand All @@ -52,6 +52,7 @@ func insertNodeConfig(tx *sql.Tx, c *params.NodeConfig) error {
c.BridgeConfig.Enabled, c.WalletConfig.Enabled, c.LocalNotificationsConfig.Enabled,
c.BrowsersConfig.Enabled, c.PermissionsConfig.Enabled, c.MailserversConfig.Enabled,
c.SwarmConfig.Enabled, c.MailServerRegistryAddress, c.Web3ProviderConfig.Enabled,
c.NimbusProxyConfig.Enabled, c.NimbusProxyConfig.TrustedBlockRoot,
)
return err
}
Expand Down Expand Up @@ -449,14 +450,14 @@ func loadNodeConfig(tx *sql.Tx) (*params.NodeConfig, error) {
listen_addr, advertise_addr, name, version, api_modules, tls_enabled, max_peers, max_pending_peers,
enable_status_service, bridge_enabled, wallet_enabled, local_notifications_enabled,
browser_enabled, permissions_enabled, mailservers_enabled, swarm_enabled,
mailserver_registry_address, web3provider_enabled FROM node_config
mailserver_registry_address, web3provider_enabled, nimbus_proxy_enabled, nimbus_proxy_trusted_block_root FROM node_config
WHERE synthetic_id = 'id'
`).Scan(
&nodecfg.NetworkID, &nodecfg.DataDir, &nodecfg.KeyStoreDir, &nodecfg.NodeKey, &nodecfg.NoDiscovery, &nodecfg.Rendezvous,
&nodecfg.ListenAddr, &nodecfg.AdvertiseAddr, &nodecfg.Name, &nodecfg.Version, &nodecfg.APIModules, &nodecfg.TLSEnabled, &nodecfg.MaxPeers, &nodecfg.MaxPendingPeers,
&nodecfg.EnableStatusService, &nodecfg.BridgeConfig.Enabled, &nodecfg.WalletConfig.Enabled, &nodecfg.LocalNotificationsConfig.Enabled,
&nodecfg.BrowsersConfig.Enabled, &nodecfg.PermissionsConfig.Enabled, &nodecfg.MailserversConfig.Enabled, &nodecfg.SwarmConfig.Enabled,
&nodecfg.MailServerRegistryAddress, &nodecfg.Web3ProviderConfig.Enabled,
&nodecfg.MailServerRegistryAddress, &nodecfg.Web3ProviderConfig.Enabled, &nodecfg.NimbusProxyConfig.Enabled, &nodecfg.NimbusProxyConfig.TrustedBlockRoot,
)
if err != nil && err != sql.ErrNoRows {
return nil, err
Expand Down Expand Up @@ -802,6 +803,11 @@ func SetLogLevel(db *sql.DB, logLevel string) error {
return err
}

func SetNimbusTrustedBlockRoot(db *sql.DB, blockRoot string) error {
_, err := db.Exec(`UPDATE node_config SET nimbus_proxy_trusted_block_root = ?`, blockRoot)
return err
}

func SetWakuV2CustomNodes(db *sql.DB, customNodes map[string]string) error {
tx, err := db.BeginTx(context.Background(), &sql.TxOptions{})
if err != nil {
Expand Down
9 changes: 9 additions & 0 deletions params/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,10 @@ type NodeConfig struct {

// ProcessBackedupMessages should be set to true when user follows recovery (using seed phrase or keycard) onboarding flow
ProcessBackedupMessages bool

// NimbusProxyConfig specifies whether some RPC requests
// should go through Nimbus verification proxy
NimbusProxyConfig NimbusProxyConfig
}

type TokenOverride struct {
Expand Down Expand Up @@ -569,6 +573,11 @@ type BridgeConfig struct {
Enabled bool
}

type NimbusProxyConfig struct {
Enabled bool
TrustedBlockRoot string
}

type PushNotificationServer struct {
*ecdsa.PublicKey
}
Expand Down
42 changes: 31 additions & 11 deletions rpc/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ type Client struct {
handlers map[string]Handler // locally registered handlers
log log.Logger

nimbusProxyEnabled bool

// Default context
ctx context.Context
cancel context.CancelFunc
wg sync.WaitGroup

db *sql.DB

walletNotifier func(chainID uint64, message string)
}

Expand All @@ -70,7 +79,7 @@ var verifProxyInitFn func(c *Client)
//
// Client is safe for concurrent use and will automatically
// reconnect to the server if connection is lost.
func NewClient(client *gethrpc.Client, upstreamChainID uint64, upstream params.UpstreamRPCConfig, networks []params.Network, db *sql.DB) (*Client, error) {
func NewClient(client *gethrpc.Client, upstreamChainID uint64, upstream params.UpstreamRPCConfig, networks []params.Network, nimbusProxyEnabled bool, db *sql.DB) (*Client, error) {
var err error

log := log.New("package", "status-go/rpc.Client")
Expand All @@ -80,12 +89,18 @@ func NewClient(client *gethrpc.Client, upstreamChainID uint64, upstream params.U
log.Error("Network manager failed to initialize", "error", err)
}

ctx, cancel := context.WithCancel(context.Background())
c := Client{
local: client,
NetworkManager: networkManager,
handlers: make(map[string]Handler),
rpcClients: make(map[uint64]chain.ClientInterface),
log: log,
local: client,
NetworkManager: networkManager,
handlers: make(map[string]Handler),
rpcClients: make(map[uint64]chain.ClientInterface),
log: log,
db: db,
nimbusProxyEnabled: nimbusProxyEnabled,
ctx: ctx,
cancel: cancel,
wg: sync.WaitGroup{},
}

if upstream.Enabled {
Expand All @@ -101,14 +116,20 @@ func NewClient(client *gethrpc.Client, upstreamChainID uint64, upstream params.U

c.router = newRouter(c.upstreamEnabled)

if verifProxyInitFn != nil {
verifProxyInitFn(&c)
if c.nimbusProxyEnabled && verifProxyInitFn != nil {
c.wg.Add(1)
go verifProxyInitFn(&c)
}

return &c, nil
}

func (c *Client) Close() {
c.cancel()
c.wg.Wait()
}

func (c *Client) SetWalletNotifier(notifier func(chainID uint64, message string)) {

c.walletNotifier = notifier
}

Expand Down Expand Up @@ -215,8 +236,7 @@ func (c *Client) UpdateUpstreamURL(url string) error {
//
// It uses custom routing scheme for calls.
func (c *Client) Call(result interface{}, chainID uint64, method string, args ...interface{}) error {
ctx := context.Background()
return c.CallContext(ctx, result, chainID, method, args...)
return c.CallContext(c.ctx, result, chainID, method, args...)
}

// CallContext performs a JSON-RPC call with the given arguments. If the context is
Expand Down
6 changes: 3 additions & 3 deletions rpc/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func TestBlockedRoutesCall(t *testing.T) {
gethRPCClient, err := gethrpc.Dial(ts.URL)
require.NoError(t, err)

c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []params.Network{}, db)
c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []params.Network{}, false, db)
require.NoError(t, err)

for _, m := range blockedMethods {
Expand Down Expand Up @@ -78,7 +78,7 @@ func TestBlockedRoutesRawCall(t *testing.T) {
gethRPCClient, err := gethrpc.Dial(ts.URL)
require.NoError(t, err)

c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []params.Network{}, db)
c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: false, URL: ""}, []params.Network{}, false, db)
require.NoError(t, err)

for _, m := range blockedMethods {
Expand All @@ -105,7 +105,7 @@ func TestUpdateUpstreamURL(t *testing.T) {
gethRPCClient, err := gethrpc.Dial(ts.URL)
require.NoError(t, err)

c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: true, URL: ts.URL}, []params.Network{}, db)
c, err := NewClient(gethRPCClient, 1, params.UpstreamRPCConfig{Enabled: true, URL: ts.URL}, []params.Network{}, false, db)
require.NoError(t, err)
require.Equal(t, ts.URL, c.upstreamURL)

Expand Down
Loading

0 comments on commit a44e50b

Please sign in to comment.