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
ed6eca29
Commit
ed6eca29
authored
Jul 26, 2023
by
Andreas Bigger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adds preimage data to the trace provider.
parent
a3416a2f
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
122 additions
and
3 deletions
+122
-3
provider.go
op-challenger/fault/alphabet/provider.go
+6
-0
provider.go
op-challenger/fault/cannon/provider.go
+15
-3
provider_test.go
op-challenger/fault/cannon/provider_test.go
+34
-0
420.json
op-challenger/fault/cannon/test_data/proofs/420.json
+11
-0
421.json
op-challenger/fault/cannon/test_data/proofs/421.json
+11
-0
types.go
op-challenger/fault/types/types.go
+22
-0
types_test.go
op-challenger/fault/types/types_test.go
+23
-0
No files found.
op-challenger/fault/alphabet/provider.go
View file @
ed6eca29
...
@@ -5,6 +5,7 @@ import (
...
@@ -5,6 +5,7 @@ import (
"math/big"
"math/big"
"strings"
"strings"
"github.com/ethereum-optimism/optimism/op-challenger/fault/types"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto"
)
)
...
@@ -28,6 +29,11 @@ func NewAlphabetProvider(state string, depth uint64) *AlphabetProvider {
...
@@ -28,6 +29,11 @@ func NewAlphabetProvider(state string, depth uint64) *AlphabetProvider {
}
}
}
}
// GetOracleData should not return any preimage oracle data for the alphabet provider.
func
(
p
*
AlphabetProvider
)
GetOracleData
(
i
uint64
)
(
*
types
.
PreimageOracleData
,
error
)
{
return
&
types
.
PreimageOracleData
{},
nil
}
// GetPreimage returns the preimage for the given hash.
// GetPreimage returns the preimage for the given hash.
func
(
ap
*
AlphabetProvider
)
GetPreimage
(
i
uint64
)
([]
byte
,
[]
byte
,
error
)
{
func
(
ap
*
AlphabetProvider
)
GetPreimage
(
i
uint64
)
([]
byte
,
[]
byte
,
error
)
{
// The index cannot be larger than the maximum index as computed by the depth.
// The index cannot be larger than the maximum index as computed by the depth.
...
...
op-challenger/fault/cannon/
cannon_
provider.go
→
op-challenger/fault/cannon/provider.go
View file @
ed6eca29
...
@@ -8,6 +8,7 @@ import (
...
@@ -8,6 +8,7 @@ import (
"path/filepath"
"path/filepath"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"github.com/ethereum-optimism/optimism/op-challenger/fault/types"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
...
@@ -18,9 +19,11 @@ const (
...
@@ -18,9 +19,11 @@ const (
)
)
type
proofData
struct
{
type
proofData
struct
{
ClaimValue
hexutil
.
Bytes
`json:"post"`
ClaimValue
hexutil
.
Bytes
`json:"post"`
StateData
hexutil
.
Bytes
`json:"state-data"`
StateData
hexutil
.
Bytes
`json:"state-data"`
ProofData
hexutil
.
Bytes
`json:"proof-data"`
ProofData
hexutil
.
Bytes
`json:"proof-data"`
OracleKey
hexutil
.
Bytes
`json:"oracle-key,omitempty"`
OracleValue
hexutil
.
Bytes
`json:"oracle-value,omitempty"`
}
}
type
ProofGenerator
interface
{
type
ProofGenerator
interface
{
...
@@ -40,6 +43,15 @@ func NewCannonTraceProvider(logger log.Logger, cfg *config.Config) *CannonTraceP
...
@@ -40,6 +43,15 @@ func NewCannonTraceProvider(logger log.Logger, cfg *config.Config) *CannonTraceP
}
}
}
}
func
(
p
*
CannonTraceProvider
)
GetOracleData
(
i
uint64
)
(
*
types
.
PreimageOracleData
,
error
)
{
proof
,
err
:=
p
.
loadProof
(
i
)
if
err
!=
nil
{
return
nil
,
err
}
data
:=
types
.
NewPreimageOracleData
(
proof
.
OracleKey
,
proof
.
OracleValue
)
return
&
data
,
nil
}
func
(
p
*
CannonTraceProvider
)
Get
(
i
uint64
)
(
common
.
Hash
,
error
)
{
func
(
p
*
CannonTraceProvider
)
Get
(
i
uint64
)
(
common
.
Hash
,
error
)
{
proof
,
err
:=
p
.
loadProof
(
i
)
proof
,
err
:=
p
.
loadProof
(
i
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
op-challenger/fault/cannon/
cannon_
provider_test.go
→
op-challenger/fault/cannon/provider_test.go
View file @
ed6eca29
...
@@ -48,6 +48,40 @@ func TestGet(t *testing.T) {
...
@@ -48,6 +48,40 @@ func TestGet(t *testing.T) {
})
})
}
}
func
TestGetOracleData
(
t
*
testing
.
T
)
{
dataDir
:=
setupTestData
(
t
)
t
.
Run
(
"ExistingProof"
,
func
(
t
*
testing
.
T
)
{
provider
,
generator
:=
setupWithTestData
(
dataDir
)
oracleData
,
err
:=
provider
.
GetOracleData
(
420
)
require
.
NoError
(
t
,
err
)
require
.
False
(
t
,
oracleData
.
IsLocal
)
expectedKey
:=
common
.
Hex2Bytes
(
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
)
require
.
Equal
(
t
,
expectedKey
,
oracleData
.
OracleKey
)
expectedData
:=
common
.
Hex2Bytes
(
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
)
require
.
Equal
(
t
,
expectedData
,
oracleData
.
OracleData
)
require
.
Empty
(
t
,
generator
.
generated
)
})
t
.
Run
(
"ProofUnavailable"
,
func
(
t
*
testing
.
T
)
{
provider
,
generator
:=
setupWithTestData
(
dataDir
)
_
,
err
:=
provider
.
GetOracleData
(
7
)
require
.
ErrorIs
(
t
,
err
,
os
.
ErrNotExist
)
require
.
Contains
(
t
,
generator
.
generated
,
7
,
"should have tried to generate the proof"
)
})
t
.
Run
(
"IgnoreUnknownFields"
,
func
(
t
*
testing
.
T
)
{
provider
,
generator
:=
setupWithTestData
(
dataDir
)
oracleData
,
err
:=
provider
.
GetOracleData
(
421
)
require
.
NoError
(
t
,
err
)
require
.
False
(
t
,
oracleData
.
IsLocal
)
expectedKey
:=
common
.
Hex2Bytes
(
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
)
require
.
Equal
(
t
,
expectedKey
,
oracleData
.
OracleKey
)
expectedData
:=
common
.
Hex2Bytes
(
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
)
require
.
Equal
(
t
,
expectedData
,
oracleData
.
OracleData
)
require
.
Empty
(
t
,
generator
.
generated
)
})
}
func
TestGetPreimage
(
t
*
testing
.
T
)
{
func
TestGetPreimage
(
t
*
testing
.
T
)
{
dataDir
:=
setupTestData
(
t
)
dataDir
:=
setupTestData
(
t
)
t
.
Run
(
"ExistingProof"
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
"ExistingProof"
,
func
(
t
*
testing
.
T
)
{
...
...
op-challenger/fault/cannon/test_data/proofs/420.json
0 → 100644
View file @
ed6eca29
{
"step"
:
0
,
"pre"
:
"0x71f9eb93ff904e5c03c3425228ef75766db0c906ad239df9a7a7f0d9c6a89705"
,
"post"
:
"0x45fd9aa59768331c726e719e76aa343e73123af888804604785ae19506e65e87"
,
"state-data"
:
"0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
,
"proof-data"
:
"0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
,
"step-input"
:
"0xf8e0cb960000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014200000000000000000000000000000000000000000000000000000000000000e2b8f068de604c85ea0e2acd437cdb47add074a2d70b81d018390c504b71fe26f4000000000000000000000000000000000000000000000000000000000000000000000000000a3900000a39040000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffd0000000000000000000000000000000000000000000000000000000000000000000000000000000070008028e3c0000000000000000000000003c01000a24210b7c00200008000000008fa40004240210960000000c0000003403e00008000000008fa100040000102571c0e460346a89963488f904199fc7b4dc3dce2ddadfe484510463ae5014a79df9d922ef2cb84325e4e13ad98828ed29937c1440d8ea9eb19cab7474243c2d0b1a83646e420529153298f3a914a2550658c930f5e519b1d8dd151cf828116697d27264e6fad331820ecf3855adcc68dc529acfc33ecfa45a3a33c9ac766edc1f437988f2abab9dce36d3bac27b0f7b58a06d125acd50a1bf14bb8c7f6c1618465a532f945043b5a9ebc800d7336673019654eb76f8c10cff4f794ee586dc9992c318cef3dfa57032e2dd2fc5cb2dcfebd05551301704dd37a7c169448ec02574f706e38c20963616dae4e03cc91f39a4c3f9608119212965b72948f0ee15feb48b758f050691197816dc3ca919bbb3b50624d195c82d644025647ac8ba07206e5eb830799dfa896506743e81856edf8a31fef737fb4f44501dc71f019bdb12ed9cf0b9fba40ef98e5091b70484ba4f6af7711ec8b0ba4f4f2c4b11455a9e071f465817724159ddeea1170f4dd912c3a5a10ec6b046aa3c4a9febddfeeaa47e3ef06e1758694515562c958dc1b018149c7e4fcd91b9033ee216fea2ea498acd065e61fd436f26c31654bfd27c13ab67707384ad7a84a4b085e890e998e8a9655da954db3d279d598343a4706a2272fca526caeddb017627ecaf0138f1446c82e16d0926c0c510773e2b439c2c71414deb9b739fa370c010380d9ed5927fd7f4bb84ac22747f1bd405830b65d9e04c5efddc2c4dc89ba294c7568b9952193172d75ed8ea3e0fe57c8ad6636da54921ab52a8a0f54920d124f43b9fd3577690140cb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6834d8ef8faaf96b7b45235297538a266eb882b8b5680f621aab3417d43cdc2eb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"oracle-input"
:
"0x"
,
"oracle-key"
:
"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
,
"oracle-value"
:
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
op-challenger/fault/cannon/test_data/proofs/421.json
0 → 100644
View file @
ed6eca29
{
"foo"
:
0
,
"bar"
:
"0x71f9eb93ff904e5c03c3425228ef75766db0c906ad239df9a7a7f0d9c6a89705"
,
"post"
:
"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
,
"state-data"
:
"0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
,
"proof-data"
:
"0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
,
"step-input"
:
"0xf8e0cb960000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014200000000000000000000000000000000000000000000000000000000000000e2b8f068de604c85ea0e2acd437cdb47add074a2d70b81d018390c504b71fe26f4000000000000000000000000000000000000000000000000000000000000000000000000000a3900000a39040000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffd0000000000000000000000000000000000000000000000000000000000000000000000000000000070008028e3c0000000000000000000000003c01000a24210b7c00200008000000008fa40004240210960000000c0000003403e00008000000008fa100040000102571c0e460346a89963488f904199fc7b4dc3dce2ddadfe484510463ae5014a79df9d922ef2cb84325e4e13ad98828ed29937c1440d8ea9eb19cab7474243c2d0b1a83646e420529153298f3a914a2550658c930f5e519b1d8dd151cf828116697d27264e6fad331820ecf3855adcc68dc529acfc33ecfa45a3a33c9ac766edc1f437988f2abab9dce36d3bac27b0f7b58a06d125acd50a1bf14bb8c7f6c1618465a532f945043b5a9ebc800d7336673019654eb76f8c10cff4f794ee586dc9992c318cef3dfa57032e2dd2fc5cb2dcfebd05551301704dd37a7c169448ec02574f706e38c20963616dae4e03cc91f39a4c3f9608119212965b72948f0ee15feb48b758f050691197816dc3ca919bbb3b50624d195c82d644025647ac8ba07206e5eb830799dfa896506743e81856edf8a31fef737fb4f44501dc71f019bdb12ed9cf0b9fba40ef98e5091b70484ba4f6af7711ec8b0ba4f4f2c4b11455a9e071f465817724159ddeea1170f4dd912c3a5a10ec6b046aa3c4a9febddfeeaa47e3ef06e1758694515562c958dc1b018149c7e4fcd91b9033ee216fea2ea498acd065e61fd436f26c31654bfd27c13ab67707384ad7a84a4b085e890e998e8a9655da954db3d279d598343a4706a2272fca526caeddb017627ecaf0138f1446c82e16d0926c0c510773e2b439c2c71414deb9b739fa370c010380d9ed5927fd7f4bb84ac22747f1bd405830b65d9e04c5efddc2c4dc89ba294c7568b9952193172d75ed8ea3e0fe57c8ad6636da54921ab52a8a0f54920d124f43b9fd3577690140cb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd95a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3774df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6834d8ef8faaf96b7b45235297538a266eb882b8b5680f621aab3417d43cdc2eb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"oracle-input"
:
"0x"
,
"oracle-key"
:
"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
,
"oracle-value"
:
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
op-challenger/fault/types/types.go
View file @
ed6eca29
...
@@ -18,6 +18,23 @@ const (
...
@@ -18,6 +18,23 @@ const (
GameStatusDefenderWon
GameStatusDefenderWon
)
)
// PreimageOracleData encapsulates the preimage oracle data
// to load into the onchain oracle.
type
PreimageOracleData
struct
{
IsLocal
bool
OracleKey
[]
byte
OracleData
[]
byte
}
// NewPreimageOracleData creates a new [PreimageOracleData] instance.
func
NewPreimageOracleData
(
key
[]
byte
,
data
[]
byte
)
PreimageOracleData
{
return
PreimageOracleData
{
IsLocal
:
len
(
key
)
>
0
&&
key
[
0
]
==
byte
(
1
),
OracleKey
:
key
,
OracleData
:
data
,
}
}
// StepCallData encapsulates the data needed to perform a step.
// StepCallData encapsulates the data needed to perform a step.
type
StepCallData
struct
{
type
StepCallData
struct
{
ClaimIndex
uint64
ClaimIndex
uint64
...
@@ -32,6 +49,11 @@ type TraceProvider interface {
...
@@ -32,6 +49,11 @@ type TraceProvider interface {
// Get(i) = Keccak256(GetPreimage(i))
// Get(i) = Keccak256(GetPreimage(i))
Get
(
i
uint64
)
(
common
.
Hash
,
error
)
Get
(
i
uint64
)
(
common
.
Hash
,
error
)
// GetOracleData returns preimage oracle data that can be submitted to the pre-image
// oracle and the dispute game contract. This function accepts a trace index for
// which the provider returns needed preimage data.
GetOracleData
(
i
uint64
)
(
*
PreimageOracleData
,
error
)
// GetPreimage returns the pre-image for a claim at the specified trace index, along
// GetPreimage returns the pre-image for a claim at the specified trace index, along
// with any associated proof data to assist in its verification.
// with any associated proof data to assist in its verification.
GetPreimage
(
i
uint64
)
(
preimage
[]
byte
,
proofData
[]
byte
,
err
error
)
GetPreimage
(
i
uint64
)
(
preimage
[]
byte
,
proofData
[]
byte
,
err
error
)
...
...
op-challenger/fault/types/types_test.go
0 → 100644
View file @
ed6eca29
package
types
import
(
"testing"
"github.com/stretchr/testify/require"
)
func
TestNewPreimageOracleData
(
t
*
testing
.
T
)
{
t
.
Run
(
"LocalData"
,
func
(
t
*
testing
.
T
)
{
data
:=
NewPreimageOracleData
([]
byte
{
1
,
2
,
3
},
[]
byte
{
4
,
5
,
6
})
require
.
True
(
t
,
data
.
IsLocal
)
require
.
Equal
(
t
,
[]
byte
{
1
,
2
,
3
},
data
.
OracleKey
)
require
.
Equal
(
t
,
[]
byte
{
4
,
5
,
6
},
data
.
OracleData
)
})
t
.
Run
(
"GlobalData"
,
func
(
t
*
testing
.
T
)
{
data
:=
NewPreimageOracleData
([]
byte
{
0
,
2
,
3
},
[]
byte
{
4
,
5
,
6
})
require
.
False
(
t
,
data
.
IsLocal
)
require
.
Equal
(
t
,
[]
byte
{
0
,
2
,
3
},
data
.
OracleKey
)
require
.
Equal
(
t
,
[]
byte
{
4
,
5
,
6
},
data
.
OracleData
)
})
}
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