From 0e34efde11dae44a6830515cd5414e77b63e61a2 Mon Sep 17 00:00:00 2001 From: zhouop0 <11733741+zhouop0@users.noreply.github.com> Date: Sun, 7 Jul 2024 18:38:52 +0800 Subject: [PATCH] format overview --- deploy/mysql.sql | 134 --------------------------- docs/sql/mysql.sql | 11 ++- docs/sql/postgres.sql | 1 + internal/api/dispute_game_handler.go | 21 +++++ internal/handler/disputeGame.go | 2 + internal/schema/game_claim_data.go | 1 + main.go | 1 + 7 files changed, 32 insertions(+), 139 deletions(-) delete mode 100644 deploy/mysql.sql diff --git a/deploy/mysql.sql b/deploy/mysql.sql deleted file mode 100644 index 0ab33c0..0000000 --- a/deploy/mysql.sql +++ /dev/null @@ -1,134 +0,0 @@ -Create Database If Not Exists dispute_explorer Character Set UTF8; -USE dispute_explorer; - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - -SET GLOBAL binlog_format = 'ROW'; - --- ---------------------------- --- Table structure for sync_blocks --- ---------------------------- -DROP TABLE IF EXISTS `sync_blocks`; -CREATE TABLE `sync_blocks` -( - `id` bigint NOT NULL AUTO_INCREMENT, - `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `blockchain` varchar(32) NOT NULL COMMENT ' chain name', - `miner` varchar(42) NOT NULL COMMENT ' miner', - `block_time` bigint NOT NULL COMMENT ' block_time', - `block_number` bigint NOT NULL COMMENT ' block_number', - `block_hash` varchar(66) NOT NULL COMMENT ' block hash', - `tx_count` bigint NOT NULL COMMENT ' tx count', - `event_count` bigint NOT NULL COMMENT ' event count', - `parent_hash` varchar(66) NOT NULL COMMENT ' parent hash', - `status` varchar(32) NOT NULL COMMENT ' status', - `check_count` bigint NOT NULL COMMENT ' check count', - PRIMARY KEY (`id`), - KEY `status_index` (`status`), - KEY `tx_count_index` (`tx_count`), - KEY `check_count_index` (`check_count`) -) ENGINE = InnoDB - AUTO_INCREMENT = 2923365 - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_0900_ai_ci; - --- ---------------------------- --- Table structure for sync_events --- ---------------------------- -DROP TABLE IF EXISTS `sync_events`; -CREATE TABLE `sync_events` -( - `id` bigint NOT NULL AUTO_INCREMENT, - `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `sync_block_id` bigint NOT NULL COMMENT ' sync_block_id', - `blockchain` varchar(32) NOT NULL COMMENT ' blockchain', - `block_time` bigint NOT NULL COMMENT ' block_time', - `block_number` bigint NOT NULL COMMENT ' block_number', - `block_hash` varchar(66) NOT NULL COMMENT ' block_hash', - `block_log_indexed` bigint NOT NULL COMMENT ' block_log_indexed', - `tx_index` bigint NOT NULL COMMENT ' tx_index', - `tx_hash` varchar(66) NOT NULL COMMENT ' tx_hash', - `event_name` varchar(32) NOT NULL COMMENT ' event_name', - `event_hash` varchar(66) NOT NULL COMMENT ' event_hash', - `contract_address` varchar(42) NOT NULL COMMENT ' contract_address', - `data` json NOT NULL COMMENT ' data', - `status` varchar(32) NOT NULL COMMENT ' status', - `retry_count` bigint DEFAULT '0' COMMENT 'retry_count', - PRIMARY KEY (`id`), - KEY `status_index` (`status`) -) ENGINE = InnoDB - AUTO_INCREMENT = 1011299 - DEFAULT CHARSET = utf8mb4 - COLLATE = utf8mb4_0900_ai_ci; - - --- ---------------------------- --- Table structure for dispute_game --- ---------------------------- -DROP TABLE IF EXISTS dispute_game; -CREATE TABLE IF NOT EXISTS dispute_game -( - `id` bigint NOT NULL AUTO_INCREMENT, - `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `sync_block_id` bigint NOT NULL COMMENT ' sync_block_id', - `blockchain` varchar(32) NOT NULL COMMENT ' blockchain', - `block_time` bigint NOT NULL COMMENT ' block_time', - `block_number` bigint NOT NULL COMMENT ' block_number', - `block_hash` varchar(66) NOT NULL COMMENT ' block_hash', - `block_log_indexed` bigint NOT NULL COMMENT ' block_log_indexed', - `tx_index` bigint NOT NULL COMMENT ' tx_index', - `tx_hash` varchar(66) NOT NULL COMMENT ' tx_hash', - `event_name` varchar(32) NOT NULL COMMENT ' event_name', - `event_hash` varchar(66) NOT NULL COMMENT ' event_hash', - `contract_address` varchar(42) NOT NULL COMMENT ' contract_address', - `game_contract` varchar(42) NOT NULL, - `game_type` int NOT NULL, - `l2_block_number` bigint NOT NULL, - `status` int NOT NULL, - `computed` tinyint(1) NOT NULL DEFAULT 0 COMMENT ' 1-already get game credit 0- not yet', - PRIMARY KEY (`id`), - KEY `status_index` (`status`), - KEY `dispute_game_index` (`contract_address`, `game_contract`) -); - --- ---------------------------- --- Table structure for game_claim_data --- ---------------------------- -DROP TABLE IF EXISTS game_claim_data; -CREATE TABLE IF NOT EXISTS game_claim_data -( - `id` bigint NOT NULL AUTO_INCREMENT, - `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `game_contract` varchar(42) NOT NULL, - `data_index` int NOT NULL, - `parent_index` bigint NOT NULL, - `countered_by` varchar(42) NOT NULL, - `claimant` varchar(64) NOT NULL, - `bond` bigint NOT NULL, - `claim` varchar(64) NOT NULL, - `position` bigint NOT NULL, - `clock` bigint NOT NULL, - `output_block` bigint NOT NULL, - PRIMARY KEY (`id`), - KEY `credit_index` (`game_contract`, `data_index`) -); - --- ---------------------------- --- Table structure for game_credit --- ---------------------------- -DROP TABLE IF EXISTS game_credit; -CREATE TABLE IF NOT EXISTS game_credit -( - `id` bigint NOT NULL AUTO_INCREMENT, - `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `game_contract` varchar(42) NOT NULL, - `address` varchar(64) NOT NULL, - `credit` numeric NOT NULL, - PRIMARY KEY (`id`) -) diff --git a/docs/sql/mysql.sql b/docs/sql/mysql.sql index 0ab33c0..1a7d56f 100644 --- a/docs/sql/mysql.sql +++ b/docs/sql/mysql.sql @@ -101,11 +101,11 @@ CREATE TABLE IF NOT EXISTS dispute_game DROP TABLE IF EXISTS game_claim_data; CREATE TABLE IF NOT EXISTS game_claim_data ( - `id` bigint NOT NULL AUTO_INCREMENT, - `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `game_contract` varchar(42) NOT NULL, - `data_index` int NOT NULL, + `id` bigint NOT NULL AUTO_INCREMENT, + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `game_contract` varchar(42) NOT NULL, + `data_index` int NOT NULL, `parent_index` bigint NOT NULL, `countered_by` varchar(42) NOT NULL, `claimant` varchar(64) NOT NULL, @@ -114,6 +114,7 @@ CREATE TABLE IF NOT EXISTS game_claim_data `position` bigint NOT NULL, `clock` bigint NOT NULL, `output_block` bigint NOT NULL, + `event_id` bigint NOT NULL, PRIMARY KEY (`id`), KEY `credit_index` (`game_contract`, `data_index`) ); diff --git a/docs/sql/postgres.sql b/docs/sql/postgres.sql index 5646c1e..b6f3483 100644 --- a/docs/sql/postgres.sql +++ b/docs/sql/postgres.sql @@ -94,6 +94,7 @@ CREATE TABLE IF NOT EXISTS game_claim_data position bigint NOT NULL, clock bigint NOT NULL, output_block bigint NOT NUll, + event_id bigint NOT NULL ); CREATE INDEX if not exists dispute_game_data_index ON game_claim_data (game_contract, data_index); diff --git a/internal/api/dispute_game_handler.go b/internal/api/dispute_game_handler.go index a5c3023..3852989 100644 --- a/internal/api/dispute_game_handler.go +++ b/internal/api/dispute_game_handler.go @@ -86,6 +86,11 @@ type Overview struct { TotalCredit string `json:"totalCredit"` } +type AmountPerDay struct { + Amount string `json:"amount"` + Date string `json:"date"` +} + func (h DisputeGameHandler) GetOverview(c *gin.Context) { var gameCount int64 var totalCredit string @@ -96,7 +101,23 @@ func (h DisputeGameHandler) GetOverview(c *gin.Context) { TotalGames: gameCount, TotalCredit: totalCredit, } + c.JSON(http.StatusOK, gin.H{ "data": overview, }) } + +func (h DisputeGameHandler) GetAmountPerDays(c *gin.Context) { + days := cast.ToInt(c.Query("days")) + res := make([]AmountPerDay, 0) + if days == 0 || days > 100 { + days = 15 + } + h.DB.Raw(" select sum(a.bond) amount, DATE_FORMAT(FROM_UNIXTIME(se.block_time),'%Y-%m-%d') date "+ + " from game_claim_data a left join sync_events se on a.event_id = se.id "+ + " where DATE_FORMAT(FROM_UNIXTIME(se.block_time),'%Y-%m-%d') >= DATE_FORMAT((NOW() - INTERVAL ? DAY),'%Y-%m-%d') "+ + " group by date", days).Scan(&res) + c.JSON(http.StatusOK, gin.H{ + "data": res, + }) +} diff --git a/internal/handler/disputeGame.go b/internal/handler/disputeGame.go index e86e697..db0f6bc 100644 --- a/internal/handler/disputeGame.go +++ b/internal/handler/disputeGame.go @@ -97,6 +97,7 @@ func (r *RetryDisputeGameClient) ProcessDisputeGameMove(ctx context.Context, evt Position: data.Position.Uint64(), Clock: data.Clock.Int64(), OutputBlock: outputblock, + EventID: evt.ID, } err = r.DB.Transaction(func(tx *gorm.DB) error { err = tx.Save(claimData).Error @@ -175,6 +176,7 @@ func (r *RetryDisputeGameClient) addDisputeGame(ctx context.Context, evt *schema Position: claimData.Position.Uint64(), Clock: claimData.Clock.Int64(), OutputBlock: l2Block.Uint64(), + EventID: evt.ID, } game := &schema.DisputeGame{ diff --git a/internal/schema/game_claim_data.go b/internal/schema/game_claim_data.go index 5d2673d..4e9113b 100644 --- a/internal/schema/game_claim_data.go +++ b/internal/schema/game_claim_data.go @@ -12,6 +12,7 @@ type GameClaimData struct { Position uint64 `json:"position"` Clock int64 `json:"clock"` OutputBlock uint64 `json:"output_block"` + EventID int64 `json:"event_id"` } func (GameClaimData) TableName() string { diff --git a/main.go b/main.go index 8b0c52d..f7b77cf 100644 --- a/main.go +++ b/main.go @@ -27,6 +27,7 @@ func main() { router.GET("/disputegames/credit/rank", disputeGameHandler.GetCreditRank) router.GET("/disputegames/:address/credit", disputeGameHandler.GetCreditDetails) router.GET("/disputegames/overview", disputeGameHandler.GetOverview) + router.GET("/disputegames/overview/amountperdays", disputeGameHandler.GetAmountPerDays) err := router.Run() if err != nil {