2022-10-31 15:52:21 +00:00
|
|
|
//go:build nimbus_light_client
|
|
|
|
// +build nimbus_light_client
|
|
|
|
|
|
|
|
package rpc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
|
|
|
"github.com/ethereum/go-ethereum/log"
|
2023-05-24 15:02:53 +00:00
|
|
|
|
2022-10-31 15:52:21 +00:00
|
|
|
gethrpc "github.com/ethereum/go-ethereum/rpc"
|
2023-05-24 15:02:53 +00:00
|
|
|
|
2022-10-31 15:52:21 +00:00
|
|
|
proxy "github.com/siphiuel/lc-proxy-wrapper"
|
2023-05-24 15:02:53 +00:00
|
|
|
|
2022-10-31 15:52:21 +00:00
|
|
|
"github.com/status-im/status-go/params"
|
|
|
|
)
|
|
|
|
|
|
|
|
type VerifProxy struct {
|
|
|
|
config *proxy.Config
|
|
|
|
client *gethrpc.Client
|
|
|
|
log log.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
verifProxyInitFn = func(c *Client) {
|
|
|
|
ctx := context.Background()
|
|
|
|
var testConfig = proxy.Config{
|
|
|
|
Eth2Network: "mainnet",
|
|
|
|
TrustedBlockRoot: "0xc5182cdb750fe088138b0d475683cda26a96befc24de16fb17bcf49d9cadf2f7",
|
|
|
|
Web3Url: c.upstreamURL,
|
|
|
|
RpcAddress: "127.0.0.1",
|
|
|
|
RpcPort: 8545,
|
|
|
|
LogLevel: "INFO",
|
|
|
|
}
|
|
|
|
proxy.StartLightClient(ctx, &testConfig)
|
|
|
|
verifProxy, err := newVerifProxy(&testConfig, c.log)
|
|
|
|
if err != nil {
|
|
|
|
c.RegisterHandler(
|
|
|
|
params.BalanceMethodName,
|
|
|
|
func(ctx context.Context, v uint64, params ...interface{}) (interface{}, error) {
|
|
|
|
addr := params[0].(common.Address)
|
|
|
|
return verifProxy.GetBalance(ctx, addr)
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func newVerifProxy(cfg *proxy.Config, log log.Logger) (*VerifProxy, error) {
|
|
|
|
endpoint := "http://" + cfg.RpcAddress + ":" + fmt.Sprint(cfg.RpcPort)
|
|
|
|
client, err := gethrpc.DialHTTP(endpoint)
|
|
|
|
if err != nil {
|
|
|
|
log.Error("Error when creating VerifProxy client", err)
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
proxy := &VerifProxy{cfg, client, log}
|
|
|
|
return proxy, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *VerifProxy) GetBalance(ctx context.Context, address common.Address) (interface{}, error) {
|
|
|
|
var result hexutil.Big
|
|
|
|
err := p.client.CallContext(ctx, &result, "eth_getBalance", address, "latest")
|
|
|
|
if err != nil {
|
|
|
|
p.log.Error("Error when invoking GetBalance", err)
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return result, nil
|
|
|
|
|
|
|
|
}
|