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
3658b171
Commit
3658b171
authored
Aug 20, 2023
by
Arman Mazdaee
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
op-node: Update golang-lru to v2
parent
7b30659f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
33 additions
and
33 deletions
+33
-33
gossip.go
op-node/p2p/gossip.go
+4
-4
cache.go
op-node/sources/caching/cache.go
+8
-8
eth_client.go
op-node/sources/eth_client.go
+12
-12
l1_client.go
op-node/sources/l1_client.go
+3
-3
l2_client.go
op-node/sources/l2_client.go
+6
-6
No files found.
op-node/p2p/gossip.go
View file @
3658b171
...
@@ -10,7 +10,7 @@ import (
...
@@ -10,7 +10,7 @@ import (
"time"
"time"
"github.com/golang/snappy"
"github.com/golang/snappy"
lru
"github.com/hashicorp/golang-lru"
lru
"github.com/hashicorp/golang-lru
/v2
"
pubsub
"github.com/libp2p/go-libp2p-pubsub"
pubsub
"github.com/libp2p/go-libp2p-pubsub"
pb
"github.com/libp2p/go-libp2p-pubsub/pb"
pb
"github.com/libp2p/go-libp2p-pubsub/pb"
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/host"
...
@@ -242,7 +242,7 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti
...
@@ -242,7 +242,7 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti
// Seen block hashes per block height
// Seen block hashes per block height
// uint64 -> *seenBlocks
// uint64 -> *seenBlocks
blockHeightLRU
,
err
:=
lru
.
New
(
1000
)
blockHeightLRU
,
err
:=
lru
.
New
[
uint64
,
*
seenBlocks
]
(
1000
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
fmt
.
Errorf
(
"failed to set up block height LRU cache: %w"
,
err
))
panic
(
fmt
.
Errorf
(
"failed to set up block height LRU cache: %w"
,
err
))
}
}
...
@@ -315,7 +315,7 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti
...
@@ -315,7 +315,7 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti
blockHeightLRU
.
Add
(
uint64
(
payload
.
BlockNumber
),
seen
)
blockHeightLRU
.
Add
(
uint64
(
payload
.
BlockNumber
),
seen
)
}
}
if
count
,
hasSeen
:=
seen
.
(
*
seenBlocks
)
.
hasSeen
(
payload
.
BlockHash
);
count
>
5
{
if
count
,
hasSeen
:=
seen
.
hasSeen
(
payload
.
BlockHash
);
count
>
5
{
// [REJECT] if more than 5 blocks have been seen with the same block height
// [REJECT] if more than 5 blocks have been seen with the same block height
log
.
Warn
(
"seen too many different blocks at same height"
,
"height"
,
payload
.
BlockNumber
)
log
.
Warn
(
"seen too many different blocks at same height"
,
"height"
,
payload
.
BlockNumber
)
return
pubsub
.
ValidationReject
return
pubsub
.
ValidationReject
...
@@ -327,7 +327,7 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti
...
@@ -327,7 +327,7 @@ func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRunti
// mark it as seen. (note: with concurrent validation more than 5 blocks may be marked as seen still,
// mark it as seen. (note: with concurrent validation more than 5 blocks may be marked as seen still,
// but validator concurrency is limited anyway)
// but validator concurrency is limited anyway)
seen
.
(
*
seenBlocks
)
.
markSeen
(
payload
.
BlockHash
)
seen
.
markSeen
(
payload
.
BlockHash
)
// remember the decoded payload for later usage in topic subscriber.
// remember the decoded payload for later usage in topic subscriber.
message
.
ValidatorData
=
&
payload
message
.
ValidatorData
=
&
payload
...
...
op-node/sources/caching/cache.go
View file @
3658b171
package
caching
package
caching
import
lru
"github.com/hashicorp/golang-lru"
import
lru
"github.com/hashicorp/golang-lru
/v2
"
type
Metrics
interface
{
type
Metrics
interface
{
CacheAdd
(
label
string
,
cacheSize
int
,
evicted
bool
)
CacheAdd
(
label
string
,
cacheSize
int
,
evicted
bool
)
...
@@ -8,13 +8,13 @@ type Metrics interface {
...
@@ -8,13 +8,13 @@ type Metrics interface {
}
}
// LRUCache wraps hashicorp *lru.Cache and tracks cache metrics
// LRUCache wraps hashicorp *lru.Cache and tracks cache metrics
type
LRUCache
struct
{
type
LRUCache
[
K
comparable
,
V
any
]
struct
{
m
Metrics
m
Metrics
label
string
label
string
inner
*
lru
.
Cache
inner
*
lru
.
Cache
[
K
,
V
]
}
}
func
(
c
*
LRUCache
)
Get
(
key
any
)
(
value
any
,
ok
bool
)
{
func
(
c
*
LRUCache
[
K
,
V
])
Get
(
key
K
)
(
value
V
,
ok
bool
)
{
value
,
ok
=
c
.
inner
.
Get
(
key
)
value
,
ok
=
c
.
inner
.
Get
(
key
)
if
c
.
m
!=
nil
{
if
c
.
m
!=
nil
{
c
.
m
.
CacheGet
(
c
.
label
,
ok
)
c
.
m
.
CacheGet
(
c
.
label
,
ok
)
...
@@ -22,7 +22,7 @@ func (c *LRUCache) Get(key any) (value any, ok bool) {
...
@@ -22,7 +22,7 @@ func (c *LRUCache) Get(key any) (value any, ok bool) {
return
value
,
ok
return
value
,
ok
}
}
func
(
c
*
LRUCache
)
Add
(
key
,
value
any
)
(
evicted
bool
)
{
func
(
c
*
LRUCache
[
K
,
V
])
Add
(
key
K
,
value
V
)
(
evicted
bool
)
{
evicted
=
c
.
inner
.
Add
(
key
,
value
)
evicted
=
c
.
inner
.
Add
(
key
,
value
)
if
c
.
m
!=
nil
{
if
c
.
m
!=
nil
{
c
.
m
.
CacheAdd
(
c
.
label
,
c
.
inner
.
Len
(),
evicted
)
c
.
m
.
CacheAdd
(
c
.
label
,
c
.
inner
.
Len
(),
evicted
)
...
@@ -32,10 +32,10 @@ func (c *LRUCache) Add(key, value any) (evicted bool) {
...
@@ -32,10 +32,10 @@ func (c *LRUCache) Add(key, value any) (evicted bool) {
// NewLRUCache creates a LRU cache with the given metrics, labeling the cache adds/gets.
// NewLRUCache creates a LRU cache with the given metrics, labeling the cache adds/gets.
// Metrics are optional: no metrics will be tracked if m == nil.
// Metrics are optional: no metrics will be tracked if m == nil.
func
NewLRUCache
(
m
Metrics
,
label
string
,
maxSize
int
)
*
LRUCache
{
func
NewLRUCache
[
K
comparable
,
V
any
](
m
Metrics
,
label
string
,
maxSize
int
)
*
LRUCache
[
K
,
V
]
{
// no errors if the size is positive
// no errors if the size is positive
cache
,
_
:=
lru
.
New
(
maxSize
)
cache
,
_
:=
lru
.
New
[
K
,
V
]
(
maxSize
)
return
&
LRUCache
{
return
&
LRUCache
[
K
,
V
]
{
m
:
m
,
m
:
m
,
label
:
label
,
label
:
label
,
inner
:
cache
,
inner
:
cache
,
...
...
op-node/sources/eth_client.go
View file @
3658b171
...
@@ -106,19 +106,19 @@ type EthClient struct {
...
@@ -106,19 +106,19 @@ type EthClient struct {
// cache receipts in bundles per block hash
// cache receipts in bundles per block hash
// We cache the receipts fetching job to not lose progress when we have to retry the `Fetch` call
// We cache the receipts fetching job to not lose progress when we have to retry the `Fetch` call
// common.Hash -> *receiptsFetchingJob
// common.Hash -> *receiptsFetchingJob
receiptsCache
*
caching
.
LRUCache
receiptsCache
*
caching
.
LRUCache
[
common
.
Hash
,
*
receiptsFetchingJob
]
// cache transactions in bundles per block hash
// cache transactions in bundles per block hash
// common.Hash -> types.Transactions
// common.Hash -> types.Transactions
transactionsCache
*
caching
.
LRUCache
transactionsCache
*
caching
.
LRUCache
[
common
.
Hash
,
types
.
Transactions
]
// cache block headers of blocks by hash
// cache block headers of blocks by hash
// common.Hash -> *HeaderInfo
// common.Hash -> *HeaderInfo
headersCache
*
caching
.
LRUCache
headersCache
*
caching
.
LRUCache
[
common
.
Hash
,
eth
.
BlockInfo
]
// cache payloads by hash
// cache payloads by hash
// common.Hash -> *eth.ExecutionPayload
// common.Hash -> *eth.ExecutionPayload
payloadsCache
*
caching
.
LRUCache
payloadsCache
*
caching
.
LRUCache
[
common
.
Hash
,
*
eth
.
ExecutionPayload
]
// availableReceiptMethods tracks which receipt methods can be used for fetching receipts
// availableReceiptMethods tracks which receipt methods can be used for fetching receipts
// This may be modified concurrently, but we don't lock since it's a single
// This may be modified concurrently, but we don't lock since it's a single
...
@@ -172,10 +172,10 @@ func NewEthClient(client client.RPC, log log.Logger, metrics caching.Metrics, co
...
@@ -172,10 +172,10 @@ func NewEthClient(client client.RPC, log log.Logger, metrics caching.Metrics, co
mustBePostMerge
:
config
.
MustBePostMerge
,
mustBePostMerge
:
config
.
MustBePostMerge
,
provKind
:
config
.
RPCProviderKind
,
provKind
:
config
.
RPCProviderKind
,
log
:
log
,
log
:
log
,
receiptsCache
:
caching
.
NewLRUCache
(
metrics
,
"receipts"
,
config
.
ReceiptsCacheSize
),
receiptsCache
:
caching
.
NewLRUCache
[
common
.
Hash
,
*
receiptsFetchingJob
]
(
metrics
,
"receipts"
,
config
.
ReceiptsCacheSize
),
transactionsCache
:
caching
.
NewLRUCache
(
metrics
,
"txs"
,
config
.
TransactionsCacheSize
),
transactionsCache
:
caching
.
NewLRUCache
[
common
.
Hash
,
types
.
Transactions
]
(
metrics
,
"txs"
,
config
.
TransactionsCacheSize
),
headersCache
:
caching
.
NewLRUCache
(
metrics
,
"headers"
,
config
.
HeadersCacheSize
),
headersCache
:
caching
.
NewLRUCache
[
common
.
Hash
,
eth
.
BlockInfo
]
(
metrics
,
"headers"
,
config
.
HeadersCacheSize
),
payloadsCache
:
caching
.
NewLRUCache
(
metrics
,
"payloads"
,
config
.
PayloadsCacheSize
),
payloadsCache
:
caching
.
NewLRUCache
[
common
.
Hash
,
*
eth
.
ExecutionPayload
]
(
metrics
,
"payloads"
,
config
.
PayloadsCacheSize
),
availableReceiptMethods
:
AvailableReceiptsFetchingMethods
(
config
.
RPCProviderKind
),
availableReceiptMethods
:
AvailableReceiptsFetchingMethods
(
config
.
RPCProviderKind
),
lastMethodsReset
:
time
.
Now
(),
lastMethodsReset
:
time
.
Now
(),
methodResetDuration
:
config
.
MethodResetDuration
,
methodResetDuration
:
config
.
MethodResetDuration
,
...
@@ -292,7 +292,7 @@ func (s *EthClient) ChainID(ctx context.Context) (*big.Int, error) {
...
@@ -292,7 +292,7 @@ func (s *EthClient) ChainID(ctx context.Context) (*big.Int, error) {
func
(
s
*
EthClient
)
InfoByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
BlockInfo
,
error
)
{
func
(
s
*
EthClient
)
InfoByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
BlockInfo
,
error
)
{
if
header
,
ok
:=
s
.
headersCache
.
Get
(
hash
);
ok
{
if
header
,
ok
:=
s
.
headersCache
.
Get
(
hash
);
ok
{
return
header
.
(
eth
.
BlockInfo
)
,
nil
return
header
,
nil
}
}
return
s
.
headerCall
(
ctx
,
"eth_getBlockByHash"
,
hashID
(
hash
))
return
s
.
headerCall
(
ctx
,
"eth_getBlockByHash"
,
hashID
(
hash
))
}
}
...
@@ -310,7 +310,7 @@ func (s *EthClient) InfoByLabel(ctx context.Context, label eth.BlockLabel) (eth.
...
@@ -310,7 +310,7 @@ func (s *EthClient) InfoByLabel(ctx context.Context, label eth.BlockLabel) (eth.
func
(
s
*
EthClient
)
InfoAndTxsByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
func
(
s
*
EthClient
)
InfoAndTxsByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
if
header
,
ok
:=
s
.
headersCache
.
Get
(
hash
);
ok
{
if
header
,
ok
:=
s
.
headersCache
.
Get
(
hash
);
ok
{
if
txs
,
ok
:=
s
.
transactionsCache
.
Get
(
hash
);
ok
{
if
txs
,
ok
:=
s
.
transactionsCache
.
Get
(
hash
);
ok
{
return
header
.
(
eth
.
BlockInfo
),
txs
.
(
types
.
Transactions
)
,
nil
return
header
,
txs
,
nil
}
}
}
}
return
s
.
blockCall
(
ctx
,
"eth_getBlockByHash"
,
hashID
(
hash
))
return
s
.
blockCall
(
ctx
,
"eth_getBlockByHash"
,
hashID
(
hash
))
...
@@ -328,7 +328,7 @@ func (s *EthClient) InfoAndTxsByLabel(ctx context.Context, label eth.BlockLabel)
...
@@ -328,7 +328,7 @@ func (s *EthClient) InfoAndTxsByLabel(ctx context.Context, label eth.BlockLabel)
func
(
s
*
EthClient
)
PayloadByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
*
eth
.
ExecutionPayload
,
error
)
{
func
(
s
*
EthClient
)
PayloadByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
*
eth
.
ExecutionPayload
,
error
)
{
if
payload
,
ok
:=
s
.
payloadsCache
.
Get
(
hash
);
ok
{
if
payload
,
ok
:=
s
.
payloadsCache
.
Get
(
hash
);
ok
{
return
payload
.
(
*
eth
.
ExecutionPayload
)
,
nil
return
payload
,
nil
}
}
return
s
.
payloadCall
(
ctx
,
"eth_getBlockByHash"
,
hashID
(
hash
))
return
s
.
payloadCall
(
ctx
,
"eth_getBlockByHash"
,
hashID
(
hash
))
}
}
...
@@ -354,7 +354,7 @@ func (s *EthClient) FetchReceipts(ctx context.Context, blockHash common.Hash) (e
...
@@ -354,7 +354,7 @@ func (s *EthClient) FetchReceipts(ctx context.Context, blockHash common.Hash) (e
// The underlying fetcher uses the receipts hash to verify receipt integrity.
// The underlying fetcher uses the receipts hash to verify receipt integrity.
var
job
*
receiptsFetchingJob
var
job
*
receiptsFetchingJob
if
v
,
ok
:=
s
.
receiptsCache
.
Get
(
blockHash
);
ok
{
if
v
,
ok
:=
s
.
receiptsCache
.
Get
(
blockHash
);
ok
{
job
=
v
.
(
*
receiptsFetchingJob
)
job
=
v
}
else
{
}
else
{
txHashes
:=
eth
.
TransactionsToHashes
(
txs
)
txHashes
:=
eth
.
TransactionsToHashes
(
txs
)
job
=
NewReceiptsFetchingJob
(
s
,
s
.
client
,
s
.
maxBatchSize
,
eth
.
ToBlockID
(
info
),
info
.
ReceiptHash
(),
txHashes
)
job
=
NewReceiptsFetchingJob
(
s
,
s
.
client
,
s
.
maxBatchSize
,
eth
.
ToBlockID
(
info
),
info
.
ReceiptHash
(),
txHashes
)
...
...
op-node/sources/l1_client.go
View file @
3658b171
...
@@ -56,7 +56,7 @@ type L1Client struct {
...
@@ -56,7 +56,7 @@ type L1Client struct {
// cache L1BlockRef by hash
// cache L1BlockRef by hash
// common.Hash -> eth.L1BlockRef
// common.Hash -> eth.L1BlockRef
l1BlockRefsCache
*
caching
.
LRUCache
l1BlockRefsCache
*
caching
.
LRUCache
[
common
.
Hash
,
eth
.
L1BlockRef
]
}
}
// NewL1Client wraps a RPC with bindings to fetch L1 data, while logging errors, tracking metrics (optional), and caching.
// NewL1Client wraps a RPC with bindings to fetch L1 data, while logging errors, tracking metrics (optional), and caching.
...
@@ -68,7 +68,7 @@ func NewL1Client(client client.RPC, log log.Logger, metrics caching.Metrics, con
...
@@ -68,7 +68,7 @@ func NewL1Client(client client.RPC, log log.Logger, metrics caching.Metrics, con
return
&
L1Client
{
return
&
L1Client
{
EthClient
:
ethClient
,
EthClient
:
ethClient
,
l1BlockRefsCache
:
caching
.
NewLRUCache
(
metrics
,
"blockrefs"
,
config
.
L1BlockRefsCacheSize
),
l1BlockRefsCache
:
caching
.
NewLRUCache
[
common
.
Hash
,
eth
.
L1BlockRef
]
(
metrics
,
"blockrefs"
,
config
.
L1BlockRefsCacheSize
),
},
nil
},
nil
}
}
...
@@ -105,7 +105,7 @@ func (s *L1Client) L1BlockRefByNumber(ctx context.Context, num uint64) (eth.L1Bl
...
@@ -105,7 +105,7 @@ func (s *L1Client) L1BlockRefByNumber(ctx context.Context, num uint64) (eth.L1Bl
// We cache the block reference by hash as it is safe to assume collision will not occur.
// We cache the block reference by hash as it is safe to assume collision will not occur.
func
(
s
*
L1Client
)
L1BlockRefByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
L1BlockRef
,
error
)
{
func
(
s
*
L1Client
)
L1BlockRefByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
L1BlockRef
,
error
)
{
if
v
,
ok
:=
s
.
l1BlockRefsCache
.
Get
(
hash
);
ok
{
if
v
,
ok
:=
s
.
l1BlockRefsCache
.
Get
(
hash
);
ok
{
return
v
.
(
eth
.
L1BlockRef
)
,
nil
return
v
,
nil
}
}
info
,
err
:=
s
.
InfoByHash
(
ctx
,
hash
)
info
,
err
:=
s
.
InfoByHash
(
ctx
,
hash
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
op-node/sources/l2_client.go
View file @
3658b171
...
@@ -68,11 +68,11 @@ type L2Client struct {
...
@@ -68,11 +68,11 @@ type L2Client struct {
// cache L2BlockRef by hash
// cache L2BlockRef by hash
// common.Hash -> eth.L2BlockRef
// common.Hash -> eth.L2BlockRef
l2BlockRefsCache
*
caching
.
LRUCache
l2BlockRefsCache
*
caching
.
LRUCache
[
common
.
Hash
,
eth
.
L2BlockRef
]
// cache SystemConfig by L2 hash
// cache SystemConfig by L2 hash
// common.Hash -> eth.SystemConfig
// common.Hash -> eth.SystemConfig
systemConfigsCache
*
caching
.
LRUCache
systemConfigsCache
*
caching
.
LRUCache
[
common
.
Hash
,
eth
.
SystemConfig
]
}
}
// NewL2Client constructs a new L2Client instance. The L2Client is a thin wrapper around the EthClient with added functions
// NewL2Client constructs a new L2Client instance. The L2Client is a thin wrapper around the EthClient with added functions
...
@@ -87,8 +87,8 @@ func NewL2Client(client client.RPC, log log.Logger, metrics caching.Metrics, con
...
@@ -87,8 +87,8 @@ func NewL2Client(client client.RPC, log log.Logger, metrics caching.Metrics, con
return
&
L2Client
{
return
&
L2Client
{
EthClient
:
ethClient
,
EthClient
:
ethClient
,
rollupCfg
:
config
.
RollupCfg
,
rollupCfg
:
config
.
RollupCfg
,
l2BlockRefsCache
:
caching
.
NewLRUCache
(
metrics
,
"blockrefs"
,
config
.
L2BlockRefsCacheSize
),
l2BlockRefsCache
:
caching
.
NewLRUCache
[
common
.
Hash
,
eth
.
L2BlockRef
]
(
metrics
,
"blockrefs"
,
config
.
L2BlockRefsCacheSize
),
systemConfigsCache
:
caching
.
NewLRUCache
(
metrics
,
"systemconfigs"
,
config
.
L1ConfigsCacheSize
),
systemConfigsCache
:
caching
.
NewLRUCache
[
common
.
Hash
,
eth
.
SystemConfig
]
(
metrics
,
"systemconfigs"
,
config
.
L1ConfigsCacheSize
),
},
nil
},
nil
}
}
...
@@ -131,7 +131,7 @@ func (s *L2Client) L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2Bl
...
@@ -131,7 +131,7 @@ func (s *L2Client) L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2Bl
// The returned BlockRef may not be in the canonical chain.
// The returned BlockRef may not be in the canonical chain.
func
(
s
*
L2Client
)
L2BlockRefByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
L2BlockRef
,
error
)
{
func
(
s
*
L2Client
)
L2BlockRefByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
L2BlockRef
,
error
)
{
if
ref
,
ok
:=
s
.
l2BlockRefsCache
.
Get
(
hash
);
ok
{
if
ref
,
ok
:=
s
.
l2BlockRefsCache
.
Get
(
hash
);
ok
{
return
ref
.
(
eth
.
L2BlockRef
)
,
nil
return
ref
,
nil
}
}
payload
,
err
:=
s
.
PayloadByHash
(
ctx
,
hash
)
payload
,
err
:=
s
.
PayloadByHash
(
ctx
,
hash
)
...
@@ -151,7 +151,7 @@ func (s *L2Client) L2BlockRefByHash(ctx context.Context, hash common.Hash) (eth.
...
@@ -151,7 +151,7 @@ func (s *L2Client) L2BlockRefByHash(ctx context.Context, hash common.Hash) (eth.
// The returned [eth.SystemConfig] may not be in the canonical chain when the hash is not canonical.
// The returned [eth.SystemConfig] may not be in the canonical chain when the hash is not canonical.
func
(
s
*
L2Client
)
SystemConfigByL2Hash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
SystemConfig
,
error
)
{
func
(
s
*
L2Client
)
SystemConfigByL2Hash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
(
eth
.
SystemConfig
,
error
)
{
if
ref
,
ok
:=
s
.
systemConfigsCache
.
Get
(
hash
);
ok
{
if
ref
,
ok
:=
s
.
systemConfigsCache
.
Get
(
hash
);
ok
{
return
ref
.
(
eth
.
SystemConfig
)
,
nil
return
ref
,
nil
}
}
payload
,
err
:=
s
.
PayloadByHash
(
ctx
,
hash
)
payload
,
err
:=
s
.
PayloadByHash
(
ctx
,
hash
)
...
...
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