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
39a4263e
Commit
39a4263e
authored
Jun 09, 2023
by
Hamdi Allam
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
skip l1 blocks that have no contract events
parent
32780542
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
22 deletions
+40
-22
l1_processor.go
indexer/processor/l1_processor.go
+38
-20
l2_processor.go
indexer/processor/l2_processor.go
+2
-2
No files found.
indexer/processor/l1_processor.go
View file @
39a4263e
...
...
@@ -94,23 +94,12 @@ func l1ProcessFn(processLog log.Logger, ethClient node.EthClient, l1Contracts L1
/** Index Blocks **/
l1Headers
:=
make
([]
*
database
.
L1BlockHeader
,
numHeaders
)
l1HeaderMap
:=
make
(
map
[
common
.
Hash
]
*
types
.
Header
)
for
i
,
header
:=
range
headers
{
blockHash
:=
header
.
Hash
()
l1Headers
[
i
]
=
&
database
.
L1BlockHeader
{
BlockHeader
:
database
.
BlockHeader
{
Hash
:
blockHash
,
ParentHash
:
header
.
ParentHash
,
Number
:
database
.
U256
{
Int
:
header
.
Number
},
Timestamp
:
header
.
Time
,
},
}
l1HeaderMap
[
blockHash
]
=
header
for
_
,
header
:=
range
headers
{
l1HeaderMap
[
header
.
Hash
()]
=
header
}
/**
Index
Contract Events **/
/**
Watch for
Contract Events **/
logFilter
:=
ethereum
.
FilterQuery
{
FromBlock
:
headers
[
0
]
.
Number
,
ToBlock
:
headers
[
numHeaders
-
1
]
.
Number
,
Addresses
:
contractAddrs
}
logs
,
err
:=
rawEthClient
.
FilterLogs
(
context
.
Background
(),
logFilter
)
...
...
@@ -120,6 +109,7 @@ func l1ProcessFn(processLog log.Logger, ethClient node.EthClient, l1Contracts L1
numLogs
:=
len
(
logs
)
l1ContractEvents
:=
make
([]
*
database
.
L1ContractEvent
,
numLogs
)
l1HeadersOfInterest
:=
make
(
map
[
common
.
Hash
]
bool
)
for
i
,
log
:=
range
logs
{
header
,
ok
:=
l1HeaderMap
[
log
.
BlockHash
]
if
!
ok
{
...
...
@@ -128,6 +118,7 @@ func l1ProcessFn(processLog log.Logger, ethClient node.EthClient, l1Contracts L1
return
errors
.
New
(
"parsed log with a block hash not in this batch"
)
}
l1HeadersOfInterest
[
log
.
BlockHash
]
=
true
l1ContractEvents
[
i
]
=
&
database
.
L1ContractEvent
{
ContractEvent
:
database
.
ContractEvent
{
GUID
:
uuid
.
New
(),
...
...
@@ -140,19 +131,46 @@ func l1ProcessFn(processLog log.Logger, ethClient node.EthClient, l1Contracts L1
}
}
/** Index L1 Blocks that have an optimism event **/
// we iterate on the original array to maintain ordering. probably can find a more efficient
// way to iterate over the `l1HeadersOfInterest` map while maintaining ordering
l1Headers
:=
[]
*
database
.
L1BlockHeader
{}
for
_
,
header
:=
range
headers
{
blockHash
:=
header
.
Hash
()
_
,
ok
:=
l1HeadersOfInterest
[
blockHash
]
if
!
ok
{
continue
}
l1Headers
=
append
(
l1Headers
,
&
database
.
L1BlockHeader
{
BlockHeader
:
database
.
BlockHeader
{
Hash
:
blockHash
,
ParentHash
:
header
.
ParentHash
,
Number
:
database
.
U256
{
Int
:
header
.
Number
},
Timestamp
:
header
.
Time
,
},
})
}
/** Update Database **/
numL1Headers
:=
len
(
l1Headers
)
if
numL1Headers
>
0
{
processLog
.
Info
(
"saved l1 blocks of interest within batch"
,
"num"
,
numL1Headers
,
"batchSize"
,
numHeaders
)
err
=
db
.
Blocks
.
StoreL1BlockHeaders
(
l1Headers
)
if
err
!=
nil
{
return
err
}
if
numLogs
>
0
{
processLog
.
Info
(
"
detected new
contract logs"
,
"size"
,
numLogs
)
// Since the headers to index are derived from logs, we know in this branch `numLogs > 0`
processLog
.
Info
(
"
saving
contract logs"
,
"size"
,
numLogs
)
err
=
db
.
ContractEvents
.
StoreL1ContractEvents
(
l1ContractEvents
)
if
err
!=
nil
{
return
err
}
}
else
{
processLog
.
Info
(
"no l1 blocks of interest within batch"
)
}
// a-ok!
...
...
indexer/processor/l2_processor.go
View file @
39a4263e
...
...
@@ -98,7 +98,7 @@ func l2ProcessFn(processLog log.Logger, ethClient node.EthClient, l2Contracts L2
return
func
(
db
*
database
.
DB
,
headers
[]
*
types
.
Header
)
error
{
numHeaders
:=
len
(
headers
)
/** Index Blocks **/
/** Index
All L2
Blocks **/
l2Headers
:=
make
([]
*
database
.
L2BlockHeader
,
len
(
headers
))
l2HeaderMap
:=
make
(
map
[
common
.
Hash
]
*
types
.
Header
)
...
...
@@ -116,7 +116,7 @@ func l2ProcessFn(processLog log.Logger, ethClient node.EthClient, l2Contracts L2
l2HeaderMap
[
blockHash
]
=
header
}
/**
Index
Contract Events **/
/**
Watch for
Contract Events **/
logFilter
:=
ethereum
.
FilterQuery
{
FromBlock
:
headers
[
0
]
.
Number
,
ToBlock
:
headers
[
numHeaders
-
1
]
.
Number
,
Addresses
:
contractAddrs
}
logs
,
err
:=
rawEthClient
.
FilterLogs
(
context
.
Background
(),
logFilter
)
...
...
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