Commit 9de9ae67 authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub

Merge branch 'develop' into aj/cannon-e2e-moves

parents 9b559a74 a14e19a4
...@@ -141,7 +141,7 @@ func (a *Agent) step(ctx context.Context, claim types.Claim, game types.Game) er ...@@ -141,7 +141,7 @@ func (a *Agent) step(ctx context.Context, claim types.Claim, game types.Game) er
} }
a.log.Info("Updating oracle data", "oracleKey", oracleData.OracleKey, "oracleData", oracleData.OracleData) a.log.Info("Updating oracle data", "oracleKey", oracleData.OracleKey, "oracleData", oracleData.OracleData)
if err := a.updater.UpdateOracle(ctx, *oracleData); err != nil { if err := a.updater.UpdateOracle(ctx, oracleData); err != nil {
return fmt.Errorf("failed to load oracle data: %w", err) return fmt.Errorf("failed to load oracle data: %w", err)
} }
......
...@@ -21,7 +21,7 @@ func NewOracleUpdater(logger log.Logger) *alphabetUpdater { ...@@ -21,7 +21,7 @@ func NewOracleUpdater(logger log.Logger) *alphabetUpdater {
} }
// UpdateOracle updates the oracle with the given data. // UpdateOracle updates the oracle with the given data.
func (u *alphabetUpdater) UpdateOracle(ctx context.Context, data types.PreimageOracleData) error { func (u *alphabetUpdater) UpdateOracle(ctx context.Context, data *types.PreimageOracleData) error {
u.logger.Info("alphabet oracle updater called") u.logger.Info("alphabet oracle updater called")
return nil return nil
} }
...@@ -15,5 +15,5 @@ import ( ...@@ -15,5 +15,5 @@ import (
func TestAlphabetUpdater(t *testing.T) { func TestAlphabetUpdater(t *testing.T) {
logger := testlog.Logger(t, log.LvlInfo) logger := testlog.Logger(t, log.LvlInfo)
updater := NewOracleUpdater(logger) updater := NewOracleUpdater(logger)
require.Nil(t, updater.UpdateOracle(context.Background(), types.PreimageOracleData{})) require.Nil(t, updater.UpdateOracle(context.Background(), &types.PreimageOracleData{}))
} }
...@@ -114,8 +114,7 @@ func (p *CannonTraceProvider) GetPreimage(ctx context.Context, i uint64) ([]byte ...@@ -114,8 +114,7 @@ func (p *CannonTraceProvider) GetPreimage(ctx context.Context, i uint64) ([]byte
} }
func (p *CannonTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, error) { func (p *CannonTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, error) {
path := filepath.Join(p.dir, p.prestate) state, err := parseState(p.prestate)
state, err := parseState(path)
if err != nil { if err != nil {
return []byte{}, fmt.Errorf("cannot load absolute pre-state: %w", err) return []byte{}, fmt.Errorf("cannot load absolute pre-state: %w", err)
} }
......
...@@ -240,7 +240,7 @@ func setupWithTestData(t *testing.T, dataDir string, prestate string) (*CannonTr ...@@ -240,7 +240,7 @@ func setupWithTestData(t *testing.T, dataDir string, prestate string) (*CannonTr
logger: testlog.Logger(t, log.LvlInfo), logger: testlog.Logger(t, log.LvlInfo),
dir: dataDir, dir: dataDir,
generator: generator, generator: generator,
prestate: prestate, prestate: filepath.Join(dataDir, prestate),
}, generator }, generator
} }
......
...@@ -86,7 +86,10 @@ func NewOracleUpdaterWithOracle( ...@@ -86,7 +86,10 @@ func NewOracleUpdaterWithOracle(
} }
// UpdateOracle updates the oracle with the given data. // UpdateOracle updates the oracle with the given data.
func (u *cannonUpdater) UpdateOracle(ctx context.Context, data types.PreimageOracleData) error { func (u *cannonUpdater) UpdateOracle(ctx context.Context, data *types.PreimageOracleData) error {
if len(data.OracleKey) == 0 {
return nil
}
if data.IsLocal { if data.IsLocal {
return u.sendLocalOracleData(ctx, data) return u.sendLocalOracleData(ctx, data)
} }
...@@ -94,7 +97,7 @@ func (u *cannonUpdater) UpdateOracle(ctx context.Context, data types.PreimageOra ...@@ -94,7 +97,7 @@ func (u *cannonUpdater) UpdateOracle(ctx context.Context, data types.PreimageOra
} }
// sendLocalOracleData sends the local oracle data to the [txmgr]. // sendLocalOracleData sends the local oracle data to the [txmgr].
func (u *cannonUpdater) sendLocalOracleData(ctx context.Context, data types.PreimageOracleData) error { func (u *cannonUpdater) sendLocalOracleData(ctx context.Context, data *types.PreimageOracleData) error {
txData, err := u.BuildLocalOracleData(data) txData, err := u.BuildLocalOracleData(data)
if err != nil { if err != nil {
return fmt.Errorf("local oracle tx data build: %w", err) return fmt.Errorf("local oracle tx data build: %w", err)
...@@ -103,7 +106,7 @@ func (u *cannonUpdater) sendLocalOracleData(ctx context.Context, data types.Prei ...@@ -103,7 +106,7 @@ func (u *cannonUpdater) sendLocalOracleData(ctx context.Context, data types.Prei
} }
// sendGlobalOracleData sends the global oracle data to the [txmgr]. // sendGlobalOracleData sends the global oracle data to the [txmgr].
func (u *cannonUpdater) sendGlobalOracleData(ctx context.Context, data types.PreimageOracleData) error { func (u *cannonUpdater) sendGlobalOracleData(ctx context.Context, data *types.PreimageOracleData) error {
txData, err := u.BuildGlobalOracleData(data) txData, err := u.BuildGlobalOracleData(data)
if err != nil { if err != nil {
return fmt.Errorf("global oracle tx data build: %w", err) return fmt.Errorf("global oracle tx data build: %w", err)
...@@ -114,7 +117,7 @@ func (u *cannonUpdater) sendGlobalOracleData(ctx context.Context, data types.Pre ...@@ -114,7 +117,7 @@ func (u *cannonUpdater) sendGlobalOracleData(ctx context.Context, data types.Pre
// BuildLocalOracleData takes the local preimage key and data // BuildLocalOracleData takes the local preimage key and data
// and creates tx data to load the key, data pair into the // and creates tx data to load the key, data pair into the
// PreimageOracle contract from the FaultDisputeGame contract call. // PreimageOracle contract from the FaultDisputeGame contract call.
func (u *cannonUpdater) BuildLocalOracleData(data types.PreimageOracleData) ([]byte, error) { func (u *cannonUpdater) BuildLocalOracleData(data *types.PreimageOracleData) ([]byte, error) {
return u.fdgAbi.Pack( return u.fdgAbi.Pack(
"addLocalData", "addLocalData",
data.GetIdent(), data.GetIdent(),
...@@ -125,7 +128,7 @@ func (u *cannonUpdater) BuildLocalOracleData(data types.PreimageOracleData) ([]b ...@@ -125,7 +128,7 @@ func (u *cannonUpdater) BuildLocalOracleData(data types.PreimageOracleData) ([]b
// BuildGlobalOracleData takes the global preimage key and data // BuildGlobalOracleData takes the global preimage key and data
// and creates tx data to load the key, data pair into the // and creates tx data to load the key, data pair into the
// PreimageOracle contract. // PreimageOracle contract.
func (u *cannonUpdater) BuildGlobalOracleData(data types.PreimageOracleData) ([]byte, error) { func (u *cannonUpdater) BuildGlobalOracleData(data *types.PreimageOracleData) ([]byte, error) {
return u.preimageOracleAbi.Pack( return u.preimageOracleAbi.Pack(
"loadKeccak256PreimagePart", "loadKeccak256PreimagePart",
big.NewInt(int64(data.OracleOffset)), big.NewInt(int64(data.OracleOffset)),
......
...@@ -74,7 +74,8 @@ func newTestCannonUpdater(t *testing.T, sendFails bool) (*cannonUpdater, *mockTx ...@@ -74,7 +74,8 @@ func newTestCannonUpdater(t *testing.T, sendFails bool) (*cannonUpdater, *mockTx
func TestCannonUpdater_UpdateOracle(t *testing.T) { func TestCannonUpdater_UpdateOracle(t *testing.T) {
t.Run("succeeds", func(t *testing.T) { t.Run("succeeds", func(t *testing.T) {
updater, mockTxMgr := newTestCannonUpdater(t, false) updater, mockTxMgr := newTestCannonUpdater(t, false)
require.Nil(t, updater.UpdateOracle(context.Background(), types.PreimageOracleData{ require.NoError(t, updater.UpdateOracle(context.Background(), &types.PreimageOracleData{
OracleKey: common.Hash{0xaa}.Bytes(),
OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"), OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"),
})) }))
require.Equal(t, 1, mockTxMgr.sends) require.Equal(t, 1, mockTxMgr.sends)
...@@ -82,18 +83,25 @@ func TestCannonUpdater_UpdateOracle(t *testing.T) { ...@@ -82,18 +83,25 @@ func TestCannonUpdater_UpdateOracle(t *testing.T) {
t.Run("send fails", func(t *testing.T) { t.Run("send fails", func(t *testing.T) {
updater, mockTxMgr := newTestCannonUpdater(t, true) updater, mockTxMgr := newTestCannonUpdater(t, true)
require.Error(t, updater.UpdateOracle(context.Background(), types.PreimageOracleData{ require.Error(t, updater.UpdateOracle(context.Background(), &types.PreimageOracleData{
OracleKey: common.Hash{0xaa}.Bytes(),
OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"), OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"),
})) }))
require.Equal(t, 1, mockTxMgr.failedSends) require.Equal(t, 1, mockTxMgr.failedSends)
}) })
t.Run("skip empty data", func(t *testing.T) {
updater, mockTxMgr := newTestCannonUpdater(t, true)
require.NoError(t, updater.UpdateOracle(context.Background(), &types.PreimageOracleData{}))
require.Equal(t, 0, mockTxMgr.sends)
})
} }
// TestCannonUpdater_BuildLocalOracleData tests the [cannonUpdater] // TestCannonUpdater_BuildLocalOracleData tests the [cannonUpdater]
// builds a valid tx candidate for a local oracle update. // builds a valid tx candidate for a local oracle update.
func TestCannonUpdater_BuildLocalOracleData(t *testing.T) { func TestCannonUpdater_BuildLocalOracleData(t *testing.T) {
updater, _ := newTestCannonUpdater(t, false) updater, _ := newTestCannonUpdater(t, false)
oracleData := types.PreimageOracleData{ oracleData := &types.PreimageOracleData{
OracleKey: common.Hex2Bytes("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), OracleKey: common.Hex2Bytes("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"), OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"),
OracleOffset: 7, OracleOffset: 7,
...@@ -117,7 +125,7 @@ func TestCannonUpdater_BuildLocalOracleData(t *testing.T) { ...@@ -117,7 +125,7 @@ func TestCannonUpdater_BuildLocalOracleData(t *testing.T) {
// builds a valid tx candidate for a global oracle update. // builds a valid tx candidate for a global oracle update.
func TestCannonUpdater_BuildGlobalOracleData(t *testing.T) { func TestCannonUpdater_BuildGlobalOracleData(t *testing.T) {
updater, _ := newTestCannonUpdater(t, false) updater, _ := newTestCannonUpdater(t, false)
oracleData := types.PreimageOracleData{ oracleData := &types.PreimageOracleData{
OracleKey: common.Hex2Bytes("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), OracleKey: common.Hex2Bytes("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"), OracleData: common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"),
OracleOffset: 7, OracleOffset: 7,
......
...@@ -65,7 +65,7 @@ type StepCallData struct { ...@@ -65,7 +65,7 @@ type StepCallData struct {
// OracleUpdater is a generic interface for updating oracles. // OracleUpdater is a generic interface for updating oracles.
type OracleUpdater interface { type OracleUpdater interface {
// UpdateOracle updates the oracle with the given data. // UpdateOracle updates the oracle with the given data.
UpdateOracle(ctx context.Context, data PreimageOracleData) error UpdateOracle(ctx context.Context, data *PreimageOracleData) error
} }
// TraceProvider is a generic way to get a claim value at a specific step in the trace. // TraceProvider is a generic way to get a claim value at a specific step in the trace.
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
], ],
"scripts": { "scripts": {
"bindings": "pnpm bindings:ts && pnpm bindings:go", "bindings": "pnpm bindings:ts && pnpm bindings:go",
"bindings:ts": "pnpm generate:addresses && nx generate @eth-optimism/contracts-ts", "bindings:ts": "nx generate @eth-optimism/contracts-ts",
"bindings:go": "cd ../../op-bindings && make", "bindings:go": "cd ../../op-bindings && make",
"build": "forge build", "build": "forge build",
"prebuild": "./scripts/verify-foundry-install.sh", "prebuild": "./scripts/verify-foundry-install.sh",
......
...@@ -42,22 +42,22 @@ ...@@ -42,22 +42,22 @@
"@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-ethers": "^2.0.2",
"@nomiclabs/hardhat-waffle": "^2.0.1", "@nomiclabs/hardhat-waffle": "^2.0.1",
"chai-as-promised": "^7.1.1", "chai-as-promised": "^7.1.1",
"ethereum-waffle": "^3.4.0", "ethereum-waffle": "^4.0.10",
"ethers": "^5.7.0", "ethers": "^5.7.0",
"hardhat": "^2.9.6", "hardhat": "^2.9.6",
"hardhat-deploy": "^0.11.4", "hardhat-deploy": "^0.11.4",
"isomorphic-fetch": "^3.0.0",
"mocha": "^10.0.0",
"nyc": "^15.1.0", "nyc": "^15.1.0",
"typedoc": "^0.22.13", "typedoc": "^0.22.13",
"mocha": "^10.0.0",
"vitest": "^0.28.3",
"zod": "^3.11.6",
"viem": "^0.3.30", "viem": "^0.3.30",
"isomorphic-fetch": "^3.0.0" "vitest": "^0.28.3",
"zod": "^3.11.6"
}, },
"dependencies": { "dependencies": {
"@eth-optimism/contracts": "0.6.0", "@eth-optimism/contracts": "0.6.0",
"@eth-optimism/core-utils": "0.12.2",
"@eth-optimism/contracts-bedrock": "0.16.0", "@eth-optimism/contracts-bedrock": "0.16.0",
"@eth-optimism/core-utils": "0.12.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"merkletreejs": "^0.2.27", "merkletreejs": "^0.2.27",
"rlp": "^2.2.7" "rlp": "^2.2.7"
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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