From de2f6872114950d8921d87987064977a974d1506 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Tue, 18 Jun 2024 20:47:26 -0700 Subject: [PATCH 01/12] challenger docs - explainer - how to guide --- .../chain-operators/features/_meta.json | 1 + .../features/op-challenger.mdx | 194 ++++++++++++++++++ pages/stack/protocol/fault-proofs/_meta.json | 1 + .../protocol/fault-proofs/challenger.mdx | 130 ++++++++++++ .../op-stack/protocol/challenger-moves.png | Bin 0 -> 279049 bytes words.txt | 8 +- 6 files changed, 333 insertions(+), 1 deletion(-) create mode 100644 pages/builders/chain-operators/features/op-challenger.mdx create mode 100644 pages/stack/protocol/fault-proofs/challenger.mdx create mode 100644 public/img/op-stack/protocol/challenger-moves.png diff --git a/pages/builders/chain-operators/features/_meta.json b/pages/builders/chain-operators/features/_meta.json index f4ee4b0a4..248d2be4d 100644 --- a/pages/builders/chain-operators/features/_meta.json +++ b/pages/builders/chain-operators/features/_meta.json @@ -1,4 +1,5 @@ { "preinstalls": "Preinstalls", + "op-challenger": "Configure Challenger For Your Chain", "custom-gas-token": "Run a Custom Gas Token Chain" } \ No newline at end of file diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx new file mode 100644 index 000000000..9c871f4bc --- /dev/null +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -0,0 +1,194 @@ +--- +title: How to Configure Challenger For Your Chain +lang: en-US +description: Learn how to configure challenger for your OP Stack chain. +--- + +import { Callout, Steps } from 'nextra/components' + +# How to Configure Challenger For Your Chain + +This guide provides a walkthrough of setting up the configuration and monitoring options for `op-challenger`. See the [OP-Challenger Explainer](/stack/protocol/fault-proofs/challenger) for a general overview of this fault proofs feature. + + + ### Build the Executable + + * Clone the monorepo + + ```bash + git clone https://github.com/ethereum-optimism/optimism.git + ``` + + * Checkout the [latest release of `op-challenger`](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.0.1) and use the commit to deploy. Alternatively, you can use the prebuilt [challenger docker images](us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v1.0.0). + If you use a Docker image, it already comes with `op-program` server and an executable for Cannon embedded, so you don't have to specify Cannon bin. + + ```bash + git checkout op-challenger/vX.Y.Z + ``` + + + If you're running `op-challenger` outside of Docker, you may need to specify the arguments and `op-program` server, but there's a Cannon server option which points to op-program's executable. + + + * Build challenger + + ```bash + cd optimism + pnpm install + make op-challenger + ``` + + ### Configure Challenger + + * You will now configure challenger with the required flags. You can use the `op-challenger --help` to view all of the subcommands, command line and environment variable options. + + * The example config file below shows the flags we will configure in this step: + + ```docker + challenger: + user: "1000" + image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v0.2.11 + command: + - "op-challenger" + - "--l1-eth-rpc=http://sepolia-el-1:8545" + - "--l1-beacon=http://sepolia-cl-1:5051" + - "--l2-eth-rpc=http://op-sepolia-el-1:8545" + - "--rollup-rpc=http://op-sepolia-cl-1:5051" + - "--selective-claim-resolution" + - "--private-key=...." + - "--network=..." + - "--game-factory-address=..." + - "--datadir=/data" + - "--cannon-prestates-url=..." + volumes: + - "/mnt/data/docker-data/op-sepolia/data/challenger:/data" + - "./cfg:/cfg" + ``` + + #### `--l1-eth-rpc` + + * This is the HTTP provider URL for a standard L1 node, can be a full node. OP-Challenger will be sending lots of requests, so you need a node that can easily handle lots of transactions and you really want to trust that node. + * Note: Challenger has lot of money and it will spend it if it needs to interact with games. That might risk not defending games or challenging games correctly, so you want to really trust the nodes that you're pointing the Challenger at. + + #### `--l1-beacon` + + * This is needed just to get blobs from. + * In some instances, you might need blob archiver or L1 consensus node configured not to prune blobs: + * If the chain is proposing regularly, you don't need the blob archiver. You'll only have a small window in the blob retention period that games can be played. + * If the chain doesn't post a valid output root in 18 days, you may need a blob archiver who is running a challenge game. If you get pushed to the bottom of the game, you could lose if you're the only one protecting the chain. + + #### `--l2-eth-rpc` + + * This needs to be `op-geth` archive node, with `debug` enabled + * Technically doesn't need to go to bedrock, but needs to have access to the start of any game that is still in progress + + #### `--rollup-rpc` + + * This needs to be an`op-node` archive node because we need access to output roots from back when the games start + + #### `--private-key` + + * You must specify a private key or use something else (like `op-signer`) + * This uses the same transaction manager arguments as `op-node` , batcher, and proposer, so chain operators can choose one of the following options: + * a mnemonic + * a private key + * `op-signer` endpoints + + #### `--network` + + * This is the same as the network argument flag (from `op-node`), but could be taken from the network + * When we execute cannon, we need the roll-up config and the L2 Genesis, which is op-geth's Genesis file. Both files are automatically loaded if you say Cannon Network, but custom networks will need to specify both Cannon L2 Genesis and Cannon rollup config + * For custom networks not in the superchain-registry yet, the rollup must be specified: + + ``` + --cannon-rollup-config rollup.json \ + --cannon-l2-genesis genesis-l2.json \ + # if you're running it outside of the docker image, you'll need this + --cannon-server ./op-program/bin/op-program \ + # json or url, version of op-program deployed on chain + # if you use the wrong one, you will lose the game + # if you deploy your own contracts, you specify the hash, the root of the json file + # op mainnet are tagged versions of op-program + # make reproducable prestate + # challenger verifies that onchain + --cannon-prestate ./op-program/bin/prestate.json \ + # max cpus to use, probably best to leave it as default to use the number of + # cpus you have. Cannon will use a lot of cpus + - "--max-concurrency=20" + ``` + + #### `--game-factory-address` + + * You can load the game factory address info from system config or superchain registry. \[Note: In a later release, you will be able to just say network=opmainnet (like you can with op-node), and it will automatically get the game Factory address.] + * If you have a custom network (or it's not inside superchain registry yet), then chain operators will use this game factory address pointed at the dispute game factory proxy + + #### `--datadir` + + * This is a directory that `op-challenger` can write to and store whatever data it needs. It will manage this directory to add or remove data as needed under that directory. + * If running in docker, it should point to a docker volume or mountpoint, so the data isn't lost on every restart. The data can be recreated if needed but particularly if the challenger has executed cannon as part of responding to a game it may mean a lot of extra processing. + + #### `--cannon-prestates-url` + + The pre-state is effectively the version of op-program that is deployed on chain. And you must use the right version. If you use the wrong one, you will lose the game. If you're deploying your own contracts, you specify a absolute prestate hash, which is the root of that Json file basically, and then you're just going to make sure whatever you use to get that hash from is what you actually use for the game. + + For everything we do OP Mainnet, there are tagged versions of op-program. So, if you check out the op-program, you can run `make reproducible-prestate`. And, it will build that proof for you in exactly the right way, consistently, and it should give you the exact same hashes we had. The Challenger will verify this on chain by getting the hash from the contract and if the prestate you have doesn't match the hash, it will not play that particular game. Challenger will just log an error because it knows it'll be wrong. + + * There's two versions of the `--cannon-prestates-url`: + * **prestate (singular):** where you can specify a path to a Cannon pre-state Json file or + * **URL (multiple):** where you can specify the URL and it will load each pre-state, so you can have multiple different versions. For example, if you've upgraded for hard folks, you deploy a new pre-state, and Cannon can just go to that URL and append the hash dot json to that URL and downloads it. + * Example final Url for a prestate: + * [https://storage.googleapis.com/oplabs-network-data/proofs/op-program/cannon/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json](https://storage.googleapis.com/oplabs-network-data/proofs/op-program/cannon/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json) + * if you read this file, it's the cannon memory state + + + The challenger will refuse to interact with any games if it doesn't have the matching prestate. + + + ### Execute Challenger + + You can now execute challenger with the required flags. It will look something like this (but with required flags added): + + ```bash + ./op-challenger/bin/op-challenger \ + --trace-type cannon \ + --l1-eth-rpc http://localhost:8545 \ + --rollup-rpc http://localhost:9546 \ + --game-factory-address $DISPUTE_GAME_FACTORY \ + --datadir temp/challenger-data \ + --cannon-rollup-config .devnet/rollup.json \ + --cannon-l2-genesis .devnet/genesis-l2.json \ + --cannon-bin ./cannon/bin/cannon \ + --cannon-server ./op-program/bin/op-program \ + --cannon-prestate ./op-program/bin/prestate.json \ + --l2-eth-rpc http://localhost:9545 \ + --mnemonic "test test test test test test test test test test test junk" \ + --hd-path "m/44'/60'/0'/0/8" \ + --num-confirmations 1 + ``` + + ### Test and Debug Challenger (Optional) + + This is an optional step that walks you through how to use `op-challenger` subcommands, which allow you to interact with the fault proof system onchain for testing and debugging purposes. For example, you can test and explore the system in the following ways: + + * create games yourself, and it doesn't matter if the games are valid or invalid. + * perform moves in games and then claim and resolve things. + + Here's the list of op-challenger subcommands: + + | subcommand | description | + | ------------- | -------------------------------------------------------- | + | list-games | List the games created by a dispute game factory | + | list-claims | List the claims in a dispute game | + | list-credits | List the credits in a dispute game | + | create-game | Creates a dispute game via the factory | + | move | Creates and sends a move transaction to the dispute game | + | resolve | Resolves the specified dispute game if possible | + | resolve-claim | Resolves the specified claim if possible | + + Additinally, if you're a chain operator, you almost certainly want to run `op-dispute-mon`. It is securities monitoring and is an incredibly useful service to keep an eye on games, basically giving us visibility into all the status of the games for the last 28 days. Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: + + +Next Steps +Additional questions? See the FAQ section in the [OP Challenger Explainer](/stack/protocol/fault-proofs/challenger). +For more detailed info on `op-challenger`, see the [specs](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html). +If you experience any problems, please reach out to [developer support](https://github.com/ethereum-optimism/developers/discussions). diff --git a/pages/stack/protocol/fault-proofs/_meta.json b/pages/stack/protocol/fault-proofs/_meta.json index c3e2e06ed..344cdb1d7 100644 --- a/pages/stack/protocol/fault-proofs/_meta.json +++ b/pages/stack/protocol/fault-proofs/_meta.json @@ -2,6 +2,7 @@ "explainer": "Fault Proofs Explainer", "fp-components": "FP System Components", "cannon": "FPVM: Cannon", + "challenger": "OP-Challenger", "mips": "MIPS.sol", "fp-security": "FP Mainnet Security" } \ No newline at end of file diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx new file mode 100644 index 000000000..f9d69edfa --- /dev/null +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -0,0 +1,130 @@ +--- +title: OP-Challenger Explainer +lang: en-US +description: Learn about OP-Challenger and how it operates within the OP Stack's fault proof system. +--- + +import { Callout } from 'nextra/components' +import Image from 'next/image' + +# OP-Challenger Explainer + +The `op-challenger` operates as the *honest actor* in the fault dispute system and defends the chain by securing the `OptimismPortal` and ensuring the game will always resolve to the correct state of the chain. For verifying the legitimacy of claims, `op-challenger` relies on a synced, trusted rollup node as well as a trace provider (e.g., [Cannon](/stack/protocol/fault-proofs/cannon)). + +Specifically, `op-challenger` performs the following actions: + +* monitors and interacts with dispute games +* defends valid output root proposals +* challenges invalid output root proposals +* assists `op-proposer` by resolving claims and games once chess clocks expire +* claims paid out bonds for both the challenger and proposer + +## Architecture + +```mermaid +graph LR +L1Rpc[L1 RPC Provider] --> op-dispute-mon[Dispute Mon] +L1Beacon[L1 Beacon API] --> op-dispute-mon +L2Rpc[L2 op-node RPC Provider] --> op-dispute-mon +op-dispute-mon --> cannon[Cannon] +cannon --> op-program[op-program] +``` + + + The `cannon` and `op-program` executables are run in the `op-challenger` docker container as sub-processes when required to generate game trace data. + + +## Fault Detection Responses + +`op-challenger` makes a decision on each claim in each game and decides whether to counter it or not based on it's view of the validity of the claim. An honest challenger uses this basic logic: + +1. If the trusted node agrees with the output, `op-challenger` takes no action. An honest challenger does nothing because there are no claims it disagrees with. It continues to monitor the game in case someone posts a counter claim to the valid root claim, in which case the challenger will participate in the game to defend the proposal. +2. If the trusted node disagrees, `op-challenger` creates a new dispute game. In contrast to the above, an honest challenger aims to delete any output roots that its trusted node disagrees with in order to claim the bond attached to it. The honest challenger assumes that their rollup node is synced to the canonical state and that the fault proof program is correct, so it is willing to put its money on the line to counter any faults. + +## Fault Dispute Game Responses + +`op-challenger` determines which claims to counter by iterating through the claims in the order they are stored in the contract. This ordering ensures that a claim's ancestors are processed prior to the claim itself. For each claim, the honest challenger determines and tracks the set of honest responses to all claims, regardless of whether that response already exists in the full game state. + +### Root Claim + +The root claim is considered to be an honest claim if and only if it has a [state witness Hash](https://specs.optimism.io/fault-proof/stage-one/fault-dispute-game.html#claims) that agrees with the honest challenger's state witness hash for the root claim. + +### Counter Claims + +When a new claim is made in a dispute game, the honest challenger processes it and performs a response. The honest challenger should counter a claim if and only if: + +1. The claim is a child of a claim in the set of honest responses +2. The set of honest responses, contains a sibling to the claim with a trace index greater than or equal to the claim's trace index + + + This implies the honest challenger never counters its own claim, since there is at most one honest counter to each claim, so an honest claim never has an honest sibling. + + +### Possible Moves + +A move is a challenge against an existing claim and must include an alternate claim asserting a different trace. The honest challenger must first decide if it should counter the existing claim or if it should ignore it. It can wind up ignoring claims either because it agrees with them or because responding to that claim could lead it to have a "poisoned prestate" where it's implicitly agreeing to something false. + +Then, once the honest challenger decides to move, it has these options: + +* **Attack** if it sees the value of the claim as incorrect +* **Defend** if the value is correct; it's effectively disagreeing with the claim position +* **Step** based on the game depth; steps can be attack or defend steps too, and it's the same contract method that gets called + + + See the [specs](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html) for the full scope of the honest actor algorithm. + + +
+ +Challenger Moves flow + +## Resolution + +When one side of a `FaultDisputeGame`'s chess clock runs out, the honest challenger's responsibility is to resolve each claim in the game by calling the `resolveClaim` function on the `FaultDisputeGame` contract. Once the root claim's subgame is resolved, the challenger then finally calls the `resolve` function to resolve the entire game. + +The `FaultDisputeGame` does not put a time cap on resolution - because of the liveness assumption on honest challengers and the bonds attached to the claims they've countered, challengers are economically incentivized to resolve the game promptly in order to make their funds liquid again and capture their reward(s). + +## Next Steps + +* Ready to get started? Read our guide on how to [configure op-challenger on your OP Stack chain](/builders/chain-operators/features/op-challenger). +* For more info about how `op-challenger` works under the hood, [check out the specs](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html). + +## FAQs + +### If I don't have a blob archiver with access to historical data, can I lose the game? + +Most likely, yes. If nobody has access to the historical data. All the honest actors work together without needing to coordinate offense because they're all trying to play the same moves. So, if you're the only honest actor and you don't have a blob archiver and you get pushed down to the bottom half of the game (\~ 32 claims deep in the game), then you would just see errors coming out of the challenger and wouldn't be able to respond without the blob archiver. You'd have 3.5 days on your side of the game to fix the problem by switching to a beacon node that does have blobs, and then you'll be able to carry on as usual. + +Note: You would only be pushed down to the bottom half of the game if the block being disputed is older than the blob retention period (\~18 days). If valid proposals are resolving regularly, this is not possible because each valid proposal becomes the starting point for newly created dispute games. So if there are regular valid proposals, you're normally only disputing \~3.5 days worth of blocks which is well within the retention period. + +### How many CPUs should I run for challenger to work efficiently? + +The default value for `--max-concurrency`will work for most chain operators. However, if you are seeing challenger progress too slowly, you might need to increase `--max-concurrency` , and if you're seeing challenger sending too many concurrent requests, then reduce `--max-concurrency`. + +For example, you might want to increase `--max-concurrency`, if you have a small number of CPUs by default because most of the time you won't actually need to run Cannon, so it's actually reasonable to put Challenger on quite a small box and it'll be fine. But then, if challenger starts having to execute Cannon, you need to respond and scale up and give more CPUs. Increasing `--max-concurrency` will also allow challenger to be making requests your L1 in parallel. Otherwise, it'll be quite slow to iterate through every game. +Alternatively, you might want to reduce `--max-concurrency` if you have a lot of CPUs, and you find that challenger is flooding the L1 with concurrent requests. + +### How much ETH do you need to challenge in a game? + +The honest challengers need to have more combined ETH than the attacker, or they may run out of funds and be unable to respond to games (requiring the security overrides to be used to protect funds). So, there's no strict amount you need to have, but here are some general guidelines you can use to estimate. + +* Generally speaking: a minimum to play 1 game = bond amount \* game max depth + gas costs for each move +* To play one game all the way down to the final step call in a single "chain" costs just over 631.2 ETH in total, so about 315.6 ETH per "side". + +### What is the bond? What is the bond's role in the FP system? + +Each *claim* pays a bond, including the root claim created when the game is created (thus the bond is paid when the game is created). Every time you post a new claim to the game you have to pay an additional bond based on the depth of the claim you're posting. You don't have to prepay bonds (i.e., its not like staking). Instead, you just send the bond amount as the value of the transaction when calling `attack` or `defend` on `FaultDisputeGame` or calling `create` on `DisputeGameFactory`. + +Claims that are found to be correct have their bonds refunded. Claims that are found to be incorrect have their bonds paid to the account that posted the left-most uncountered child claim of the incorrect claim. The important point there is really just that the bond for invalid claims is paid to whoever successfully counters the claim, but its setup so that the bond is only ever paid to a single person and never shared. + +* There is a delay on claiming bonds of 7 days after the claim is resolved. +* The 7 day period restarts each time a new bond from that game is paid to the same user. Typically this means that bonds are claimable 7 days after the game is resolved. + +For reference, you can find the size of bond required for each depth in the game in [Bond Amounts](https://www.notion.so/Bond-Amounts-49453c2789d640179422355b2d6a824a?pvs=21). The calculation for them is hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100). + +### How much ETH is required for the challenger bond? + +The dispute game factory has the bond value set. To ensure correct game outcomes, the combined funding of all honest actors must be more than the funding available to an attacker. Otherwise the attacker can just post so many claims that the honest actors run out of funds and can no longer counter them. There isn't a fixed amount that guarantees this, so chain operators should have significant funds available at short notice to respond to claims. + +Given the guardian can intervene and reallocate bond payments if needed, attackers who try to outspend the honest actors are guaranteed to lose their funds because the guardian will just intervene and pay all their bonds to the honest actors which is a very strong disincentive against trying to win games by outspending people. + diff --git a/public/img/op-stack/protocol/challenger-moves.png b/public/img/op-stack/protocol/challenger-moves.png new file mode 100644 index 0000000000000000000000000000000000000000..027b3c2d3571086a0660d156dc318f1294ceffb0 GIT binary patch literal 279049 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

