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
2c59ec20
Unverified
Commit
2c59ec20
authored
Apr 20, 2023
by
mergify[bot]
Committed by
GitHub
Apr 20, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into willc/atst-ci
parents
81010b62
ad7a3873
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
43 additions
and
8 deletions
+43
-8
prefetcher.go
op-program/host/prefetcher/prefetcher.go
+13
-8
prefetcher_test.go
op-program/host/prefetcher/prefetcher_test.go
+22
-0
iface.go
op-program/preimage/iface.go
+8
-0
No files found.
op-program/host/prefetcher/prefetcher.go
View file @
2c59ec20
...
@@ -6,18 +6,17 @@ import (
...
@@ -6,18 +6,17 @@ import (
"fmt"
"fmt"
"strings"
"strings"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-program/client/l1"
"github.com/ethereum-optimism/optimism/op-program/client/l1"
"github.com/ethereum-optimism/optimism/op-program/client/l2"
"github.com/ethereum-optimism/optimism/op-program/client/l2"
"github.com/ethereum-optimism/optimism/op-program/client/mpt"
"github.com/ethereum-optimism/optimism/op-program/client/mpt"
"github.com/ethereum-optimism/optimism/op-program/host/kvstore"
"github.com/ethereum-optimism/optimism/op-program/host/kvstore"
"github.com/ethereum-optimism/optimism/op-program/preimage"
"github.com/ethereum-optimism/optimism/op-program/preimage"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log"
)
)
type
L1Source
interface
{
type
L1Source
interface
{
...
@@ -33,6 +32,7 @@ type L2Source interface {
...
@@ -33,6 +32,7 @@ type L2Source interface {
}
}
type
Prefetcher
struct
{
type
Prefetcher
struct
{
logger
log
.
Logger
l1Fetcher
L1Source
l1Fetcher
L1Source
l2Fetcher
L2Source
l2Fetcher
L2Source
lastHint
string
lastHint
string
...
@@ -41,6 +41,7 @@ type Prefetcher struct {
...
@@ -41,6 +41,7 @@ type Prefetcher struct {
func
NewPrefetcher
(
logger
log
.
Logger
,
l1Fetcher
L1Source
,
l2Fetcher
L2Source
,
kvStore
kvstore
.
KV
)
*
Prefetcher
{
func
NewPrefetcher
(
logger
log
.
Logger
,
l1Fetcher
L1Source
,
l2Fetcher
L2Source
,
kvStore
kvstore
.
KV
)
*
Prefetcher
{
return
&
Prefetcher
{
return
&
Prefetcher
{
logger
:
logger
,
l1Fetcher
:
NewRetryingL1Source
(
logger
,
l1Fetcher
),
l1Fetcher
:
NewRetryingL1Source
(
logger
,
l1Fetcher
),
l2Fetcher
:
NewRetryingL2Source
(
logger
,
l2Fetcher
),
l2Fetcher
:
NewRetryingL2Source
(
logger
,
l2Fetcher
),
kvStore
:
kvStore
,
kvStore
:
kvStore
,
...
@@ -71,6 +72,7 @@ func (p *Prefetcher) prefetch(ctx context.Context, hint string) error {
...
@@ -71,6 +72,7 @@ func (p *Prefetcher) prefetch(ctx context.Context, hint string) error {
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
p
.
logger
.
Debug
(
"Prefetching"
,
"type"
,
hintType
,
"hash"
,
hash
)
switch
hintType
{
switch
hintType
{
case
l1
.
HintL1BlockHeader
:
case
l1
.
HintL1BlockHeader
:
header
,
err
:=
p
.
l1Fetcher
.
InfoByHash
(
ctx
,
hash
)
header
,
err
:=
p
.
l1Fetcher
.
InfoByHash
(
ctx
,
hash
)
...
@@ -143,8 +145,11 @@ func (p *Prefetcher) storeTransactions(txs types.Transactions) error {
...
@@ -143,8 +145,11 @@ func (p *Prefetcher) storeTransactions(txs types.Transactions) error {
func
(
p
*
Prefetcher
)
storeTrieNodes
(
values
[]
hexutil
.
Bytes
)
error
{
func
(
p
*
Prefetcher
)
storeTrieNodes
(
values
[]
hexutil
.
Bytes
)
error
{
_
,
nodes
:=
mpt
.
WriteTrie
(
values
)
_
,
nodes
:=
mpt
.
WriteTrie
(
values
)
for
_
,
node
:=
range
nodes
{
for
_
,
node
:=
range
nodes
{
err
:=
p
.
kvStore
.
Put
(
preimage
.
Keccak256Key
(
crypto
.
Keccak256Hash
(
node
))
.
PreimageKey
(),
node
)
key
:=
preimage
.
Keccak256Key
(
crypto
.
Keccak256Hash
(
node
))
.
PreimageKey
()
if
err
!=
nil
{
if
err
:=
p
.
kvStore
.
Put
(
key
,
node
);
errors
.
Is
(
err
,
kvstore
.
ErrAlreadyExists
)
{
// It's not uncommon for different tries to contain common nodes (esp for receipts)
continue
}
else
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to store node: %w"
,
err
)
return
fmt
.
Errorf
(
"failed to store node: %w"
,
err
)
}
}
}
}
...
...
op-program/host/prefetcher/prefetcher_test.go
View file @
2c59ec20
...
@@ -129,6 +129,28 @@ func TestFetchL1Receipts(t *testing.T) {
...
@@ -129,6 +129,28 @@ func TestFetchL1Receipts(t *testing.T) {
require
.
EqualValues
(
t
,
hash
,
header
.
Hash
())
require
.
EqualValues
(
t
,
hash
,
header
.
Hash
())
assertReceiptsEqual
(
t
,
receipts
,
actualReceipts
)
assertReceiptsEqual
(
t
,
receipts
,
actualReceipts
)
})
})
// Blocks may have identical RLP receipts for different transactions.
// Check that the node already existing is handled
t
.
Run
(
"CommonTrieNodes"
,
func
(
t
*
testing
.
T
)
{
prefetcher
,
l1Cl
,
_
,
kv
:=
createPrefetcher
(
t
)
l1Cl
.
ExpectInfoByHash
(
hash
,
eth
.
BlockToInfo
(
block
),
nil
)
l1Cl
.
ExpectInfoAndTxsByHash
(
hash
,
eth
.
BlockToInfo
(
block
),
block
.
Transactions
(),
nil
)
l1Cl
.
ExpectFetchReceipts
(
hash
,
eth
.
BlockToInfo
(
block
),
receipts
,
nil
)
defer
l1Cl
.
AssertExpectations
(
t
)
// Pre-store one receipt node (but not the whole trie leading to it)
// This would happen if an identical receipt was in an earlier block
opaqueRcpts
,
err
:=
eth
.
EncodeReceipts
(
receipts
)
require
.
NoError
(
t
,
err
)
_
,
nodes
:=
mpt
.
WriteTrie
(
opaqueRcpts
)
require
.
NoError
(
t
,
kv
.
Put
(
preimage
.
Keccak256Key
(
crypto
.
Keccak256Hash
(
nodes
[
0
]))
.
PreimageKey
(),
nodes
[
0
]))
oracle
:=
l1
.
NewPreimageOracle
(
asOracleFn
(
t
,
prefetcher
),
asHinter
(
t
,
prefetcher
))
header
,
actualReceipts
:=
oracle
.
ReceiptsByBlockHash
(
hash
)
require
.
EqualValues
(
t
,
hash
,
header
.
Hash
())
assertReceiptsEqual
(
t
,
receipts
,
actualReceipts
)
})
}
}
func
TestFetchL2Block
(
t
*
testing
.
T
)
{
func
TestFetchL2Block
(
t
*
testing
.
T
)
{
...
...
op-program/preimage/iface.go
View file @
2c59ec20
...
@@ -55,6 +55,14 @@ func (k Keccak256Key) PreimageKey() (out common.Hash) {
...
@@ -55,6 +55,14 @@ func (k Keccak256Key) PreimageKey() (out common.Hash) {
return
return
}
}
func
(
k
Keccak256Key
)
String
()
string
{
return
common
.
Hash
(
k
)
.
String
()
}
func
(
k
Keccak256Key
)
TerminalString
()
string
{
return
common
.
Hash
(
k
)
.
String
()
}
// Hint is an interface to enable any program type to function as a hint,
// Hint is an interface to enable any program type to function as a hint,
// when passed to the Hinter interface, returning a string representation
// when passed to the Hinter interface, returning a string representation
// of what data the host should prepare pre-images for.
// of what data the host should prepare pre-images for.
...
...
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