Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
6e479d69
Commit
6e479d69
authored
Aug 15, 2023
by
Hamdi Allam
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
message hash is the primary key for messages
parent
e3d1af10
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
55 additions
and
87 deletions
+55
-87
bridge_messages.go
indexer/database/bridge_messages.go
+20
-67
bridge_messages_e2e_test.go
indexer/e2e_tests/bridge_messages_e2e_test.go
+6
-6
bridge_transfers_e2e_test.go
indexer/e2e_tests/bridge_transfers_e2e_test.go
+17
-4
20230523_create_schema.sql
indexer/migrations/20230523_create_schema.sql
+8
-6
l1_processor.go
indexer/processor/l1_processor.go
+2
-2
l2_processor.go
indexer/processor/l2_processor.go
+2
-2
No files found.
indexer/database/bridge_messages.go
View file @
6e479d69
...
@@ -3,7 +3,6 @@ package database
...
@@ -3,7 +3,6 @@ package database
import
(
import
(
"errors"
"errors"
"fmt"
"fmt"
"math/big"
"gorm.io/gorm"
"gorm.io/gorm"
...
@@ -17,8 +16,8 @@ import (
...
@@ -17,8 +16,8 @@ import (
*/
*/
type
BridgeMessage
struct
{
type
BridgeMessage
struct
{
Nonce
U256
`gorm:"primaryKey
"`
MessageHash
common
.
Hash
`gorm:"primaryKey;serializer:json
"`
MessageHash
common
.
Hash
`gorm:"serializer:json"`
Nonce
U256
SentMessageEventGUID
uuid
.
UUID
SentMessageEventGUID
uuid
.
UUID
RelayedMessageEventGUID
*
uuid
.
UUID
RelayedMessageEventGUID
*
uuid
.
UUID
...
@@ -38,13 +37,11 @@ type L2BridgeMessage struct {
...
@@ -38,13 +37,11 @@ type L2BridgeMessage struct {
}
}
type
BridgeMessagesView
interface
{
type
BridgeMessagesView
interface
{
L1BridgeMessage
(
*
big
.
Int
)
(
*
L1BridgeMessage
,
error
)
L1BridgeMessage
(
common
.
Hash
)
(
*
L1BridgeMessage
,
error
)
L1BridgeMessageByHash
(
common
.
Hash
)
(
*
L1BridgeMessage
,
error
)
L1BridgeMessageWithFilter
(
BridgeMessage
)
(
*
L1BridgeMessage
,
error
)
LatestL1BridgeMessageNonce
()
(
*
big
.
Int
,
error
)
L2BridgeMessage
(
*
big
.
Int
)
(
*
L2BridgeMessage
,
error
)
L2BridgeMessage
(
common
.
Hash
)
(
*
L2BridgeMessage
,
error
)
L2BridgeMessageByHash
(
common
.
Hash
)
(
*
L2BridgeMessage
,
error
)
L2BridgeMessageWithFilter
(
BridgeMessage
)
(
*
L2BridgeMessage
,
error
)
LatestL2BridgeMessageNonce
()
(
*
big
.
Int
,
error
)
}
}
type
BridgeMessagesDB
interface
{
type
BridgeMessagesDB
interface
{
...
@@ -78,22 +75,13 @@ func (db bridgeMessagesDB) StoreL1BridgeMessages(messages []*L1BridgeMessage) er
...
@@ -78,22 +75,13 @@ func (db bridgeMessagesDB) StoreL1BridgeMessages(messages []*L1BridgeMessage) er
return
result
.
Error
return
result
.
Error
}
}
func
(
db
bridgeMessagesDB
)
L1BridgeMessage
(
nonce
*
big
.
Int
)
(
*
L1BridgeMessage
,
error
)
{
func
(
db
bridgeMessagesDB
)
L1BridgeMessage
(
msgHash
common
.
Hash
)
(
*
L1BridgeMessage
,
error
)
{
var
sentMessage
L1BridgeMessage
return
db
.
L1BridgeMessageWithFilter
(
BridgeMessage
{
MessageHash
:
msgHash
})
result
:=
db
.
gorm
.
Where
(
&
BridgeMessage
{
Nonce
:
U256
{
Int
:
nonce
}})
.
Take
(
&
sentMessage
)
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
}
return
nil
,
result
.
Error
}
return
&
sentMessage
,
nil
}
}
func
(
db
bridgeMessagesDB
)
L1BridgeMessage
ByHash
(
messageHash
common
.
Hash
)
(
*
L1BridgeMessage
,
error
)
{
func
(
db
bridgeMessagesDB
)
L1BridgeMessage
WithFilter
(
filter
BridgeMessage
)
(
*
L1BridgeMessage
,
error
)
{
var
sentMessage
L1BridgeMessage
var
sentMessage
L1BridgeMessage
result
:=
db
.
gorm
.
Where
(
&
BridgeMessage
{
MessageHash
:
messageHash
}
)
.
Take
(
&
sentMessage
)
result
:=
db
.
gorm
.
Where
(
&
filter
)
.
Take
(
&
sentMessage
)
if
result
.
Error
!=
nil
{
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
return
nil
,
nil
...
@@ -104,25 +92,8 @@ func (db bridgeMessagesDB) L1BridgeMessageByHash(messageHash common.Hash) (*L1Br
...
@@ -104,25 +92,8 @@ func (db bridgeMessagesDB) L1BridgeMessageByHash(messageHash common.Hash) (*L1Br
return
&
sentMessage
,
nil
return
&
sentMessage
,
nil
}
}
func
(
db
bridgeMessagesDB
)
LatestL1BridgeMessageNonce
()
(
*
big
.
Int
,
error
)
{
var
sentMessage
L1BridgeMessage
result
:=
db
.
gorm
.
Order
(
"nonce DESC"
)
.
Take
(
&
sentMessage
)
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
}
return
nil
,
result
.
Error
}
return
sentMessage
.
Nonce
.
Int
,
nil
}
/**
* Arbitrary Messages Sent from L2
*/
func
(
db
bridgeMessagesDB
)
MarkRelayedL1BridgeMessage
(
messageHash
common
.
Hash
,
relayEvent
uuid
.
UUID
)
error
{
func
(
db
bridgeMessagesDB
)
MarkRelayedL1BridgeMessage
(
messageHash
common
.
Hash
,
relayEvent
uuid
.
UUID
)
error
{
message
,
err
:=
db
.
L1BridgeMessage
ByHash
(
messageHash
)
message
,
err
:=
db
.
L1BridgeMessage
(
messageHash
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
else
if
message
==
nil
{
}
else
if
message
==
nil
{
...
@@ -134,27 +105,22 @@ func (db bridgeMessagesDB) MarkRelayedL1BridgeMessage(messageHash common.Hash, r
...
@@ -134,27 +105,22 @@ func (db bridgeMessagesDB) MarkRelayedL1BridgeMessage(messageHash common.Hash, r
return
result
.
Error
return
result
.
Error
}
}
/**
* Arbitrary Messages Sent from L2
*/
func
(
db
bridgeMessagesDB
)
StoreL2BridgeMessages
(
messages
[]
*
L2BridgeMessage
)
error
{
func
(
db
bridgeMessagesDB
)
StoreL2BridgeMessages
(
messages
[]
*
L2BridgeMessage
)
error
{
result
:=
db
.
gorm
.
Create
(
&
messages
)
result
:=
db
.
gorm
.
Create
(
&
messages
)
return
result
.
Error
return
result
.
Error
}
}
func
(
db
bridgeMessagesDB
)
L2BridgeMessage
(
nonce
*
big
.
Int
)
(
*
L2BridgeMessage
,
error
)
{
func
(
db
bridgeMessagesDB
)
L2BridgeMessage
(
msgHash
common
.
Hash
)
(
*
L2BridgeMessage
,
error
)
{
var
sentMessage
L2BridgeMessage
return
db
.
L2BridgeMessageWithFilter
(
BridgeMessage
{
MessageHash
:
msgHash
})
result
:=
db
.
gorm
.
Where
(
&
BridgeMessage
{
Nonce
:
U256
{
Int
:
nonce
}})
.
Take
(
&
sentMessage
)
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
}
return
nil
,
result
.
Error
}
return
&
sentMessage
,
nil
}
}
func
(
db
bridgeMessagesDB
)
L2BridgeMessage
ByHash
(
messageHash
common
.
Hash
)
(
*
L2BridgeMessage
,
error
)
{
func
(
db
bridgeMessagesDB
)
L2BridgeMessage
WithFilter
(
filter
BridgeMessage
)
(
*
L2BridgeMessage
,
error
)
{
var
sentMessage
L2BridgeMessage
var
sentMessage
L2BridgeMessage
result
:=
db
.
gorm
.
Where
(
&
BridgeMessage
{
MessageHash
:
messageHash
}
)
.
Take
(
&
sentMessage
)
result
:=
db
.
gorm
.
Where
(
&
filter
)
.
Take
(
&
sentMessage
)
if
result
.
Error
!=
nil
{
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
return
nil
,
nil
...
@@ -165,21 +131,8 @@ func (db bridgeMessagesDB) L2BridgeMessageByHash(messageHash common.Hash) (*L2Br
...
@@ -165,21 +131,8 @@ func (db bridgeMessagesDB) L2BridgeMessageByHash(messageHash common.Hash) (*L2Br
return
&
sentMessage
,
nil
return
&
sentMessage
,
nil
}
}
func
(
db
bridgeMessagesDB
)
LatestL2BridgeMessageNonce
()
(
*
big
.
Int
,
error
)
{
var
sentMessage
L2BridgeMessage
result
:=
db
.
gorm
.
Order
(
"nonce DESC"
)
.
Take
(
&
sentMessage
)
if
result
.
Error
!=
nil
{
if
errors
.
Is
(
result
.
Error
,
gorm
.
ErrRecordNotFound
)
{
return
nil
,
nil
}
return
nil
,
result
.
Error
}
return
sentMessage
.
Nonce
.
Int
,
nil
}
func
(
db
bridgeMessagesDB
)
MarkRelayedL2BridgeMessage
(
messageHash
common
.
Hash
,
relayEvent
uuid
.
UUID
)
error
{
func
(
db
bridgeMessagesDB
)
MarkRelayedL2BridgeMessage
(
messageHash
common
.
Hash
,
relayEvent
uuid
.
UUID
)
error
{
message
,
err
:=
db
.
L2BridgeMessage
ByHash
(
messageHash
)
message
,
err
:=
db
.
L2BridgeMessage
(
messageHash
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
else
if
message
==
nil
{
}
else
if
message
==
nil
{
...
...
indexer/e2e_tests/bridge_messages_e2e_test.go
View file @
6e479d69
...
@@ -57,12 +57,12 @@ func TestE2EBridgeL1CrossDomainMessenger(t *testing.T) {
...
@@ -57,12 +57,12 @@ func TestE2EBridgeL1CrossDomainMessenger(t *testing.T) {
nonceBytes
:=
[
31
]
byte
{
0
:
byte
(
1
)}
nonceBytes
:=
[
31
]
byte
{
0
:
byte
(
1
)}
nonce
:=
new
(
big
.
Int
)
.
SetBytes
(
nonceBytes
[
:
])
nonce
:=
new
(
big
.
Int
)
.
SetBytes
(
nonceBytes
[
:
])
sentMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L1BridgeMessage
(
nonce
)
sentMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L1BridgeMessage
(
parsedMessage
.
MessageHash
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
.
SentMessageEventGUID
)
require
.
NotNil
(
t
,
sentMessage
.
SentMessageEventGUID
)
require
.
Equal
(
t
,
depositInfo
.
DepositTx
.
SourceHash
,
sentMessage
.
TransactionSourceHash
)
require
.
Equal
(
t
,
depositInfo
.
DepositTx
.
SourceHash
,
sentMessage
.
TransactionSourceHash
)
require
.
Equal
(
t
,
parsedMessage
.
MessageHash
,
sentMessage
.
MessageHash
)
require
.
Equal
(
t
,
nonce
.
Uint64
(),
sentMessage
.
Nonce
.
Int
.
Uint64
()
)
require
.
Equal
(
t
,
uint64
(
100
_000
),
sentMessage
.
GasLimit
.
Int
.
Uint64
())
require
.
Equal
(
t
,
uint64
(
100
_000
),
sentMessage
.
GasLimit
.
Int
.
Uint64
())
require
.
Equal
(
t
,
big
.
NewInt
(
params
.
Ether
),
sentMessage
.
Tx
.
Amount
.
Int
)
require
.
Equal
(
t
,
big
.
NewInt
(
params
.
Ether
),
sentMessage
.
Tx
.
Amount
.
Int
)
require
.
Equal
(
t
,
aliceAddr
,
sentMessage
.
Tx
.
FromAddress
)
require
.
Equal
(
t
,
aliceAddr
,
sentMessage
.
Tx
.
FromAddress
)
...
@@ -83,7 +83,7 @@ func TestE2EBridgeL1CrossDomainMessenger(t *testing.T) {
...
@@ -83,7 +83,7 @@ func TestE2EBridgeL1CrossDomainMessenger(t *testing.T) {
return
l2Header
!=
nil
&&
l2Header
.
Number
.
Uint64
()
>=
depositReceipt
.
BlockNumber
.
Uint64
(),
nil
return
l2Header
!=
nil
&&
l2Header
.
Number
.
Uint64
()
>=
depositReceipt
.
BlockNumber
.
Uint64
(),
nil
}))
}))
sentMessage
,
err
=
testSuite
.
DB
.
BridgeMessages
.
L1BridgeMessage
(
nonce
)
sentMessage
,
err
=
testSuite
.
DB
.
BridgeMessages
.
L1BridgeMessage
(
parsedMessage
.
MessageHash
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
.
RelayedMessageEventGUID
)
require
.
NotNil
(
t
,
sentMessage
.
RelayedMessageEventGUID
)
...
@@ -143,12 +143,12 @@ func TestE2EBridgeL2CrossDomainMessenger(t *testing.T) {
...
@@ -143,12 +143,12 @@ func TestE2EBridgeL2CrossDomainMessenger(t *testing.T) {
nonceBytes
:=
[
31
]
byte
{
0
:
byte
(
1
)}
nonceBytes
:=
[
31
]
byte
{
0
:
byte
(
1
)}
nonce
:=
new
(
big
.
Int
)
.
SetBytes
(
nonceBytes
[
:
])
nonce
:=
new
(
big
.
Int
)
.
SetBytes
(
nonceBytes
[
:
])
sentMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
(
nonce
)
sentMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
(
parsedMessage
.
MessageHash
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
.
SentMessageEventGUID
)
require
.
NotNil
(
t
,
sentMessage
.
SentMessageEventGUID
)
require
.
Equal
(
t
,
withdrawalHash
,
sentMessage
.
TransactionWithdrawalHash
)
require
.
Equal
(
t
,
withdrawalHash
,
sentMessage
.
TransactionWithdrawalHash
)
require
.
Equal
(
t
,
parsedMessage
.
MessageHash
,
sentMessage
.
MessageHash
)
require
.
Equal
(
t
,
nonce
.
Uint64
(),
sentMessage
.
Nonce
.
Int
.
Uint64
()
)
require
.
Equal
(
t
,
uint64
(
100
_000
),
sentMessage
.
GasLimit
.
Int
.
Uint64
())
require
.
Equal
(
t
,
uint64
(
100
_000
),
sentMessage
.
GasLimit
.
Int
.
Uint64
())
require
.
Equal
(
t
,
big
.
NewInt
(
params
.
Ether
),
sentMessage
.
Tx
.
Amount
.
Int
)
require
.
Equal
(
t
,
big
.
NewInt
(
params
.
Ether
),
sentMessage
.
Tx
.
Amount
.
Int
)
require
.
Equal
(
t
,
aliceAddr
,
sentMessage
.
Tx
.
FromAddress
)
require
.
Equal
(
t
,
aliceAddr
,
sentMessage
.
Tx
.
FromAddress
)
...
@@ -166,7 +166,7 @@ func TestE2EBridgeL2CrossDomainMessenger(t *testing.T) {
...
@@ -166,7 +166,7 @@ func TestE2EBridgeL2CrossDomainMessenger(t *testing.T) {
}))
}))
// message is marked as relayed
// message is marked as relayed
sentMessage
,
err
=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
(
nonce
)
sentMessage
,
err
=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
(
parsedMessage
.
MessageHash
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
)
require
.
NotNil
(
t
,
sentMessage
.
RelayedMessageEventGUID
)
require
.
NotNil
(
t
,
sentMessage
.
RelayedMessageEventGUID
)
...
...
indexer/e2e_tests/bridge_transfers_e2e_test.go
View file @
6e479d69
...
@@ -74,7 +74,7 @@ func TestE2EBridgeTransfersStandardBridgeETHDeposit(t *testing.T) {
...
@@ -74,7 +74,7 @@ func TestE2EBridgeTransfersStandardBridgeETHDeposit(t *testing.T) {
return
l2Header
!=
nil
&&
l2Header
.
Number
.
Uint64
()
>=
depositReceipt
.
BlockNumber
.
Uint64
(),
nil
return
l2Header
!=
nil
&&
l2Header
.
Number
.
Uint64
()
>=
depositReceipt
.
BlockNumber
.
Uint64
(),
nil
}))
}))
crossDomainBridgeMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L1BridgeMessage
ByHash
(
*
deposit
.
CrossDomainMessageHash
)
crossDomainBridgeMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L1BridgeMessage
(
*
deposit
.
CrossDomainMessageHash
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
.
RelayedMessageEventGUID
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
.
RelayedMessageEventGUID
)
...
@@ -125,7 +125,17 @@ func TestE2EBridgeTransfersOptimismPortalETHReceive(t *testing.T) {
...
@@ -125,7 +125,17 @@ func TestE2EBridgeTransfersOptimismPortalETHReceive(t *testing.T) {
require
.
Nil
(
t
,
deposit
.
CrossDomainMessageHash
)
require
.
Nil
(
t
,
deposit
.
CrossDomainMessageHash
)
// (2) Test Deposit Finalization
// (2) Test Deposit Finalization
// Nothing to do as we rely on the derivation process to include the deposit
depositReceipt
,
err
:=
wait
.
ForReceiptOK
(
context
.
Background
(),
testSuite
.
L2Client
,
types
.
NewTx
(
depositInfo
.
DepositTx
)
.
Hash
())
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
wait
.
For
(
context
.
Background
(),
500
*
time
.
Millisecond
,
func
()
(
bool
,
error
)
{
l2Header
:=
testSuite
.
Indexer
.
L2Processor
.
LatestProcessedHeader
()
return
l2Header
!=
nil
&&
l2Header
.
Number
.
Uint64
()
>=
depositReceipt
.
BlockNumber
.
Uint64
(),
nil
}))
// Still nil as the withdrawal did not occur through the standard bridge
aliceDeposits
,
err
=
testSuite
.
DB
.
BridgeTransfers
.
L1BridgeDepositsByAddress
(
aliceAddr
)
require
.
NoError
(
t
,
err
)
require
.
Nil
(
t
,
aliceDeposits
[
0
]
.
L1BridgeDeposit
.
CrossDomainMessageHash
)
}
}
func
TestE2EBridgeTransfersStandardBridgeETHWithdrawal
(
t
*
testing
.
T
)
{
func
TestE2EBridgeTransfersStandardBridgeETHWithdrawal
(
t
*
testing
.
T
)
{
...
@@ -186,7 +196,7 @@ func TestE2EBridgeTransfersStandardBridgeETHWithdrawal(t *testing.T) {
...
@@ -186,7 +196,7 @@ func TestE2EBridgeTransfersStandardBridgeETHWithdrawal(t *testing.T) {
// bytes of the nonce dedicated to the version. nonce == 0 (first message)
// bytes of the nonce dedicated to the version. nonce == 0 (first message)
require
.
NotNil
(
t
,
withdrawal
.
CrossDomainMessageHash
)
require
.
NotNil
(
t
,
withdrawal
.
CrossDomainMessageHash
)
crossDomainBridgeMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
ByHash
(
*
withdrawal
.
CrossDomainMessageHash
)
crossDomainBridgeMessage
,
err
:=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
(
*
withdrawal
.
CrossDomainMessageHash
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
Nil
(
t
,
crossDomainBridgeMessage
.
RelayedMessageEventGUID
)
require
.
Nil
(
t
,
crossDomainBridgeMessage
.
RelayedMessageEventGUID
)
...
@@ -206,7 +216,7 @@ func TestE2EBridgeTransfersStandardBridgeETHWithdrawal(t *testing.T) {
...
@@ -206,7 +216,7 @@ func TestE2EBridgeTransfersStandardBridgeETHWithdrawal(t *testing.T) {
require
.
Equal
(
t
,
proveReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
ProvenL1TransactionHash
)
require
.
Equal
(
t
,
proveReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
ProvenL1TransactionHash
)
require
.
Equal
(
t
,
finalizeReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
FinalizedL1TransactionHash
)
require
.
Equal
(
t
,
finalizeReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
FinalizedL1TransactionHash
)
crossDomainBridgeMessage
,
err
=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
ByHash
(
*
withdrawal
.
CrossDomainMessageHash
)
crossDomainBridgeMessage
,
err
=
testSuite
.
DB
.
BridgeMessages
.
L2BridgeMessage
(
*
withdrawal
.
CrossDomainMessageHash
)
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
.
RelayedMessageEventGUID
)
require
.
NotNil
(
t
,
crossDomainBridgeMessage
.
RelayedMessageEventGUID
)
...
@@ -283,4 +293,7 @@ func TestE2EBridgeTransfersL2ToL1MessagePasserReceive(t *testing.T) {
...
@@ -283,4 +293,7 @@ func TestE2EBridgeTransfersL2ToL1MessagePasserReceive(t *testing.T) {
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
proveReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
ProvenL1TransactionHash
)
require
.
Equal
(
t
,
proveReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
ProvenL1TransactionHash
)
require
.
Equal
(
t
,
finalizeReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
FinalizedL1TransactionHash
)
require
.
Equal
(
t
,
finalizeReceipt
.
TxHash
,
aliceWithdrawals
[
0
]
.
FinalizedL1TransactionHash
)
// Still nil as the withdrawal did not occur through the standard bridge
require
.
Nil
(
t
,
aliceWithdrawals
[
0
]
.
L2BridgeWithdrawal
.
CrossDomainMessageHash
)
}
}
indexer/migrations/20230523_create_schema.sql
View file @
6e479d69
...
@@ -152,9 +152,10 @@ CREATE TABLE IF NOT EXISTS l2_transaction_withdrawals (
...
@@ -152,9 +152,10 @@ CREATE TABLE IF NOT EXISTS l2_transaction_withdrawals (
-- CrossDomainMessenger
-- CrossDomainMessenger
CREATE
TABLE
IF
NOT
EXISTS
l1_bridge_messages
(
CREATE
TABLE
IF
NOT
EXISTS
l1_bridge_messages
(
nonce
UINT256
NOT
NULL
PRIMARY
KEY
,
message_hash
VARCHAR
NOT
NULL
PRIMARY
KEY
,
message_hash
VARCHAR
UNIQUE
NOT
NULL
,
nonce
UINT256
NOT
NULL
UNIQUE
,
transaction_source_hash
VARCHAR
UNIQUE
NOT
NULL
REFERENCES
l1_transaction_deposits
(
source_hash
),
transaction_source_hash
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_transaction_deposits
(
source_hash
),
sent_message_event_guid
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_contract_events
(
guid
),
sent_message_event_guid
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_contract_events
(
guid
),
relayed_message_event_guid
VARCHAR
UNIQUE
REFERENCES
l2_contract_events
(
guid
),
relayed_message_event_guid
VARCHAR
UNIQUE
REFERENCES
l2_contract_events
(
guid
),
...
@@ -168,9 +169,10 @@ CREATE TABLE IF NOT EXISTS l1_bridge_messages(
...
@@ -168,9 +169,10 @@ CREATE TABLE IF NOT EXISTS l1_bridge_messages(
timestamp
INTEGER
NOT
NULL
CHECK
(
timestamp
>
0
)
timestamp
INTEGER
NOT
NULL
CHECK
(
timestamp
>
0
)
);
);
CREATE
TABLE
IF
NOT
EXISTS
l2_bridge_messages
(
CREATE
TABLE
IF
NOT
EXISTS
l2_bridge_messages
(
nonce
UINT256
NOT
NULL
PRIMARY
KEY
,
message_hash
VARCHAR
NOT
NULL
PRIMARY
KEY
,
message_hash
VARCHAR
UNIQUE
NOT
NULL
,
nonce
UINT256
NOT
NULL
UNIQUE
,
transaction_withdrawal_hash
VARCHAR
UNIQUE
NOT
NULL
REFERENCES
l2_transaction_withdrawals
(
withdrawal_hash
),
transaction_withdrawal_hash
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l2_transaction_withdrawals
(
withdrawal_hash
),
sent_message_event_guid
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l2_contract_events
(
guid
),
sent_message_event_guid
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l2_contract_events
(
guid
),
relayed_message_event_guid
VARCHAR
UNIQUE
REFERENCES
l1_contract_events
(
guid
),
relayed_message_event_guid
VARCHAR
UNIQUE
REFERENCES
l1_contract_events
(
guid
),
...
...
indexer/processor/l1_processor.go
View file @
6e479d69
...
@@ -384,8 +384,8 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
...
@@ -384,8 +384,8 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
sentMessages
[
i
]
=
&
database
.
L1BridgeMessage
{
sentMessages
[
i
]
=
&
database
.
L1BridgeMessage
{
TransactionSourceHash
:
depositTx
.
SourceHash
,
TransactionSourceHash
:
depositTx
.
SourceHash
,
BridgeMessage
:
database
.
BridgeMessage
{
BridgeMessage
:
database
.
BridgeMessage
{
Nonce
:
database
.
U256
{
Int
:
sentMessageEvent
.
MessageNonce
},
MessageHash
:
sentMessageEvent
.
MessageHash
,
MessageHash
:
sentMessageEvent
.
MessageHash
,
Nonce
:
database
.
U256
{
Int
:
sentMessageEvent
.
MessageNonce
},
SentMessageEventGUID
:
sentMessageEvent
.
Event
.
GUID
,
SentMessageEventGUID
:
sentMessageEvent
.
Event
.
GUID
,
GasLimit
:
database
.
U256
{
Int
:
sentMessageEvent
.
GasLimit
},
GasLimit
:
database
.
U256
{
Int
:
sentMessageEvent
.
GasLimit
},
Tx
:
database
.
Transaction
{
Tx
:
database
.
Transaction
{
...
@@ -417,7 +417,7 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
...
@@ -417,7 +417,7 @@ func l1ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
}
}
for
_
,
relayedMessage
:=
range
relayedMessageEvents
{
for
_
,
relayedMessage
:=
range
relayedMessageEvents
{
message
,
err
:=
db
.
BridgeMessages
.
L2BridgeMessage
ByHash
(
relayedMessage
.
MsgHash
)
message
,
err
:=
db
.
BridgeMessages
.
L2BridgeMessage
(
relayedMessage
.
MsgHash
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
else
if
message
==
nil
{
}
else
if
message
==
nil
{
...
...
indexer/processor/l2_processor.go
View file @
6e479d69
...
@@ -256,8 +256,8 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
...
@@ -256,8 +256,8 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
sentMessages
[
i
]
=
&
database
.
L2BridgeMessage
{
sentMessages
[
i
]
=
&
database
.
L2BridgeMessage
{
TransactionWithdrawalHash
:
msgPassedEvent
.
WithdrawalHash
,
TransactionWithdrawalHash
:
msgPassedEvent
.
WithdrawalHash
,
BridgeMessage
:
database
.
BridgeMessage
{
BridgeMessage
:
database
.
BridgeMessage
{
Nonce
:
database
.
U256
{
Int
:
sentMessageEvent
.
MessageNonce
},
MessageHash
:
sentMessageEvent
.
MessageHash
,
MessageHash
:
sentMessageEvent
.
MessageHash
,
Nonce
:
database
.
U256
{
Int
:
sentMessageEvent
.
MessageNonce
},
SentMessageEventGUID
:
sentMessageEvent
.
Event
.
GUID
,
SentMessageEventGUID
:
sentMessageEvent
.
Event
.
GUID
,
GasLimit
:
database
.
U256
{
Int
:
sentMessageEvent
.
GasLimit
},
GasLimit
:
database
.
U256
{
Int
:
sentMessageEvent
.
GasLimit
},
Tx
:
database
.
Transaction
{
Tx
:
database
.
Transaction
{
...
@@ -296,7 +296,7 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
...
@@ -296,7 +296,7 @@ func l2ProcessContractEventsBridgeCrossDomainMessages(processLog log.Logger, db
}
}
for
_
,
relayedMessage
:=
range
relayedMessageEvents
{
for
_
,
relayedMessage
:=
range
relayedMessageEvents
{
message
,
err
:=
db
.
BridgeMessages
.
L1BridgeMessage
ByHash
(
relayedMessage
.
MsgHash
)
message
,
err
:=
db
.
BridgeMessages
.
L1BridgeMessage
(
relayedMessage
.
MsgHash
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment