Skip to content

Commit 077cc44

Browse files
committed
update sql and fix bugs
1 parent 1dc2407 commit 077cc44

4 files changed

Lines changed: 150 additions & 98 deletions

File tree

deploy/mysql.sql

Lines changed: 105 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -13,138 +13,150 @@ DROP TABLE IF EXISTS `sync_blocks`;
1313
CREATE TABLE `sync_blocks`
1414
(
1515
`id` bigint NOT NULL AUTO_INCREMENT,
16-
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
17-
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
18-
`blockchain` varchar(32) NOT NULL COMMENT ' chain name',
19-
`miner` varchar(42) NOT NULL COMMENT ' miner',
20-
`block_time` bigint NOT NULL COMMENT ' block_time',
21-
`block_number` bigint NOT NULL COMMENT ' block_number',
22-
`block_hash` varchar(66) NOT NULL COMMENT ' block hash',
23-
`tx_count` bigint NOT NULL COMMENT ' tx count',
24-
`event_count` bigint NOT NULL COMMENT ' event count',
25-
`parent_hash` varchar(66) NOT NULL COMMENT ' parent hash',
26-
`status` varchar(32) NOT NULL COMMENT ' status',
27-
`check_count` bigint NOT NULL COMMENT ' check count',
16+
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
17+
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
18+
`blockchain` varchar(32) NOT NULL,
19+
`miner` varchar(42) NOT NULL,
20+
`block_time` bigint NOT NULL,
21+
`block_number` bigint NOT NULL,
22+
`block_hash` varchar(66) NOT NULL,
23+
`tx_count` bigint NOT NULL,
24+
`event_count` bigint NOT NULL,
25+
`parent_hash` varchar(66) NOT NULL,
26+
`status` varchar(32) NOT NULL,
27+
`check_count` bigint NOT NULL,
2828
PRIMARY KEY (`id`),
29+
KEY `tx_count` (`tx_count`),
2930
KEY `status_index` (`status`),
30-
KEY `tx_count_index` (`tx_count`),
31-
KEY `check_count_index` (`check_count`)
31+
KEY `check_count` (`check_count`)
3232
) ENGINE = InnoDB
33-
AUTO_INCREMENT = 2923365
34-
DEFAULT CHARSET = utf8mb4
35-
COLLATE = utf8mb4_0900_ai_ci;
36-
33+
AUTO_INCREMENT = 3343515
34+
DEFAULT CHARSET = utf8mb3;
3735
-- ----------------------------
3836
-- Table structure for sync_events
3937
-- ----------------------------
4038
DROP TABLE IF EXISTS `sync_events`;
4139
CREATE TABLE `sync_events`
4240
(
43-
`id` bigint NOT NULL AUTO_INCREMENT,
44-
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
45-
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
46-
`sync_block_id` bigint NOT NULL COMMENT ' sync_block_id',
47-
`blockchain` varchar(32) NOT NULL COMMENT ' blockchain',
48-
`block_time` bigint NOT NULL COMMENT ' block_time',
49-
`block_number` bigint NOT NULL COMMENT ' block_number',
50-
`block_hash` varchar(66) NOT NULL COMMENT ' block_hash',
51-
`block_log_indexed` bigint NOT NULL COMMENT ' block_log_indexed',
52-
`tx_index` bigint NOT NULL COMMENT ' tx_index',
53-
`tx_hash` varchar(66) NOT NULL COMMENT ' tx_hash',
54-
`event_name` varchar(32) NOT NULL COMMENT ' event_name',
55-
`event_hash` varchar(66) NOT NULL COMMENT ' event_hash',
56-
`contract_address` varchar(42) NOT NULL COMMENT ' contract_address',
57-
`data` json NOT NULL COMMENT ' data',
58-
`status` varchar(32) NOT NULL COMMENT ' status',
59-
`retry_count` bigint DEFAULT '0' COMMENT 'retry_count',
41+
`id` bigint NOT NULL AUTO_INCREMENT,
42+
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
43+
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
44+
`sync_block_id` bigint NOT NULL,
45+
`blockchain` varchar(32) NOT NULL,
46+
`block_time` bigint NOT NULL,
47+
`block_number` bigint NOT NULL,
48+
`block_hash` varchar(66) NOT NULL,
49+
`block_log_indexed` bigint NOT NULL,
50+
`tx_index` bigint NOT NULL,
51+
`tx_hash` varchar(66) NOT NULL,
52+
`event_name` varchar(32) NOT NULL,
53+
`event_hash` varchar(66) NOT NULL,
54+
`contract_address` varchar(42) NOT NULL,
55+
`data` varchar(256) NOT NULL,
56+
`status` varchar(32) NOT NULL,
57+
`retry_count` bigint NOT NULL,
6058
PRIMARY KEY (`id`),
6159
KEY `status_index` (`status`)
6260
) ENGINE = InnoDB
63-
AUTO_INCREMENT = 1011299
64-
DEFAULT CHARSET = utf8mb4
65-
COLLATE = utf8mb4_0900_ai_ci;
61+
AUTO_INCREMENT = 71494
62+
DEFAULT CHARSET = utf8mb3;
6663

