From 52026e60c7fd2be40e3d660a64e8ee5c0c218840 Mon Sep 17 00:00:00 2001 From: dzgoldman Date: Thu, 5 Oct 2023 17:43:59 -0400 Subject: [PATCH 1/8] add chain ownership docs page --- .../concepts/chain-ownership.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md diff --git a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md new file mode 100644 index 000000000..39eebd1cc --- /dev/null +++ b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md @@ -0,0 +1,45 @@ +--- +title: 'Orbit chain ownership' +sidebar_label: 'Chain ownership' +description: 'Overview of the technical architecture of chain ownership affordances on Orbit chains.' +author: dzgoldman +sme: dzgoldman +target_audience: 'Developers deploying and maintaining Orbit chains.' +sidebar_position: 0 +--- + +A **chain owner** of an Orbit chain is an entity that can carry out critical upgrades to the chain's core protocol; this includes upgrading protocol contracts, setting core system parameters, and adding & removing other chain owners. + +An Orbit chain's initial chain owner is set by the chain's creator when the chain is deployed. + +The chain-ownership architecture is designed to give Orbit chain creators flexibility in deciding how upgrades to their chain occur. + +import PublicPreviewBannerPartial from '../partials/_orbit-public-preview-banner-partial.md'; + + + +### Architecture + +Chain ownership affordance is handled via [**Upgrade Executor**](https://github.com/OffchainLabs/upgrade-executor) contracts. + +Each Orbit chain is deployed with two Upgrade Executors — one on the Orbit chain itself, and one on its parent chain. At deployment, the chain's critical affordances are given to the Upgrade Executor contracts. + +Some examples: + +- The parent chain's core protocol contracts are upgradeable proxies that are controlled by a proxy admin; the proxy admin is owned by the Upgrade Executor on the parent chain. +- The core Rollup contract's admin role is given to the Upgrade Executor on the parent chain. +- The affordance to call setters the ArbOwner procompile — which allows for setting system gas parameters and scheduling ArbOS ugprades (among other things) — is given to the Upgrade Executor on the Orbit chain. + +Calls to an Upgrade Executor can only be made by chain owners; e.g., entities granted the `EXECUTOR_ROLE` affordance on the Upgrade Executor. Upgrade executors also have the `ADMIN_ROLE` affordance granted to themselves, which lets chain owners add or remove chain owners. + +With this architecture, the Upgrade Executor represents a single source of truth for affordances over critical upgradability of the chain. + +### Upgrades + +Upgrades occur via a chain owner initiating a call to an Upgrade Executor, which in turns calls some chain-owned contract. + +Chain owners can either call [UpgradeExecutor.executeCall](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L73), which will in turn call the target contract directly, or [UpgradeExecutor.execute](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L57), which will delegate-call to an "action contract" and use its code to call the target contract. + +The Arbitrum DAO governed chains, while not Orbit chains themselves, use a similar architecture and upgrade pattern; for more info and best practices on action contracts, see ["DAO Governance Action Contracts"](https://github.com/ArbitrumFoundation/governance/blob/main/src/gov-action-contracts/README.md). + +(_NOTE: The DAO Governed chains' Upgrade Executor contracts don't have the `.executeCall` method; only the `.execute` method_) From 824c76a154dd7d0d3a3e39eaa4b94474c665dc07 Mon Sep 17 00:00:00 2001 From: Joshua Colvin Date: Fri, 13 Oct 2023 13:28:50 -0700 Subject: [PATCH 2/8] Update DAS arguments that were changed in nitro 2.1.0 --- .../node-running/how-tos/running-a-daserver.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arbitrum-docs/node-running/how-tos/running-a-daserver.mdx b/arbitrum-docs/node-running/how-tos/running-a-daserver.mdx index 312b1fb1e..310666684 100644 --- a/arbitrum-docs/node-running/how-tos/running-a-daserver.mdx +++ b/arbitrum-docs/node-running/how-tos/running-a-daserver.mdx @@ -57,8 +57,8 @@ Options for both committee members and mirrors: --rest-port uint REST server listening port (default 9877) # L1 options - --data-availability.l1-node-url string URL for L1 node, only used in standalone daserver; when running as part of a node that node's L1 configuration is used - --data-availability.sequencer-inbox-address string L1 address of SequencerInbox contract + --data-availability.parent-chain-node-url string URL for parent chain node, only used in standalone daserver; when running as part of a node that node's parent chain configuration is used + --data-availability.sequencer-inbox-address string parent chain address of SequencerInbox contract # Storage options --data-availability.local-db-storage.data-dir string directory in which to store the database @@ -238,7 +238,7 @@ spec: - -c - | mkdir -p /home/user/data/badgerdb - /usr/local/bin/daserver --data-availability.l1-node-url + /usr/local/bin/daserver --data-availability.parent-chain-node-url --enable-rpc --rpc-addr '0.0.0.0' --enable-rest --rest-addr '0.0.0.0' --log-level 3 --data-availability.local-db-storage.enable --data-availability.local-db-storage.data-dir /home/user/data/badgerdb --data-availability.local-db-storage.discard-after-timeout --data-availability.s3-storage.enable --data-availability.s3-storage.access-key "" --data-availability.s3-storage.bucket --data-availability.s3-storage.region --data-availability.s3-storage.secret-key "" --data-availability.s3-storage.object-prefix "YOUR OBJECT KEY PREFIX/" --data-availability.s3-storage.discard-after-timeout --data-availability.key.key-dir /home/user/data/keys --data-availability.local-cache.enable --data-availability.rest-aggregator.enable --data-availability.rest-aggregator.online-url-list "https://nova.arbitrum.io/das-servers" --data-availability.sequencer-inbox-address '0x211e1c4c7f1bf5351ac850ed10fd68cffcf6c21b' image: @latestNitroNodeImage@ imagePullPolicy: Always @@ -339,7 +339,7 @@ spec: - | mkdir -p /home/user/data/badgerdb mkdir -p /home/user/data/syncState - /usr/local/bin/daserver --data-availability.l1-node-url + /usr/local/bin/daserver --data-availability.parent-chain-node-url --enable-rest --rest-addr '0.0.0.0' --log-level 3 --data-availability.local-db-storage.enable --data-availability.local-db-storage.data-dir /home/user/data/badgerdb --data-availability.s3-storage.enable --data-availability.s3-storage.access-key "" --data-availability.s3-storage.bucket --data-availability.s3-storage.region --data-availability.s3-storage.secret-key "" --data-availability.s3-storage.object-prefix "YOUR OBJECT KEY PREFIX/" --data-availability.local-cache.enable --data-availability.rest-aggregator.enable --data-availability.rest-aggregator.urls "http://your-committee-member.svc.cluster.local:9877" --data-availability.rest-aggregator.online-url-list "https://nova.arbitrum.io/das-servers" --data-availability.rest-aggregator.sync-to-storage.eager --data-availability.rest-aggregator.sync-to-storage.eager-lower-bound-block 15025611 --data-availability.sequencer-inbox-address '0x211e1c4c7f1bf5351ac850ed10fd68cffcf6c21b' --data-availability.rest-aggregator.sync-to-storage.state-dir /home/user/data/syncState image: @latestNitroNodeImage@ imagePullPolicy: Always @@ -408,7 +408,7 @@ spec: - | mkdir -p /home/user/data/ipfsRepo mkdir -p /home/user/data/syncState - /usr/local/bin/daserver --data-availability.l1-node-url --enable-rest --rest-addr '0.0.0.0' --log-level 3 --data-availability.ipfs-storage.enable --data-availability.ipfs-storage.repo-dir /home/user/data/ipfsRepo --data-availability.rest-aggregator.enable --data-availability.rest-aggregator.urls "http://your-committee-member.svc.cluster.local:9877" --data-availability.rest-aggregator.online-url-list "https://nova.arbitrum.io/das-servers" --data-availability.rest-aggregator.sync-to-storage.eager --data-availability.rest-aggregator.sync-to-storage.eager-lower-bound-block 15025611 --data-availability.sequencer-inbox-address '0x211e1c4c7f1bf5351ac850ed10fd68cffcf6c21b' --data-availability.rest-aggregator.sync-to-storage.state-dir /home/user/data/syncState + /usr/local/bin/daserver --data-availability.parent-chain-node-url --enable-rest --rest-addr '0.0.0.0' --log-level 3 --data-availability.ipfs-storage.enable --data-availability.ipfs-storage.repo-dir /home/user/data/ipfsRepo --data-availability.rest-aggregator.enable --data-availability.rest-aggregator.urls "http://your-committee-member.svc.cluster.local:9877" --data-availability.rest-aggregator.online-url-list "https://nova.arbitrum.io/das-servers" --data-availability.rest-aggregator.sync-to-storage.eager --data-availability.rest-aggregator.sync-to-storage.eager-lower-bound-block 15025611 --data-availability.sequencer-inbox-address '0x211e1c4c7f1bf5351ac850ed10fd68cffcf6c21b' --data-availability.rest-aggregator.sync-to-storage.state-dir /home/user/data/syncState image: @latestNitroNodeImage@ imagePullPolicy: Always resources: From d85351ecb0ca5410a536dd24f13cedeb545ae260 Mon Sep 17 00:00:00 2001 From: TucksonDev Date: Fri, 13 Oct 2023 21:39:48 +0100 Subject: [PATCH 3/8] Format external contribution --- .../for-devs/third-party-docs/PARSIQ/parsiq.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/arbitrum-docs/for-devs/third-party-docs/PARSIQ/parsiq.md b/arbitrum-docs/for-devs/third-party-docs/PARSIQ/parsiq.md index cbf932c03..ff0637670 100644 --- a/arbitrum-docs/for-devs/third-party-docs/PARSIQ/parsiq.md +++ b/arbitrum-docs/for-devs/third-party-docs/PARSIQ/parsiq.md @@ -1,12 +1,11 @@ --- -title: "Quickstart: PARSIQ (blockchain data API & SDK)" -description: "Learn how to use PARSIQ API and SDK to get Arbitrum data" +title: 'Quickstart: PARSIQ (blockchain data API & SDK)' +description: 'Learn how to use PARSIQ API and SDK to get Arbitrum data' author: Ivan-Ivanitskiy sme: Ivan-Ivanitskiy -sidebar_label: "PARSIQ" +sidebar_label: 'PARSIQ' --- - **[PARSIQ](https://www.parsiq.net/)** is a reliable, fully customizable blockchain data indexer, helping developers to seamlessly access, process and utilize Web3 data - both raw and custom. PARSIQ API allows querying blockchain data such as transactions, token transfers, events, internal function calls, blocks, etc. @@ -19,6 +18,7 @@ to get started. ## PARSIQ Tsunami API PARSIQ Tsunami API is a highly efficient API to fetch raw Web3 data: + - Events, calls, transactions (internal included), transfers, contracts, blocks - you name it. Possibility to use unlimited blockrange makes Tsunami a hard-to-beat solution for realiably getting large amounts of data from the blockchain. CSV Export is available. - Get decoded, human readable data right out of the box. - Need an up to date feeds of data streamed to you in real time? Give our low latency Real Time Streaming service a try. @@ -31,11 +31,10 @@ Please check out our [PARSIQ API Reference](https://docs.parsiq.net/r ## PARSIQ SDK -Some more complicated cases where custom data needs to be stored, accumulated, and calculated, cannot be covered by an API. In that cases, use PARSIQ SDK or go for a Custom Data Lake. They allow you to set up data bases and data processing logic to solve your specific use case. +Some more complicated cases where custom data needs to be stored, accumulated, and calculated, cannot be covered by an API. In that cases, use PARSIQ SDK or go for a Custom Data Lake. They allow you to set up data bases and data processing logic to solve your specific use case. :::info SDK Documentation Please see [PARSIQ SDK documentation](https://docs.parsiq.net/reference/your-own-web3-api) for more details. ::: - From 1a622caebddd7cf65369b69225c5592b80d45e94 Mon Sep 17 00:00:00 2001 From: TucksonDev Date: Mon, 16 Oct 2023 12:38:41 +0100 Subject: [PATCH 4/8] Fix: glossary reference to Arbitrum Rollup protocol --- arbitrum-docs/for-devs/quickstart-solidity-hardhat.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arbitrum-docs/for-devs/quickstart-solidity-hardhat.md b/arbitrum-docs/for-devs/quickstart-solidity-hardhat.md index 6794cf38c..768066d52 100644 --- a/arbitrum-docs/for-devs/quickstart-solidity-hardhat.md +++ b/arbitrum-docs/for-devs/quickstart-solidity-hardhat.md @@ -61,9 +61,10 @@ We'll install the rest of our dependencies as we go. - These transactions can be expensive when the network is under heavy load. - **Arbitrum** - Arbitrum is a suite of L2 scaling solutions for dApp developers. - - Arbitrum One is an L2 chain that implements the - Arbitrum Rollup - protocol. + - Arbitrum One is an L2 chain that implements the + Arbitrum Rollup protocol + + . - You can use Arbitrum One to build user-friendly dApps with high throughput, low latency, and low transaction costs while inheriting Ethereum's high security standards[^4]. Let's review our vending machine's Javascript implementation, then convert it into a Solidity smart contract, then deploy it to Arbitrum One. From b125eb4561d6a375e258a5953a55fccf6f441120 Mon Sep 17 00:00:00 2001 From: dzgoldman Date: Mon, 16 Oct 2023 10:40:38 -0400 Subject: [PATCH 5/8] fix typos --- arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md index 39eebd1cc..0152ac764 100644 --- a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md +++ b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md @@ -28,7 +28,7 @@ Some examples: - The parent chain's core protocol contracts are upgradeable proxies that are controlled by a proxy admin; the proxy admin is owned by the Upgrade Executor on the parent chain. - The core Rollup contract's admin role is given to the Upgrade Executor on the parent chain. -- The affordance to call setters the ArbOwner procompile — which allows for setting system gas parameters and scheduling ArbOS ugprades (among other things) — is given to the Upgrade Executor on the Orbit chain. +- The affordance to call setters on the ArbOwner procompile — which allows for setting system gas parameters and scheduling ArbOS upgrades (among other things) — is given to the Upgrade Executor on the Orbit chain. Calls to an Upgrade Executor can only be made by chain owners; e.g., entities granted the `EXECUTOR_ROLE` affordance on the Upgrade Executor. Upgrade executors also have the `ADMIN_ROLE` affordance granted to themselves, which lets chain owners add or remove chain owners. From 6fab504e2bec375e10921a9821ddfe612edec3ba Mon Sep 17 00:00:00 2001 From: dzgoldman Date: Mon, 16 Oct 2023 11:15:59 -0400 Subject: [PATCH 6/8] add details on ownership examples --- .../launch-orbit-chain/concepts/chain-ownership.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md index 0152ac764..bd956f52c 100644 --- a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md +++ b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md @@ -40,6 +40,10 @@ Upgrades occur via a chain owner initiating a call to an Upgrade Executor, which Chain owners can either call [UpgradeExecutor.executeCall](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L73), which will in turn call the target contract directly, or [UpgradeExecutor.execute](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L57), which will delegate-call to an "action contract" and use its code to call the target contract. -The Arbitrum DAO governed chains, while not Orbit chains themselves, use a similar architecture and upgrade pattern; for more info and best practices on action contracts, see ["DAO Governance Action Contracts"](https://github.com/ArbitrumFoundation/governance/blob/main/src/gov-action-contracts/README.md). +### Ownership Flexibility +A chain owner is simply an address; it is set by the Orbit chain's deployer and can represent any sort of governance scheme. I.e., it could be an EOA (as is set via the [Orbit Quickstart](../orbit-quickstart.md)), a Multisig, a governance token system, etc. + + +The Arbitrum DAO governed chains, while not Orbit chains themselves, use a similar architecture and upgrade pattern as Orbit chains, with both a governance token and a Multisig (aka, the "Security Council") as chain owners. For more info and best practices on action contracts, see ["DAO Governance Action Contracts"](https://github.com/ArbitrumFoundation/governance/blob/main/src/gov-action-contracts/README.md). (_NOTE: The DAO Governed chains' Upgrade Executor contracts don't have the `.executeCall` method; only the `.execute` method_) From 5d928ddd51b821f80849fdf873c88a6fd45467e5 Mon Sep 17 00:00:00 2001 From: dzgoldman Date: Mon, 16 Oct 2023 11:17:27 -0400 Subject: [PATCH 7/8] format --- arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md index bd956f52c..c095f61b8 100644 --- a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md +++ b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md @@ -40,9 +40,9 @@ Upgrades occur via a chain owner initiating a call to an Upgrade Executor, which Chain owners can either call [UpgradeExecutor.executeCall](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L73), which will in turn call the target contract directly, or [UpgradeExecutor.execute](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L57), which will delegate-call to an "action contract" and use its code to call the target contract. -### Ownership Flexibility -A chain owner is simply an address; it is set by the Orbit chain's deployer and can represent any sort of governance scheme. I.e., it could be an EOA (as is set via the [Orbit Quickstart](../orbit-quickstart.md)), a Multisig, a governance token system, etc. +### Ownership Flexibility +A chain owner is simply an address; it is set by the Orbit chain's deployer and can represent any sort of governance scheme. I.e., it could be an EOA (as is set via the [Orbit Quickstart](../orbit-quickstart.md)), a Multisig, a governance token system, etc. The Arbitrum DAO governed chains, while not Orbit chains themselves, use a similar architecture and upgrade pattern as Orbit chains, with both a governance token and a Multisig (aka, the "Security Council") as chain owners. For more info and best practices on action contracts, see ["DAO Governance Action Contracts"](https://github.com/ArbitrumFoundation/governance/blob/main/src/gov-action-contracts/README.md). From 0969a91b70dc9f4fea9c3fe1f5e80ee19e66bf37 Mon Sep 17 00:00:00 2001 From: symbolpunk <103775631+symbolpunk@users.noreply.github.com> Date: Mon, 16 Oct 2023 13:34:15 -0400 Subject: [PATCH 8/8] Update arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md --- arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md index c095f61b8..de4bde53f 100644 --- a/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md +++ b/arbitrum-docs/launch-orbit-chain/concepts/chain-ownership.md @@ -40,7 +40,7 @@ Upgrades occur via a chain owner initiating a call to an Upgrade Executor, which Chain owners can either call [UpgradeExecutor.executeCall](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L73), which will in turn call the target contract directly, or [UpgradeExecutor.execute](https://github.com/OffchainLabs/upgrade-executor/blob/a8d3020c2771d164ebd323b1d99249049fe749f9/src/UpgradeExecutor.sol#L57), which will delegate-call to an "action contract" and use its code to call the target contract. -### Ownership Flexibility +### Ownership flexibility A chain owner is simply an address; it is set by the Orbit chain's deployer and can represent any sort of governance scheme. I.e., it could be an EOA (as is set via the [Orbit Quickstart](../orbit-quickstart.md)), a Multisig, a governance token system, etc.