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
774ad161
Unverified
Commit
774ad161
authored
Jan 17, 2024
by
refcell.eth
Committed by
GitHub
Jan 17, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(op-challenger): large preimage uploader (#9021)
parent
0b7e171d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
93 additions
and
2 deletions
+93
-2
direct.go
op-challenger/game/fault/preimages/direct.go
+0
-2
split.go
op-challenger/game/fault/preimages/split.go
+38
-0
split_test.go
op-challenger/game/fault/preimages/split_test.go
+52
-0
types.go
op-challenger/game/fault/preimages/types.go
+3
-0
No files found.
op-challenger/game/fault/preimages/direct.go
View file @
774ad161
...
@@ -12,8 +12,6 @@ import (
...
@@ -12,8 +12,6 @@ import (
var
_
PreimageUploader
=
(
*
DirectPreimageUploader
)(
nil
)
var
_
PreimageUploader
=
(
*
DirectPreimageUploader
)(
nil
)
var
ErrNilPreimageData
=
fmt
.
Errorf
(
"cannot upload nil preimage data"
)
// DirectPreimageUploader uploads the provided [types.PreimageOracleData]
// DirectPreimageUploader uploads the provided [types.PreimageOracleData]
// directly to the PreimageOracle contract in a single transaction.
// directly to the PreimageOracle contract in a single transaction.
type
DirectPreimageUploader
struct
{
type
DirectPreimageUploader
struct
{
...
...
op-challenger/game/fault/preimages/split.go
0 → 100644
View file @
774ad161
package
preimages
import
(
"context"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
)
var
_
PreimageUploader
=
(
*
SplitPreimageUploader
)(
nil
)
// PREIMAGE_SIZE_THRESHOLD is the size threshold for determining whether a preimage
// should be uploaded directly or through the large preimage uploader.
// TODO(client-pod#467): determine the correct size threshold to toggle between
//
// the direct and large preimage uploaders.
const
PREIMAGE_SIZE_THRESHOLD
=
136
*
128
// SplitPreimageUploader routes preimage uploads to the appropriate uploader
// based on the size of the preimage.
type
SplitPreimageUploader
struct
{
directUploader
PreimageUploader
largeUploader
PreimageUploader
}
func
NewSplitPreimageUploader
(
directUploader
PreimageUploader
,
largeUploader
PreimageUploader
)
*
SplitPreimageUploader
{
return
&
SplitPreimageUploader
{
directUploader
,
largeUploader
}
}
func
(
s
*
SplitPreimageUploader
)
UploadPreimage
(
ctx
context
.
Context
,
parent
uint64
,
data
*
types
.
PreimageOracleData
)
error
{
if
data
==
nil
{
return
ErrNilPreimageData
}
if
len
(
data
.
OracleData
)
>
PREIMAGE_SIZE_THRESHOLD
{
return
s
.
largeUploader
.
UploadPreimage
(
ctx
,
parent
,
data
)
}
else
{
return
s
.
directUploader
.
UploadPreimage
(
ctx
,
parent
,
data
)
}
}
op-challenger/game/fault/preimages/split_test.go
0 → 100644
View file @
774ad161
package
preimages
import
(
"context"
"testing"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/stretchr/testify/require"
)
func
TestSplitPreimageUploader_UploadPreimage
(
t
*
testing
.
T
)
{
t
.
Run
(
"DirectUploadSucceeds"
,
func
(
t
*
testing
.
T
)
{
oracle
,
direct
,
large
:=
newTestSplitPreimageUploader
(
t
)
err
:=
oracle
.
UploadPreimage
(
context
.
Background
(),
0
,
&
types
.
PreimageOracleData
{})
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
1
,
direct
.
updates
)
require
.
Equal
(
t
,
0
,
large
.
updates
)
})
t
.
Run
(
"LargeUploadSucceeds"
,
func
(
t
*
testing
.
T
)
{
oracle
,
direct
,
large
:=
newTestSplitPreimageUploader
(
t
)
err
:=
oracle
.
UploadPreimage
(
context
.
Background
(),
0
,
&
types
.
PreimageOracleData
{
OracleData
:
make
([]
byte
,
PREIMAGE_SIZE_THRESHOLD
+
1
)})
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
1
,
large
.
updates
)
require
.
Equal
(
t
,
0
,
direct
.
updates
)
})
t
.
Run
(
"NilPreimageOracleData"
,
func
(
t
*
testing
.
T
)
{
oracle
,
_
,
_
:=
newTestSplitPreimageUploader
(
t
)
err
:=
oracle
.
UploadPreimage
(
context
.
Background
(),
0
,
nil
)
require
.
ErrorIs
(
t
,
err
,
ErrNilPreimageData
)
})
}
type
mockPreimageUploader
struct
{
updates
int
uploadFails
bool
}
func
(
s
*
mockPreimageUploader
)
UploadPreimage
(
ctx
context
.
Context
,
parent
uint64
,
data
*
types
.
PreimageOracleData
)
error
{
s
.
updates
++
if
s
.
uploadFails
{
return
mockUpdateOracleTxError
}
return
nil
}
func
newTestSplitPreimageUploader
(
t
*
testing
.
T
)
(
*
SplitPreimageUploader
,
*
mockPreimageUploader
,
*
mockPreimageUploader
)
{
direct
:=
&
mockPreimageUploader
{}
large
:=
&
mockPreimageUploader
{}
return
NewSplitPreimageUploader
(
direct
,
large
),
direct
,
large
}
op-challenger/game/fault/preimages/types.go
View file @
774ad161
...
@@ -2,11 +2,14 @@ package preimages
...
@@ -2,11 +2,14 @@ package preimages
import
(
import
(
"context"
"context"
"fmt"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
)
)
var
ErrNilPreimageData
=
fmt
.
Errorf
(
"cannot upload nil preimage data"
)
// PreimageUploader is responsible for posting preimages.
// PreimageUploader is responsible for posting preimages.
type
PreimageUploader
interface
{
type
PreimageUploader
interface
{
// UploadPreimage uploads the provided preimage.
// UploadPreimage uploads the provided preimage.
...
...
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