Commit 1e59d083 authored by Sam Stokes's avatar Sam Stokes Committed by GitHub

op-program: store prestate versions in json files (#12523)

* op-program: store prestate versions in json files

* op-program: add function to read standard.json

* op-program: embed standard.json to make it importable

* ci: checkout op-program tag after parsing standard.json file

* ci: fix EXPECTED_PRESTATE_HASH env var export

* op-program: combine releases into one file with governanceApproved flag

* op-program: add unit test for prestate GetReleases

* ci: point op-program preimage test at new versions.json file
parent cf0e3a56
...@@ -851,7 +851,7 @@ jobs: ...@@ -851,7 +851,7 @@ jobs:
name: run tests name: run tests
command: | command: |
mkdir -p ./tmp/test-results && mkdir -p ./tmp/testlogs mkdir -p ./tmp/test-results && mkdir -p ./tmp/testlogs
packages=( packages=(
op-batcher op-batcher
op-chain-ops op-chain-ops
...@@ -870,10 +870,10 @@ jobs: ...@@ -870,10 +870,10 @@ jobs:
for package in "${packages[@]}"; do for package in "${packages[@]}"; do
formatted_packages="$formatted_packages ./$package/..." formatted_packages="$formatted_packages ./$package/..."
done done
export ENABLE_ANVIL=true export ENABLE_ANVIL=true
export SEPOLIA_RPC_URL="https://ci-sepolia-l1-archive.optimism.io" export SEPOLIA_RPC_URL="https://ci-sepolia-l1-archive.optimism.io"
gotestsum --format=testname \ gotestsum --format=testname \
--junitfile=./tmp/test-results/results.xml \ --junitfile=./tmp/test-results/results.xml \
--jsonfile=./tmp/testlogs/log.json \ --jsonfile=./tmp/testlogs/log.json \
...@@ -1004,43 +1004,25 @@ jobs: ...@@ -1004,43 +1004,25 @@ jobs:
steps: steps:
- checkout - checkout
- setup_remote_docker - setup_remote_docker
- run:
name: Set expected prestate hash
command: |
find_prestate_hash() {
jq -r --arg version "<<parameters.version>>" '.[] | select(.version == $version) | .hash' "$1"
}
prestate_hash=$(find_prestate_hash "op-program/prestates/releases.json")
if [ -z "$prestate_hash" ]; then
echo "Unknown prestate version <<parameters.version>>"
exit 1
fi
echo "export EXPECTED_PRESTATE_HASH=$prestate_hash" >> $BASH_ENV
- run: - run:
name: Switch to tag name: Switch to tag
command: | command: |
git fetch git fetch
git checkout "op-program/v<<parameters.version>>" git checkout "op-program/v<<parameters.version>>"
git submodule update --init --recursive git submodule update --init --recursive
- run:
name: Set expected prestate hashes
command: |
if [[ "<<parameters.version>>" == "0.1.0" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x038942ec840131a63c49fa514a3f0577ae401fd5584d56ad50cdf5a8b41d4538"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "0.2.0" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "0.3.0" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x034c8cc69f22c35ae386a97136715dd48aaf97fd190942a111bfa680c2f2f421"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.0.0" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x037ef3c1a487960b0e633d3e513df020c43432769f41a634d18a9595cbf53c55"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.1.0" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x03e69d3de5155f4a80da99dd534561cbddd4f9dd56c9ecc704d6886625711d2b"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.2.0" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x03617abec0b255dc7fc7a0513a2c2220140a1dcd7a1c8eca567659bd67e05cea"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.3.0-rc.1" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x0367c4aa897bffbded0b523f277ca892298dc3c691baf37bc2099b86024f9673"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.3.0-rc.2" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x0385c3f8ee78491001d92b90b07d0cf387b7b52ab9b83b4d87c994e92cf823ba"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.3.0-rc.3" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x030de10d9da911a2b180ecfae2aeaba8758961fc28262ce989458c6f9a547922"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.3.1-rc.1" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x03e806a2859a875267a563462a06d4d1d1b455a9efee959a46e21e54b6caf69a"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.3.1-rc.2" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c"' >> $BASH_ENV
elif [[ "<<parameters.version>>" == "1.3.1" ]]; then
echo 'export EXPECTED_PRESTATE_HASH="0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c"' >> $BASH_ENV
else
echo "Unknown prestate version <<parameters.version>>"
exit 1
fi
- run: - run:
name: Build prestate name: Build prestate
command: make reproducible-prestate command: make reproducible-prestate
......
package prestates
// This package is imported by the superchain-registry as part of chain validation
// tests. Please do not delete these files unless the downstream dependency is removed.
import (
_ "embed"
"encoding/json"
"fmt"
)
//go:embed releases.json
var releasesJSON []byte
type Release struct {
Version string `json:"version"`
Hash string `json:"hash"`
GovernanceApproved bool `json:"governanceApproved"`
}
// Reads the contents of the releases.json file
func GetReleases() ([]Release, error) {
var releases []Release
err := json.Unmarshal(releasesJSON, &releases)
if err != nil {
return nil, fmt.Errorf("failed to parse JSON: %w", err)
}
return releases, nil
}
[
{
"version": "1.3.1",
"hash": "0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c",
"governanceApproved": true
},
{
"version": "1.3.1-rc.2",
"hash": "0x038512e02c4c3f7bdaec27d00edf55b7155e0905301e1a88083e4e0a6764d54c"
},
{
"version": "1.3.1-rc.1",
"hash": "0x03e806a2859a875267a563462a06d4d1d1b455a9efee959a46e21e54b6caf69a"
},
{
"version": "1.3.0-rc.3",
"hash": "0x030de10d9da911a2b180ecfae2aeaba8758961fc28262ce989458c6f9a547922"
},
{
"version": "1.3.0-rc.2",
"hash": "0x0385c3f8ee78491001d92b90b07d0cf387b7b52ab9b83b4d87c994e92cf823ba"
},
{
"version": "1.3.0-rc.1",
"hash": "0x0367c4aa897bffbded0b523f277ca892298dc3c691baf37bc2099b86024f9673"
},
{
"version": "1.2.0",
"hash": "0x03617abec0b255dc7fc7a0513a2c2220140a1dcd7a1c8eca567659bd67e05cea",
"governanceApproved": true
},
{
"version": "1.1.0",
"hash": "0x03e69d3de5155f4a80da99dd534561cbddd4f9dd56c9ecc704d6886625711d2b",
"governanceApproved": true
},
{
"version": "1.0.0",
"hash": "0x037ef3c1a487960b0e633d3e513df020c43432769f41a634d18a9595cbf53c55",
"governanceApproved": true
},
{
"version": "0.3.0",
"hash": "0x034c8cc69f22c35ae386a97136715dd48aaf97fd190942a111bfa680c2f2f421",
"governanceApproved": true
},
{
"version": "0.2.0",
"hash": "0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808",
"governanceApproved": true
},
{
"version": "0.1.0",
"hash": "0x038942ec840131a63c49fa514a3f0577ae401fd5584d56ad50cdf5a8b41d4538",
"governanceApproved": true
}
]
package prestates
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestGetReleases(t *testing.T) {
releases, err := GetReleases()
require.NoError(t, err, "expected no error while parsing embedded releases.json")
foundGovernanceApproved := false
for _, release := range releases {
if release.GovernanceApproved {
foundGovernanceApproved = true
break
}
}
require.True(t, foundGovernanceApproved, "expected to find at least one GovernanceApproved release")
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment