Updates to use v3 ipld-eth-server
This commit is contained in:
+34
-23
@@ -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 = ¶ms.ChainConfig{
|
||||
@@ -44,9 +57,8 @@ var TestChainConfig = ¶ms.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)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user