Skip to content

Commit 49734ed

Browse files
committed
fix bugs
1 parent bc9e57e commit 49734ed

4 files changed

Lines changed: 61 additions & 52 deletions

File tree

deploy/mysql.sql

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ CREATE TABLE `dispute_game`
9191
`on_chain_status` varchar(32) NOT NULL DEFAULT 'valid',
9292
`claim_data_len` bigint NOT NULL DEFAULT '1',
9393
`get_len_status` tinyint(1) NOT NULL DEFAULT '0',
94+
`has_frontend_move` tinyint(1) NOT NULL DEFAULT '0',
9495
PRIMARY KEY (`id`),
9596
KEY `status_index` (`status`),
9697
KEY `dispute_game_index` (`contract_address`, `game_contract`),
@@ -106,21 +107,22 @@ CREATE TABLE `dispute_game`
106107
DROP TABLE IF EXISTS `game_claim_data`;
107108
CREATE TABLE `game_claim_data`
108109
(
109-
`id` bigint NOT NULL AUTO_INCREMENT,
110-
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
111-
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
112-
`game_contract` varchar(42) NOT NULL,
113-
`data_index` bigint NOT NULL,
114-
`parent_index` bigint NOT NULL,
115-
`countered_by` varchar(42) NOT NULL,
116-
`claimant` varchar(64) NOT NULL,
117-
`bond` varchar(128) NOT NULL,
118-
`claim` varchar(64) NOT NULL,
119-
`position` varchar(128) NOT NULL,
120-
`clock` varchar(128) NOT NULL,
121-
`output_block` bigint UNSIGNED NOT NULL,
122-
`event_id` bigint UNSIGNED NOT NULL,
123-
`on_chain_status` varchar(32) NOT NULL DEFAULT 'valid',
110+
`id` bigint NOT NULL AUTO_INCREMENT,
111+
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
112+
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
113+
`game_contract` varchar(42) NOT NULL,
114+
`data_index` bigint NOT NULL,
115+
`parent_index` bigint NOT NULL,
116+
`countered_by` varchar(42) NOT NULL,
117+
`claimant` varchar(64) NOT NULL,
118+
`bond` varchar(128) NOT NULL,
119+
`claim` varchar(64) NOT NULL,
120+
`position` varchar(128) NOT NULL,
121+
`clock` varchar(128) NOT NULL,
122+
`output_block` bigint UNSIGNED NOT NULL,
123+
`event_id` bigint UNSIGNED NOT NULL,
124+
`on_chain_status` varchar(32) NOT NULL DEFAULT 'valid',
125+
`is_from_frontend` tinyint(1) NOT NULL DEFAULT '0',
124126
PRIMARY KEY (`id`),
125127
KEY `claim_on_chain_status_index` (`on_chain_status`)
126128
) ENGINE = InnoDB

