mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 03:16:45 +01:00
WIP
This commit is contained in:
108
node/node.go
108
node/node.go
@@ -443,6 +443,114 @@ func NewNode(mode Mode, cfg *config.Node) (*Node, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APIServer is a server that only runs the API
|
||||||
|
type APIServer struct {
|
||||||
|
nodeAPI *NodeAPI
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAPIServer(mode Mode, cfg *config.APIServer) (*APIServer, error) {
|
||||||
|
// NOTE: I just copied some parts of NewNode related to starting the
|
||||||
|
// API, but it still cotains many parameters that are not available
|
||||||
|
meddler.Debug = cfg.Debug.MeddlerLogs
|
||||||
|
// Stablish DB connection
|
||||||
|
dbWrite, err := dbUtils.InitSQLDB(
|
||||||
|
cfg.PostgreSQL.PortWrite,
|
||||||
|
cfg.PostgreSQL.HostWrite,
|
||||||
|
cfg.PostgreSQL.UserWrite,
|
||||||
|
cfg.PostgreSQL.PasswordWrite,
|
||||||
|
cfg.PostgreSQL.NameWrite,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tracerr.Wrap(fmt.Errorf("dbUtils.InitSQLDB: %w", err))
|
||||||
|
}
|
||||||
|
var dbRead *sqlx.DB
|
||||||
|
if cfg.PostgreSQL.HostRead == "" {
|
||||||
|
dbRead = dbWrite
|
||||||
|
} else if cfg.PostgreSQL.HostRead == cfg.PostgreSQL.HostWrite {
|
||||||
|
return nil, tracerr.Wrap(fmt.Errorf(
|
||||||
|
"PostgreSQL.HostRead and PostgreSQL.HostWrite must be different",
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
dbRead, err = dbUtils.InitSQLDB(
|
||||||
|
cfg.PostgreSQL.PortRead,
|
||||||
|
cfg.PostgreSQL.HostRead,
|
||||||
|
cfg.PostgreSQL.UserRead,
|
||||||
|
cfg.PostgreSQL.PasswordRead,
|
||||||
|
cfg.PostgreSQL.NameRead,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tracerr.Wrap(fmt.Errorf("dbUtils.InitSQLDB: %w", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var apiConnCon *dbUtils.APIConnectionController
|
||||||
|
if cfg.API.Explorer || mode == ModeCoordinator {
|
||||||
|
apiConnCon = dbUtils.NewAPICnnectionController(
|
||||||
|
cfg.API.MaxSQLConnections,
|
||||||
|
cfg.API.SQLConnectionTimeout.Duration,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
historyDB := historydb.NewHistoryDB(dbRead, dbWrite, apiConnCon)
|
||||||
|
|
||||||
|
var l2DB *l2db.L2DB
|
||||||
|
if mode == ModeCoordinator {
|
||||||
|
l2DB = l2db.NewL2DB(
|
||||||
|
dbRead, dbWrite,
|
||||||
|
cfg.Coordinator.L2DB.SafetyPeriod,
|
||||||
|
cfg.Coordinator.L2DB.MaxTxs,
|
||||||
|
cfg.Coordinator.L2DB.MinFeeUSD,
|
||||||
|
cfg.Coordinator.L2DB.TTL.Duration,
|
||||||
|
apiConnCon,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
var nodeAPI *NodeAPI
|
||||||
|
if cfg.API.Address != "" {
|
||||||
|
if cfg.Debug.GinDebugMode {
|
||||||
|
gin.SetMode(gin.DebugMode)
|
||||||
|
} else {
|
||||||
|
gin.SetMode(gin.ReleaseMode)
|
||||||
|
}
|
||||||
|
if cfg.API.UpdateMetricsInterval.Duration == 0 {
|
||||||
|
return nil, tracerr.Wrap(fmt.Errorf("invalid cfg.API.UpdateMetricsInterval: %v",
|
||||||
|
cfg.API.UpdateMetricsInterval.Duration))
|
||||||
|
}
|
||||||
|
if cfg.API.UpdateRecommendedFeeInterval.Duration == 0 {
|
||||||
|
return nil, tracerr.Wrap(fmt.Errorf("invalid cfg.API.UpdateRecommendedFeeInterval: %v",
|
||||||
|
cfg.API.UpdateRecommendedFeeInterval.Duration))
|
||||||
|
}
|
||||||
|
server := gin.Default()
|
||||||
|
coord := false
|
||||||
|
if mode == ModeCoordinator {
|
||||||
|
coord = cfg.Coordinator.API.Coordinator
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
nodeAPI, err = NewNodeAPI(
|
||||||
|
cfg.API.Address,
|
||||||
|
coord, cfg.API.Explorer,
|
||||||
|
server,
|
||||||
|
historyDB,
|
||||||
|
stateDB,
|
||||||
|
l2DB,
|
||||||
|
&api.Config{
|
||||||
|
RollupConstants: scConsts.Rollup,
|
||||||
|
AuctionConstants: scConsts.Auction,
|
||||||
|
WDelayerConstants: scConsts.WDelayer,
|
||||||
|
ChainID: chainIDU16,
|
||||||
|
HermezAddress: cfg.SmartContracts.Rollup,
|
||||||
|
},
|
||||||
|
cfg.Coordinator.ForgeDelay.Duration,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tracerr.Wrap(err)
|
||||||
|
}
|
||||||
|
nodeAPI.api.SetRollupVariables(*initSCVars.Rollup)
|
||||||
|
nodeAPI.api.SetAuctionVariables(*initSCVars.Auction)
|
||||||
|
nodeAPI.api.SetWDelayerVariables(*initSCVars.WDelayer)
|
||||||
|
}
|
||||||
|
// ETC...
|
||||||
|
}
|
||||||
|
|
||||||
// NodeAPI holds the node http API
|
// NodeAPI holds the node http API
|
||||||
type NodeAPI struct { //nolint:golint
|
type NodeAPI struct { //nolint:golint
|
||||||
api *api.API
|
api *api.API
|
||||||
|
|||||||
Reference in New Issue
Block a user