6764

6865
-- ----------------------------
6966
-- Table structure for dispute_game
7067
-- ----------------------------
71-
DROP TABLE IF EXISTS dispute_game;
72-
CREATE TABLE IF NOT EXISTS dispute_game
68+
DROP TABLE IF EXISTS `dispute_game`;
69+
CREATE TABLE `dispute_game`
7370
(
7471
`id` bigint NOT NULL AUTO_INCREMENT,
75-
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
76-
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
77-
`sync_block_id` bigint NOT NULL COMMENT ' sync_block_id',
78-
`blockchain` varchar(32) NOT NULL COMMENT ' blockchain',
79-
`block_time` bigint NOT NULL COMMENT ' block_time',
80-
`block_number` bigint NOT NULL COMMENT ' block_number',
81-
`block_hash` varchar(66) NOT NULL COMMENT ' block_hash',
82-
`block_log_indexed` bigint NOT NULL COMMENT ' block_log_indexed',
83-
`tx_index` bigint NOT NULL COMMENT ' tx_index',
84-
`tx_hash` varchar(66) NOT NULL COMMENT ' tx_hash',
85-
`event_name` varchar(32) NOT NULL COMMENT ' event_name',
86-
`event_hash` varchar(66) NOT NULL COMMENT ' event_hash',
87-
`contract_address` varchar(42) NOT NULL COMMENT ' contract_address',
72+
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
73+
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
74+
`sync_block_id` bigint NOT NULL,
75+
`blockchain` varchar(32) NOT NULL,
76+
`block_time` bigint NOT NULL,
77+
`block_number` bigint NOT NULL,
78+
`block_hash` varchar(66) NOT NULL,
79+
`block_log_indexed` bigint NOT NULL,
80+
`tx_index` bigint NOT NULL,
81+
`tx_hash` varchar(66) NOT NULL,
82+
`event_name` varchar(32) NOT NULL,
83+
`event_hash` varchar(66) NOT NULL,
84+
`contract_address` varchar(42) NOT NULL,
8885
`game_contract` varchar(42) NOT NULL,
8986
`game_type` int NOT NULL,
9087
`l2_block_number` bigint NOT NULL,
91-
`status` int NOT NULL,
92-
`computed` tinyint(1) NOT NULL DEFAULT 0 COMMENT ' 1-already get game credit 0- not yet',
88+
`status` tinyint NOT NULL,
89+
`computed` tinyint(1) NOT NULL DEFAULT '0',
90+
`calculate_lost` tinyint(1) NOT NULL DEFAULT '0',
91+
`on_chain_status` varchar(32) NOT NULL DEFAULT 'valid',
92+
`claim_data_len` bigint NOT NULL DEFAULT '1',
93+
`get_len_status` tinyint(1) NOT NULL DEFAULT '0',
9394
PRIMARY KEY (`id`),
9495
KEY `status_index` (`status`),
95-
KEY `dispute_game_index` (`contract_address`, `game_contract`)
96-
);
96+
KEY `dispute_game_index` (`contract_address`, `game_contract`),
97+
KEY `dispute_on_chain_status_index` (`on_chain_status`),
98+
KEY `dispute_claim_data_len_index` (`claim_data_len`)
99+
) ENGINE = InnoDB
100+
AUTO_INCREMENT = 35578
101+
DEFAULT CHARSET = utf8mb3;
97102

