Updates to use v3 ipld-eth-server

This commit is contained in:
2022-05-06 16:51:11 +05:30
parent d60e4f6557
commit ba1ef473f8
14 changed files with 238 additions and 125 deletions
+34 -23
View File
@@ -3,11 +3,24 @@ package validator
import (
"fmt"
"math/big"
"time"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/statediff/indexer/node"
"github.com/ethereum/go-ethereum/statediff/indexer/postgres"
"github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres"
"github.com/jmoiron/sqlx"
"github.com/spf13/viper"
"github.com/vulcanize/ipld-eth-server/pkg/shared"
)
var (
DATABASE_NAME = "DATABASE_NAME"
DATABASE_HOSTNAME = "DATABASE_HOSTNAME"
DATABASE_PORT = "DATABASE_PORT"
DATABASE_USER = "DATABASE_USER"
DATABASE_PASSWORD = "DATABASE_PASSWORD"
DATABASE_MAX_IDLE_CONNECTIONS = "DATABASE_MAX_IDLE_CONNECTIONS"
DATABASE_MAX_OPEN_CONNECTIONS = "DATABASE_MAX_OPEN_CONNECTIONS"
DATABASE_MAX_CONN_LIFETIME = "DATABASE_MAX_CONN_LIFETIME"
)
var IntegrationTestChainConfig = &params.ChainConfig{
@@ -44,9 +57,8 @@ var TestChainConfig = &params.ChainConfig{
}
type Config struct {
dbParams postgres.ConnectionParams
dbConfig postgres.ConnectionConfig
DB *postgres.DB
dbConfig postgres.Config
DB *sqlx.DB
}
func NewConfig() (*Config, error) {
@@ -55,29 +67,28 @@ func NewConfig() (*Config, error) {
}
func (c *Config) setupDB() error {
_ = viper.BindEnv("database.name", postgres.DATABASE_NAME)
_ = viper.BindEnv("database.hostname", postgres.DATABASE_HOSTNAME)
_ = viper.BindEnv("database.port", postgres.DATABASE_PORT)
_ = viper.BindEnv("database.user", postgres.DATABASE_USER)
_ = viper.BindEnv("database.password", postgres.DATABASE_PASSWORD)
_ = viper.BindEnv("database.maxIdle", postgres.DATABASE_MAX_IDLE_CONNECTIONS)
_ = viper.BindEnv("database.maxOpen", postgres.DATABASE_MAX_OPEN_CONNECTIONS)
_ = viper.BindEnv("database.maxLifetime", postgres.DATABASE_MAX_CONN_LIFETIME)
// DB params
c.dbParams.Name = viper.GetString("database.name")
c.dbParams.Hostname = viper.GetString("database.hostname")
c.dbParams.Port = viper.GetInt("database.port")
c.dbParams.User = viper.GetString("database.user")
c.dbParams.Password = viper.GetString("database.password")
_ = viper.BindEnv("database.name", DATABASE_NAME)
_ = viper.BindEnv("database.hostname", DATABASE_HOSTNAME)
_ = viper.BindEnv("database.port", DATABASE_PORT)
_ = viper.BindEnv("database.user", DATABASE_USER)
_ = viper.BindEnv("database.password", DATABASE_PASSWORD)
_ = viper.BindEnv("database.maxIdle", DATABASE_MAX_IDLE_CONNECTIONS)
_ = viper.BindEnv("database.maxOpen", DATABASE_MAX_OPEN_CONNECTIONS)
_ = viper.BindEnv("database.maxLifetime", DATABASE_MAX_CONN_LIFETIME)
// DB Config
c.dbConfig.DatabaseName = viper.GetString("database.name")
c.dbConfig.Hostname = viper.GetString("database.hostname")
c.dbConfig.Port = viper.GetInt("database.port")
c.dbConfig.Username = viper.GetString("database.user")
c.dbConfig.Password = viper.GetString("database.password")
c.dbConfig.MaxIdle = viper.GetInt("database.maxIdle")
c.dbConfig.MaxOpen = viper.GetInt("database.maxOpen")
c.dbConfig.MaxLifetime = viper.GetInt("database.maxLifetime")
c.dbConfig.MaxConns = viper.GetInt("database.maxOpen")
c.dbConfig.MaxConnLifetime = time.Duration(viper.GetInt("database.maxLifetime"))
// Create DB
db, err := NewDB(postgres.DbConnectionString(c.dbParams), postgres.ConnectionConfig{}, node.Info{})
db, err := shared.NewDB(c.dbConfig.DbConnectionString(), c.dbConfig)
if err != nil {
return fmt.Errorf("failed to create config: %w", err)
}
+8 -27
View File
@@ -17,8 +17,6 @@ import (
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/statediff/indexer/node"
"github.com/ethereum/go-ethereum/statediff/indexer/postgres"
"github.com/jmoiron/sqlx"
log "github.com/sirupsen/logrus"
ipfsethdb "github.com/vulcanize/ipfs-ethdb/postgres"
@@ -32,13 +30,13 @@ var (
)
type service struct {
db *postgres.DB
db *sqlx.DB
blockNum, trail uint64
logger *log.Logger
chainCfg *params.ChainConfig
}
func NewService(db *postgres.DB, blockNum, trailNum uint64, chainCfg *params.ChainConfig) *service {
func NewService(db *sqlx.DB, blockNum, trailNum uint64, chainCfg *params.ChainConfig) *service {
return &service{
db: db,
blockNum: blockNum,
@@ -48,7 +46,7 @@ func NewService(db *postgres.DB, blockNum, trailNum uint64, chainCfg *params.Cha
}
}
func NewEthBackend(db *postgres.DB, c *ipldEth.Config) (*ipldEth.Backend, error) {
func NewEthBackend(db *sqlx.DB, c *ipldEth.Config) (*ipldEth.Backend, error) {
gcc := c.GroupCacheConfig
groupName := gcc.StateDB.Name
@@ -57,12 +55,13 @@ func NewEthBackend(db *postgres.DB, c *ipldEth.Config) (*ipldEth.Backend, error)
}
r := ipldEth.NewCIDRetriever(db)
ethDB := ipfsethdb.NewDatabase(db.DB, ipfsethdb.CacheConfig{
ethDB := ipfsethdb.NewDatabase(db, ipfsethdb.CacheConfig{
Name: groupName,
Size: gcc.StateDB.CacheSizeInMB * 1024 * 1024,
ExpiryDuration: time.Minute * time.Duration(gcc.StateDB.CacheExpiryInMins),
})
// Read only wrapper around ipfs-ethdb eth.Database implementation
customEthDB := newDatabase(ethDB)
return &ipldEth.Backend{
@@ -76,25 +75,6 @@ func NewEthBackend(db *postgres.DB, c *ipldEth.Config) (*ipldEth.Backend, error)
}, nil
}
func NewDB(connectString string, config postgres.ConnectionConfig, node node.Info) (*postgres.DB, error) {
db, connectErr := sqlx.Connect("postgres", connectString)
if connectErr != nil {
return &postgres.DB{}, postgres.ErrDBConnectionFailed(connectErr)
}
if config.MaxOpen > 0 {
db.SetMaxOpenConns(config.MaxOpen)
}
if config.MaxIdle > 0 {
db.SetMaxIdleConns(config.MaxIdle)
}
if config.MaxLifetime > 0 {
lifetime := time.Duration(config.MaxLifetime) * time.Second
db.SetConnMaxLifetime(lifetime)
}
pg := postgres.DB{DB: db, Node: node}
return &pg, nil
}
// Start is used to begin the service
func (s *service) Start(ctx context.Context) (uint64, error) {
api, err := ethAPI(ctx, s.db, s.chainCfg)
@@ -106,6 +86,7 @@ func (s *service) Start(ctx context.Context) (uint64, error) {
headBlock, _ := api.B.BlockByNumber(ctx, rpc.LatestBlockNumber)
headBlockNum := headBlock.NumberU64()
fmt.Println("#########", headBlockNum, s.trail, idxBlockNum)
for headBlockNum-s.trail >= idxBlockNum {
validateBlock, err := api.B.BlockByNumber(ctx, rpc.BlockNumber(idxBlockNum))
if err != nil {
@@ -125,7 +106,7 @@ func (s *service) Start(ctx context.Context) (uint64, error) {
return idxBlockNum, fmt.Errorf("failed to verify state root at block")
}
s.logger.Infof("state root verified for block= %d", idxBlockNum)
s.logger.Infof("state root verified for block %d", idxBlockNum)
headBlock, err = api.B.BlockByNumber(ctx, rpc.LatestBlockNumber)
if err != nil {
@@ -140,7 +121,7 @@ func (s *service) Start(ctx context.Context) (uint64, error) {
return idxBlockNum, nil
}
func ethAPI(ctx context.Context, db *postgres.DB, chainCfg *params.ChainConfig) (*ipldEth.PublicEthAPI, error) {
func ethAPI(ctx context.Context, db *sqlx.DB, chainCfg *params.ChainConfig) (*ipldEth.PublicEthAPI, error) {
// TODO: decide network for custom chainConfig.
backend, err := NewEthBackend(db, &ipldEth.Config{
ChainConfig: chainCfg,