internal/api/dispute_game_handler.go

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@ import (
77
"net/http"
88

99
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
10-
"github.com/ethereum-optimism/optimism/op-service/eth"
11-
"github.com/ethereum-optimism/optimism/op-service/predeploys"
10+
"github.com/ethereum-optimism/optimism/op-service/sources" // 新增导入
1211
"github.com/ethereum/go-ethereum/accounts/abi/bind"
1312
"github.com/ethereum/go-ethereum/common"
1413
"github.com/ethereum/go-ethereum/ethclient"
1514
config "github.com/optimism-java/dispute-explorer/internal/types"
1615
"github.com/optimism-java/dispute-explorer/pkg/contract"
17-
"github.com/pkg/errors"
1816

1917
"github.com/spf13/cast"
2018

@@ -25,18 +23,20 @@ import (
2523
)
2624

2725
type DisputeGameHandler struct {
28-
Config *config.Config
29-
DB *gorm.DB
30-
L1RPC *ethclient.Client
31-
L2RPC *ethclient.Client
26+
Config *config.Config
27+
DB *gorm.DB
28+
L1RPC *ethclient.Client
29+
L2RPC *ethclient.Client
30+
RollupClient *sources.RollupClient // 新增字段
3231
}
3332

34-
func NewDisputeGameHandler(db *gorm.DB, l1rpc *ethclient.Client, l2rpc *ethclient.Client, config *config.Config) *DisputeGameHandler {
33+
func NewDisputeGameHandler(db *gorm.DB, l1rpc *ethclient.Client, l2rpc *ethclient.Client, config *config.Config, rollupClient *sources.RollupClient) *DisputeGameHandler {
3534
return &DisputeGameHandler{
36-
DB: db,
37-
L1RPC: l1rpc,
38-
L2RPC: l2rpc,
39-
Config: config,
35+
DB: db,
36+
L1RPC: l1rpc,
37+
L2RPC: l2rpc,
38+
Config: config,
39+
RollupClient: rollupClient, // 新增赋值
4040
}
4141
}
4242

@@ -294,22 +294,13 @@ func (h DisputeGameHandler) GetClaimRoot(c *gin.Context) {
294294
}
295295

296296
func (h DisputeGameHandler) getClaimRoot(blockNumber int64) (string, error) {
297-
block, err := h.L2RPC.BlockByNumber(context.Background(), big.NewInt(cast.ToInt64(blockNumber)))
297+
// 使用 RollupClient 替代 eth_getProof
298+
output, err := h.RollupClient.OutputAtBlock(context.Background(), uint64(blockNumber))
298299
if err != nil {
299-
return "", fmt.Errorf("block number is nil %d", blockNumber)
300+
return "", fmt.Errorf("failed to get output at block %d: %w", blockNumber, err)
300301
}
301-
var getProofResponse *eth.AccountResult
302-
err = h.L2RPC.Client().CallContext(context.Background(), &getProofResponse, "eth_getProof",
303-
predeploys.L2ToL1MessagePasserAddr, []common.Hash{}, block.Hash().String())
304-
if err != nil {
305-
return "", fmt.Errorf("call eth_getProof error:%s", errors.WithStack(err))
306-
}
307-
output := &eth.OutputV0{
308-
StateRoot: eth.Bytes32(block.Root()),
309-
MessagePasserStorageRoot: eth.Bytes32(getProofResponse.StorageHash),
310-
BlockHash: block.Hash(),
311-
}
312-
return fmt.Sprint(eth.OutputRoot(output)), nil
302+
303+
return output.OutputRoot.String(), nil
313304
}
314305

315306
type CalculateClaim struct {

internal/types/config.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,16 @@ type Config struct {
1111
LogLevel string `env:"LOG_LEVEL" envDefault:"info"`
1212
// "console","json"
1313
LogFormat string `env:"LOG_FORMAT" envDefault:"console"`
14-
MySQLDataSource string `env:"MYSQL_DATA_SOURCE" envDefault:"root:root@tcp(127.0.0.1:3367)/dispute_explorer?charset=utf8mb4&parseTime=True&loc=Local&multiStatements=true"`
14+
MySQLDataSource string `env:"MYSQL_DATA_SOURCE" envDefault:"root:123456@tcp(127.0.0.1:3306)/dispute_explorer?charset=utf8mb4&parseTime=True&loc=Local&multiStatements=true"`
1515
MySQLMaxIdleConns int `env:"MYSQL_MAX_IDLE_CONNS" envDefault:"10"`
1616
MySQLMaxOpenConns int `env:"MYSQL_MAX_OPEN_CONNS" envDefault:"20"`
1717
MySQLConnMaxLifetime int `env:"MYSQL_CONN_MAX_LIFETIME" envDefault:"3600"`
1818
Blockchain string `env:"BLOCKCHAIN" envDefault:"sepolia"`
1919
L1RPCUrl string `env:"L1_RPC_URL" envDefault:"https://eth-sepolia.g.alchemy.com/v2/RT1mCGRyVMx1F-XlY4Es4Zz-Q8Jrasg6"`
2020
L2RPCUrl string `env:"L2_RPC_URL" envDefault:"https://opt-sepolia.g.alchemy.com/v2/RT1mCGRyVMx1F-XlY4Es4Zz-Q8Jrasg6"`
21-
RPCRateLimit int `env:"RPC_RATE_LIMIT" envDefault:"15"`
22-
RPCRateBurst int `env:"RPC_RATE_BURST" envDefault:"5"`
21+
NodeRpcUrl string `env:"NODE_RPC_URL" envDefault:"https://light-radial-slug.optimism-sepolia.quiknode.pro/e9329f699b371572a8cc5dd22d19d5940bb842a5/"`
22+
RPCRateLimit int `env:"RPC_RATE_LIMIT" envDefault:"5"`
23+
RPCRateBurst int `env:"RPC_RATE_BURST" envDefault:"2"`
2324
FromBlockNumber int64 `env:"FROM_BLOCK_NUMBER" envDefault:"5515562"`
2425
FromBlockHash string `env:"FROM_BLOCK_HASH" envDefault:"0x5205c17557759edaef9120f56af802aeaa2827a60d674a0413e77e9c515bdfba"`
2526
DisputeGameProxyContract string `env:"DISPUTE_GAME_PROXY_CONTRACT" envDefault:"0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1"`

main.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,30 @@ import (
1010
"github.com/optimism-java/dispute-explorer/internal/svc"
1111
"github.com/optimism-java/dispute-explorer/internal/types"
1212
"github.com/optimism-java/dispute-explorer/migration/migrate"
13-
"github.com/optimism-java/dispute-explorer/pkg/log"
13+
disputeLog "github.com/optimism-java/dispute-explorer/pkg/log"
1414
swaggerFiles "github.com/swaggo/files"
1515
ginSwagger "github.com/swaggo/gin-swagger"
16+
17+
"github.com/ethereum-optimism/optimism/op-service/client"
18+
"github.com/ethereum-optimism/optimism/op-service/sources"
19+
gethlog "github.com/ethereum/go-ethereum/log"
1620
)
1721

1822
func main() {
1923
ctx := context.Background()
2024
cfg := types.GetConfig()
21-
log.Init(cfg.LogLevel, cfg.LogFormat)
22-
log.Infof("config: %v\n", cfg)
25+
disputeLog.Init(cfg.LogLevel, cfg.LogFormat)
26+
disputeLog.Infof("config: %v\n", cfg)
2327
sCtx := svc.NewServiceContext(ctx, cfg)
2428
migrate.Migrate(sCtx.DB)
2529
handler.Run(sCtx)
26-
log.Info("listener running...\n")
30+
disputeLog.Info("listener running...\n")
31+
32+
rollupClient := initRollupClient(cfg)
33+
2734
router := gin.Default()
28-
disputeGameHandler := api.NewDisputeGameHandler(sCtx.DB, sCtx.L1RPC, sCtx.L2RPC, cfg)
35+
disputeGameHandler := api.NewDisputeGameHandler(sCtx.DB, sCtx.L1RPC, sCtx.L2RPC, cfg, rollupClient)
2936

30-
// 新增:前端 Move 交易处理器
3137
frontendMoveAPI := api.NewFrontendMoveAPI(sCtx)
3238
docs.SwaggerInfo.Title = "Dispute Game Swagger API"
3339
docs.SwaggerInfo.Description = "This is a dispute-explorer server."
@@ -46,7 +52,6 @@ func main() {
4652
router.POST("/disputegames/calculate/claim", disputeGameHandler.GetGamesClaimByPosition)
4753
router.GET("/disputegames/chainname", disputeGameHandler.GetCurrentBlockChain)
4854

49-
// 新增:前端 Move 交易相关路由
5055
router.POST("/disputegames/frontend-move", frontendMoveAPI.RecordMove) // 记录前端发起的 move 交易
5156
router.GET("/disputegames/:address/frontend-moves", frontendMoveAPI.GetMovesByGame) // 获取指定游戏的前端 move 交易
5257
router.GET("/disputegames/frontend-move/:txhash", frontendMoveAPI.GetMoveByTxHash) // 根据交易哈希获取前端 move 交易详情
@@ -56,7 +61,17 @@ func main() {
5661

5762
err := router.Run(":" + cfg.APIPort)
5863
if err != nil {
59-
log.Errorf("start error %s", err)
64+
disputeLog.Errorf("start error %s", err)
6065
return
6166
}
6267
}
68+
69+
// 新增:初始化 RollupClient 的函数
70+
func initRollupClient(cfg *types.Config) *sources.RollupClient {
71+
rpcClient, err := client.NewRPC(context.Background(), gethlog.New(), cfg.NodeRpcUrl)
72+
if err != nil {
73+
disputeLog.Errorf("failed to connect to node RPC: %v", err)
74+
panic(err)
75+
}
76+
return sources.NewRollupClient(rpcClient)
77+
}

0 commit comments

Comments
 (0)