Skip to content

Commit d00f8d8

Browse files
authored
Refactor db domains (#5)
* Refactor db domains including block, submit and submitstat. * Rename basiccost to basefee.
1 parent 3376358 commit d00f8d8

File tree

10 files changed

+113
-94
lines changed

10 files changed

+113
-94
lines changed

api/tx_api.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func listTx(c *gin.Context) (interface{}, error) {
4646
addrIds := make([]uint64, 0)
4747
txHashes := make([]string, 0)
4848
for _, submit := range *submits {
49-
addrIds = append(addrIds, submit.SenderId)
49+
addrIds = append(addrIds, submit.SenderID)
5050
txHashes = append(txHashes, submit.TxHash)
5151
}
5252
addrMap, err := db.BatchGetAddresses(addrIds)
@@ -61,7 +61,7 @@ func listTx(c *gin.Context) (interface{}, error) {
6161
BlockNum: submit.BlockNumber,
6262
TxHash: "0x" + submit.TxHash,
6363
RootHash: "0x" + submit.RootHash,
64-
Address: addrMap[submit.SenderId].Address,
64+
Address: addrMap[submit.SenderID].Address,
6565
Method: "submit",
6666
}
6767
storageTxs = append(storageTxs, storageTx)
@@ -136,6 +136,7 @@ func getTxBrief(c *gin.Context) (interface{}, error) {
136136
return result, nil
137137
}
138138

139+
// TODO add StartPos, EndPos and PieceCounts when refactor api module
139140
func getTxDetail(c *gin.Context) (interface{}, error) {
140141
var param queryTxParam
141142
if err := c.ShouldBind(&param); err != nil {
@@ -158,12 +159,12 @@ func getTxDetail(c *gin.Context) (interface{}, error) {
158159
}
159160

160161
result := TxDetail{
161-
TxSeq: strconv.FormatUint(submit.SubmissionIndex, 10),
162-
RootHash: "0x" + submit.RootHash,
163-
StartPos: submit.StartPos,
164-
EndPos: submit.StartPos + submit.Length,
165-
PieceCounts: submit.Nodes,
166-
Pieces: nodes,
162+
TxSeq: strconv.FormatUint(submit.SubmissionIndex, 10),
163+
RootHash: "0x" + submit.RootHash,
164+
//StartPos: submit.StartPos,
165+
//EndPos: submit.StartPos + submit.Length,
166+
//PieceCounts: submit.Nodes,
167+
Pieces: nodes,
167168
}
168169

169170
return result, nil

stat/stat.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package stat
33
import (
44
"context"
55
"github.com/Conflux-Chain/go-conflux-util/viper"
6-
"github.com/zero-gravity-labs/zerog-storage-scan/store"
76
"github.com/openweb3/web3go"
87
"github.com/openweb3/web3go/types"
98
"github.com/pkg/errors"
109
"github.com/sirupsen/logrus"
10+
"github.com/zero-gravity-labs/zerog-storage-scan/store"
1111
"sync"
1212
"time"
1313
)

stat/stat_submit.go

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -83,54 +83,57 @@ func (ts *StatSubmit) calculateStat(tr *TimeRange) error {
8383
})
8484
}
8585

86-
// TODO add stat for cost and cost total when refactor db domains
8786
func (ts *StatSubmit) statBasicRange(tr *TimeRange) (*store.SubmitStat, error) {
88-
fileCount, dataSize, err := ts.Db.SubmitStore.Count(tr.start, tr.end)
87+
delta, err := ts.Db.SubmitStore.Count(*tr.start, *tr.end)
8988
if err != nil {
9089
return nil, err
9190
}
92-
fileTotal, dataTotal, err := ts.Db.SubmitStatStore.Sum(nil, tr.start, ts.statType)
91+
total, err := ts.Db.SubmitStatStore.Sum(nil, tr.start, ts.statType)
9392
if err != nil {
9493
return nil, err
9594
}
9695

9796
return &store.SubmitStat{
98-
StatTime: tr.start,
99-
StatType: ts.statType,
100-
FileCount: fileCount,
101-
FileTotal: fileTotal + fileCount,
102-
DataSize: dataSize,
103-
DataTotal: dataTotal + dataSize,
97+
StatTime: tr.start,
98+
StatType: ts.statType,
99+
FileCount: delta.FileCount,
100+
FileTotal: total.FileCount + delta.FileCount,
101+
DataSize: delta.DataSize,
102+
DataTotal: total.DataSize + delta.DataSize,
103+
BaseFee: delta.BaseFee,
104+
BaseFeeTotal: total.BaseFee + delta.BaseFee,
104105
}, nil
105106
}
106107

107-
// TODO add stat for cost and cost total when refactor db domains
108108
func (ts *StatSubmit) statRange(rangEnd *time.Time, srcStatType, descStatType string, latestStat *store.SubmitStat) (*store.SubmitStat, error) {
109109
rangeStart, err := ts.calStatRangeStart(rangEnd, descStatType)
110110
if err != nil {
111111
return nil, err
112112
}
113113

114-
fileCount, dataSize, err := ts.Db.SubmitStatStore.Sum(rangeStart, rangEnd, srcStatType)
114+
srcStat, err := ts.Db.SubmitStatStore.Sum(rangeStart, rangEnd, srcStatType)
115115
if err != nil {
116116
return nil, err
117117
}
118-
fileTotal, dataTotal, err := ts.Db.SubmitStatStore.Sum(nil, rangeStart, descStatType)
118+
destStat, err := ts.Db.SubmitStatStore.Sum(nil, rangeStart, descStatType)
119119
if err != nil {
120120
return nil, err
121121
}
122122

123123
if latestStat != nil {
124-
fileCount += latestStat.FileCount
125-
dataSize += latestStat.DataSize
124+
srcStat.FileCount += latestStat.FileCount
125+
srcStat.DataSize += latestStat.DataSize
126+
srcStat.BaseFee += latestStat.BaseFee
126127
}
127128

128129
return &store.SubmitStat{
129-
StatTime: rangeStart,
130-
StatType: descStatType,
131-
FileCount: fileCount,
132-
FileTotal: fileTotal + fileCount,
133-
DataSize: dataSize,
134-
DataTotal: dataTotal + dataSize,
130+
StatTime: rangeStart,
131+
StatType: descStatType,
132+
FileCount: srcStat.FileCount,
133+
FileTotal: destStat.FileCount + srcStat.FileCount,
134+
DataSize: srcStat.DataSize,
135+
DataTotal: destStat.DataSize + srcStat.DataSize,
136+
BaseFee: srcStat.BaseFee,
137+
BaseFeeTotal: destStat.BaseFee + srcStat.BaseFee,
135138
}, nil
136139
}

store/store.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,23 @@ type MysqlStore struct {
1414
*mysql.Store
1515
*AddressStore
1616
*BlockStore
17+
*ConfigStore
1718
*SubmitStore
1819
*SubmitStatStore
19-
*ConfigStore
2020
}
2121

2222
func MustNewStore(db *gorm.DB) *MysqlStore {
2323
return &MysqlStore{
2424
Store: mysql.NewStore(db),
2525
AddressStore: newAddressStore(db),
2626
BlockStore: newBlockStore(db),
27+
ConfigStore: newConfigStore(db),
2728
SubmitStore: newSubmitStore(db),
2829
SubmitStatStore: newSubmitStatStore(db),
29-
ConfigStore: newConfigStore(db),
3030
}
3131
}
3232

3333
func (ms *MysqlStore) Push(block *Block, submits []*Submit) error {
34-
3534
return ms.Store.DB.Transaction(func(dbTx *gorm.DB) error {
3635
// save blocks
3736
if err := ms.BlockStore.Add(dbTx, block); err != nil {

store/store_block.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (bs *BlockStore) BlockHash(blockNumber uint64) (string, bool, error) {
7070
func (bs *BlockStore) FirstBlockAfterTime(t *time.Time) (uint64, bool, error) {
7171
var blk Block
7272

73-
result := bs.DB.Where("block_time >= ?", t).Order("block_time desc").Limit(1).Find(&blk)
73+
result := bs.DB.Where("block_time >= ?", t).Order("block_time asc").Limit(1).Find(&blk)
7474
if result.Error != nil {
7575
return 0, false, result.Error
7676
}

store/store_config.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ import (
66
"gorm.io/gorm/clause"
77
)
88

9-
const (
10-
CfgDataUplinkRate = "dataUplinkRate"
11-
)
12-
139
type Config struct {
1410
Name string `gorm:"size:32;primaryKey"`
1511
Value string `gorm:"size:512"`

store/store_submit.go

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,65 @@
11
package store
22

33
import (
4-
"encoding/hex"
4+
"encoding/json"
55
"github.com/Conflux-Chain/go-conflux-util/store/mysql"
6-
"github.com/zero-gravity-labs/zerog-storage-client/contract"
6+
"github.com/ethereum/go-ethereum/common"
77
"github.com/openweb3/web3go/types"
88
"github.com/pkg/errors"
9+
"github.com/shopspring/decimal"
10+
"github.com/zero-gravity-labs/zerog-storage-client/contract"
911
"gorm.io/gorm"
12+
"math/big"
1013
"time"
1114
)
1215

1316
type Submit struct {
14-
ID uint64 `gorm:"primaryKey;index:idx_sender_id,priority:2"`
15-
BlockNumber uint64 `gorm:"not null;index:idx_bn"`
16-
TxHash string `gorm:"type:varchar(64);not null;index:idx_hash,length:10"`
17-
CreatedAt *time.Time `gorm:"not null;index:idx_createdAt,sort:desc"`
18-
Sender string `gorm:"-"`
19-
SenderId uint64 `gorm:"not null;index:idx_sender_id,priority:1"`
20-
RootHash string `gorm:"size:64;index:idx_root,length:10"`
21-
Identity string `gorm:"size:64;not null"`
22-
SubmissionIndex uint64 `gorm:"not null"`
23-
StartPos uint64 `gorm:"not null"`
24-
Length uint64 `gorm:"not null"`
25-
SubmissionLength uint64 `gorm:"not null"`
26-
Nodes uint64 `gorm:"not null"`
17+
ID uint64 `gorm:"index:idx_sender_id,priority:2"`
18+
BlockNumber uint64 `gorm:"not null;index:idx_bn"`
19+
BlockTime time.Time `gorm:"not null;index:idx_blockTime,sort:desc"`
20+
TxHash string `gorm:"size:66;not null;index:idx_hash"`
21+
22+
SubmissionIndex uint64 `gorm:"not null"`
23+
RootHash string `gorm:"size:66;index:idx_root"`
24+
Sender string `gorm:"-"`
25+
SenderID uint64 `gorm:"not null;index:idx_sender_id,priority:1"`
26+
Length uint64 `gorm:"not null"`
27+
Finalized bool `gorm:"default:false"`
28+
Value decimal.Decimal `gorm:"type:varchar(78);not null"`
29+
30+
Extra []byte `gorm:"type:mediumText"` // json field
2731
}
2832

29-
func NewSubmit(blockTime *time.Time, log *types.Log, filter *contract.FlowFilterer) (*Submit, error) {
33+
type SubmitExtra struct {
34+
Identity common.Hash `json:"identity"`
35+
StartPos *big.Int `json:"startPos"`
36+
Submission contract.Submission `json:"submission"`
37+
}
38+
39+
func NewSubmit(blockTime time.Time, log *types.Log, filter *contract.FlowFilterer) (*Submit, error) {
3040
flowSubmit, err := filter.ParseSubmit(*log.ToEthLog())
3141
if err != nil {
3242
return nil, err
3343
}
3444

45+
extra, err := json.Marshal(SubmitExtra{
46+
Identity: flowSubmit.Identity,
47+
StartPos: flowSubmit.StartPos,
48+
Submission: flowSubmit.Submission,
49+
})
50+
if err != nil {
51+
return nil, err
52+
}
53+
3554
submit := &Submit{
36-
BlockNumber: log.BlockNumber,
37-
TxHash: log.TxHash.String()[2:],
38-
CreatedAt: blockTime,
39-
Sender: flowSubmit.Sender.String()[2:],
40-
Identity: hex.EncodeToString(flowSubmit.Identity[:]),
41-
SubmissionIndex: flowSubmit.SubmissionIndex.Uint64(),
42-
StartPos: flowSubmit.StartPos.Uint64(),
43-
Length: flowSubmit.Length.Uint64(),
44-
SubmissionLength: flowSubmit.Submission.Length.Uint64(),
45-
Nodes: uint64(len(flowSubmit.Submission.Nodes)),
55+
BlockNumber: log.BlockNumber,
56+
BlockTime: blockTime,
57+
TxHash: log.TxHash.String(),
58+
SubmissionIndex: flowSubmit.SubmissionIndex.Uint64(),
59+
Sender: flowSubmit.Sender.String(),
60+
Length: flowSubmit.Submission.Length.Uint64(),
61+
Value: decimal.NewFromBigInt(big.NewInt(0), 0),
62+
Extra: extra,
4663
}
4764

4865
return submit, nil
@@ -70,18 +87,16 @@ func (ss *SubmitStore) Pop(dbTx *gorm.DB, block uint64) error {
7087
return dbTx.Where("block_number >= ?", block).Delete(&Submit{}).Error
7188
}
7289

73-
func (ss *SubmitStore) Count(startTime, endTime *time.Time) (uint64, uint64, error) {
74-
var result struct {
75-
FileCount int64
76-
DataSize int64
77-
}
78-
err := ss.DB.Model(&Submit{}).Select("count(id) as file_count, IFNULL(sum(submission_length), 0) as data_size").
79-
Where("created_at >= ? and created_at < ?", startTime, endTime).Find(&result).Error
90+
func (ss *SubmitStore) Count(startTime, endTime time.Time) (*SubmitStatResult, error) {
91+
var result SubmitStatResult
92+
err := ss.DB.Model(&Submit{}).Select(`count(id) as file_count, IFNULL(sum(length), 0) as data_size,
93+
IFNULL(sum(value), 0) as base_fee`).Where("block_time >= ? and block_time < ?", startTime, endTime).
94+
Find(&result).Error
8095
if err != nil {
81-
return 0, 0, err
96+
return nil, err
8297
}
8398

84-
return uint64(result.FileCount), uint64(result.DataSize), nil
99+
return &result, nil
85100
}
86101

87102
func (ss *SubmitStore) FirstWithoutRootHash() (*Submit, error) {

store/store_submit_stat.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ import (
88
)
99

1010
type SubmitStat struct {
11-
ID uint64 `gorm:"primaryKey" json:"-"`
12-
StatTime *time.Time `gorm:"not null;index:idx_statTime_statType,unique,priority:1" json:"statTime"`
13-
StatType string `gorm:"type:char(3);not null;index:idx_statTime_statType,unique,priority:2" json:"-"`
14-
FileCount uint64 `gorm:"not null;default:0" json:"fileCount"` // Number of files in a specific time interval
15-
FileTotal uint64 `gorm:"not null;default:0" json:"fileTotal"` // Total number of files by a certain time
16-
DataSize uint64 `gorm:"not null;default:0" json:"dataSize"` // Size of storage data in a specific time interval
17-
DataTotal uint64 `gorm:"not null;default:0" json:"dataTotal"` // Total Size of storage data by a certain time
11+
ID uint64 `gorm:"primaryKey" json:"-"`
12+
StatTime *time.Time `gorm:"not null;index:idx_statTime_statType,unique,priority:1" json:"statTime"`
13+
StatType string `gorm:"type:char(3);not null;index:idx_statTime_statType,unique,priority:2" json:"-"`
14+
FileCount uint64 `gorm:"not null;default:0" json:"fileCount"` // Number of files in a specific time interval
15+
FileTotal uint64 `gorm:"not null;default:0" json:"fileTotal"` // Total number of files by a certain time
16+
DataSize uint64 `gorm:"not null;default:0" json:"dataSize"` // Size of storage data in a specific time interval
17+
DataTotal uint64 `gorm:"not null;default:0" json:"dataTotal"` // Total Size of storage data by a certain time
18+
BaseFee uint64 `gorm:"not null;default:0" json:"baseFee"` // The basic cost for storage
19+
BaseFeeTotal uint64 `gorm:"not null;default:0" json:"baseFeeTotal"` // The total basic cost for storage
1820
}
1921

2022
func (SubmitStat) TableName() string {
@@ -43,12 +45,19 @@ func (t *SubmitStatStore) LastByType(statType string) (*SubmitStat, error) {
4345
return &submitStat, nil
4446
}
4547

46-
func (t *SubmitStatStore) Sum(startTime, endTime *time.Time, statType string) (uint64, uint64, error) {
48+
type SubmitStatResult struct {
49+
FileCount uint64
50+
DataSize uint64
51+
BaseFee uint64
52+
}
53+
54+
func (t *SubmitStatStore) Sum(startTime, endTime *time.Time, statType string) (*SubmitStatResult, error) {
4755
if startTime == nil && endTime == nil {
48-
return 0, 0, errors.New("At least provide one parameter for startTime and endTime")
56+
return nil, errors.New("At least provide one parameter for startTime and endTime")
4957
}
5058

51-
db := t.DB.Model(&SubmitStat{}).Select("IFNULL(sum(file_count), 0) as file_sum, IFNULL(sum(data_size), 0) as data_sum")
59+
db := t.DB.Model(&SubmitStat{}).Select(`IFNULL(sum(file_count), 0) as file_count,
60+
IFNULL(sum(data_size), 0) as data_size, IFNULL(sum(base_fee), 0) as base_fee`)
5261
if startTime != nil && endTime != nil {
5362
db = db.Where("stat_time >= ? and stat_time < ? and stat_type = ?", startTime, endTime, statType)
5463
}
@@ -59,17 +68,13 @@ func (t *SubmitStatStore) Sum(startTime, endTime *time.Time, statType string) (u
5968
db = db.Where("stat_time < ? and stat_type = ?", endTime, statType)
6069
}
6170

62-
var sum struct {
63-
FileSum int64
64-
DataSum int64
65-
}
66-
71+
var sum SubmitStatResult
6772
err := db.Find(&sum).Error
6873
if err != nil {
69-
return 0, 0, err
74+
return nil, err
7075
}
7176

72-
return uint64(sum.FileSum), uint64(sum.DataSum), nil
77+
return &sum, nil
7378
}
7479

7580
func (t *SubmitStatStore) Add(dbTx *gorm.DB, submitStat []*SubmitStat) error {

sync/catchup.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ func (s *CatchupSyncer) convertSubmits(logs []types.Log, blockNum2TimeMap map[ui
210210
for _, log := range logs {
211211
ts := blockNum2TimeMap[log.BlockNumber]
212212
blockTime := time.Unix(int64(ts), 0)
213-
submit, err := store.NewSubmit(&blockTime, &log, nhContract.DummyFlowFilterer())
213+
submit, err := store.NewSubmit(blockTime, &log, nhContract.DummyFlowFilterer())
214214
if err != nil {
215215
return nil, err
216216
}
@@ -220,7 +220,7 @@ func (s *CatchupSyncer) convertSubmits(logs []types.Log, blockNum2TimeMap map[ui
220220
return nil, err
221221
}
222222

223-
submit.SenderId = senderId
223+
submit.SenderID = senderId
224224
submits = append(submits, submit)
225225
}
226226

0 commit comments

Comments
 (0)