Skip to content

Commit 250973a

Browse files
committed
cannon: Introduce a new state version for supporting get_fd.
Switches singlethreaded prestate to use .bin.gz instead of json since it now needs to detect the new state version.
1 parent a131f7b commit 250973a

File tree

14 files changed

+37
-26
lines changed

14 files changed

+37
-26
lines changed

.circleci/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,7 +1055,7 @@ jobs:
10551055
key: cannon-prestate-{{ checksum "./cannon/bin/cannon" }}-{{ checksum "op-program/bin/op-program-client.elf" }}
10561056
name: Save Cannon prestate to cache
10571057
paths:
1058-
- "op-program/bin/prestate.json"
1058+
- "op-program/bin/prestate.bin.gz"
10591059
- "op-program/bin/meta.json"
10601060
- "op-program/bin/prestate-proof.json"
10611061
- run:
@@ -1076,7 +1076,7 @@ jobs:
10761076
- persist_to_workspace:
10771077
root: .
10781078
paths:
1079-
- "op-program/bin/prestate.json"
1079+
- "op-program/bin/prestate.bin.gz"
10801080
- "op-program/bin/meta.json"
10811081
- "op-program/bin/prestate-proof.json"
10821082

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,16 +134,16 @@ reproducible-prestate: ## Builds reproducible-prestate binary
134134
.PHONY: reproducible-prestate
135135

136136
# Include any files required for the devnet to build and run.
137-
DEVNET_CANNON_PRESTATE_FILES := op-program/bin/prestate-proof.json op-program/bin/prestate.json op-program/bin/prestate-proof-mt.json op-program/bin/prestate-mt.bin.gz
137+
DEVNET_CANNON_PRESTATE_FILES := op-program/bin/prestate-proof.json op-program/bin/prestate.bin.gz op-program/bin/prestate-proof-mt.json op-program/bin/prestate-mt.bin.gz
138138

139139

140140
$(DEVNET_CANNON_PRESTATE_FILES):
141141
make cannon-prestate
142142
make cannon-prestate-mt
143143

144144
cannon-prestate: op-program cannon ## Generates prestate using cannon and op-program
145-
./cannon/bin/cannon load-elf --type singlethreaded --path op-program/bin/op-program-client.elf --out op-program/bin/prestate.json --meta op-program/bin/meta.json
146-
./cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate.json --meta op-program/bin/meta.json --proof-fmt 'op-program/bin/%d.json' --output ""
145+
./cannon/bin/cannon load-elf --type singlethreaded-getfd --path op-program/bin/op-program-client.elf --out op-program/bin/prestate.bin.gz --meta op-program/bin/meta.json
146+
./cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input op-program/bin/prestate.bin.gz --meta op-program/bin/meta.json --proof-fmt 'op-program/bin/%d.json' --output ""
147147
mv op-program/bin/0.json op-program/bin/prestate-proof.json
148148
.PHONY: cannon-prestate
149149

cannon/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ cannon-impl:
1717
env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/cannon-impl .
1818

1919
cannon-embeds: cannon-impl
20-
@cp bin/cannon-impl ./multicannon/embeds/cannon-0
20+
@cp bin/cannon-impl ./multicannon/embeds/cannon-2
2121
@cp bin/cannon-impl ./multicannon/embeds/cannon-1
2222

2323
cannon: cannon-embeds