=t-06K?HYtSh7uXRv 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�a_~`mWK}d3zvU5)Yo@s%4Vu8TBQG6Y1jJ)NuF#t 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

wuZ~ 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

`qJ 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 _Ab-i_N}Mt(>+ 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 literal 0 HcmV?d00001 diff --git a/words.txt b/words.txt index 9754248c7..6fac31a82 100644 --- a/words.txt +++ b/words.txt @@ -3,6 +3,7 @@ accountqueue ACCOUNTSLOTS accountslots ADDI +Additinally ADDIU ADDU airgap @@ -39,8 +40,8 @@ BOOTNODES Bootnodes bootnodes bottlenecked -brotli Brotli +brotli Callouts callouts CCIP @@ -129,6 +130,7 @@ ignoreprice implicity Inator inator +incentivized INFLUXDBV influxdbv initcode @@ -176,6 +178,7 @@ Mintplex MIPSEVM Moralis Mordor +mountpoint MOVN MOVZ MTHI @@ -213,6 +216,7 @@ Numba Offchain offchain oplabs +opmainnet opnode's Opti pausable @@ -299,6 +303,7 @@ SRLV Stablecoins stablecoins subcomponents +subgame subheaders SUBU SUPERCHAIN @@ -321,6 +326,7 @@ txfeecap txmgr TXPOOL txpool +uncountered Unprotect unsubmitted UPNP From a3fc3e6b165c286b51821924141b222b6844adaf Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Tue, 18 Jun 2024 20:58:41 -0700 Subject: [PATCH 02/12] Update op-challenger.mdx --- .../builders/chain-operators/features/op-challenger.mdx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx index 9c871f4bc..eb818edf7 100644 --- a/pages/builders/chain-operators/features/op-challenger.mdx +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -188,7 +188,8 @@ This guide provides a walkthrough of setting up the configuration and monitoring Additinally, if you're a chain operator, you almost certainly want to run `op-dispute-mon`. It is securities monitoring and is an incredibly useful service to keep an eye on games, basically giving us visibility into all the status of the games for the last 28 days. Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: -Next Steps -Additional questions? See the FAQ section in the [OP Challenger Explainer](/stack/protocol/fault-proofs/challenger). -For more detailed info on `op-challenger`, see the [specs](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html). -If you experience any problems, please reach out to [developer support](https://github.com/ethereum-optimism/developers/discussions). +## Next Steps + +* Additional questions? See the FAQ section in the [OP Challenger Explainer](/stack/protocol/fault-proofs/challenger). +* For more detailed info on `op-challenger`, see the [specs](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html). +* If you experience any problems, please reach out to [developer support](https://github.com/ethereum-optimism/developers/discussions). From d8983c4e300b7d06536e4922608bc678a2fd0de3 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Tue, 18 Jun 2024 21:23:24 -0700 Subject: [PATCH 03/12] fix broken links --- pages/builders/chain-operators/deploy/smart-contracts.mdx | 2 +- pages/builders/chain-operators/features/op-challenger.mdx | 2 +- pages/stack/protocol/fault-proofs/challenger.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/builders/chain-operators/deploy/smart-contracts.mdx b/pages/builders/chain-operators/deploy/smart-contracts.mdx index 1e835c237..ecae8d2f1 100644 --- a/pages/builders/chain-operators/deploy/smart-contracts.mdx +++ b/pages/builders/chain-operators/deploy/smart-contracts.mdx @@ -27,7 +27,7 @@ JSON file. For the full set of options, you can see the [rollup configuration pa The smart contracts are deployed using [foundry](https://github.com/foundry-rs) and you can find the script's source code in the monorepo at -[packages/contracts-bedrock/scripts/Deploy.s.sol](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/scripts/Deploy.s.sol). +[packages/contracts-bedrock/scripts/Deploy.s.sol](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol). ### State Diff diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx index eb818edf7..f66f8e109 100644 --- a/pages/builders/chain-operators/features/op-challenger.mdx +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -19,7 +19,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring git clone https://github.com/ethereum-optimism/optimism.git ``` - * Checkout the [latest release of `op-challenger`](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.0.1) and use the commit to deploy. Alternatively, you can use the prebuilt [challenger docker images](us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v1.0.0). + * Checkout the [latest release of `op-challenger`](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.0.1) and use the commit to deploy. Alternatively, you can use the prebuilt [challenger docker images](https://us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v1.0.1). If you use a Docker image, it already comes with `op-program` server and an executable for Cannon embedded, so you don't have to specify Cannon bin. ```bash diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index f9d69edfa..b145bd2e0 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -120,7 +120,7 @@ Claims that are found to be correct have their bonds refunded. Claims that are f * There is a delay on claiming bonds of 7 days after the claim is resolved. * The 7 day period restarts each time a new bond from that game is paid to the same user. Typically this means that bonds are claimable 7 days after the game is resolved. -For reference, you can find the size of bond required for each depth in the game in [Bond Amounts](https://www.notion.so/Bond-Amounts-49453c2789d640179422355b2d6a824a?pvs=21). The calculation for them is hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100). +The calculation for the bond amounts are hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there’s a `getRequiredBond` method on the contract that will tell you what bond to use. ### How much ETH is required for the challenger bond? From 441e9959e4a1443da4bb3f8d216e29b8167fab56 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Tue, 18 Jun 2024 21:35:45 -0700 Subject: [PATCH 04/12] lint fixes --- .../chain-operators/features/op-challenger.mdx | 12 ++++++------ pages/stack/protocol/fault-proofs/challenger.mdx | 13 ++++++------- words.txt | 1 - 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx index f66f8e109..21a4825a1 100644 --- a/pages/builders/chain-operators/features/op-challenger.mdx +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -19,7 +19,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring git clone https://github.com/ethereum-optimism/optimism.git ``` - * Checkout the [latest release of `op-challenger`](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.0.1) and use the commit to deploy. Alternatively, you can use the prebuilt [challenger docker images](https://us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v1.0.1). + * Check out the [latest release of `op-challenger`](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.0.1) and use the commit to deploy. Alternatively, you can use the prebuilt [challenger docker images](https://us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v1.0.1). If you use a Docker image, it already comes with `op-program` server and an executable for Cannon embedded, so you don't have to specify Cannon bin. ```bash @@ -67,13 +67,13 @@ This guide provides a walkthrough of setting up the configuration and monitoring #### `--l1-eth-rpc` - * This is the HTTP provider URL for a standard L1 node, can be a full node. OP-Challenger will be sending lots of requests, so you need a node that can easily handle lots of transactions and you really want to trust that node. - * Note: Challenger has lot of money and it will spend it if it needs to interact with games. That might risk not defending games or challenging games correctly, so you want to really trust the nodes that you're pointing the Challenger at. + * This is the HTTP provider URL for a standard L1 node, can be a full node. OP-Challenger will be sending many requests, so you need a node that can easily handle many transactions, and you really want to trust that node. + * Note: Challenger has a lot of money and it will spend it if it needs to interact with games. That might risk not defending games or challenging games correctly, so you want to really trust the nodes that you're pointing the Challenger at. #### `--l1-beacon` * This is needed just to get blobs from. - * In some instances, you might need blob archiver or L1 consensus node configured not to prune blobs: + * In some instances, you might need a blob archiver or L1 consensus node configured not to prune blobs: * If the chain is proposing regularly, you don't need the blob archiver. You'll only have a small window in the blob retention period that games can be played. * If the chain doesn't post a valid output root in 18 days, you may need a blob archiver who is running a challenge game. If you get pushed to the bottom of the game, you could lose if you're the only one protecting the chain. @@ -129,7 +129,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring #### `--cannon-prestates-url` - The pre-state is effectively the version of op-program that is deployed on chain. And you must use the right version. If you use the wrong one, you will lose the game. If you're deploying your own contracts, you specify a absolute prestate hash, which is the root of that Json file basically, and then you're just going to make sure whatever you use to get that hash from is what you actually use for the game. + The pre-state is effectively the version of op-program that is deployed on chain. And you must use the right version. If you use the wrong one, you will lose the game. If you're deploying your own contracts, you specify an absolute prestate hash, which is the root of that Json file basically, and then you're just going to make sure whatever you use to get that hash from is what you actually use for the game. For everything we do OP Mainnet, there are tagged versions of op-program. So, if you check out the op-program, you can run `make reproducible-prestate`. And, it will build that proof for you in exactly the right way, consistently, and it should give you the exact same hashes we had. The Challenger will verify this on chain by getting the hash from the contract and if the prestate you have doesn't match the hash, it will not play that particular game. Challenger will just log an error because it knows it'll be wrong. @@ -185,7 +185,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring | resolve | Resolves the specified dispute game if possible | | resolve-claim | Resolves the specified claim if possible | - Additinally, if you're a chain operator, you almost certainly want to run `op-dispute-mon`. It is securities monitoring and is an incredibly useful service to keep an eye on games, basically giving us visibility into all the status of the games for the last 28 days. Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: + Additionally, if you're a chain operator, you almost certainly want to run `op-dispute-mon`. It is securities monitoring and is an incredibly useful service to keep an eye on games, basically giving us visibility into all the status of the games for the last 28 days. Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: ## Next Steps diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index b145bd2e0..22306a237 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -36,9 +36,9 @@ cannon --> op-program[op-program] ## Fault Detection Responses -`op-challenger` makes a decision on each claim in each game and decides whether to counter it or not based on it's view of the validity of the claim. An honest challenger uses this basic logic: +`op-challenger` makes a decision on each claim in each game and decides whether to counter it or not based on its view of the validity of the claim. An honest challenger uses this basic logic: -1. If the trusted node agrees with the output, `op-challenger` takes no action. An honest challenger does nothing because there are no claims it disagrees with. It continues to monitor the game in case someone posts a counter claim to the valid root claim, in which case the challenger will participate in the game to defend the proposal. +1. If the trusted node agrees with the output, `op-challenger` takes no action. An honest challenger does nothing because there are no claims it disagrees with. It continues to monitor the game in case someone posts a counter-claim to the valid root claim, in which case the challenger will participate in the game to defend the proposal. 2. If the trusted node disagrees, `op-challenger` creates a new dispute game. In contrast to the above, an honest challenger aims to delete any output roots that its trusted node disagrees with in order to claim the bond attached to it. The honest challenger assumes that their rollup node is synced to the canonical state and that the fault proof program is correct, so it is willing to put its money on the line to counter any faults. ## Fault Dispute Game Responses @@ -93,15 +93,15 @@ The `FaultDisputeGame` does not put a time cap on resolution - because of the li ### If I don't have a blob archiver with access to historical data, can I lose the game? -Most likely, yes. If nobody has access to the historical data. All the honest actors work together without needing to coordinate offense because they're all trying to play the same moves. So, if you're the only honest actor and you don't have a blob archiver and you get pushed down to the bottom half of the game (\~ 32 claims deep in the game), then you would just see errors coming out of the challenger and wouldn't be able to respond without the blob archiver. You'd have 3.5 days on your side of the game to fix the problem by switching to a beacon node that does have blobs, and then you'll be able to carry on as usual. +Most likely, yes. If nobody has access to the historical data. All the honest actors work together without needing to coordinate offense because they're all trying to play the same moves. So, if you're the only honest actor, and you lack a blob archiver, and you get pushed down to the bottom half of the game (\~ 32 claims deep in the game), then you would just see errors coming out of the challenger and wouldn't be able to respond without the blob archiver. You'd have 3.5 days on your side of the game to fix the problem by switching to a beacon node that does have blobs, and then you'll be able to carry on as usual. -Note: You would only be pushed down to the bottom half of the game if the block being disputed is older than the blob retention period (\~18 days). If valid proposals are resolving regularly, this is not possible because each valid proposal becomes the starting point for newly created dispute games. So if there are regular valid proposals, you're normally only disputing \~3.5 days worth of blocks which is well within the retention period. +Note: You would only be pushed down to the bottom half of the game if the block being disputed is older than the blob retention period (\~18 days). If valid proposals are resolving regularly, this is not possible because each valid proposal becomes the starting point for newly created dispute games. So if there are regular valid proposals, you're normally only disputing \~3.5 days worth of blocks, which is well within the retention period. ### How many CPUs should I run for challenger to work efficiently? The default value for `--max-concurrency`will work for most chain operators. However, if you are seeing challenger progress too slowly, you might need to increase `--max-concurrency` , and if you're seeing challenger sending too many concurrent requests, then reduce `--max-concurrency`. -For example, you might want to increase `--max-concurrency`, if you have a small number of CPUs by default because most of the time you won't actually need to run Cannon, so it's actually reasonable to put Challenger on quite a small box and it'll be fine. But then, if challenger starts having to execute Cannon, you need to respond and scale up and give more CPUs. Increasing `--max-concurrency` will also allow challenger to be making requests your L1 in parallel. Otherwise, it'll be quite slow to iterate through every game. +For example, you might want to increase `--max-concurrency`, if you have a small number of CPUs by default because most of the time you won't actually need to run Cannon, so it's actually reasonable to put Challenger on quite a small box and it'll be fine. But then, if challenger starts having to execute Cannon, you need to respond and scale up and give more CPUs. Increasing `--max-concurrency` will also allow challenger to be making requests your L1 in parallel. Otherwise, it'll be quite slow to iterate through every game. Alternatively, you might want to reduce `--max-concurrency` if you have a lot of CPUs, and you find that challenger is flooding the L1 with concurrent requests. ### How much ETH do you need to challenge in a game? @@ -120,11 +120,10 @@ Claims that are found to be correct have their bonds refunded. Claims that are f * There is a delay on claiming bonds of 7 days after the claim is resolved. * The 7 day period restarts each time a new bond from that game is paid to the same user. Typically this means that bonds are claimable 7 days after the game is resolved. -The calculation for the bond amounts are hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there’s a `getRequiredBond` method on the contract that will tell you what bond to use. +The calculation for the bond amounts are hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there's a `getRequiredBond` method on the contract that will tell you what bond to use. ### How much ETH is required for the challenger bond? The dispute game factory has the bond value set. To ensure correct game outcomes, the combined funding of all honest actors must be more than the funding available to an attacker. Otherwise the attacker can just post so many claims that the honest actors run out of funds and can no longer counter them. There isn't a fixed amount that guarantees this, so chain operators should have significant funds available at short notice to respond to claims. Given the guardian can intervene and reallocate bond payments if needed, attackers who try to outspend the honest actors are guaranteed to lose their funds because the guardian will just intervene and pay all their bonds to the honest actors which is a very strong disincentive against trying to win games by outspending people. - diff --git a/words.txt b/words.txt index 6fac31a82..03837dd0b 100644 --- a/words.txt +++ b/words.txt @@ -3,7 +3,6 @@ accountqueue ACCOUNTSLOTS accountslots ADDI -Additinally ADDIU ADDU airgap From 46671d0b0bfe3aaef78c27a2d248bf1ea63451c8 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Thu, 20 Jun 2024 21:43:23 -0700 Subject: [PATCH 05/12] Apply suggestions from code review Co-authored-by: Adrian Sutton --- .../chain-operators/deploy/smart-contracts.mdx | 2 +- .../chain-operators/features/op-challenger.mdx | 15 +++++++-------- pages/stack/protocol/fault-proofs/challenger.mdx | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pages/builders/chain-operators/deploy/smart-contracts.mdx b/pages/builders/chain-operators/deploy/smart-contracts.mdx index ecae8d2f1..2eb101cd4 100644 --- a/pages/builders/chain-operators/deploy/smart-contracts.mdx +++ b/pages/builders/chain-operators/deploy/smart-contracts.mdx @@ -27,7 +27,7 @@ JSON file. For the full set of options, you can see the [rollup configuration pa The smart contracts are deployed using [foundry](https://github.com/foundry-rs) and you can find the script's source code in the monorepo at -[packages/contracts-bedrock/scripts/Deploy.s.sol](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol). +[packages/contracts-bedrock/scripts/deploy/Deploy.s.sol](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/scripts/deploy/Deploy.s.sol). ### State Diff diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx index 21a4825a1..f6b3d99d1 100644 --- a/pages/builders/chain-operators/features/op-challenger.mdx +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -61,7 +61,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring - "--datadir=/data" - "--cannon-prestates-url=..." volumes: - - "/mnt/data/docker-data/op-sepolia/data/challenger:/data" + - "./challenger-data:/data" - "./cfg:/cfg" ``` @@ -129,15 +129,15 @@ This guide provides a walkthrough of setting up the configuration and monitoring #### `--cannon-prestates-url` - The pre-state is effectively the version of op-program that is deployed on chain. And you must use the right version. If you use the wrong one, you will lose the game. If you're deploying your own contracts, you specify an absolute prestate hash, which is the root of that Json file basically, and then you're just going to make sure whatever you use to get that hash from is what you actually use for the game. + The pre-state is effectively the version of op-program that is deployed on chain. And you must use the right version. `op-challenger` will refuse to interact with games that have a different absolute prestate hash to avoid making invalid claims. If you're deploying your own contracts, you specify an absolute prestate hash, during contract deployment which should be taken from the `make reproducible-prostate` command which will also build the required prestate json file. - For everything we do OP Mainnet, there are tagged versions of op-program. So, if you check out the op-program, you can run `make reproducible-prestate`. And, it will build that proof for you in exactly the right way, consistently, and it should give you the exact same hashes we had. The Challenger will verify this on chain by getting the hash from the contract and if the prestate you have doesn't match the hash, it will not play that particular game. Challenger will just log an error because it knows it'll be wrong. +All governance approved releases use a tagged version of op-program. These can be rebuilt by checking out the version tag and running `make reproducible-prestate`. - * There's two versions of the `--cannon-prestates-url`: - * **prestate (singular):** where you can specify a path to a Cannon pre-state Json file or - * **URL (multiple):** where you can specify the URL and it will load each pre-state, so you can have multiple different versions. For example, if you've upgraded for hard folks, you deploy a new pre-state, and Cannon can just go to that URL and append the hash dot json to that URL and downloads it. + * There's two ways to specify the prestate to use: + * `--cannon-prestate`: specifies a path to a single Cannon pre-state Json file + * `--cannon-prestates-url`: specifies a URL to load pre-states from. This enables participating in games that use different prestates, for example due to a network upgrade. The prestates are stored in this directory named by their hash. * Example final Url for a prestate: - * [https://storage.googleapis.com/oplabs-network-data/proofs/op-program/cannon/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json](https://storage.googleapis.com/oplabs-network-data/proofs/op-program/cannon/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json) + * [https://example.com/prestates/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json](https://example.com/prestates/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json) * if you read this file, it's the cannon memory state @@ -163,7 +163,6 @@ This guide provides a walkthrough of setting up the configuration and monitoring --l2-eth-rpc http://localhost:9545 \ --mnemonic "test test test test test test test test test test test junk" \ --hd-path "m/44'/60'/0'/0/8" \ - --num-confirmations 1 ``` ### Test and Debug Challenger (Optional) diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index 22306a237..316e9214c 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -39,7 +39,7 @@ cannon --> op-program[op-program] `op-challenger` makes a decision on each claim in each game and decides whether to counter it or not based on its view of the validity of the claim. An honest challenger uses this basic logic: 1. If the trusted node agrees with the output, `op-challenger` takes no action. An honest challenger does nothing because there are no claims it disagrees with. It continues to monitor the game in case someone posts a counter-claim to the valid root claim, in which case the challenger will participate in the game to defend the proposal. -2. If the trusted node disagrees, `op-challenger` creates a new dispute game. In contrast to the above, an honest challenger aims to delete any output roots that its trusted node disagrees with in order to claim the bond attached to it. The honest challenger assumes that their rollup node is synced to the canonical state and that the fault proof program is correct, so it is willing to put its money on the line to counter any faults. +2. If the trusted node disagrees, `op-challenger` posts a counter-claim to challenge the proposed output. In contrast to the above, an honest challenger aims to delete any output roots that its trusted node disagrees with in order to claim the bond attached to it. The honest challenger assumes that their rollup node is synced to the canonical state and that the fault proof program is correct, so it is willing to put its money on the line to counter any faults. ## Fault Dispute Game Responses From 9c61a723b93eb29c1599df2376afd8d65bf672a2 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:22:39 -0700 Subject: [PATCH 06/12] review updates --- .../features/op-challenger.mdx | 22 +++++++-------- .../protocol/fault-proofs/challenger.mdx | 28 +++++++++---------- words.txt | 2 +- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx index f6b3d99d1..637bb0bb8 100644 --- a/pages/builders/chain-operators/features/op-challenger.mdx +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -57,12 +57,10 @@ This guide provides a walkthrough of setting up the configuration and monitoring - "--selective-claim-resolution" - "--private-key=...." - "--network=..." - - "--game-factory-address=..." - "--datadir=/data" - "--cannon-prestates-url=..." volumes: - "./challenger-data:/data" - - "./cfg:/cfg" ``` #### `--l1-eth-rpc` @@ -96,9 +94,10 @@ This guide provides a walkthrough of setting up the configuration and monitoring #### `--network` - * This is the same as the network argument flag (from `op-node`), but could be taken from the network + * This identifies the L2 network `op-challenger` is running for, e.g., `op-sepolia` or `op-mainnet`. + * When using the --network flag, the `--game-factory-address` will be automatically pulled from the [superchain-registry](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/chainList.json). * When we execute cannon, we need the roll-up config and the L2 Genesis, which is op-geth's Genesis file. Both files are automatically loaded if you say Cannon Network, but custom networks will need to specify both Cannon L2 Genesis and Cannon rollup config - * For custom networks not in the superchain-registry yet, the rollup must be specified: + * For custom networks not in the [superchain-registry](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/chainList.json) yet, the `--game-factory-address` and rollup must be specified: ``` --cannon-rollup-config rollup.json \ @@ -112,15 +111,14 @@ This guide provides a walkthrough of setting up the configuration and monitoring # make reproducable prestate # challenger verifies that onchain --cannon-prestate ./op-program/bin/prestate.json \ - # max cpus to use, probably best to leave it as default to use the number of - # cpus you have. Cannon will use a lot of cpus - - "--max-concurrency=20" + # load the game factory address from system config or superchain registry + # point the game factory address at the dispute game factory proxy + --game-factory-address ``` - #### `--game-factory-address` - - * You can load the game factory address info from system config or superchain registry. \[Note: In a later release, you will be able to just say network=opmainnet (like you can with op-node), and it will automatically get the game Factory address.] - * If you have a custom network (or it's not inside superchain registry yet), then chain operators will use this game factory address pointed at the dispute game factory proxy + +These options vary based on which `--network` is specified. Chain operators always need to specify a way to load prestates and must also specify the cannon-server whenever the docker image isn't being used. + #### `--datadir` @@ -131,7 +129,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring The pre-state is effectively the version of op-program that is deployed on chain. And you must use the right version. `op-challenger` will refuse to interact with games that have a different absolute prestate hash to avoid making invalid claims. If you're deploying your own contracts, you specify an absolute prestate hash, during contract deployment which should be taken from the `make reproducible-prostate` command which will also build the required prestate json file. -All governance approved releases use a tagged version of op-program. These can be rebuilt by checking out the version tag and running `make reproducible-prestate`. +All governance approved releases use a tagged version of `op-program`. These can be rebuilt by checking out the version tag and running `make reproducible-prestate`. * There's two ways to specify the prestate to use: * `--cannon-prestate`: specifies a path to a single Cannon pre-state Json file diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index 316e9214c..02ca64f24 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -20,14 +20,18 @@ Specifically, `op-challenger` performs the following actions: * claims paid out bonds for both the challenger and proposer ## Architecture +This diagram illustrates how `op-challenger` monitors dispute games, defends valid proposals, and challenges invalid ones. It also shows its interaction with the `op-proposer` in resolving claims. ```mermaid -graph LR -L1Rpc[L1 RPC Provider] --> op-dispute-mon[Dispute Mon] -L1Beacon[L1 Beacon API] --> op-dispute-mon -L2Rpc[L2 op-node RPC Provider] --> op-dispute-mon -op-dispute-mon --> cannon[Cannon] -cannon --> op-program[op-program] +graph TD; + OP[OP-Challenger] -->|Monitors| DG[Dispute Games] + OP -->|Defends| ORP[Valid Output Root Proposals] + OP -->|Challenges| IORP[Invalid Output Root Proposals] + OP -->|Assists| OPP[OP-Proposer] + OPP -->|Resolves Claims| DG + DG -->|Claims Paid| Bonds[Bonds for Challenger and Proposer] + + classDef default fill:#f9f,stroke:#333,stroke-width:2px; ``` @@ -62,22 +66,16 @@ When a new claim is made in a dispute game, the honest challenger processes it a ### Possible Moves -A move is a challenge against an existing claim and must include an alternate claim asserting a different trace. The honest challenger must first decide if it should counter the existing claim or if it should ignore it. It can wind up ignoring claims either because it agrees with them or because responding to that claim could lead it to have a "poisoned prestate" where it's implicitly agreeing to something false. +The challenger monitors each game as new claims are added and reacts according to the [honest actor algorithm](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html) to defend valid proposals and invalidate invalid proposals. A **move** is a challenge against an existing claim and must include an alternate claim asserting a different trace (e.g., attack, defend, or step). -Then, once the honest challenger decides to move, it has these options: +
-* **Attack** if it sees the value of the claim as incorrect -* **Defend** if the value is correct; it's effectively disagreeing with the claim position -* **Step** based on the game depth; steps can be attack or defend steps too, and it's the same contract method that gets called +Challenger Moves flow See the [specs](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html) for the full scope of the honest actor algorithm. -
- -Challenger Moves flow - ## Resolution When one side of a `FaultDisputeGame`'s chess clock runs out, the honest challenger's responsibility is to resolve each claim in the game by calling the `resolveClaim` function on the `FaultDisputeGame` contract. Once the root claim's subgame is resolved, the challenger then finally calls the `resolve` function to resolve the entire game. diff --git a/words.txt b/words.txt index 03837dd0b..d3435be16 100644 --- a/words.txt +++ b/words.txt @@ -215,7 +215,6 @@ Numba Offchain offchain oplabs -opmainnet opnode's Opti pausable @@ -248,6 +247,7 @@ Preinstalls preinstalls Prestate prestate +prestates PRICEBUMP pricebump PRICELIMIT From a9796c0b45d2b7e66e7c3c93b5e05cbb4572787a Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Thu, 20 Jun 2024 23:48:22 -0700 Subject: [PATCH 07/12] lang updates + add json --- .../features/op-challenger.mdx | 82 +- .../protocol/fault-proofs/challenger.mdx | 22 +- .../dispute-monitor-1718214549035.json | 2730 +++++++++++++++++ 3 files changed, 2782 insertions(+), 52 deletions(-) create mode 100644 public/grafana/dispute-monitor-1718214549035.json diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx index 637bb0bb8..cda479e1a 100644 --- a/pages/builders/chain-operators/features/op-challenger.mdx +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -19,15 +19,15 @@ This guide provides a walkthrough of setting up the configuration and monitoring git clone https://github.com/ethereum-optimism/optimism.git ``` - * Check out the [latest release of `op-challenger`](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.0.1) and use the commit to deploy. Alternatively, you can use the prebuilt [challenger docker images](https://us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v1.0.1). - If you use a Docker image, it already comes with `op-program` server and an executable for Cannon embedded, so you don't have to specify Cannon bin. + * Check out the [latest release of `op-challenger`](https://github.com/ethereum-optimism/optimism/releases/tag/op-challenger%2Fv1.0.1) and use the commit to deploy. Alternatively, chain operators can use the prebuilt [challenger docker images](https://us-docker.pkg.dev/oplabs-tools-artifacts/images/op-challenger:v1.0.1). + If a Docker image is used, it already comes with `op-program` server and an executable for Cannon embedded, so the Cannon bin doesn't need to be specified. ```bash git checkout op-challenger/vX.Y.Z ``` - If you're running `op-challenger` outside of Docker, you may need to specify the arguments and `op-program` server, but there's a Cannon server option which points to op-program's executable. + Chain operators need to specify the arguments and `op-program` server if `op-challenger` is running outside of Docker, but there's a Cannon server option which points to `op-program`'s executable. * Build challenger @@ -40,9 +40,8 @@ This guide provides a walkthrough of setting up the configuration and monitoring ### Configure Challenger - * You will now configure challenger with the required flags. You can use the `op-challenger --help` to view all of the subcommands, command line and environment variable options. - - * The example config file below shows the flags we will configure in this step: + * Configure challenger with the required flags. Tip: Use the `op-challenger --help` to view all of the subcommands, command line and environment variable options. + * The example config file below shows the flags to configure in this step: ```docker challenger: @@ -65,28 +64,28 @@ This guide provides a walkthrough of setting up the configuration and monitoring #### `--l1-eth-rpc` - * This is the HTTP provider URL for a standard L1 node, can be a full node. OP-Challenger will be sending many requests, so you need a node that can easily handle many transactions, and you really want to trust that node. - * Note: Challenger has a lot of money and it will spend it if it needs to interact with games. That might risk not defending games or challenging games correctly, so you want to really trust the nodes that you're pointing the Challenger at. + * This is the HTTP provider URL for a standard L1 node, can be a full node. `op-challenger` will be sending many requests, so chain operators need a node that is trusted and can easily handle many transactions. + * Note: Challenger has a lot of money and it will spend it if it needs to interact with games. That might risk not defending games or challenging games correctly, so chain operators should really trust the nodes being pointing at Challenger. #### `--l1-beacon` * This is needed just to get blobs from. - * In some instances, you might need a blob archiver or L1 consensus node configured not to prune blobs: - * If the chain is proposing regularly, you don't need the blob archiver. You'll only have a small window in the blob retention period that games can be played. - * If the chain doesn't post a valid output root in 18 days, you may need a blob archiver who is running a challenge game. If you get pushed to the bottom of the game, you could lose if you're the only one protecting the chain. + * In some instances, chain operators might need a blob archiver or L1 consensus node configured not to prune blobs: + * If the chain is proposing regularly, a blob archiver isn't needed. There's only have a small window in the blob retention period that games can be played. + * If the chain doesn't post a valid output root in 18 days, then a blob archiver running a challenge game is needed. If the actor gets pushed to the bottom of the game, it could lose if it's the only one protecting the chain. #### `--l2-eth-rpc` - * This needs to be `op-geth` archive node, with `debug` enabled - * Technically doesn't need to go to bedrock, but needs to have access to the start of any game that is still in progress + * This needs to be `op-geth` archive node, with `debug` enabled. + * Technically doesn't need to go to bedrock, but needs to have access to the start of any game that is still in progress. #### `--rollup-rpc` - * This needs to be an`op-node` archive node because we need access to output roots from back when the games start + * This needs to be an`op-node` archive node because challenger needs access to output roots from back when the games start. #### `--private-key` - * You must specify a private key or use something else (like `op-signer`) + * Chain operators must specify a private key or use something else (like `op-signer`). * This uses the same transaction manager arguments as `op-node` , batcher, and proposer, so chain operators can choose one of the following options: * a mnemonic * a private key @@ -95,14 +94,14 @@ This guide provides a walkthrough of setting up the configuration and monitoring #### `--network` * This identifies the L2 network `op-challenger` is running for, e.g., `op-sepolia` or `op-mainnet`. - * When using the --network flag, the `--game-factory-address` will be automatically pulled from the [superchain-registry](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/chainList.json). - * When we execute cannon, we need the roll-up config and the L2 Genesis, which is op-geth's Genesis file. Both files are automatically loaded if you say Cannon Network, but custom networks will need to specify both Cannon L2 Genesis and Cannon rollup config - * For custom networks not in the [superchain-registry](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/chainList.json) yet, the `--game-factory-address` and rollup must be specified: + * When using the `--network` flag, the `--game-factory-address` will be automatically pulled from the [`superchain-registry`](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/chainList.json). + * When cannon is executed, challenger needs the roll-up config and the L2 Genesis, which is op-geth's Genesis file. Both files are automatically loaded when Cannon Network is used, but custom networks will need to specify both Cannon L2 Genesis and Cannon rollup config. + * For custom networks not in the [`superchain-registry`](https://github.com/ethereum-optimism/superchain-registry/blob/main/superchain/configs/chainList.json), the `--game-factory-address` and rollup must be specified, as follows: ``` --cannon-rollup-config rollup.json \ --cannon-l2-genesis genesis-l2.json \ - # if you're running it outside of the docker image, you'll need this + # use this if running challenger outside of the docker image --cannon-server ./op-program/bin/op-program \ # json or url, version of op-program deployed on chain # if you use the wrong one, you will lose the game @@ -113,38 +112,38 @@ This guide provides a walkthrough of setting up the configuration and monitoring --cannon-prestate ./op-program/bin/prestate.json \ # load the game factory address from system config or superchain registry # point the game factory address at the dispute game factory proxy - --game-factory-address + --game-factory-address ``` - -These options vary based on which `--network` is specified. Chain operators always need to specify a way to load prestates and must also specify the cannon-server whenever the docker image isn't being used. - + + These options vary based on which `--network` is specified. Chain operators always need to specify a way to load prestates and must also specify the cannon-server whenever the docker image isn't being used. + #### `--datadir` * This is a directory that `op-challenger` can write to and store whatever data it needs. It will manage this directory to add or remove data as needed under that directory. - * If running in docker, it should point to a docker volume or mountpoint, so the data isn't lost on every restart. The data can be recreated if needed but particularly if the challenger has executed cannon as part of responding to a game it may mean a lot of extra processing. + * If running in docker, it should point to a docker volume or mountpoint, so the data isn't lost on every restart. The data can be recreated if needed but particularly if challenger has executed cannon as part of responding to a game it may mean a lot of extra processing. #### `--cannon-prestates-url` - The pre-state is effectively the version of op-program that is deployed on chain. And you must use the right version. `op-challenger` will refuse to interact with games that have a different absolute prestate hash to avoid making invalid claims. If you're deploying your own contracts, you specify an absolute prestate hash, during contract deployment which should be taken from the `make reproducible-prostate` command which will also build the required prestate json file. + The pre-state is effectively the version of `op-program` that is deployed on chain. And chain operators must use the right version. `op-challenger` will refuse to interact with games that have a different absolute prestate hash to avoid making invalid claims. If deploying your own contracts, chain operators must specify an absolute prestate hash taken from the `make reproducible-prestate` command during contract deployment, which will also build the required prestate json file. -All governance approved releases use a tagged version of `op-program`. These can be rebuilt by checking out the version tag and running `make reproducible-prestate`. + All governance approved releases use a tagged version of `op-program`. These can be rebuilt by checking out the version tag and running `make reproducible-prestate`. * There's two ways to specify the prestate to use: * `--cannon-prestate`: specifies a path to a single Cannon pre-state Json file * `--cannon-prestates-url`: specifies a URL to load pre-states from. This enables participating in games that use different prestates, for example due to a network upgrade. The prestates are stored in this directory named by their hash. * Example final Url for a prestate: * [https://example.com/prestates/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json](https://example.com/prestates/0x031e3b504740d0b1264e8cf72b6dde0d497184cfb3f98e451c6be8b33bd3f808.json) - * if you read this file, it's the cannon memory state + * This file contains the cannon memory state. - The challenger will refuse to interact with any games if it doesn't have the matching prestate. + Challenger will refuse to interact with any games if it doesn't have the matching prestate. ### Execute Challenger - You can now execute challenger with the required flags. It will look something like this (but with required flags added): + The final step is to execute challenger with the required flags. It will look something like this (but with required flags added): ```bash ./op-challenger/bin/op-challenger \ @@ -165,24 +164,25 @@ All governance approved releases use a tagged version of `op-program`. These can ### Test and Debug Challenger (Optional) - This is an optional step that walks you through how to use `op-challenger` subcommands, which allow you to interact with the fault proof system onchain for testing and debugging purposes. For example, you can test and explore the system in the following ways: + This is an optional step to use `op-challenger` subcommands, which allow chain operators to interact with the fault proof system onchain for testing and debugging purposes. For example, it is possible to test and explore the system in the following ways: * create games yourself, and it doesn't matter if the games are valid or invalid. * perform moves in games and then claim and resolve things. Here's the list of op-challenger subcommands: - | subcommand | description | - | ------------- | -------------------------------------------------------- | - | list-games | List the games created by a dispute game factory | - | list-claims | List the claims in a dispute game | - | list-credits | List the credits in a dispute game | - | create-game | Creates a dispute game via the factory | - | move | Creates and sends a move transaction to the dispute game | - | resolve | Resolves the specified dispute game if possible | - | resolve-claim | Resolves the specified claim if possible | - - Additionally, if you're a chain operator, you almost certainly want to run `op-dispute-mon`. It is securities monitoring and is an incredibly useful service to keep an eye on games, basically giving us visibility into all the status of the games for the last 28 days. Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: + | subcommand | description | + | --------------- | -------------------------------------------------------- | + | `list-games` | List the games created by a dispute game factory | + | `list-claims` | List the claims in a dispute game | + | `list-credits` | List the credits in a dispute game | + | `create-game` | Creates a dispute game via the factory | + | `move` | Creates and sends a move transaction to the dispute game | + | `resolve` | Resolves the specified dispute game if possible | + | `resolve-claim` | Resolves the specified claim if possible | + + Additionally, chain operators should consider running `op-dispute-mon`. It's an incredibly useful securities monitoring service to keep an eye on games, basically giving chain operators visibility into all the status of the games for the last 28 days. + Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: [Download](/grafana/dispute-monitor-1718214549035.json). ## Next Steps diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index 02ca64f24..8311e4241 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -31,7 +31,7 @@ graph TD; OPP -->|Resolves Claims| DG DG -->|Claims Paid| Bonds[Bonds for Challenger and Proposer] - classDef default fill:#f9f,stroke:#333,stroke-width:2px; + classDef default fill:#00,stroke:#FF0420,stroke-width:2px; ``` @@ -91,34 +91,34 @@ The `FaultDisputeGame` does not put a time cap on resolution - because of the li ### If I don't have a blob archiver with access to historical data, can I lose the game? -Most likely, yes. If nobody has access to the historical data. All the honest actors work together without needing to coordinate offense because they're all trying to play the same moves. So, if you're the only honest actor, and you lack a blob archiver, and you get pushed down to the bottom half of the game (\~ 32 claims deep in the game), then you would just see errors coming out of the challenger and wouldn't be able to respond without the blob archiver. You'd have 3.5 days on your side of the game to fix the problem by switching to a beacon node that does have blobs, and then you'll be able to carry on as usual. +Most likely, yes. If nobody has access to the historical data. All the honest actors work together without needing to coordinate offense because they're all trying to play the same moves. So, if there's only one honest actor that lacks a blob archiver, and the actor gets pushed down to the bottom half of the game (\~ 32 claims deep in the game), then challenger would log errors and wouldn't be able to respond without the blob archiver. The actor would have 3.5 days on their side of the game to fix the problem by switching to a beacon node that does have blobs, and could then carry on as usual. -Note: You would only be pushed down to the bottom half of the game if the block being disputed is older than the blob retention period (\~18 days). If valid proposals are resolving regularly, this is not possible because each valid proposal becomes the starting point for newly created dispute games. So if there are regular valid proposals, you're normally only disputing \~3.5 days worth of blocks, which is well within the retention period. +Note: An actor would only be pushed down to the bottom half of the game if the block being disputed is older than the blob retention period (\~18 days). If valid proposals are resolving regularly, this is not possible because each valid proposal becomes the starting point for newly created dispute games. So if there are regular valid proposals, then only \~3.5 days worth of blocks are normally being disputed, which is well within the retention period. ### How many CPUs should I run for challenger to work efficiently? -The default value for `--max-concurrency`will work for most chain operators. However, if you are seeing challenger progress too slowly, you might need to increase `--max-concurrency` , and if you're seeing challenger sending too many concurrent requests, then reduce `--max-concurrency`. +The default value for `--max-concurrency`will work for most chain operators. However, chain operators might need to increase `--max-concurrency` if challenger is progressing too slowly or reduce `--max-concurrency` if challenger is sending too many concurrent requests. -For example, you might want to increase `--max-concurrency`, if you have a small number of CPUs by default because most of the time you won't actually need to run Cannon, so it's actually reasonable to put Challenger on quite a small box and it'll be fine. But then, if challenger starts having to execute Cannon, you need to respond and scale up and give more CPUs. Increasing `--max-concurrency` will also allow challenger to be making requests your L1 in parallel. Otherwise, it'll be quite slow to iterate through every game. -Alternatively, you might want to reduce `--max-concurrency` if you have a lot of CPUs, and you find that challenger is flooding the L1 with concurrent requests. +For example, chain operators might want to increase `--max-concurrency` for a small number of CPUs by default because Cannon won't actually need to run most of the time, so it's actually reasonable to put Challenger on quite a small box and it'll be fine. But then, if challenger starts having to execute Cannon, chain operators need to respond and scale up and give more CPUs. Increasing `--max-concurrency` will also allow challenger to be making requests your L1 in parallel. Otherwise, it'll be quite slow to iterate through every game. +Alternatively, chain operators might want to reduce `--max-concurrency` for a setup with a lot of CPUs where challenger is flooding the L1 with concurrent requests. ### How much ETH do you need to challenge in a game? -The honest challengers need to have more combined ETH than the attacker, or they may run out of funds and be unable to respond to games (requiring the security overrides to be used to protect funds). So, there's no strict amount you need to have, but here are some general guidelines you can use to estimate. +The honest challengers need to have more combined ETH than the attacker, or they may run out of funds and be unable to respond to games (requiring the security overrides to be used to protect funds). So, there's no strict amount challengers need to have, but here are some general guidelines chain operators can use to estimate: -* Generally speaking: a minimum to play 1 game = bond amount \* game max depth + gas costs for each move +* Generally speaking, a minimum to play 1 game = bond amount \* game max depth + gas costs for each move * To play one game all the way down to the final step call in a single "chain" costs just over 631.2 ETH in total, so about 315.6 ETH per "side". ### What is the bond? What is the bond's role in the FP system? -Each *claim* pays a bond, including the root claim created when the game is created (thus the bond is paid when the game is created). Every time you post a new claim to the game you have to pay an additional bond based on the depth of the claim you're posting. You don't have to prepay bonds (i.e., its not like staking). Instead, you just send the bond amount as the value of the transaction when calling `attack` or `defend` on `FaultDisputeGame` or calling `create` on `DisputeGameFactory`. +Each *claim* pays a bond, including the root claim created when the game is created (thus the bond is paid when the game is created). Every time a new claim posts to the game, an additional bond must be paid based on the depth of the claim being posted. It is not necessary to prepay bonds (i.e., its not like staking). Instead, the bond amount is sent as the value of the transaction when calling `attack` or `defend` on `FaultDisputeGame` or calling `create` on `DisputeGameFactory`. -Claims that are found to be correct have their bonds refunded. Claims that are found to be incorrect have their bonds paid to the account that posted the left-most uncountered child claim of the incorrect claim. The important point there is really just that the bond for invalid claims is paid to whoever successfully counters the claim, but its setup so that the bond is only ever paid to a single person and never shared. +Claims that are found to be correct have their bonds refunded. Claims that are found to be incorrect have their bonds paid to the account that posted the left-most uncountered child claim of the incorrect claim. More importantly, the bond for invalid claims is paid to whoever successfully counters the claim, but its setup so that the bond is only ever paid to a single person and never shared. * There is a delay on claiming bonds of 7 days after the claim is resolved. * The 7 day period restarts each time a new bond from that game is paid to the same user. Typically this means that bonds are claimable 7 days after the game is resolved. -The calculation for the bond amounts are hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there's a `getRequiredBond` method on the contract that will tell you what bond to use. +The calculation for the bond amounts are hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there's a `getRequiredBond` method on the contract that suggests what bond to use. ### How much ETH is required for the challenger bond? diff --git a/public/grafana/dispute-monitor-1718214549035.json b/public/grafana/dispute-monitor-1718214549035.json new file mode 100644 index 000000000..4914240b9 --- /dev/null +++ b/public/grafana/dispute-monitor-1718214549035.json @@ -0,0 +1,2730 @@ +{ + "__inputs": [ + { + "name": "DS_GRAFANACLOUD-OPTIMISTIC-PROM", + "label": "grafanacloud-optimistic-prom", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + }, + { + "name": "DS_GRAFANACLOUD-OPTIMISTIC-LOGS", + "label": "grafanacloud-optimistic-logs", + "description": "", + "type": "datasource", + "pluginId": "loki", + "pluginName": "Loki" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "alertlist", + "name": "Alert list", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "11.1.0-71799" + }, + { + "type": "panel", + "id": "logs", + "name": "Logs", + "version": "" + }, + { + "type": "datasource", + "id": "loki", + "name": "Loki", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "piechart", + "name": "Pie chart", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Display metrics from op-dispute-mon", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": null, + "links": [ + { + "asDropdown": false, + "icon": "external link", + "includeVars": true, + "keepTime": false, + "tags": [], + "targetBlank": true, + "title": "View Dispute Mon Logs", + "tooltip": "", + "type": "link", + "url": "https://optimistic.grafana.net/explore?schemaVersion=1&panes=%7B%22jze%22:%7B%22datasource%22:%22grafanacloud-logs%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bcluster%3D%5C%22${cluster}%5C%22,%20namespace%3D%5C%22${namespace}%5C%22%7D%20%7C%20logfmt%20%7C%20label_format%20level%3Dlvl%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22grafanacloud-logs%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D%7D&orgId=1" + } + ], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 34, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 1 + }, + "id": 30, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "instant": false, + "legendFormat": "Total", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, completion=\"in_progress\"})", + "hide": false, + "instant": false, + "legendFormat": "In Progress", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_ignored_games{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "hide": false, + "instant": false, + "legendFormat": "Ignored", + "range": true, + "refId": "C" + } + ], + "title": "Monitored Games", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 1 + }, + "id": 40, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, result_correctness=\"incorrect\", completion=\"in_progress\"})", + "hide": false, + "instant": false, + "legendFormat": "Forecast", + "range": true, + "refId": "A" + } + ], + "title": "Incorrect Forecast", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 120 + }, + { + "color": "red", + "value": 310 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 12, + "y": 1 + }, + "id": 16, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "min(time() - op_dispute_mon_last_output_fetch{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "format": "time_series", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Last Output Root Fetch Time", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 604800 + }, + { + "color": "red", + "value": 605800 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 16, + "y": 1 + }, + "id": 36, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "min(time() - op_dispute_mon_latest_proposal{root_agreement=\"disagree\", cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Latest Invalid Proposal", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 86400 + }, + { + "color": "red", + "value": 605800 + } + ] + }, + "unit": "string" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 1 + }, + "id": 43, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "op_dispute_mon_info{cluster=${cluster:doublequote},namespace=${namespace:doublequote}}", + "instant": true, + "legendFormat": "{{version}}", + "range": false, + "refId": "A" + } + ], + "title": "Version", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "description": "", + "gridPos": { + "h": 6, + "w": 4, + "x": 20, + "y": 3 + }, + "id": 42, + "options": { + "alertInstanceLabelFilter": "{cluster=${cluster:doublequote}, namespace=${namespace:doublequote}}", + "alertName": "", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 20, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": false, + "normal": false, + "pending": true + }, + "viewMode": "list" + }, + "title": "Dispute Mon Alerts", + "type": "alertlist" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 5 + }, + "id": 35, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, result_correctness=\"incorrect\", completion=\"complete\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Incorrect Result", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 12, + "y": 5 + }, + "id": 37, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "min(op_dispute_mon_up{namespace=\"op-dispute-mon\"}) > 0", + "instant": false, + "legendFormat": "1 if dispute mon is up", + "range": true, + "refId": "A" + } + ], + "title": "Up", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 31, + "panels": [], + "title": "Alerts", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 0, + "y": 10 + }, + "id": 23, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_credits{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, credit=\"above\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Credits Exceeding Expectation", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 5, + "y": 10 + }, + "id": 24, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_credits{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, credit=\"below\", withdrawable=\"non_withdrawable\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Insufficient Credits", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 10, + "y": 10 + }, + "id": 17, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (delayedWETH) (op_dispute_mon_bond_collateral_available{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, balance=\"insufficient\"}) > 0", + "instant": true, + "legendFormat": "{{delayedWETH}}", + "range": false, + "refId": "A" + } + ], + "title": "Underfunded WETH Contract Addrs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 15, + "y": 10 + }, + "id": 21, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_claims{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, resolved=\"resolved\", game_time_period=\"first_half\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Early Claim Resolution", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 10 + }, + "id": 11, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, result_correctness=\"incorrect\", completion=\"in_progress\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Wrong Leader", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "Number of withdrawal requests that diverge from the credits mapping.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 0, + "y": 13 + }, + "id": 25, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_withdrawal_requests{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, credits=\"divergent\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Divergent Credits", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "Number of bonds lost by an honest actor.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 5, + "y": 13 + }, + "id": 26, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_honest_actor_bonds{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, state=\"lost\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Lost Bonds", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "Count of invalid claims made by honest actors.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 10, + "y": 13 + }, + "id": 27, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_honest_actor_claims{cluster=${cluster:doublequote},namespace=${namespace:doublequote},state=\"invalid\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Honest Actor Errors", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 500 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 15, + "y": 13 + }, + "id": 22, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum(op_dispute_mon_claims{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, resolved=\"unresolved\", resolvable=\"resolvable\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Resolvable Claims", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 20, + "y": 13 + }, + "id": 38, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0-71799", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (cluster, namespace, job) (op_dispute_mon_l2_block_challenges{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, root_agreement=\"agree\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Invalid L2 Block Challenge", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 33, + "panels": [], + "title": "Game Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "Tracked games broken down by actual status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 1, + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (cluster, namespace) (op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, completion=\"in_progress\"})", + "legendFormat": "In Progress", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (cluster, namespace) (op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, completion=\"complete\", status=~\".*challenger_wins\"})", + "hide": false, + "legendFormat": "Challenger Wins", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (cluster, namespace) (op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}, completion=\"complete\", status=~\".*defender_wins\"})", + "hide": false, + "legendFormat": "Defender Wins", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (cluster, namespace) (op_dispute_mon_ignored_games{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "hide": false, + "legendFormat": "Ignored", + "range": true, + "refId": "D" + } + ], + "title": "Games", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "in_progress" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "text", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "agree_challenger_wins" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "disagree_challenger_wins" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "agree_defender_wins" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "disagree_defender_wins" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "agree_defender_ahead" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "agree_challenger_ahead" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "disagree_challenger_ahead" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "disagree_defender_ahead" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 6, + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "values": [ + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "tooltip": { + "maxHeight": 600, + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (status) (op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "instant": true, + "legendFormat": "{{status}}", + "range": false, + "refId": "A" + } + ], + "title": "Current Status Agreement", + "type": "piechart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "description": "Tracked games broken down by actual status", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 27 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (status, cluster, namespace, job) (op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "legendFormat": "{{status}}", + "range": true, + "refId": "A" + } + ], + "title": "Game Agreement", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "correct" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "incorrect" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 27 + }, + "id": 3, + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "values": [ + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "tooltip": { + "maxHeight": 600, + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (result_correctness) (op_dispute_mon_games_agreement{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Forecast Expected Result", + "type": "piechart" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 37 + }, + "id": 32, + "panels": [], + "title": "Honest Actions", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "stepBefore", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 19, + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "max by (cluster, namespace, job, honest_actor_address, state) (op_dispute_mon_honest_actor_claims{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "hide": false, + "legendFormat": "{{honest_actor_address}} {{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Honest Claims", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "stepBefore", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 20, + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "max by (cluster, namespace, job, honest_actor_address, state) (op_dispute_mon_honest_actor_bonds{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "hide": false, + "legendFormat": "{{honest_actor_address}} {{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Honest Bonds", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 28, + "panels": [], + "title": "Bonds", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "stepBefore", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 47 + }, + "id": 14, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (cluster, namespace, job, delayedWETH) (op_dispute_mon_bond_collateral_required{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "hide": false, + "legendFormat": "Required {{delayedWETH}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "expr": "sum by (cluster, namespace, job, delayedWETH) (op_dispute_mon_bond_collateral_available{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "hide": false, + "legendFormat": "Available {{delayedWETH}}", + "range": true, + "refId": "B" + } + ], + "title": "Bond Collateral", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "insufficient" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "sufficient" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 47 + }, + "id": 13, + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "values": [ + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "tooltip": { + "maxHeight": 600, + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (balance) (op_dispute_mon_bond_collateral_required{cluster=${cluster:doublequote},namespace=${namespace:doublequote}})", + "instant": true, + "legendFormat": "{{balance}}", + "range": false, + "refId": "A" + } + ], + "title": "Bond Collateralisation", + "type": "piechart" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 55 + }, + "id": 29, + "panels": [], + "title": "Logs", + "type": "row" + }, + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "error" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "info" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "warn" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 56 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "sum" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "maxHeight": 600, + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "editorMode": "code", + "expr": "count_over_time ({cluster=\"$cluster\", app=\"op-dispute-mon\"} | logfmt lvl | label_format level=lvl | level != \"\" | drop node_name, pod [5m])", + "legendFormat": "{{level}}", + "queryType": "range", + "refId": "A" + } + ], + "title": "Log Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 64 + }, + "id": 4, + "options": { + "dedupStrategy": "numbers", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "editorMode": "code", + "expr": "{cluster=\"$cluster\", namespace=\"$namespace\"} |= `` | logfmt | lvl =~ `err?or` | label_format level=lvl", + "legendFormat": "", + "queryType": "range", + "refId": "A" + } + ], + "title": "Error Logs", + "type": "logs" + }, + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 72 + }, + "id": 12, + "options": { + "dedupStrategy": "numbers", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "editorMode": "code", + "expr": "{cluster=\"$cluster\", namespace=\"$namespace\"} |= `` | logfmt | lvl = `warn` | label_format level=lvl", + "legendFormat": "", + "queryType": "range", + "refId": "A" + } + ], + "title": "Warn Logs", + "type": "logs" + }, + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "gridPos": { + "h": 17, + "w": 24, + "x": 0, + "y": 80 + }, + "id": 41, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-LOGS}" + }, + "editorMode": "code", + "expr": "{cluster=\"$cluster\", namespace=\"$namespace\"} |= `` | logfmt | label_format level=lvl", + "queryType": "range", + "refId": "A" + } + ], + "title": "Full Logs", + "type": "logs" + } + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "definition": "label_values(op_dispute_mon_up,cluster)", + "hide": 0, + "includeAll": false, + "label": "", + "multi": false, + "name": "cluster", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(op_dispute_mon_up,cluster)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_GRAFANACLOUD-OPTIMISTIC-PROM}" + }, + "definition": "label_values(op_dispute_mon_up{cluster=\"$cluster\"},namespace)", + "hide": 0, + "includeAll": false, + "label": "", + "multi": false, + "name": "namespace", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(op_dispute_mon_up{cluster=\"$cluster\"},namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": {}, + "timezone": "utc", + "title": "Dispute Monitor", + "uid": "edc89b93vev40c", + "version": 74, + "weekStart": "" +} \ No newline at end of file From 2e2b37af2b6fdd13ef75d8124a69929b05a4e2ad Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:18:14 -0700 Subject: [PATCH 08/12] Update pages/stack/protocol/fault-proofs/challenger.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- pages/stack/protocol/fault-proofs/challenger.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index 8311e4241..1ecb3d92d 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -40,7 +40,7 @@ graph TD; ## Fault Detection Responses -`op-challenger` makes a decision on each claim in each game and decides whether to counter it or not based on its view of the validity of the claim. An honest challenger uses this basic logic: +`op-challenger` evaluates each claim's validity in every game, deciding to counter only those it deems invalid. An honest challenger uses this basic logic: 1. If the trusted node agrees with the output, `op-challenger` takes no action. An honest challenger does nothing because there are no claims it disagrees with. It continues to monitor the game in case someone posts a counter-claim to the valid root claim, in which case the challenger will participate in the game to defend the proposal. 2. If the trusted node disagrees, `op-challenger` posts a counter-claim to challenge the proposed output. In contrast to the above, an honest challenger aims to delete any output roots that its trusted node disagrees with in order to claim the bond attached to it. The honest challenger assumes that their rollup node is synced to the canonical state and that the fault proof program is correct, so it is willing to put its money on the line to counter any faults. From 65f27d8edeb809b35ee5b4ed9cf85699a53a2dfa Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:26:42 -0700 Subject: [PATCH 09/12] Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- pages/stack/protocol/fault-proofs/challenger.mdx | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index 1ecb3d92d..62345c51d 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -9,7 +9,7 @@ import Image from 'next/image' # OP-Challenger Explainer -The `op-challenger` operates as the *honest actor* in the fault dispute system and defends the chain by securing the `OptimismPortal` and ensuring the game will always resolve to the correct state of the chain. For verifying the legitimacy of claims, `op-challenger` relies on a synced, trusted rollup node as well as a trace provider (e.g., [Cannon](/stack/protocol/fault-proofs/cannon)). +The `op-challenger` operates as the *honest actor* in the fault dispute system and defends the chain by securing the `OptimismPortal` and ensuring the game always resolves to the correct state of the chain. For verifying the legitimacy of claims, `op-challenger` relies on a synced, trusted rollup node as well as a trace provider (e.g., [Cannon](/stack/protocol/fault-proofs/cannon)). Specifically, `op-challenger` performs the following actions: @@ -40,14 +40,14 @@ graph TD; ## Fault Detection Responses -`op-challenger` evaluates each claim's validity in every game, deciding to counter only those it deems invalid. An honest challenger uses this basic logic: +`op-challenger` assesses each claim's validity, countering only those deemed invalid, following this logic: 1. If the trusted node agrees with the output, `op-challenger` takes no action. An honest challenger does nothing because there are no claims it disagrees with. It continues to monitor the game in case someone posts a counter-claim to the valid root claim, in which case the challenger will participate in the game to defend the proposal. 2. If the trusted node disagrees, `op-challenger` posts a counter-claim to challenge the proposed output. In contrast to the above, an honest challenger aims to delete any output roots that its trusted node disagrees with in order to claim the bond attached to it. The honest challenger assumes that their rollup node is synced to the canonical state and that the fault proof program is correct, so it is willing to put its money on the line to counter any faults. ## Fault Dispute Game Responses -`op-challenger` determines which claims to counter by iterating through the claims in the order they are stored in the contract. This ordering ensures that a claim's ancestors are processed prior to the claim itself. For each claim, the honest challenger determines and tracks the set of honest responses to all claims, regardless of whether that response already exists in the full game state. +`op-challenger` iterates through claims as stored in the contract, ensuring ancestors are processed before their descendants. For each claim, the honest challenger determines and tracks the set of honest responses to all claims, regardless of whether that response already exists in the full game state. ### Root Claim @@ -80,7 +80,7 @@ The challenger monitors each game as new claims are added and reacts according t When one side of a `FaultDisputeGame`'s chess clock runs out, the honest challenger's responsibility is to resolve each claim in the game by calling the `resolveClaim` function on the `FaultDisputeGame` contract. Once the root claim's subgame is resolved, the challenger then finally calls the `resolve` function to resolve the entire game. -The `FaultDisputeGame` does not put a time cap on resolution - because of the liveness assumption on honest challengers and the bonds attached to the claims they've countered, challengers are economically incentivized to resolve the game promptly in order to make their funds liquid again and capture their reward(s). +The `FaultDisputeGame` does not put a time cap on resolution - because of the liveness assumption on honest challengers and the bonds attached to the claims they've countered, challengers are economically motivated to quickly resolve the game, thereby liquidating their funds and securing rewards. ## Next Steps @@ -97,10 +97,7 @@ Note: An actor would only be pushed down to the bottom half of the game if the b ### How many CPUs should I run for challenger to work efficiently? -The default value for `--max-concurrency`will work for most chain operators. However, chain operators might need to increase `--max-concurrency` if challenger is progressing too slowly or reduce `--max-concurrency` if challenger is sending too many concurrent requests. - -For example, chain operators might want to increase `--max-concurrency` for a small number of CPUs by default because Cannon won't actually need to run most of the time, so it's actually reasonable to put Challenger on quite a small box and it'll be fine. But then, if challenger starts having to execute Cannon, chain operators need to respond and scale up and give more CPUs. Increasing `--max-concurrency` will also allow challenger to be making requests your L1 in parallel. Otherwise, it'll be quite slow to iterate through every game. -Alternatively, chain operators might want to reduce `--max-concurrency` for a setup with a lot of CPUs where challenger is flooding the L1 with concurrent requests. +The default `--max-concurrency` setting suits most operators. Increase it if the challenger lags, or decrease it if it overloads with requests. ### How much ETH do you need to challenge in a game? @@ -118,7 +115,7 @@ Claims that are found to be correct have their bonds refunded. Claims that are f * There is a delay on claiming bonds of 7 days after the claim is resolved. * The 7 day period restarts each time a new bond from that game is paid to the same user. Typically this means that bonds are claimable 7 days after the game is resolved. -The calculation for the bond amounts are hard coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there's a `getRequiredBond` method on the contract that suggests what bond to use. +The calculation for the bond amounts are hard-coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there's a `getRequiredBond` method on the contract that suggests what bond to use. ### How much ETH is required for the challenger bond? From f6d746c8c6ca477232bb036d15791833db814686 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Fri, 21 Jun 2024 01:50:24 -0700 Subject: [PATCH 10/12] Update op-challenger.mdx --- pages/builders/chain-operators/features/op-challenger.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/features/op-challenger.mdx index cda479e1a..e5934c53d 100644 --- a/pages/builders/chain-operators/features/op-challenger.mdx +++ b/pages/builders/chain-operators/features/op-challenger.mdx @@ -182,7 +182,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring | `resolve-claim` | Resolves the specified claim if possible | Additionally, chain operators should consider running `op-dispute-mon`. It's an incredibly useful securities monitoring service to keep an eye on games, basically giving chain operators visibility into all the status of the games for the last 28 days. - Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: [Download](/grafana/dispute-monitor-1718214549035.json). + Chain operators can easily create their grafana dashboard for Dispute Monitor using the following json file: [Download the Dispute Monitor JSON](/grafana/dispute-monitor-1718214549035.json). ## Next Steps From ee270dd31906a457752fcae5efe51bc564718790 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Fri, 21 Jun 2024 11:38:10 -0700 Subject: [PATCH 11/12] address comments --- pages/builders/chain-operators/features/_meta.json | 1 - pages/builders/chain-operators/tools/_meta.json | 1 + .../chain-operators/{features => tools}/op-challenger.mdx | 0 pages/stack/protocol/fault-proofs/cannon.mdx | 2 +- pages/stack/protocol/fault-proofs/challenger.mdx | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename pages/builders/chain-operators/{features => tools}/op-challenger.mdx (100%) diff --git a/pages/builders/chain-operators/features/_meta.json b/pages/builders/chain-operators/features/_meta.json index e8606a055..ac2c0e054 100644 --- a/pages/builders/chain-operators/features/_meta.json +++ b/pages/builders/chain-operators/features/_meta.json @@ -1,6 +1,5 @@ { "preinstalls": "Preinstalls", - "op-challenger": "Configure Challenger For Your Chain", "alt-da-mode": "Run an Alt-DA Mode Chain", "custom-gas-token": "Run a Custom Gas Token Chain" } \ No newline at end of file diff --git a/pages/builders/chain-operators/tools/_meta.json b/pages/builders/chain-operators/tools/_meta.json index cef5e367d..d859c48d9 100644 --- a/pages/builders/chain-operators/tools/_meta.json +++ b/pages/builders/chain-operators/tools/_meta.json @@ -1,3 +1,4 @@ { + "op-challenger": "Configure Challenger For Your Chain", "explorer": "Block Explorer" } diff --git a/pages/builders/chain-operators/features/op-challenger.mdx b/pages/builders/chain-operators/tools/op-challenger.mdx similarity index 100% rename from pages/builders/chain-operators/features/op-challenger.mdx rename to pages/builders/chain-operators/tools/op-challenger.mdx diff --git a/pages/stack/protocol/fault-proofs/cannon.mdx b/pages/stack/protocol/fault-proofs/cannon.mdx index 4b912fbd2..315bbb774 100644 --- a/pages/stack/protocol/fault-proofs/cannon.mdx +++ b/pages/stack/protocol/fault-proofs/cannon.mdx @@ -35,7 +35,7 @@ single L2 block state transition that they disagree on. ### OP-Challenger \<> Cannon -Once an active fault dispute game reaches a depth below attacking / defending L2 block state transitions, OP-Challenger will run +Once an active fault dispute game reaches a depth below attacking / defending L2 block state transitions, [OP-Challenger](/stack/protocol/fault-proofs/challenger) will run Cannon to begin processing MIPS instructions within the FPVM. As part of processing MIPS instructions, Cannon will generate state witness hashes, which are the commitment to the results of the MIPS instructions' computation within the FPVM. Now, in the bisection game, OP-Challenger will provide the generated hashes until a single MIPS instruction is identified as the root disagreement between participants in the active dispute. Cannon will then diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index 62345c51d..469431543 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -84,7 +84,7 @@ The `FaultDisputeGame` does not put a time cap on resolution - because of the li ## Next Steps -* Ready to get started? Read our guide on how to [configure op-challenger on your OP Stack chain](/builders/chain-operators/features/op-challenger). +* Ready to get started? Read our guide on how to [configure `op-challenger` on your OP Stack chain](/builders/chain-operators/tools/op-challenger). * For more info about how `op-challenger` works under the hood, [check out the specs](https://specs.optimism.io/fault-proof/stage-one/honest-challenger-fdg.html). ## FAQs From 44d964019895113b509606573f8485f2a12b6a01 Mon Sep 17 00:00:00 2001 From: cpengilly <29023967+cpengilly@users.noreply.github.com> Date: Fri, 21 Jun 2024 11:49:30 -0700 Subject: [PATCH 12/12] Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- pages/builders/chain-operators/tools/op-challenger.mdx | 8 ++++---- pages/stack/protocol/fault-proofs/challenger.mdx | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pages/builders/chain-operators/tools/op-challenger.mdx b/pages/builders/chain-operators/tools/op-challenger.mdx index e5934c53d..df759f879 100644 --- a/pages/builders/chain-operators/tools/op-challenger.mdx +++ b/pages/builders/chain-operators/tools/op-challenger.mdx @@ -40,7 +40,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring ### Configure Challenger - * Configure challenger with the required flags. Tip: Use the `op-challenger --help` to view all of the subcommands, command line and environment variable options. + * Configure challenger with the required flags. Tip: Use the `op-challenger --help` to view all subcommands, command line, and environment variable options. * The example config file below shows the flags to configure in this step: ```docker @@ -65,13 +65,13 @@ This guide provides a walkthrough of setting up the configuration and monitoring #### `--l1-eth-rpc` * This is the HTTP provider URL for a standard L1 node, can be a full node. `op-challenger` will be sending many requests, so chain operators need a node that is trusted and can easily handle many transactions. - * Note: Challenger has a lot of money and it will spend it if it needs to interact with games. That might risk not defending games or challenging games correctly, so chain operators should really trust the nodes being pointing at Challenger. + * Note: Challenger has a lot of money, and it will spend it if it needs to interact with games. That might risk not defending games or challenging games correctly, so chain operators should really trust the nodes being pointed at Challenger. #### `--l1-beacon` * This is needed just to get blobs from. * In some instances, chain operators might need a blob archiver or L1 consensus node configured not to prune blobs: - * If the chain is proposing regularly, a blob archiver isn't needed. There's only have a small window in the blob retention period that games can be played. + * If the chain is proposing regularly, a blob archiver isn't needed. There's only a small window in the blob retention period that games can be played. * If the chain doesn't post a valid output root in 18 days, then a blob archiver running a challenge game is needed. If the actor gets pushed to the bottom of the game, it could lose if it's the only one protecting the chain. #### `--l2-eth-rpc` @@ -130,7 +130,7 @@ This guide provides a walkthrough of setting up the configuration and monitoring All governance approved releases use a tagged version of `op-program`. These can be rebuilt by checking out the version tag and running `make reproducible-prestate`. - * There's two ways to specify the prestate to use: + * There are two ways to specify the prestate to use: * `--cannon-prestate`: specifies a path to a single Cannon pre-state Json file * `--cannon-prestates-url`: specifies a URL to load pre-states from. This enables participating in games that use different prestates, for example due to a network upgrade. The prestates are stored in this directory named by their hash. * Example final Url for a prestate: diff --git a/pages/stack/protocol/fault-proofs/challenger.mdx b/pages/stack/protocol/fault-proofs/challenger.mdx index 469431543..3f23d83f3 100644 --- a/pages/stack/protocol/fault-proofs/challenger.mdx +++ b/pages/stack/protocol/fault-proofs/challenger.mdx @@ -80,7 +80,7 @@ The challenger monitors each game as new claims are added and reacts according t When one side of a `FaultDisputeGame`'s chess clock runs out, the honest challenger's responsibility is to resolve each claim in the game by calling the `resolveClaim` function on the `FaultDisputeGame` contract. Once the root claim's subgame is resolved, the challenger then finally calls the `resolve` function to resolve the entire game. -The `FaultDisputeGame` does not put a time cap on resolution - because of the liveness assumption on honest challengers and the bonds attached to the claims they've countered, challengers are economically motivated to quickly resolve the game, thereby liquidating their funds and securing rewards. +The `FaultDisputeGame` does not put a time cap on resolution - because of the liveness assumption on honest challengers and the bonds attached to the claims they've countered, challengers are economically motivated to resolve the game quickly, thereby liquidating their funds and securing rewards. ## Next Steps @@ -91,7 +91,7 @@ The `FaultDisputeGame` does not put a time cap on resolution - because of the li ### If I don't have a blob archiver with access to historical data, can I lose the game? -Most likely, yes. If nobody has access to the historical data. All the honest actors work together without needing to coordinate offense because they're all trying to play the same moves. So, if there's only one honest actor that lacks a blob archiver, and the actor gets pushed down to the bottom half of the game (\~ 32 claims deep in the game), then challenger would log errors and wouldn't be able to respond without the blob archiver. The actor would have 3.5 days on their side of the game to fix the problem by switching to a beacon node that does have blobs, and could then carry on as usual. +Most likely, yes. If nobody has access to the historical data. All the honest actors work together without needing to coordinate offense because they're all trying to play the same moves. So, if there's only one honest actor that lacks a blob archiver, and the actor gets pushed down to the bottom half of the game (\~ 32 claims deep in the game), then challenger would log errors and wouldn't be able to respond without the blob archiver. The actor would have 3.5 days on their side of the game to address the problem by switching to a beacon node that does have blobs, and could then proceed as usual. Note: An actor would only be pushed down to the bottom half of the game if the block being disputed is older than the blob retention period (\~18 days). If valid proposals are resolving regularly, this is not possible because each valid proposal becomes the starting point for newly created dispute games. So if there are regular valid proposals, then only \~3.5 days worth of blocks are normally being disputed, which is well within the retention period. @@ -113,7 +113,7 @@ Each *claim* pays a bond, including the root claim created when the game is crea Claims that are found to be correct have their bonds refunded. Claims that are found to be incorrect have their bonds paid to the account that posted the left-most uncountered child claim of the incorrect claim. More importantly, the bond for invalid claims is paid to whoever successfully counters the claim, but its setup so that the bond is only ever paid to a single person and never shared. * There is a delay on claiming bonds of 7 days after the claim is resolved. -* The 7 day period restarts each time a new bond from that game is paid to the same user. Typically this means that bonds are claimable 7 days after the game is resolved. +* The 7-day period restarts each time a new bond from that game is paid to the same user. Typically this means that bonds are claimable 7 days after the game is resolved. The calculation for the bond amounts are hard-coded in the [`FaultDisputeGame` contract](https://github.com/ethereum-optimism/optimism/blob/547ea72d9849e13ce169fd31df0f9197651b3f86/packages/contracts-bedrock/src/dispute/DisputeGameFactory.sol#L99-L100), and there's a `getRequiredBond` method on the contract that suggests what bond to use.