Skip to content

feat: refactor #55

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 82 commits into from
Dec 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
e8b319b
refactor node process
sh-cha Nov 8, 2024
8ceca18
Merge branch 'main' into feat/refactor
sh-cha Nov 12, 2024
b917ab9
refactor node, broadcaster
sh-cha Nov 14, 2024
563adc3
refactor provider
sh-cha Nov 14, 2024
68fd6f9
refactor merkle, types
sh-cha Nov 14, 2024
08f4a86
refactor db
sh-cha Nov 14, 2024
69e4936
refactor executor
sh-cha Nov 14, 2024
33ccf98
add migration function
sh-cha Nov 14, 2024
dd38121
change iterate name & append splitter to key when iterating
sh-cha Nov 14, 2024
b381e83
add LastProcessedBlockHeightKey migration
sh-cha Nov 14, 2024
b007fb1
only change key if it exists
sh-cha Nov 14, 2024
ed9e160
wrap errors to clarify them
sh-cha Nov 14, 2024
9a8bd87
wrap errors on key, provider
sh-cha Nov 14, 2024
d7af1a2
Merge branch 'main' into feat/refactor
sh-cha Nov 19, 2024
8c8f06f
Merge branch 'main' into feat/refactor
sh-cha Nov 20, 2024
5023980
wrap errors & merge main
sh-cha Nov 20, 2024
97119fe
makes log as production & add log-format flag
sh-cha Nov 20, 2024
4c46cc2
fix reverse iterate finding prev inclusive start key
sh-cha Nov 20, 2024
1296e94
db test
sh-cha Nov 20, 2024
2887114
db stage test
sh-cha Nov 21, 2024
9098a5b
save finalized tree when it exists
sh-cha Nov 21, 2024
9afa7b7
Merge branch 'main' into feat/refactor
sh-cha Nov 22, 2024
27a9023
merge cmd
sh-cha Nov 22, 2024
30a123a
merkle test
sh-cha Nov 22, 2024
9c2318f
merkle types test
sh-cha Nov 22, 2024
30cd52c
host deposit & txhandler test
sh-cha Nov 25, 2024
f45be9a
host handler test
sh-cha Nov 27, 2024
adae7b8
keys test
sh-cha Nov 27, 2024
1cab35c
txutil test
sh-cha Nov 27, 2024
e5849f0
child deposit oracle test
sh-cha Nov 27, 2024
46d8480
Merge branch 'main' into feat/refactor
sh-cha Nov 27, 2024
a44ad1f
refactor child db and add l2 sequence checker into handleInitiateWith…
sh-cha Nov 27, 2024
23fb66e
prepare tree, output test
sh-cha Nov 27, 2024
ae0d4c0
add version to working tree info & child withdrawal test
sh-cha Nov 28, 2024
30a1e63
child handle output test
sh-cha Nov 28, 2024
20ad016
child db handler query test
sh-cha Nov 28, 2024
4f37ae9
executor types test
sh-cha Nov 28, 2024
ef8118b
format
sh-cha Nov 28, 2024
372a326
delete oracle msg data from authz msg & oracle test
sh-cha Nov 29, 2024
cba75b1
update batch info test
sh-cha Dec 4, 2024
2cad263
batch test
sh-cha Dec 4, 2024
03d735c
add timestamp & tx hash to withdrawals (#54)
sh-cha Dec 4, 2024
4e83425
format
sh-cha Dec 4, 2024
2c3e4b7
add batch handler test & fix checkbatch test
sh-cha Dec 5, 2024
7be59a6
add some comments
sh-cha Dec 5, 2024
f26cecd
feat: make stage copiable and introduce allow to customize prefix of …
beer-1 Dec 6, 2024
bc7c384
Update merkle/types/db.go comment
sh-cha Dec 10, 2024
a14fb52
simplify delete tree logic
sh-cha Dec 10, 2024
2abee5e
Update merkle/merkle.go comment
sh-cha Dec 10, 2024
d6746f9
Update merkle/types/db.go comment
sh-cha Dec 10, 2024
73c7f5f
Update merkle/db.go
sh-cha Dec 10, 2024
303e08f
Update merkle/types/db.go
sh-cha Dec 10, 2024
b0cfbc0
withdrawal prefix migration
sh-cha Dec 10, 2024
4822c98
iterate from sequence using start key
sh-cha Dec 10, 2024
9cd41fb
use utc time
sh-cha Dec 10, 2024
f66feff
change ctx name
sh-cha Dec 10, 2024
b8baa18
v0.1.11 migration command
sh-cha Dec 10, 2024
599044d
save finalized tree with its value method
sh-cha Dec 10, 2024
d64a066
coderabbit loop syntax change suggestion
sh-cha Dec 10, 2024
8e97ed7
block handler length verification
sh-cha Dec 10, 2024
e252c7f
format
sh-cha Dec 10, 2024
eb9c37c
check if tx is inserted to block during waiting time
sh-cha Dec 10, 2024
25310b0
skip calculating processed heights when nodes have synced height info
sh-cha Dec 10, 2024
cdcab1e
get height comments
sh-cha Dec 10, 2024
140b1e0
query block time with block header
sh-cha Dec 10, 2024
91edf41
Update node/tx_checker.go
sh-cha Dec 10, 2024
39965cd
Update node/tx_checker.go
sh-cha Dec 10, 2024
5f3a9ee
Update challenger/child/withdraw.go
sh-cha Dec 10, 2024
0ee7c3a
iterate future challenges from initial block time as start key
sh-cha Dec 10, 2024
2eb12dd
processedEvents typo
sh-cha Dec 10, 2024
2863135
Update challenger/handler.go
sh-cha Dec 10, 2024
1eb2f74
let challenge query use next key
sh-cha Dec 10, 2024
057b41c
reuse empty batch file function
sh-cha Dec 10, 2024
fda3699
fix comment
sh-cha Dec 10, 2024
6739dde
Update node/broadcaster/broadcaster.go
sh-cha Dec 10, 2024
589b7e2
fix typo
sh-cha Dec 10, 2024
e88fa63
format
sh-cha Dec 10, 2024
b2c33d0
Update challenger/query.go
sh-cha Dec 10, 2024
2724daf
query refactor
sh-cha Dec 10, 2024
6367d19
Update challenger/query.go
sh-cha Dec 10, 2024
9c1209b
Update challenger/query.go
sh-cha Dec 10, 2024
e373dcf
error wrapping
sh-cha Dec 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ linters:
- dogsled
- dupl
- errcheck
- exportloopref
- copyloopvar
- goconst
- gofmt
- goimports
Expand All @@ -23,12 +23,12 @@ linters:
- typecheck
- unconvert
- unused

issues:
exclude-rules:
- path: _test\.go
linters:
- gosec
- unused
- linters:
- stylecheck
text: "ST1003:"
Expand Down
23 changes: 7 additions & 16 deletions bot/bot.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,16 @@ package bot
import (
"encoding/json"
"errors"
"fmt"
"io"
"os"

"go.uber.org/zap"

bottypes "github.com/initia-labs/opinit-bots/bot/types"
"github.com/initia-labs/opinit-bots/challenger"
challengertypes "github.com/initia-labs/opinit-bots/challenger/types"
"github.com/initia-labs/opinit-bots/db"
"github.com/initia-labs/opinit-bots/executor"
executortypes "github.com/initia-labs/opinit-bots/executor/types"
"github.com/initia-labs/opinit-bots/server"
"github.com/initia-labs/opinit-bots/types"
)

func LoadJsonConfig(path string, config bottypes.Config) error {
Expand All @@ -35,36 +33,29 @@ func LoadJsonConfig(path string, config bottypes.Config) error {
return nil
}

func NewBot(botType bottypes.BotType, logger *zap.Logger, homePath string, configPath string) (bottypes.Bot, error) {
func NewBot(botType bottypes.BotType, db types.DB, configPath string) (bottypes.Bot, error) {
err := botType.Validate()
if err != nil {
return nil, err
}

db, err := db.NewDB(GetDBPath(homePath, botType))
if err != nil {
return nil, err
}

switch botType {
case bottypes.BotTypeExecutor:
cfg := &executortypes.Config{}
err := LoadJsonConfig(configPath, cfg)
if err != nil {
return nil, err
}
return executor.NewExecutor(cfg, db, logger.Named("executor"), homePath), nil
server := server.NewServer(cfg.Server)
return executor.NewExecutor(cfg, db, server), nil
case bottypes.BotTypeChallenger:
cfg := &challengertypes.Config{}
err := LoadJsonConfig(configPath, cfg)
if err != nil {
return nil, err
}
return challenger.NewChallenger(cfg, db, logger.Named("challenger"), homePath), nil
server := server.NewServer(cfg.Server)
return challenger.NewChallenger(cfg, db, server), nil
}
return nil, errors.New("not providing bot name")
}

func GetDBPath(homePath string, botName bottypes.BotType) string {
return fmt.Sprintf(homePath+"/%s.db", botName)
}
7 changes: 3 additions & 4 deletions bot/types/bot.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package types

import (
"context"
"github.com/initia-labs/opinit-bots/types"
)

type Bot interface {
Initialize(context.Context) error
Start(context.Context) error
Close()
Initialize(types.Context) error
Start(types.Context) error
}
93 changes: 49 additions & 44 deletions challenger/challenger.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package challenger

import (
"context"
"strconv"
"sync"
"time"

"github.com/pkg/errors"

"github.com/gofiber/fiber/v2"
"github.com/initia-labs/opinit-bots/challenger/child"
challengerdb "github.com/initia-labs/opinit-bots/challenger/db"
"github.com/initia-labs/opinit-bots/challenger/host"
"github.com/initia-labs/opinit-bots/server"

Expand All @@ -32,9 +31,6 @@ type Challenger struct {
cfg *challengertypes.Config
db types.DB
server *server.Server
logger *zap.Logger

homePath string

challengeCh chan challengertypes.Challenge
challengeChStopped chan struct{}
Expand All @@ -44,9 +40,11 @@ type Challenger struct {
// status info
latestChallengesMu *sync.Mutex
latestChallenges []challengertypes.Challenge

stage types.CommitDB
}

func NewChallenger(cfg *challengertypes.Config, db types.DB, logger *zap.Logger, homePath string) *Challenger {
func NewChallenger(cfg *challengertypes.Config, db types.DB, sv *server.Server) *Challenger {
err := cfg.Validate()
if err != nil {
panic(err)
Expand All @@ -55,22 +53,17 @@ func NewChallenger(cfg *challengertypes.Config, db types.DB, logger *zap.Logger,
challengeCh := make(chan challengertypes.Challenge)
return &Challenger{
host: host.NewHostV1(
cfg.L1NodeConfig(homePath),
cfg.L1NodeConfig(),
db.WithPrefix([]byte(types.HostName)),
logger.Named(types.HostName),
),
child: child.NewChildV1(
cfg.L2NodeConfig(homePath),
cfg.L2NodeConfig(),
db.WithPrefix([]byte(types.ChildName)),
logger.Named(types.ChildName),
),

cfg: cfg,
db: db,
server: server.NewServer(cfg.Server),
logger: logger,

homePath: homePath,
server: sv,

challengeCh: challengeCh,
challengeChStopped: make(chan struct{}),
Expand All @@ -79,10 +72,12 @@ func NewChallenger(cfg *challengertypes.Config, db types.DB, logger *zap.Logger,

latestChallengesMu: &sync.Mutex{},
latestChallenges: make([]challengertypes.Challenge, 0),

stage: db.NewStage(),
}
}

func (c *Challenger) Initialize(ctx context.Context) error {
func (c *Challenger) Initialize(ctx types.Context) error {
childBridgeInfo, err := c.child.QueryBridgeInfo(ctx)
if err != nil {
return err
Expand All @@ -96,7 +91,7 @@ func (c *Challenger) Initialize(ctx context.Context) error {
return err
}

c.logger.Info(
ctx.Logger().Info(
"bridge info",
zap.Uint64("id", bridgeInfo.BridgeId),
zap.Duration("submission_interval", bridgeInfo.BridgeConfig.SubmissionInterval),
Expand Down Expand Up @@ -128,64 +123,57 @@ func (c *Challenger) Initialize(ctx context.Context) error {
if !initialBlockTime.IsZero() {
// The db state is reset to a specific height, so we also
// need to delete future challenges which are not applicable anymore.
err := c.DeleteFutureChallenges(initialBlockTime)
err := challengerdb.DeleteFutureChallenges(c.db, initialBlockTime)
if err != nil {
return err
}
}

c.RegisterQuerier()

c.pendingChallenges, err = c.loadPendingChallenges()
c.pendingChallenges, err = challengerdb.LoadPendingChallenges(c.db)
if err != nil {
return err
return errors.Wrap(err, "failed to load pending challenges")
}

c.latestChallenges, err = c.loadChallenges()
c.latestChallenges, err = challengerdb.LoadChallenges(c.db)
if err != nil {
return err
return errors.Wrap(err, "failed to load challenges")
}

return nil
}

func (c *Challenger) Start(ctx context.Context) error {
defer c.Close()

errGrp := types.ErrGrp(ctx)
errGrp.Go(func() (err error) {
func (c *Challenger) Start(ctx types.Context) error {
ctx.ErrGrp().Go(func() (err error) {
<-ctx.Done()
return c.server.Shutdown()
})

errGrp.Go(func() (err error) {
ctx.ErrGrp().Go(func() (err error) {
defer func() {
c.logger.Info("api server stopped")
ctx.Logger().Info("api server stopped")
}()
return c.server.Start()
})

errGrp.Go(func() error {
ctx.ErrGrp().Go(func() error {
for _, ch := range c.pendingChallenges {
c.challengeCh <- ch
}
return nil
})

errGrp.Go(func() (err error) {
ctx.ErrGrp().Go(func() (err error) {
defer func() {
c.logger.Info("challenge handler stopped")
ctx.Logger().Info("challenge handler stopped")
}()
return c.challengeHandler(ctx)
})

c.host.Start(ctx)
c.child.Start(ctx)
return errGrp.Wait()
}

func (c *Challenger) Close() {
c.db.Close()
return ctx.ErrGrp().Wait()
}

func (c *Challenger) RegisterQuerier() {
Expand All @@ -197,16 +185,25 @@ func (c *Challenger) RegisterQuerier() {

return ctx.JSON(status)
})
c.server.RegisterQuerier("/challenges/:page", func(ctx *fiber.Ctx) error {
pageStr := ctx.Params("page")
if pageStr == "" {
pageStr = "1"
c.server.RegisterQuerier("/challenges", func(ctx *fiber.Ctx) error {
next := ctx.Query("next", "")
limit := ctx.QueryInt("limit", 10)
if limit > 100 {
limit = 100
}
page, err := strconv.ParseUint(pageStr, 10, 64)

ulimit, err := types.SafeInt64ToUint64(int64(limit))
if err != nil {
return err
return errors.Wrap(err, "failed to convert limit")
}
res, err := c.QueryChallenges(page)

descOrder := true
orderStr := ctx.Query("order", "desc")
if orderStr == "asc" {
descOrder = false
}

res, err := c.QueryChallenges(next, ulimit, descOrder)
if err != nil {
return err
}
Expand All @@ -230,7 +227,11 @@ func (c *Challenger) RegisterQuerier() {
})
}

func (c *Challenger) getProcessedHeights(ctx context.Context, bridgeId uint64) (l1ProcessedHeight int64, l2ProcessedHeight int64, processedOutputIndex uint64, err error) {
func (c *Challenger) getProcessedHeights(ctx types.Context, bridgeId uint64) (l1ProcessedHeight int64, l2ProcessedHeight int64, processedOutputIndex uint64, err error) {
if c.host.Node().GetSyncedHeight() != 0 && c.child.Node().GetSyncedHeight() != 0 {
return 0, 0, 0, nil
}

var outputL1BlockNumber int64
// get the last submitted output height before the start height from the host
if c.cfg.L2StartHeight != 0 {
Expand Down Expand Up @@ -284,3 +285,7 @@ func (c *Challenger) getProcessedHeights(ctx context.Context, bridgeId uint64) (

return l1ProcessedHeight, l2ProcessedHeight, processedOutputIndex, err
}

func (c Challenger) DB() types.DB {
return c.db
}
Loading
Loading