cannon/cmd/load_elf.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func LoadELF(ctx *cli.Context) error {
6969
return err
7070
}
7171
switch ver {
72-
case versions.VersionSingleThreaded:
72+
case versions.VersionSingleThreadedGetFd:
7373
createInitialState = func(f *elf.File) (mipsevm.FPVMState, error) {
7474
return program.LoadELF(f, singlethreaded.CreateInitialState)
7575
}

cannon/mipsevm/versions/detect.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func DetectVersion(path string) (StateVersion, error) {
2727
}
2828

2929
switch ver {
30-
case VersionSingleThreaded, VersionMultiThreaded:
30+
case VersionSingleThreaded, VersionMultiThreaded, VersionSingleThreadedGetFd:
3131
return ver, nil
3232
default:
3333
return 0, fmt.Errorf("%w: %d", ErrUnknownVersion, ver)

cannon/mipsevm/versions/state.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ const (
1919
// VersionSingleThreaded is the version of the Cannon STF found in op-contracts/v1.6.0 - https://github.com/ethereum-optimism/optimism/blob/op-contracts/v1.6.0/packages/contracts-bedrock/src/cannon/MIPS.sol
2020
VersionSingleThreaded StateVersion = iota
2121
VersionMultiThreaded
22+
VersionSingleThreadedGetFd
2223
)
2324

2425
var (
2526
ErrUnknownVersion = errors.New("unknown version")
2627
ErrJsonNotSupported = errors.New("json not supported")
2728
)
2829

29-
var StateVersionTypes = []StateVersion{VersionSingleThreaded, VersionMultiThreaded}
30+
var StateVersionTypes = []StateVersion{VersionSingleThreaded, VersionMultiThreaded, VersionSingleThreadedGetFd}
3031

3132
func LoadStateFromFile(path string) (*VersionedState, error) {
3233
if !serialize.IsBinaryFile(path) {
@@ -44,7 +45,7 @@ func NewFromState(state mipsevm.FPVMState) (*VersionedState, error) {
4445
switch state := state.(type) {
4546
case *singlethreaded.State:
4647
return &VersionedState{
47-
Version: VersionSingleThreaded,
48+
Version: VersionSingleThreadedGetFd,
4849
FPVMState: state,
4950
}, nil
5051
case *multithreaded.State:
@@ -79,7 +80,7 @@ func (s *VersionedState) Deserialize(in io.Reader) error {
7980
}
8081

8182
switch s.Version {
82-
case VersionSingleThreaded:
83+
case VersionSingleThreadedGetFd:
8384
state := &singlethreaded.State{}
8485
if err := state.Deserialize(in); err != nil {
8586
return err
@@ -113,6 +114,8 @@ func (s StateVersion) String() string {
113114
return "singlethreaded"
114115
case VersionMultiThreaded:
115116
return "multithreaded"
117+
case VersionSingleThreadedGetFd:
118+
return "singlethreaded-getfd"
116119
default:
117120
return "unknown"
118121
}
@@ -124,6 +127,8 @@ func ParseStateVersion(ver string) (StateVersion, error) {
124127
return VersionSingleThreaded, nil
125128
case "multithreaded":
126129
return VersionMultiThreaded, nil
130+
case "singlethreaded-getfd":
131+
return VersionSingleThreadedGetFd, nil
127132
default:
128133
return StateVersion(0), errors.New("unknown state version")
129134
}

cannon/multicannon/exec.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const baseDir = "embeds"
2020

2121
func ExecuteCannon(args []string, ver versions.StateVersion) error {
2222
switch ver {
23-
case versions.VersionSingleThreaded, versions.VersionMultiThreaded:
23+
case versions.VersionSingleThreaded, versions.VersionSingleThreadedGetFd, versions.VersionMultiThreaded:
2424
default:
2525
return errors.New("unsupported verrsion")
2626
}

op-challenger/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ DISPUTE_GAME_FACTORY=$(jq -r .DisputeGameFactoryProxy .devnet/addresses.json)
4343
--cannon-l2-genesis .devnet/genesis-l2.json \
4444
--cannon-bin ./cannon/bin/cannon \
4545
--cannon-server ./op-program/bin/op-program \
46-
--cannon-prestate ./op-program/bin/prestate.json \
46+
--cannon-prestate ./op-program/bin/prestate.bin.gz \
4747
--l2-eth-rpc http://localhost:9545 \
4848
--mnemonic "test test test test test test test test test test test junk" \
4949
--hd-path "m/44'/60'/0'/0/8" \

op-e2e/e2eutils/challenger/helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func applyCannonConfig(c *config.Config, t *testing.T, rollupCfg *rollup.Config,
112112
t.Log("Using MT-Cannon absolute prestate")
113113
c.CannonAbsolutePreState = root + "op-program/bin/prestate-mt.bin.gz"
114114
} else {
115-
c.CannonAbsolutePreState = root + "op-program/bin/prestate.json"
115+
c.CannonAbsolutePreState = root + "op-program/bin/prestate.bin.gz"
116116
}
117117
c.Cannon.SnapshotFreq = 10_000_000
118118

op-program/Dockerfile.repro

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ RUN --mount=type=cache,target=/root/.cache/go-build cd op-program && make op-pro
3535
GOOS=linux GOARCH=mips GOMIPS=softfloat GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_PROGRAM_VERSION"
3636

3737
# Run the op-program-client.elf binary directly through cannon's load-elf subcommand.
38-
RUN /app/cannon/bin/cannon load-elf --type singlethreaded --path /app/op-program/bin/op-program-client.elf --out /app/op-program/bin/prestate.json --meta ""
38+
RUN /app/cannon/bin/cannon load-elf --type singlethreaded-getfd --path /app/op-program/bin/op-program-client.elf --out /app/op-program/bin/prestate.bin.gz --meta ""
3939
RUN /app/cannon/bin/cannon load-elf --type multithreaded --path /app/op-program/bin/op-program-client.elf --out /app/op-program/bin/prestate-mt.bin.gz --meta ""
4040

4141
# Generate the prestate proof containing the absolute pre-state hash.
42-
RUN /app/cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input /app/op-program/bin/prestate.json --meta "" --proof-fmt '/app/op-program/bin/%d.json' --output ""
42+
RUN /app/cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input /app/op-program/bin/prestate.bin.gz --meta "" --proof-fmt '/app/op-program/bin/%d.json' --output ""
4343
RUN mv /app/op-program/bin/0.json /app/op-program/bin/prestate-proof.json
4444

4545
RUN /app/cannon/bin/cannon run --proof-at '=0' --stop-at '=1' --input /app/op-program/bin/prestate-mt.bin.gz --meta "" --proof-fmt '/app/op-program/bin/%d-mt.json' --output ""
@@ -51,7 +51,7 @@ RUN mv /app/op-program/bin/0-mt.json /app/op-program/bin/prestate-proof-mt.json
5151
FROM scratch AS export-stage
5252
COPY --from=builder /app/op-program/bin/op-program .
5353
COPY --from=builder /app/op-program/bin/op-program-client.elf .
54-
COPY --from=builder /app/op-program/bin/prestate.json .
54+
COPY --from=builder /app/op-program/bin/prestate.bin.gz .
5555
COPY --from=builder /app/op-program/bin/prestate-proof.json .
5656
COPY --from=builder /app/op-program/bin/prestate-mt.bin.gz .
5757
COPY --from=builder /app/op-program/bin/prestate-proof-mt.json .

0 commit comments

Comments
 (0)