Skip to content

Commit

Permalink
Upgrade framework
Browse files Browse the repository at this point in the history
  • Loading branch information
mask-pp committed Sep 5, 2023
1 parent 4e4b2c7 commit 750e017
Show file tree
Hide file tree
Showing 24 changed files with 210 additions and 146 deletions.
13 changes: 9 additions & 4 deletions cmd/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ package app

import (
"chain-monitor/internal/config"
"chain-monitor/internal/controller"
"chain-monitor/internal/controller/l1watcher"
"chain-monitor/internal/controller/l2watcher"
"chain-monitor/internal/controller/monitor"
"chain-monitor/internal/route"
"chain-monitor/internal/utils"
Expand Down Expand Up @@ -71,27 +72,31 @@ func action(ctx *cli.Context) error {
// Start onchain_metrics server.
utils.StartServer(ctx, route.Route(db.WithContext(subCtx)))

l1Watcher, err := controller.NewL1Watcher(cfg.L1Config, db.WithContext(subCtx))
l1Watcher, err := l1watcher.NewL1Watcher(cfg.L1Config, db.WithContext(subCtx))
if err != nil {
log.Error("failed to create l1 watcher instance", "err", err)
return err
}
_ = l1Watcher

l2Watcher, err := controller.NewL2Watcher(cfg.L2Config, db.WithContext(subCtx))
l2Watcher, err := l2watcher.NewL2Watcher(cfg.L2Config, db.WithContext(subCtx))
if err != nil {
log.Error("failed to create l2 watcher instance", "err", err)
return err
}
_ = l2Watcher

chainMonitor, err := monitor.NewChainMonitor(db.WithContext(subCtx), l1Watcher, l2Watcher)
chainMonitor, err := monitor.NewChainMonitor(cfg.ChainMonitor, db.WithContext(subCtx), l1Watcher, l2Watcher)
if err != nil {
log.Error("failed to create chain chainMonitor instance", "err", err)
return err
}
_ = chainMonitor

// Let l1watcher and l2watcher can use monitor api.
l1Watcher.SetMonitor(chainMonitor)
l2Watcher.SetMonitor(chainMonitor)

go utils.LoopWithContext(subCtx, time.Millisecond*1500, l1Watcher.ScanL1Chain)
go utils.LoopWithContext(subCtx, time.Millisecond*1500, l2Watcher.ScanL2Chain)
go utils.LoopWithContext(subCtx, time.Millisecond*200, chainMonitor.ChainMonitor)
Expand Down
2 changes: 1 addition & 1 deletion config.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
}
},
"chain_monitor": {
"bridge_history_url": "https://sepolia-api-bridge.scroll.io"
"slack_notify": ""
},
"db_config": {
"driver_name": "postgres",
Expand Down
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ require (
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.14.0 // indirect
github.com/go-resty/resty/v2 v2.7.0 // indirect
github.com/go-stack/stack v1.8.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
Expand Down Expand Up @@ -88,7 +89,7 @@ require (
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/crypto v0.12.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
Expand Down
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
Expand Down Expand Up @@ -493,8 +495,11 @@ golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand Down Expand Up @@ -540,6 +545,7 @@ golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Expand Down
11 changes: 8 additions & 3 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,15 @@ type DBConfig struct {
LogLevel int `json:"logLevel,omitempty"`
}

type MonitorConfig struct {
SlackNotify string `json:"slack_notify,omitempty"`
}

type Config struct {
L1Config *L1Config `json:"l1_config"`
L2Config *L2Config `json:"l2_config"`
DBConfig *DBConfig `json:"db_config"`
L1Config *L1Config `json:"l1_config"`
L2Config *L2Config `json:"l2_config"`
ChainMonitor *MonitorConfig `json:"chain_monitor"`
DBConfig *DBConfig `json:"db_config"`
}

func NewConfig(file string) (*Config, error) {
Expand Down
File renamed without changes.
10 changes: 10 additions & 0 deletions internal/controller/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package controller

type WatcherAPI interface {
IsReady() bool
StartNumber() uint64
}

type MonitorAPI interface {
SlackNotify(msg string)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package logic
package l1watcher

import (
"context"
Expand All @@ -12,13 +12,16 @@ import (
"chain-monitor/bytecode/scroll/L1/gateway"
"chain-monitor/bytecode/scroll/L1/rollup"
"chain-monitor/internal/config"
"chain-monitor/internal/controller"
"chain-monitor/orm"
)

type L1Contracts struct {
type l1Contracts struct {
tx *gorm.DB
client *ethclient.Client

monitorAPI controller.MonitorAPI

txHashMsgHash map[string]common.Hash
ethEvents []*orm.L1ETHEvent
erc20Events []*orm.L1ERC20Event
Expand All @@ -40,9 +43,9 @@ type L1Contracts struct {
filter *bytecode.ContractsFilter
}

func NewL1Contracts(client *ethclient.Client, cfg *config.L1Contracts) (*L1Contracts, error) {
func newL1Contracts(client *ethclient.Client, cfg *config.L1Contracts) (*l1Contracts, error) {
var (
cts = &L1Contracts{
cts = &l1Contracts{
client: client,
txHashMsgHash: map[string]common.Hash{},
ethEvents: []*orm.L1ETHEvent{},
Expand Down Expand Up @@ -113,15 +116,15 @@ func NewL1Contracts(client *ethclient.Client, cfg *config.L1Contracts) (*L1Contr
return cts, nil
}

func (l1 *L1Contracts) clean() {
func (l1 *l1Contracts) clean() {
l1.txHashMsgHash = map[string]common.Hash{}
l1.ethEvents = l1.ethEvents[:0]
l1.erc20Events = l1.erc20Events[:0]
l1.erc721Events = l1.erc721Events[:0]
l1.erc1155Events = l1.erc1155Events[:0]
}

func (l1 *L1Contracts) ParseL1Events(ctx context.Context, db *gorm.DB, start, end uint64) (int, error) {
func (l1 *l1Contracts) ParseL1Events(ctx context.Context, db *gorm.DB, start, end uint64) (int, error) {
l1.clean()
l1.tx = db.Begin().WithContext(ctx)
count, err := l1.filter.ParseLogs(ctx, l1.client, start, end)
Expand Down Expand Up @@ -152,3 +155,7 @@ func (l1 *L1Contracts) ParseL1Events(ctx context.Context, db *gorm.DB, start, en
}
return count, nil
}

func (l1 *l1Contracts) setMonitorAPI(monitor controller.MonitorAPI) {
l1.monitorAPI = monitor
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package logic
package l1watcher

import (
"math/big"
Expand All @@ -10,7 +10,7 @@ import (
"chain-monitor/orm"
)

func (l1 *L1Contracts) registerGatewayHandlers() {
func (l1 *l1Contracts) registerGatewayHandlers() {
l1.ETHGateway.RegisterDepositETH(func(vLog *types.Log, data *gateway.L1ETHGatewayDepositETHEvent) error {
l1.ethEvents = append(l1.ethEvents, newL1ETHEvent(orm.L1DepositETH, vLog, data.From, data.To, data.Amount))
return nil
Expand Down Expand Up @@ -71,7 +71,7 @@ func (l1 *L1Contracts) registerGatewayHandlers() {
})
}

func (l1 *L1Contracts) storeGatewayEvents() error {
func (l1 *l1Contracts) storeGatewayEvents() error {
// store l1 eth events.
for i := 0; i < len(l1.ethEvents); i++ {
event := l1.ethEvents[i]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package logic
package l1watcher

import (
"context"

"github.com/scroll-tech/go-ethereum/common"
"github.com/scroll-tech/go-ethereum/core/types"

"chain-monitor/bytecode"
"chain-monitor/bytecode/scroll/L1"
"chain-monitor/bytecode/scroll/L1/rollup"
"chain-monitor/internal/utils"
"chain-monitor/orm"
"github.com/scroll-tech/go-ethereum/common"
"github.com/scroll-tech/go-ethereum/core/types"
)

func (l1 *L1Contracts) registerMessengerHandlers() {
func (l1 *l1Contracts) registerMessengerHandlers() {
l1.ScrollMessenger.RegisterSentMessage(func(vLog *types.Log, data *L1.L1ScrollMessengerSentMessageEvent) error {
msgHash := computeMessageHash(l1.ScrollMessenger.ABI, data.Sender, data.Target, data.Value, data.MessageNonce, data.Message)
msgHash := utils.ComputeMessageHash(l1.ScrollMessenger.ABI, data.Sender, data.Target, data.Value, data.MessageNonce, data.Message)
l1.txHashMsgHash[vLog.TxHash.String()] = msgHash
return orm.SaveL1Messenger(l1.tx, orm.L1SentMessage, vLog, msgHash)
})
Expand All @@ -29,7 +31,7 @@ func (l1 *L1Contracts) registerMessengerHandlers() {
})
}

func (l1 *L1Contracts) registerScrollHandlers() {
func (l1 *l1Contracts) registerScrollHandlers() {
l1.ScrollChain.RegisterCommitBatch(func(vLog *types.Log, data *rollup.ScrollChainCommitBatchEvent) error {
l1Tx, _, err := l1.client.TransactionByHash(context.Background(), vLog.TxHash)
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package controller
package l1watcher

import (
"context"
Expand All @@ -13,7 +13,6 @@ import (
"modernc.org/mathutil"

"chain-monitor/internal/config"
"chain-monitor/internal/logic"
"chain-monitor/orm"
)

Expand All @@ -26,7 +25,7 @@ type L1Watcher struct {
cfg *config.L1Config
client *ethclient.Client

contracts *logic.L1Contracts
filter *l1Contracts

cacheLen int
headerCache []*types.Header
Expand All @@ -40,7 +39,7 @@ type L1Watcher struct {

func NewL1Watcher(cfg *config.L1Config, db *gorm.DB) (*L1Watcher, error) {
client, err := ethclient.Dial(cfg.L1ChainURL)
contracts, err := logic.NewL1Contracts(client, cfg.L1Gateways)
contracts, err := newL1Contracts(client, cfg.L1Gateways)
if err != nil {
return nil, err
}
Expand All @@ -58,7 +57,7 @@ func NewL1Watcher(cfg *config.L1Config, db *gorm.DB) (*L1Watcher, error) {
cfg: cfg,
db: db,
client: client,
contracts: contracts,
filter: contracts,
cacheLen: 32,
headerCache: make([]*types.Header, 0, 32),
curTime: time.Now(),
Expand Down Expand Up @@ -90,7 +89,7 @@ func (l1 *L1Watcher) ScanL1Chain(ctx context.Context) {
// get events by number
start = header.Number.Uint64()
end = start
count, err = l1.contracts.ParseL1Events(ctx, l1.db, start, end)
count, err = l1.filter.ParseL1Events(ctx, l1.db, start, end)
if err != nil {
log.Error("failed to parse l1chain events", "start", start, "end", end, "err", err)
return
Expand All @@ -101,7 +100,7 @@ func (l1 *L1Watcher) ScanL1Chain(ctx context.Context) {
}
l1.headerCache = append(l1.headerCache, header)
} else {
count, err = l1.contracts.ParseL1Events(ctx, l1.db, start, end)
count, err = l1.filter.ParseL1Events(ctx, l1.db, start, end)
if err != nil {
log.Error("failed to parse l1chain events", "start", start, "end", end, "err", err)
return
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package controller
package l1watcher

import "sync/atomic"
import (
"chain-monitor/internal/controller"
"sync/atomic"
)

func (l1 *L1Watcher) StartNumber() uint64 {
return atomic.LoadUint64(&l1.startNumber)
Expand All @@ -21,3 +24,7 @@ func (l1 *L1Watcher) setSafeNumber(number uint64) {
func (l1 *L1Watcher) IsReady() bool {
return l1.StartNumber() == l1.SafeNumber()
}

func (l1 *L1Watcher) SetMonitor(monitor controller.MonitorAPI) {
l1.filter.setMonitorAPI(monitor)
}
Loading

0 comments on commit 750e017

Please sign in to comment.