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
c096f785
Commit
c096f785
authored
Oct 11, 2023
by
clabby
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Tests, cleanup
parent
b3e0a106
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
61 additions
and
28 deletions
+61
-28
run.go
cannon/cmd/run.go
+1
-1
evm_test.go
cannon/mipsevm/evm_test.go
+1
-1
witness.go
cannon/mipsevm/witness.go
+2
-6
alphabetvm.go
op-bindings/bindings/alphabetvm.go
+14
-14
alphabetvm_more.go
op-bindings/bindings/alphabetvm_more.go
+1
-1
faultdisputegame.go
op-bindings/bindings/faultdisputegame.go
+1
-1
faultdisputegame_more.go
op-bindings/bindings/faultdisputegame_more.go
+1
-1
FaultDisputeGame.sol
packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol
+4
-1
IBigStepper.sol
.../contracts-bedrock/src/dispute/interfaces/IBigStepper.sol
+3
-1
FaultDisputeGame.t.sol
packages/contracts-bedrock/test/FaultDisputeGame.t.sol
+1
-1
PreimageOracle.t.sol
packages/contracts-bedrock/test/PreimageOracle.t.sol
+32
-0
No files found.
cannon/cmd/run.go
View file @
c096f785
...
...
@@ -351,7 +351,7 @@ func Run(ctx *cli.Context) error {
StepInput
:
witness
.
EncodeStepInput
(
0
),
}
if
witness
.
HasPreimage
()
{
inp
,
err
:=
witness
.
EncodePreimageOracleInput
(
nil
)
inp
,
err
:=
witness
.
EncodePreimageOracleInput
(
0
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to encode pre-image oracle input: %w"
,
err
)
}
...
...
cannon/mipsevm/evm_test.go
View file @
c096f785
...
...
@@ -76,7 +76,7 @@ func (m *MIPSEVM) Step(t *testing.T, stepWitness *StepWitness) []byte {
if
stepWitness
.
HasPreimage
()
{
t
.
Logf
(
"reading preimage key %x at offset %d"
,
stepWitness
.
PreimageKey
,
stepWitness
.
PreimageOffset
)
poInput
,
err
:=
stepWitness
.
EncodePreimageOracleInput
(
nil
)
poInput
,
err
:=
stepWitness
.
EncodePreimageOracleInput
(
0
)
require
.
NoError
(
t
,
err
,
"encode preimage oracle input"
)
_
,
leftOverGas
,
err
:=
m
.
env
.
Call
(
vm
.
AccountRef
(
sender
),
m
.
addrs
.
Oracle
,
poInput
,
startingGas
,
big
.
NewInt
(
0
))
require
.
NoErrorf
(
t
,
err
,
"evm should not fail, took %d gas"
,
startingGas
-
leftOverGas
)
...
...
cannon/mipsevm/witness.go
View file @
c096f785
...
...
@@ -51,7 +51,7 @@ func (wit *StepWitness) HasPreimage() bool {
return
wit
.
PreimageKey
!=
([
32
]
byte
{})
}
func
(
wit
*
StepWitness
)
EncodePreimageOracleInput
(
localContext
*
uint32
)
([]
byte
,
error
)
{
func
(
wit
*
StepWitness
)
EncodePreimageOracleInput
(
localContext
uint32
)
([]
byte
,
error
)
{
if
wit
.
PreimageKey
==
([
32
]
byte
{})
{
return
nil
,
errors
.
New
(
"cannot encode pre-image oracle input, witness has no pre-image to proof"
)
}
...
...
@@ -64,11 +64,7 @@ func (wit *StepWitness) EncodePreimageOracleInput(localContext *uint32) ([]byte,
var
input
[]
byte
input
=
append
(
input
,
LoadLocalDataBytes4
...
)
input
=
append
(
input
,
wit
.
PreimageKey
[
:
]
...
)
if
localContext
!=
nil
{
input
=
append
(
input
,
uint32ToBytes32
(
*
localContext
)
...
)
// local context in bytes
}
else
{
input
=
append
(
input
,
uint32ToBytes32
(
0
)
...
)
// local context in bytes
}
input
=
append
(
input
,
uint32ToBytes32
(
localContext
)
...
)
// local context in bytes
preimagePart
:=
wit
.
PreimageValue
[
8
:
]
var
tmp
[
32
]
byte
...
...
op-bindings/bindings/alphabetvm.go
View file @
c096f785
This diff is collapsed.
Click to expand it.
op-bindings/bindings/alphabetvm_more.go
View file @
c096f785
...
...
@@ -13,7 +13,7 @@ const AlphabetVMStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":
var
AlphabetVMStorageLayout
=
new
(
solc
.
StorageLayout
)
var
AlphabetVMDeployedBin
=
"0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063
f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610212565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600888886040516100e292919061027e565b6040518091039020901b0361010857600091506101018688018861028e565b9050610127565b610114868801886102a7565b909250905081610123816102f8565b9250505b81610133826001610330565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101db57600080fd5b50813567ffffffffffffffff8111156101f357600080fd5b60208301915083602082850101111561020b57600080fd5b9250929050565b6000806000806040858703121561022857600080fd5b843567ffffffffffffffff8082111561024057600080fd5b61024c888389016101c9565b9096509450602087013591508082111561026557600080fd5b50610272878288016101c9565b95989497509550505050565b8183823760009101908152919050565b6000602082840312156102a057600080fd5b5035919050565b600080604083850312156102ba57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610329576103296102c9565b5060010190565b60008219821115610343576103436102c9
565b50019056fea164736f6c634300080f000a"
var
AlphabetVMDeployedBin
=
"0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063
836e7b3214610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610213565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600889896040516100e2929190610287565b6040518091039020901b03610108576000915061010187890189610297565b9050610127565b610114878901896102b0565b90925090508161012381610301565b9250505b81610133826001610339565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001798975050505050505050565b60008083601f8401126101dc57600080fd5b50813567ffffffffffffffff8111156101f457600080fd5b60208301915083602082850101111561020c57600080fd5b9250929050565b60008060008060006060868803121561022b57600080fd5b853567ffffffffffffffff8082111561024357600080fd5b61024f89838a016101ca565b9097509550602088013591508082111561026857600080fd5b50610275888289016101ca565b96999598509660400135949350505050565b8183823760009101908152919050565b6000602082840312156102a957600080fd5b5035919050565b600080604083850312156102c357600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610332576103326102d2565b5060010190565b6000821982111561034c5761034c6102d2
565b50019056fea164736f6c634300080f000a"
func
init
()
{
if
err
:=
json
.
Unmarshal
([]
byte
(
AlphabetVMStorageLayoutJSON
),
AlphabetVMStorageLayout
);
err
!=
nil
{
...
...
op-bindings/bindings/faultdisputegame.go
View file @
c096f785
This diff is collapsed.
Click to expand it.
op-bindings/bindings/faultdisputegame_more.go
View file @
c096f785
This diff is collapsed.
Click to expand it.
packages/contracts-bedrock/src/dispute/FaultDisputeGame.sol
View file @
c096f785
...
...
@@ -174,7 +174,10 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, ISemver {
// SAFETY: While the `attack` path does not need an extra check for the post
// state's depth in relation to the parent, we don't need another
// branch because (n - n) % 2 == 0.
bool validStep = VM.step(_stateData, _proof) == Claim.unwrap(postState.claim);
// TODO(clabby): Once output bisection is implemented, the local context will no longer
// be constant. We will need to pass it in here based off of the ancestor
// disputed output root's L2 block number.
bool validStep = VM.step(_stateData, _proof, 0) == Claim.unwrap(postState.claim);
bool parentPostAgree = (parentPos.depth() - postState.position.depth()) % 2 == 0;
if (parentPostAgree == validStep) revert ValidStep();
...
...
packages/contracts-bedrock/src/dispute/interfaces/IBigStepper.sol
View file @
c096f785
...
...
@@ -29,8 +29,10 @@ interface IBigStepper {
/// hash.
/// @param _stateData The preimage of the prestate hash.
/// @param _proof A proof for the inclusion of the prestate's memory in the merkle tree.
/// @param _localContext The local key context for the preimage oracle. Optional, can be set as a constant
/// if the caller only requires one set of local keys.
/// @return postState_ The poststate hash after the instruction step.
function step(bytes calldata _stateData, bytes calldata _proof) external returns (bytes32 postState_);
function step(bytes calldata _stateData, bytes calldata _proof
, uint256 _localContext
) external returns (bytes32 postState_);
/// @notice Returns the preimage oracle used by the stepper.
function oracle() external view returns (IPreimageOracle oracle_);
...
...
packages/contracts-bedrock/test/FaultDisputeGame.t.sol
View file @
c096f785
...
...
@@ -1099,7 +1099,7 @@ contract AlphabetVM is IBigStepper {
}
/// @inheritdoc IBigStepper
function step(bytes calldata _stateData, bytes calldata) external view returns (bytes32 postState_) {
function step(bytes calldata _stateData, bytes calldata
, uint256
) external view returns (bytes32 postState_) {
uint256 traceIndex;
uint256 claim;
if ((keccak256(_stateData) << 8) == (Claim.unwrap(ABSOLUTE_PRESTATE) << 8)) {
...
...
packages/contracts-bedrock/test/PreimageOracle.t.sol
View file @
c096f785
...
...
@@ -47,6 +47,38 @@ contract PreimageOracle_Test is Test {
assertEq(length, size);
}
/// @notice Tests that multiple local key contexts can be used by the same address for the
/// same local data identifier.
function test_loadLocalData_multipleContexts_succeeds() public {
uint256 ident = 1;
uint8 size = 4;
uint8 partOffset = 0;
// Form the words we'll be storing
bytes32[2] memory words = [
bytes32(uint256(0xdeadbeef) << 224),
bytes32(uint256(0xbeefbabe) << 224)
];
for (uint256 i; i < words.length; i++) {
// Load the local data into the preimage oracle under the test contract's context
// and the given local context.
bytes32 contextKey = oracle.loadLocalData(ident, i, words[i], size, partOffset);
// Validate that the pre-image part is set
bool ok = oracle.preimagePartOk(contextKey, partOffset);
assertTrue(ok);
// Validate the local data part
bytes32 expectedPart = bytes32(uint256(words[i] >> 64) | uint256(size) << 192);
assertEq(oracle.preimageParts(contextKey, partOffset), expectedPart);
// Validate the local data length
uint256 length = oracle.preimageLengths(contextKey);
assertEq(length, size);
}
}
/// @notice Tests that context-specific data [0, 32] bytes in length can be loaded correctly.
function testFuzz_loadLocalData_varyingLength_succeeds(
uint256 ident,
...
...
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