Skip to content
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

feat: new bridge history apis #1024

Merged
merged 63 commits into from
Dec 28, 2023
Merged
Changes from 1 commit
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
f011fd5
feat: new bridge-history apis
colinlyguo Nov 16, 2023
bdbddc3
update go mod
colinlyguo Dec 6, 2023
0803dd9
refactor
colinlyguo Dec 6, 2023
e79900e
refactor
colinlyguo Dec 6, 2023
5902bee
fix
colinlyguo Dec 6, 2023
7629f06
change config default value
colinlyguo Dec 6, 2023
299f5e4
change Makefile
colinlyguo Dec 6, 2023
a6c72a2
fix
colinlyguo Dec 6, 2023
9bfefa0
update l1 start block height to first queue event
colinlyguo Dec 6, 2023
f031c38
Apply suggestions from code review
colinlyguo Dec 6, 2023
5936cd6
fixes
colinlyguo Dec 6, 2023
5622f8f
tweak
colinlyguo Dec 7, 2023
59c8470
fix batch index update
colinlyguo Dec 7, 2023
01d35d7
add fetching reverted relayed messages and fixes
colinlyguo Dec 7, 2023
a75813e
add PageSize limit
colinlyguo Dec 7, 2023
8587116
Update bridge-history-api/internal/config/config.go
colinlyguo Dec 7, 2023
cc5fd77
tweak
colinlyguo Dec 7, 2023
2f1abc0
address comments of new bridge history api (#1027)
colinlyguo Dec 8, 2023
3676368
fix: avoid duplicated batch updates (#1029)
colinlyguo Dec 11, 2023
7f5c823
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 11, 2023
c4c68ef
chore: auto version bump [bot]
colinlyguo Dec 11, 2023
bee9489
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 11, 2023
3a090ee
chore: auto version bump [bot]
colinlyguo Dec 11, 2023
faec5a5
trigger ci
colinlyguo Dec 11, 2023
e00d5a9
fix bugs
colinlyguo Dec 12, 2023
f11ce33
perf(bridge-history-api): add db indices and concurrent blocks fetchi…
colinlyguo Dec 12, 2023
cd883a3
add batch sync height in db
colinlyguo Dec 12, 2023
ebf7a46
remove useless logs
colinlyguo Dec 13, 2023
1d358fa
tweak logs
colinlyguo Dec 13, 2023
b534aed
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 13, 2023
9b5a7f7
fix go mod tidy
colinlyguo Dec 13, 2023
0da1355
tweak Makefile
colinlyguo Dec 13, 2023
7fe751f
fix ERROR: ON CONFLICT DO UPDATE command cannot affect row a second t…
colinlyguo Dec 13, 2023
04006b3
update message_type in relayed messages
colinlyguo Dec 13, 2023
3f9e500
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 13, 2023
420c96d
go mod tidy
colinlyguo Dec 13, 2023
1075d7d
chore: auto version bump [bot]
colinlyguo Dec 13, 2023
fef9f83
go mod tidy
colinlyguo Dec 13, 2023
bb1a7f6
add 0x prefix in merkle proof
colinlyguo Dec 13, 2023
5c1de26
split relayed failed to failed relayed and relayed tx reverted
colinlyguo Dec 13, 2023
33ec1e1
add withdraw root check
colinlyguo Dec 13, 2023
2f7e329
fix duplicated update reverted txs
colinlyguo Dec 14, 2023
7011c3e
feat: update some layer logic (#1050)
georgehao Dec 14, 2023
9484c1c
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 14, 2023
8d034de
feat: tweak some code (#1052)
georgehao Dec 15, 2023
a5ca547
bug fixes
colinlyguo Dec 16, 2023
5e2fe45
change start height
colinlyguo Dec 16, 2023
91d9926
fix a bug
colinlyguo Dec 17, 2023
ec6e618
fix another bug
colinlyguo Dec 17, 2023
fae11cc
add a case
colinlyguo Dec 17, 2023
60a4cde
add a clarify comment
colinlyguo Dec 17, 2023
3fc6534
add a comment
colinlyguo Dec 17, 2023
16d82f5
fix comment
colinlyguo Dec 17, 2023
e596a38
change some withdraw trie functions internal
colinlyguo Dec 17, 2023
8ee4dd8
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 18, 2023
7ddd1b7
fix a comment
colinlyguo Dec 18, 2023
842e256
fix a bug
colinlyguo Dec 18, 2023
6526878
filter L1 sentMessage in QueueTransaction
colinlyguo Dec 18, 2023
57e4987
feat(bridge-history-api): reorg handling (#1055)
colinlyguo Dec 19, 2023
dc1c18c
feat(bridge-history-api): add metrics (#1056)
colinlyguo Dec 22, 2023
bcd9489
refactor(bridge-history-api): rename some variables (#1057)
colinlyguo Dec 22, 2023
cad9e2b
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 22, 2023
3aa2c90
Merge branch 'develop' into fix-bridge-history-api-write-db
colinlyguo Dec 27, 2023
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
Prev Previous commit
Next Next commit
bug fixes
colinlyguo committed Dec 16, 2023

Verified

This commit was signed with the committer’s verified signature.
commit a5ca547961803e8b834d50259b5087bbcf1c1bbd
18 changes: 11 additions & 7 deletions bridge-history-api/internal/controller/fetcher/l2_fetcher.go
Original file line number Diff line number Diff line change
@@ -119,14 +119,18 @@ func (c *L2MessageFetcher) updateL2WithdrawMessageProofs(ctx context.Context, l2
messageHashes[i] = common.HexToHash(message.MessageHash)
}

proofs := withdrawTrie.AppendMessages(messageHashes)
if len(l2WithdrawMessages) != len(proofs) {
log.Error("invalid proof array length", "L2 withdrawal messages length", len(l2WithdrawMessages), "proofs length", len(proofs))
return fmt.Errorf("invalid proof array length: got %d proofs for %d l2WithdrawMessages", len(proofs), len(l2WithdrawMessages))
}
for i, messageHash := range messageHashes {
proof := withdrawTrie.AppendMessages([]common.Hash{messageHash})
if err != nil {
log.Error("error generating proof", "messageHash", messageHash, "error", err)
return fmt.Errorf("error generating proof for messageHash %s: %v", messageHash, err)
}

for i, proof := range proofs {
l2WithdrawMessages[i].MerkleProof = proof
if len(proof) != 1 {
log.Error("invalid proof len", "got", len(proof), "expected", 1)
return fmt.Errorf("invalid proof len, got: %v, expected: 1", len(proof))
}
l2WithdrawMessages[i].MerkleProof = proof[0]
}

// Verify if local info is correct.
14 changes: 7 additions & 7 deletions bridge-history-api/internal/logic/history_logic.go
Original file line number Diff line number Diff line change
@@ -255,13 +255,13 @@ func (h *HistoryLogic) GetTxsByHashes(ctx context.Context, txHashes []string) ([

func getTxHistoryInfo(message *orm.CrossMessage) *types.TxHistoryInfo {
txHistory := &types.TxHistoryInfo{
MsgHash: message.MessageHash,
Amount: message.TokenAmounts,
L1Token: message.L1TokenAddress,
L2Token: message.L2TokenAddress,
IsL1: orm.MessageType(message.MessageType) == orm.MessageTypeL1SentMessage,
TxStatus: message.TxStatus,
CreatedAt: &message.CreatedAt,
MsgHash: message.MessageHash,
Amount: message.TokenAmounts,
L1Token: message.L1TokenAddress,
L2Token: message.L2TokenAddress,
IsL1: orm.MessageType(message.MessageType) == orm.MessageTypeL1SentMessage,
TxStatus: message.TxStatus,
BlockTimestamp: message.BlockTimestamp,
}
if txHistory.IsL1 {
txHistory.Hash = message.L1TxHash
16 changes: 12 additions & 4 deletions bridge-history-api/internal/orm/cross_message.go
Original file line number Diff line number Diff line change
@@ -38,8 +38,14 @@ type TxStatusType int

// Constants for TxStatusType.
const (
TxStatusTypeUnknown TxStatusType = iota
TxStatusTypeSent
// TxStatusTypeSent is one of the initial statuses for cross-chain messages (the other one is TxStatusTypeSentFailed).
// It is used as the default value to prevent overwriting the transaction status in scenarios where the message status might change
// from a later status (e.g., relayed) back to "sent".
// Example flow:
// 1. A relayed message is processed, setting tx_status to TxStatusTypeRelayed.
// 2. If a sent message is later processed for the same cross-chain message, the tx_status
// should remain as TxStatusTypeRelayed and not be modified back to TxStatusTypeSent.
TxStatusTypeSent TxStatusType = iota
TxStatusTypeSentFailed
TxStatusTypeRelayed
// FailedRelayedMessage event: encoded tx failed, cannot retry. e.g., https://sepolia.scrollscan.com/tx/0xfc7d3ea5ec8dc9b664a5a886c3b33d21e665355057601033481a439498efb79a
@@ -277,9 +283,10 @@ func (c *CrossMessage) InsertOrUpdateL1Messages(ctx context.Context, messages []
}
db = db.WithContext(ctx)
db = db.Model(&CrossMessage{})
// 'tx_status' column is not explicitly assigned during the update to prevent a later status from being overwritten back to "sent".
db = db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "message_hash"}},
DoUpdates: clause.AssignmentColumns([]string{"sender", "receiver", "token_type", "l1_block_number", "l1_tx_hash", "l1_token_address", "l2_token_address", "token_ids", "token_amounts", "message_type", "tx_status", "block_timestamp", "message_nonce"}),
DoUpdates: clause.AssignmentColumns([]string{"sender", "receiver", "token_type", "l1_block_number", "l1_tx_hash", "l1_token_address", "l2_token_address", "token_ids", "token_amounts", "message_type", "block_timestamp", "message_nonce"}),
})
if err := db.Create(messages).Error; err != nil {
return fmt.Errorf("failed to insert message, error: %w", err)
@@ -298,9 +305,10 @@ func (c *CrossMessage) InsertOrUpdateL2Messages(ctx context.Context, messages []
}
db = db.WithContext(ctx)
db = db.Model(&CrossMessage{})
// 'tx_status' column is not explicitly assigned during the update to prevent a later status from being overwritten back to "sent".
db = db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "message_hash"}},
DoUpdates: clause.AssignmentColumns([]string{"sender", "receiver", "token_type", "l2_block_number", "l2_tx_hash", "l1_token_address", "l2_token_address", "token_ids", "token_amounts", "message_type", "tx_status", "block_timestamp", "message_from", "message_to", "message_value", "message_data", "merkle_proof", "message_nonce"}),
DoUpdates: clause.AssignmentColumns([]string{"sender", "receiver", "token_type", "l2_block_number", "l2_tx_hash", "l1_token_address", "l2_token_address", "token_ids", "token_amounts", "message_type", "block_timestamp", "message_from", "message_to", "message_value", "message_data", "merkle_proof", "message_nonce"}),
})
if err := db.Create(messages).Error; err != nil {
return fmt.Errorf("failed to insert message, error: %w", err)
23 changes: 11 additions & 12 deletions bridge-history-api/internal/types/types.go
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@ package types

import (
"net/http"
"time"

"github.com/gin-gonic/gin"
)
@@ -69,17 +68,17 @@ type UserClaimInfo struct {

// TxHistoryInfo the schema of tx history infos
type TxHistoryInfo struct {
Hash string `json:"hash"`
MsgHash string `json:"msgHash"`
Amount string `json:"amount"`
IsL1 bool `json:"isL1"`
L1Token string `json:"l1Token"`
L2Token string `json:"l2Token"`
BlockNumber uint64 `json:"blockNumber"`
TxStatus int `json:"txStatus"`
FinalizeTx *Finalized `json:"finalizeTx"`
ClaimInfo *UserClaimInfo `json:"claimInfo"`
CreatedAt *time.Time `json:"createdTime"`
Hash string `json:"hash"`
MsgHash string `json:"msgHash"`
Amount string `json:"amount"`
IsL1 bool `json:"isL1"`
L1Token string `json:"l1Token"`
L2Token string `json:"l2Token"`
BlockNumber uint64 `json:"blockNumber"`
TxStatus int `json:"txStatus"`
FinalizeTx *Finalized `json:"finalizeTx"`
ClaimInfo *UserClaimInfo `json:"claimInfo"`
BlockTimestamp uint64 `json:"blockTimestamp"`
}

// RenderJSON renders response with json
1 change: 1 addition & 0 deletions bridge-history-api/internal/utils/withdraw_trie.go
Original file line number Diff line number Diff line change
@@ -46,6 +46,7 @@ func (w *WithdrawTrie) Initialize(currentMessageNonce uint64, msgHash common.Has
}

// AppendMessages appends a list of new messages as leaf nodes to the rightest of the tree and returns the proofs for all messages.
// FIXME: The former proofs are wrong when inserting multiple messages.
func (w *WithdrawTrie) AppendMessages(hashes []common.Hash) [][]byte {
length := len(hashes)
if length == 0 {