98103
-- ----------------------------
99104
-- Table structure for game_claim_data
100105
-- ----------------------------
101-
DROP TABLE IF EXISTS game_claim_data;
102-
CREATE TABLE IF NOT EXISTS game_claim_data
106+
DROP TABLE IF EXISTS `game_claim_data`;
107+
CREATE TABLE `game_claim_data`
103108
(
104-
`id` bigint NOT NULL AUTO_INCREMENT,
105-
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
106-
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
107-
`game_contract` varchar(42) NOT NULL,
108-
`data_index` int NOT NULL,
109-
`parent_index` bigint NOT NULL,
110-
`countered_by` varchar(42) NOT NULL,
111-
`claimant` varchar(64) NOT NULL,
112-
`bond` bigint NOT NULL,
113-
`claim` varchar(64) NOT NULL,
114-
`position` bigint NOT NULL,
115-
`clock` bigint NOT NULL,
116-
`output_block` bigint NOT NULL,
117-
`event_id` bigint NOT NULL,
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 NOT NULL,
122+
`event_id` bigint NOT NULL,
123+
`on_chain_status` varchar(32) NOT NULL DEFAULT 'valid',
118124
PRIMARY KEY (`id`),
119-
KEY `credit_index` (`game_contract`, `data_index`)
120-
);
125+
KEY `claim_on_chain_status_index` (`on_chain_status`)
126+
) ENGINE = InnoDB
127+
AUTO_INCREMENT = 36273
128+
DEFAULT CHARSET = utf8mb3;
121129

122130
-- ----------------------------
123131
-- Table structure for game_credit
124132
-- ----------------------------
125-
DROP TABLE IF EXISTS game_credit;
126-
CREATE TABLE IF NOT EXISTS game_credit
133+
DROP TABLE IF EXISTS `game_credit`;
134+
CREATE TABLE `game_credit`
127135
(
128-
`id` bigint NOT NULL AUTO_INCREMENT,
129-
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
130-
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
131-
`game_contract` varchar(42) NOT NULL,
132-
`address` varchar(64) NOT NULL,
133-
`credit` bigint NOT NULL,
136+
`id` bigint NOT NULL AUTO_INCREMENT,
137+
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
138+
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
139+
`game_contract` varchar(42) NOT NULL,
140+
`address` varchar(64) NOT NULL,
141+
`credit` bigint NOT NULL,
134142
PRIMARY KEY (`id`)
135-
);
143+
) ENGINE = InnoDB
144+
AUTO_INCREMENT = 36342
145+
DEFAULT CHARSET = utf8mb3;
136146

137147
-- ----------------------------
138148
-- Table structure for game_credit
139149
-- ----------------------------
140-
DROP TABLE IF EXISTS game_lost_bond;
141-
CREATE TABLE IF NOT EXISTS game_lost_bond
150+
DROP TABLE IF EXISTS `game_lost_bonds`;
151+
CREATE TABLE `game_lost_bonds`
142152
(
143-
`id` bigint NOT NULL AUTO_INCREMENT,
144-
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
145-
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
146-
`game_contract` varchar(42) NOT NULL,
147-
`address` varchar(64) NOT NULL,
148-
`bond` bigint NOT NULL,
153+
`id` bigint NOT NULL AUTO_INCREMENT,
154+
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
155+
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
156+
`game_contract` varchar(42) NOT NULL,
157+
`address` varchar(64) NOT NULL,
158+
`bond` varchar(128) NOT NULL,
149159
PRIMARY KEY (`id`)
150-
)
160+
) ENGINE = InnoDB
161+
AUTO_INCREMENT = 14080
162+
DEFAULT CHARSET = utf8mb3;

internal/handler/logFilter.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,32 @@ func LogsToEvents(ctx *svc.ServiceContext, logs []types.Log, syncBlockID int64)
4646

