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
c01d2c02
Commit
c01d2c02
authored
Oct 20, 2023
by
Hamdi Allam
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(indexer) legacy processor withdrawals & latest epoch query
parent
fce08b3c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
15 additions
and
29 deletions
+15
-29
blocks.go
indexer/database/blocks.go
+3
-2
20230523_create_schema.sql
indexer/migrations/20230523_create_schema.sql
+4
-24
legacy_bridge_processor.go
indexer/processors/bridge/legacy_bridge_processor.go
+8
-3
No files found.
indexer/database/blocks.go
View file @
c01d2c02
...
@@ -186,7 +186,6 @@ func (db *blocksDB) LatestObservedEpoch(fromL1Height *big.Int, maxL1Range uint64
...
@@ -186,7 +186,6 @@ func (db *blocksDB) LatestObservedEpoch(fromL1Height *big.Int, maxL1Range uint64
var
header
L1BlockHeader
var
header
L1BlockHeader
if
fromL1Height
!=
nil
{
if
fromL1Height
!=
nil
{
result
:=
db
.
gorm
.
Where
(
"number = ?"
,
fromL1Height
)
.
Take
(
&
header
)
result
:=
db
.
gorm
.
Where
(
"number = ?"
,
fromL1Height
)
.
Take
(
&
header
)
// TODO - Embed logging to db
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
...
@@ -196,7 +195,8 @@ func (db *blocksDB) LatestObservedEpoch(fromL1Height *big.Int, maxL1Range uint64
...
@@ -196,7 +195,8 @@ func (db *blocksDB) LatestObservedEpoch(fromL1Height *big.Int, maxL1Range uint64
fromTimestamp
=
header
.
Timestamp
fromTimestamp
=
header
.
Timestamp
}
else
{
}
else
{
result
:=
db
.
gorm
.
Order
(
"number desc"
)
.
Take
(
&
header
)
// Take the lowest indexed L1 block to compute the lower bound
result
:=
db
.
gorm
.
Order
(
"number ASC"
)
.
Take
(
&
header
)
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
...
@@ -205,6 +205,7 @@ func (db *blocksDB) LatestObservedEpoch(fromL1Height *big.Int, maxL1Range uint64
...
@@ -205,6 +205,7 @@ func (db *blocksDB) LatestObservedEpoch(fromL1Height *big.Int, maxL1Range uint64
}
}
fromL1Height
=
header
.
Number
fromL1Height
=
header
.
Number
fromTimestamp
=
header
.
Timestamp
}
}
// Upper Bound (lowest timestamp indexed between L1/L2 bounded by `maxL1Range`)
// Upper Bound (lowest timestamp indexed between L1/L2 bounded by `maxL1Range`)
...
...
indexer/migrations/20230523_create_schema.sql
View file @
c01d2c02
...
@@ -177,26 +177,6 @@ CREATE INDEX IF NOT EXISTS l2_bridge_messages_transaction_withdrawal_hash ON l2_
...
@@ -177,26 +177,6 @@ CREATE INDEX IF NOT EXISTS l2_bridge_messages_transaction_withdrawal_hash ON l2_
CREATE
INDEX
IF
NOT
EXISTS
l2_bridge_messages_from_address
ON
l2_bridge_messages
(
from_address
);
CREATE
INDEX
IF
NOT
EXISTS
l2_bridge_messages_from_address
ON
l2_bridge_messages
(
from_address
);
-- StandardBridge
-- StandardBridge
CREATE
TABLE
IF
NOT
EXISTS
l1_bridged_tokens
(
address
VARCHAR
PRIMARY
KEY
,
bridge_address
VARCHAR
NOT
NULL
,
name
VARCHAR
NOT
NULL
,
symbol
VARCHAR
NOT
NULL
,
decimals
INTEGER
NOT
NULL
CHECK
(
decimals
>=
0
AND
decimals
<=
18
)
);
CREATE
TABLE
IF
NOT
EXISTS
l2_bridged_tokens
(
address
VARCHAR
PRIMARY
KEY
,
bridge_address
VARCHAR
NOT
NULL
,
-- L1-L2 relationship is 1 to many so this is not necessarily unique
l1_token_address
VARCHAR
REFERENCES
l1_bridged_tokens
(
address
)
ON
DELETE
CASCADE
,
name
VARCHAR
NOT
NULL
,
symbol
VARCHAR
NOT
NULL
,
decimals
INTEGER
NOT
NULL
CHECK
(
decimals
>=
0
AND
decimals
<=
18
)
);
CREATE
TABLE
IF
NOT
EXISTS
l1_bridge_deposits
(
CREATE
TABLE
IF
NOT
EXISTS
l1_bridge_deposits
(
transaction_source_hash
VARCHAR
PRIMARY
KEY
REFERENCES
l1_transaction_deposits
(
source_hash
)
ON
DELETE
CASCADE
,
transaction_source_hash
VARCHAR
PRIMARY
KEY
REFERENCES
l1_transaction_deposits
(
source_hash
)
ON
DELETE
CASCADE
,
cross_domain_message_hash
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_bridge_messages
(
message_hash
)
ON
DELETE
CASCADE
,
cross_domain_message_hash
VARCHAR
NOT
NULL
UNIQUE
REFERENCES
l1_bridge_messages
(
message_hash
)
ON
DELETE
CASCADE
,
...
@@ -204,8 +184,8 @@ CREATE TABLE IF NOT EXISTS l1_bridge_deposits (
...
@@ -204,8 +184,8 @@ CREATE TABLE IF NOT EXISTS l1_bridge_deposits (
-- Deposit information
-- Deposit information
from_address
VARCHAR
NOT
NULL
,
from_address
VARCHAR
NOT
NULL
,
to_address
VARCHAR
NOT
NULL
,
to_address
VARCHAR
NOT
NULL
,
local_token_address
VARCHAR
NOT
NULL
,
-- REFERENCES l1_bridged_tokens(address), uncomment me in future pr
local_token_address
VARCHAR
NOT
NULL
,
remote_token_address
VARCHAR
NOT
NULL
,
-- REFERENCES l2_bridged_tokens(address), uncomment me in future pr
remote_token_address
VARCHAR
NOT
NULL
,
amount
UINT256
NOT
NULL
,
amount
UINT256
NOT
NULL
,
data
VARCHAR
NOT
NULL
,
data
VARCHAR
NOT
NULL
,
timestamp
INTEGER
NOT
NULL
CHECK
(
timestamp
>
0
)
timestamp
INTEGER
NOT
NULL
CHECK
(
timestamp
>
0
)
...
@@ -221,8 +201,8 @@ CREATE TABLE IF NOT EXISTS l2_bridge_withdrawals (
...
@@ -221,8 +201,8 @@ CREATE TABLE IF NOT EXISTS l2_bridge_withdrawals (
-- Withdrawal information
-- Withdrawal information
from_address
VARCHAR
NOT
NULL
,
from_address
VARCHAR
NOT
NULL
,
to_address
VARCHAR
NOT
NULL
,
to_address
VARCHAR
NOT
NULL
,
local_token_address
VARCHAR
NOT
NULL
,
-- REFERENCES l2_bridged_tokens(address), uncomment me in future pr
local_token_address
VARCHAR
NOT
NULL
,
remote_token_address
VARCHAR
NOT
NULL
,
-- REFERENCES l1_bridged_tokens(address), uncomment me in future pr
remote_token_address
VARCHAR
NOT
NULL
,
amount
UINT256
NOT
NULL
,
amount
UINT256
NOT
NULL
,
data
VARCHAR
NOT
NULL
,
data
VARCHAR
NOT
NULL
,
timestamp
INTEGER
NOT
NULL
CHECK
(
timestamp
>
0
)
timestamp
INTEGER
NOT
NULL
CHECK
(
timestamp
>
0
)
...
...
indexer/processors/bridge/legacy_bridge_processor.go
View file @
c01d2c02
...
@@ -162,13 +162,17 @@ func LegacyL2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metri
...
@@ -162,13 +162,17 @@ func LegacyL2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metri
log
.
Info
(
"detected legacy transaction withdrawals (via L2CrossDomainMessenger)"
,
"size"
,
len
(
crossDomainSentMessages
))
log
.
Info
(
"detected legacy transaction withdrawals (via L2CrossDomainMessenger)"
,
"size"
,
len
(
crossDomainSentMessages
))
}
}
type
sentMessageEvent
struct
{
*
contracts
.
CrossDomainMessengerSentMessageEvent
WithdrawalHash
common
.
Hash
}
withdrawnWEI
:=
bigint
.
Zero
withdrawnWEI
:=
bigint
.
Zero
sentMessages
:=
make
(
map
[
logKey
]
*
contracts
.
CrossDomainMessengerS
entMessageEvent
,
len
(
crossDomainSentMessages
))
sentMessages
:=
make
(
map
[
logKey
]
s
entMessageEvent
,
len
(
crossDomainSentMessages
))
bridgeMessages
:=
make
([]
database
.
L2BridgeMessage
,
len
(
crossDomainSentMessages
))
bridgeMessages
:=
make
([]
database
.
L2BridgeMessage
,
len
(
crossDomainSentMessages
))
transactionWithdrawals
:=
make
([]
database
.
L2TransactionWithdrawal
,
len
(
crossDomainSentMessages
))
transactionWithdrawals
:=
make
([]
database
.
L2TransactionWithdrawal
,
len
(
crossDomainSentMessages
))
for
i
:=
range
crossDomainSentMessages
{
for
i
:=
range
crossDomainSentMessages
{
sentMessage
:=
crossDomainSentMessages
[
i
]
sentMessage
:=
crossDomainSentMessages
[
i
]
sentMessages
[
logKey
{
sentMessage
.
Event
.
BlockHash
,
sentMessage
.
Event
.
LogIndex
}]
=
&
sentMessage
withdrawnWEI
=
new
(
big
.
Int
)
.
Add
(
withdrawnWEI
,
sentMessage
.
BridgeMessage
.
Tx
.
Amount
)
withdrawnWEI
=
new
(
big
.
Int
)
.
Add
(
withdrawnWEI
,
sentMessage
.
BridgeMessage
.
Tx
.
Amount
)
// To ensure consistency in the schema, we duplicate this as the "root" transaction withdrawal. The storage key in the message
// To ensure consistency in the schema, we duplicate this as the "root" transaction withdrawal. The storage key in the message
...
@@ -188,6 +192,7 @@ func LegacyL2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metri
...
@@ -188,6 +192,7 @@ func LegacyL2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metri
},
},
}
}
sentMessages
[
logKey
{
sentMessage
.
Event
.
BlockHash
,
sentMessage
.
Event
.
LogIndex
}]
=
sentMessageEvent
{
&
sentMessage
,
withdrawalHash
}
bridgeMessages
[
i
]
=
database
.
L2BridgeMessage
{
bridgeMessages
[
i
]
=
database
.
L2BridgeMessage
{
TransactionWithdrawalHash
:
withdrawalHash
,
TransactionWithdrawalHash
:
withdrawalHash
,
BridgeMessage
:
sentMessage
.
BridgeMessage
,
BridgeMessage
:
sentMessage
.
BridgeMessage
,
...
@@ -235,7 +240,7 @@ func LegacyL2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metri
...
@@ -235,7 +240,7 @@ func LegacyL2ProcessInitiatedBridgeEvents(log log.Logger, db *database.DB, metri
bridgedTokens
[
initiatedBridge
.
BridgeTransfer
.
TokenPair
.
LocalTokenAddress
]
++
bridgedTokens
[
initiatedBridge
.
BridgeTransfer
.
TokenPair
.
LocalTokenAddress
]
++
initiatedBridge
.
BridgeTransfer
.
CrossDomainMessageHash
=
&
sentMessage
.
BridgeMessage
.
MessageHash
initiatedBridge
.
BridgeTransfer
.
CrossDomainMessageHash
=
&
sentMessage
.
BridgeMessage
.
MessageHash
l2BridgeWithdrawals
[
i
]
=
database
.
L2BridgeWithdrawal
{
l2BridgeWithdrawals
[
i
]
=
database
.
L2BridgeWithdrawal
{
TransactionWithdrawalHash
:
sentMessage
.
BridgeMessage
.
Message
Hash
,
TransactionWithdrawalHash
:
sentMessage
.
Withdrawal
Hash
,
BridgeTransfer
:
initiatedBridge
.
BridgeTransfer
,
BridgeTransfer
:
initiatedBridge
.
BridgeTransfer
,
}
}
}
}
...
...
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