Skip to content

Commit 275d75b

Browse files
committed
Merge remote-tracking branch 'origin/develop' into seq-inbox-opt
2 parents 3609765 + 6957500 commit 275d75b

26 files changed

+239
-241
lines changed

.github/workflows/contract-tests.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ jobs:
5252
cache: 'yarn'
5353
cache-dependency-path: '**/yarn.lock'
5454

55+
- name: Install Foundry
56+
uses: foundry-rs/foundry-toolchain@v1
57+
with:
58+
version: nightly
59+
5560
- name: Install dependencies
5661
run: yarn install
5762

@@ -70,6 +75,9 @@ jobs:
7075
- name: Interface compatibility
7176
run: yarn run test:compatibility
7277

78+
- name: Forge build
79+
run: forge build
80+
7381
- name: Test Storage Layouts
7482
run: yarn run test:storage
7583

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ node_modules/
44
deployments/
55
/test/prover/proofs/*.json
66
/test/prover/spec-proofs/*.json
7-
/test/storage/*-old.dot
7+
/test/storage/*-old
88
scripts/config.ts
99
forge-cache/
1010
out/

src/osp/OneStepProverHostIo.sol

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ contract OneStepProverHostIo is IOneStepProver {
105105
ExecutionContext calldata,
106106
Machine memory mach,
107107
Module memory mod,
108-
Instruction calldata,
108+
Instruction calldata inst,
109109
bytes calldata proof
110110
) internal pure {
111111
uint256 preimageOffset = mach.valueStack.pop().assumeI32();
@@ -128,18 +128,38 @@ contract OneStepProverHostIo is IOneStepProver {
128128
bytes memory extracted;
129129
uint8 proofType = uint8(proof[proofOffset]);
130130
proofOffset++;
131-
if (proofType == 0) {
131+
// These values must be kept in sync with `arbitrator/arbutil/src/types.rs`
132+
// and `arbutil/preimage_type.go` (both in the nitro repo).
133+
if (inst.argumentData == 0) {
134+
// The machine is asking for a keccak256 preimage
135+
136+
if (proofType == 0) {
137+
bytes calldata preimage = proof[proofOffset:];
138+
require(keccak256(preimage) == leafContents, "BAD_PREIMAGE");
139+
140+
uint256 preimageEnd = preimageOffset + 32;
141+
if (preimageEnd > preimage.length) {
142+
preimageEnd = preimage.length;
143+
}
144+
extracted = preimage[preimageOffset:preimageEnd];
145+
} else {
146+
// TODO: support proving via an authenticated contract
147+
revert("UNKNOWN_PREIMAGE_PROOF");
148+
}
149+
} else if (inst.argumentData == 1) {
150+
// The machine is asking for a sha2-256 preimage
151+
152+
require(proofType == 0, "UNKNOWN_PREIMAGE_PROOF");
132153
bytes calldata preimage = proof[proofOffset:];
133-
require(keccak256(preimage) == leafContents, "BAD_PREIMAGE");
154+
require(sha256(preimage) == leafContents, "BAD_PREIMAGE");
134155

135156
uint256 preimageEnd = preimageOffset + 32;
136157
if (preimageEnd > preimage.length) {
137158
preimageEnd = preimage.length;
138159
}
139160
extracted = preimage[preimageOffset:preimageEnd];
140161
} else {
141-
// TODO: support proving via an authenticated contract
142-
revert("UNKNOWN_PREIMAGE_PROOF");
162+
revert("UNKNOWN_PREIMAGE_TYPE");
143163
}
144164

145165
for (uint256 i = 0; i < extracted.length; i++) {

test/storage/Bridge

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
| Name | Type | Slot | Offset | Bytes | Contract |
2+
|----------------------------------|------------------------------------------------|------|--------|-------|------------------------------|
3+
| _initialized | bool | 0 | 0 | 1 | src/bridge/Bridge.sol:Bridge |
4+
| _initializing | bool | 0 | 1 | 1 | src/bridge/Bridge.sol:Bridge |
5+
| allowedDelayedInboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 1 | 0 | 32 | src/bridge/Bridge.sol:Bridge |
6+
| allowedOutboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 2 | 0 | 32 | src/bridge/Bridge.sol:Bridge |
7+
| allowedDelayedInboxList | address[] | 3 | 0 | 32 | src/bridge/Bridge.sol:Bridge |
8+
| allowedOutboxList | address[] | 4 | 0 | 32 | src/bridge/Bridge.sol:Bridge |
9+
| _activeOutbox | address | 5 | 0 | 20 | src/bridge/Bridge.sol:Bridge |
10+
| delayedInboxAccs | bytes32[] | 6 | 0 | 32 | src/bridge/Bridge.sol:Bridge |
11+
| sequencerInboxAccs | bytes32[] | 7 | 0 | 32 | src/bridge/Bridge.sol:Bridge |
12+
| rollup | contract IOwnable | 8 | 0 | 20 | src/bridge/Bridge.sol:Bridge |
13+
| sequencerInbox | address | 9 | 0 | 20 | src/bridge/Bridge.sol:Bridge |
14+
| sequencerReportedSubMessageCount | uint256 | 10 | 0 | 32 | src/bridge/Bridge.sol:Bridge |
15+
| __gap | uint256[40] | 11 | 0 | 1280 | src/bridge/Bridge.sol:Bridge |

test/storage/Bridge.dot

Lines changed: 0 additions & 30 deletions
This file was deleted.

test/storage/ChallengeManager

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
| Name | Type | Slot | Offset | Bytes | Contract |
2+
|------------------------|---------------------------------------------------|------|--------|-------|-----------------------------------------------------|
3+
| totalChallengesCreated | uint64 | 0 | 0 | 8 | src/challenge/ChallengeManager.sol:ChallengeManager |
4+
| challenges | mapping(uint256 => struct ChallengeLib.Challenge) | 1 | 0 | 32 | src/challenge/ChallengeManager.sol:ChallengeManager |
5+
| resultReceiver | contract IChallengeResultReceiver | 2 | 0 | 20 | src/challenge/ChallengeManager.sol:ChallengeManager |
6+
| sequencerInbox | contract ISequencerInbox | 3 | 0 | 20 | src/challenge/ChallengeManager.sol:ChallengeManager |
7+
| bridge | contract IBridge | 4 | 0 | 20 | src/challenge/ChallengeManager.sol:ChallengeManager |
8+
| osp | contract IOneStepProofEntry | 5 | 0 | 20 | src/challenge/ChallengeManager.sol:ChallengeManager |

test/storage/ChallengeManager.dot

Lines changed: 0 additions & 9 deletions
This file was deleted.

test/storage/ERC20Bridge

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
| Name | Type | Slot | Offset | Bytes | Contract |
2+
|----------------------------------|------------------------------------------------|------|--------|-------|----------------------------------------|
3+
| _initialized | bool | 0 | 0 | 1 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
4+
| _initializing | bool | 0 | 1 | 1 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
5+
| allowedDelayedInboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 1 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
6+
| allowedOutboxesMap | mapping(address => struct AbsBridge.InOutInfo) | 2 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
7+
| allowedDelayedInboxList | address[] | 3 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
8+
| allowedOutboxList | address[] | 4 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
9+
| _activeOutbox | address | 5 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
10+
| delayedInboxAccs | bytes32[] | 6 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
11+
| sequencerInboxAccs | bytes32[] | 7 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
12+
| rollup | contract IOwnable | 8 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
13+
| sequencerInbox | address | 9 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
14+
| sequencerReportedSubMessageCount | uint256 | 10 | 0 | 32 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
15+
| __gap | uint256[40] | 11 | 0 | 1280 | src/bridge/ERC20Bridge.sol:ERC20Bridge |
16+
| nativeToken | address | 51 | 0 | 20 | src/bridge/ERC20Bridge.sol:ERC20Bridge |

test/storage/ERC20Bridge.dot

Lines changed: 0 additions & 27 deletions
This file was deleted.

test/storage/ERC20Inbox

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
| Name | Type | Slot | Offset | Bytes | Contract |
2+
|------------------|--------------------------|------|--------|-------|--------------------------------------|
3+
| _initialized | bool | 0 | 0 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
4+
| _initializing | bool | 0 | 1 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
5+
| __gap | uint256[50] | 1 | 0 | 1600 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
6+
| _paused | bool | 51 | 0 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
7+
| __gap | uint256[49] | 52 | 0 | 1568 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
8+
| bridge | contract IBridge | 101 | 0 | 20 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
9+
| sequencerInbox | contract ISequencerInbox | 102 | 0 | 20 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
10+
| allowListEnabled | bool | 102 | 20 | 1 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
11+
| isAllowed | mapping(address => bool) | 103 | 0 | 32 | src/bridge/ERC20Inbox.sol:ERC20Inbox |
12+
| __gap | uint256[47] | 104 | 0 | 1504 | src/bridge/ERC20Inbox.sol:ERC20Inbox |

test/storage/ERC20Inbox.dot

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)