4747
blockTime := blockTimes[cast.ToInt64(vlog.BlockNumber)]
4848
if blockTime == 0 {
49-
block, err := ctx.L1RPC.BlockByNumber(context.Background(), big.NewInt(cast.ToInt64(vlog.BlockNumber)))
49+
blockNumber := cast.ToInt64(vlog.BlockNumber)
50+
log.Infof("[LogsToEvents] Fetching block info for block number: %d, txHash: %s", blockNumber, vlog.TxHash.Hex())
51+
52+
// Try to get block using L1RPC client first
53+
block, err := ctx.L1RPC.BlockByNumber(context.Background(), big.NewInt(blockNumber))
5054
if err != nil {
51-
return nil, errors.WithStack(err)
55+
log.Errorf("[LogsToEvents] BlockByNumber failed for block %d, txHash: %s, error: %s", blockNumber, vlog.TxHash.Hex(), err.Error())
56+
57+
// If error contains "transaction type not supported", try alternative approach
58+
if strings.Contains(err.Error(), "transaction type not supported") {
59+
log.Infof("[LogsToEvents] Attempting to get block timestamp using header only for block %d", blockNumber)
60+
header, headerErr := ctx.L1RPC.HeaderByNumber(context.Background(), big.NewInt(blockNumber))
61+
if headerErr != nil {
62+
log.Errorf("[LogsToEvents] HeaderByNumber also failed for block %d: %s", blockNumber, headerErr.Error())
63+
return nil, errors.WithStack(err)
64+
}
65+
blockTime = cast.ToInt64(header.Time)
66+
blockTimes[blockNumber] = blockTime
67+
log.Infof("[LogsToEvents] Successfully got block timestamp %d for block %d using header", blockTime, blockNumber)
68+
} else {
69+
return nil, errors.WithStack(err)
70+
}
71+
} else {
72+
blockTime = cast.ToInt64(block.Time())
73+
blockTimes[blockNumber] = blockTime
5274
}
53-
blockTime = cast.ToInt64(block.Time())
5475
}
5576
data, err := Event.Data(vlog)
5677
if err != nil {

internal/handler/syncBlock.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ func SyncBlock(ctx *svc.ServiceContext) {
3434
log.Infof("[Handler.SyncBlock]SyncedBlockHash:%s", ctx.SyncedBlockHash.String())
3535

3636
for {
37+
// Check pending blocks count before syncing new blocks
38+
var pendingCount int64
39+
err := ctx.DB.Model(&schema.SyncBlock{}).Where("status = ?", schema.BlockPending).Count(&pendingCount).Error
40+
if err != nil {
41+
log.Errorf("[Handler.SyncBlock] Check pending blocks count error: %s\n", errors.WithStack(err))
42+
time.Sleep(3 * time.Second)
43+
continue
44+
}
45+
46+
// If pending blocks reach 40, pause block sync to save RPC traffic for other processing
47+
if pendingCount >= 40 {
48+
log.Infof("[Handler.SyncBlock] Pending blocks count (%d) reached limit (40), pausing block sync\n", pendingCount)
49+
time.Sleep(10 * time.Second)
50+
continue
51+
}
52+
3753
syncingBlockNumber := ctx.SyncedBlockNumber + 1
3854
log.Infof("[Handler.SyncBlock] Try to sync block number: %d\n", syncingBlockNumber)
3955

internal/handler/syncEvent.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ func SyncEvent(ctx *svc.ServiceContext) {
4040
defer _wg.Done()
4141
if block.Status == schema.BlockPending {
4242
// add events & block.status= valid
43+
log.Infof("[Handler.SyncEvent] Processing pending block %d (hash: %s)", block.BlockNumber, block.BlockHash)
4344
err = HandlePendingBlock(ctx, block)
4445
if err != nil {
45-
log.Errorf("[Handler.SyncEvent] HandlePendingBlock err: %s\n", errors.WithStack(err))
46+
log.Errorf("[Handler.SyncEvent] HandlePendingBlock err for block %d (hash: %s): %s\n", block.BlockNumber, block.BlockHash, errors.WithStack(err))
4647
time.Sleep(500 * time.Millisecond)
4748
}
4849
} else if block.Status == schema.BlockRollback {
@@ -63,10 +64,12 @@ func HandlePendingBlock(ctx *svc.ServiceContext, block schema.SyncBlock) error {
6364
log.Infof("[Handler.SyncEvent.PendingBlock]Start: %d, %s \n", block.BlockNumber, block.BlockHash)
6465
log.Infof("[Handler.SyncEvent.PendingBlock]GetContracts: %v\n", blockchain.GetContracts())
6566
log.Infof("[Handler.SyncEvent.PendingBlock]GetEvents: %v\n", blockchain.GetEvents())
67+
68+
log.Infof("[Handler.SyncEvent.PendingBlock] About to call LogFilter for block %d", block.BlockNumber)
6669
events, err := LogFilter(ctx, block, blockchain.GetContracts(), [][]common.Hash{blockchain.GetEvents()})
6770
log.Infof("[Handler.SyncEvent.PendingBlock] block %d, events number is %d:", block.BlockNumber, len(events))
6871
if err != nil {
69-
log.Errorf("[Handler.SyncEvent.PendingBlock] Log filter err: %s\n", err)
72+
log.Errorf("[Handler.SyncEvent.PendingBlock] Log filter err for block %d (hash: %s): %s\n", block.BlockNumber, block.BlockHash, err)
7073
return errors.WithStack(err)
7174
}
7275
eventCount := len(events)

0 commit comments

Comments
 (0)