From ee564fb4bfca2bd1637cf6d07bfb91eeec495536 Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 12 Nov 2024 10:56:04 +0000 Subject: [PATCH 1/5] Address dependency issues, add and remove packages, address linter errors, etc. --- docs/architecture/index.mdx | 59 +- .../decentralization-roadmap/index.mdx | 110 +- .../overview/transaction-lifecycle.mdx | 93 +- .../stack/bridges/canonical-token-bridge.mdx | 14 +- .../stack/canonical-msg-service/index.mdx | 2 +- .../canonical-msg-service/message-service.mdx | 44 +- .../stack/evm-state-manager/index.mdx | 215 +-- docs/architecture/stack/index.mdx | 27 +- .../stack/sequencer/conflation.mdx | 4 +- .../trace-expansion-proving/prover-limits.mdx | 29 +- .../stack/trace-expansion-proving/proving.md | 2 +- .../trace-expansion.md | 2 +- .../bridge/how-to-bridge-erc20-tokens.mdx | 40 +- .../guides/bridge/how-to-bridge-eth.mdx | 68 +- docs/developers/guides/bridge/index.mdx | 24 +- docs/developers/guides/community/index.mdx | 3 +- .../community/irys/irys-dynamic-nfts.mdx | 245 ++- .../guides/community/irys/irys-nfts.mdx | 28 +- docs/developers/guides/deploy-subdomain.mdx | 129 +- docs/developers/guides/finalized-block.mdx | 141 +- docs/developers/guides/gas-fees.mdx | 85 +- docs/developers/guides/index.mdx | 2 +- docs/developers/guides/linea-api.mdx | 191 +- docs/developers/guides/linea-inscriptions.mdx | 2 +- docs/developers/guides/linea-safe.mdx | 13 +- docs/developers/guides/run-a-node/besu.mdx | 69 +- .../guides/run-a-node/bootnodes.mdx | 7 +- docs/developers/guides/run-a-node/erigon.mdx | 71 +- docs/developers/guides/run-a-node/geth.mdx | 73 +- docs/developers/guides/run-a-node/index.mdx | 34 +- .../guides/run-a-node/linea-besu.mdx | 96 +- .../guides/run-a-node/volume-creation.mdx | 4 +- docs/developers/linea-version/index.mdx | 258 ++- .../deploy-smart-contract/atlas.mdx | 22 +- .../deploy-smart-contract/cookbook.mdx | 224 +-- .../deploy-smart-contract/foundry.mdx | 37 +- .../deploy-smart-contract/hardhat.mdx | 167 +- .../deploy-smart-contract/index.mdx | 2 +- .../deploy-smart-contract/remix.mdx | 17 +- .../quickstart/ethereum-differences.mdx | 145 +- docs/developers/quickstart/index.mdx | 5 +- docs/developers/quickstart/info-contracts.mdx | 116 +- .../verify-smart-contract/foundry.mdx | 26 +- .../verify-smart-contract/hardhat.mdx | 16 +- .../verify-smart-contract/index.mdx | 2 +- .../reference/api/eth-sendrawtransaction.mdx | 30 +- docs/developers/reference/api/index.mdx | 4 +- .../reference/api/linea-estimategas.mdx | 125 +- .../reference/api/linea-getproof.mdx | 29 +- .../linea-gettransactionexclusionstatusv1.mdx | 46 +- .../account-abstraction.mdx | 20 +- .../tooling/account-abstraction/arcana.md | 6 +- .../tooling/account-abstraction/oklink.md | 2 +- .../tooling/account-abstraction/openfort.md | 2 +- docs/developers/tooling/analytics/dune.md | 3 +- docs/developers/tooling/analytics/index.mdx | 2 +- .../developers/tooling/attestations/index.mdx | 6 +- docs/developers/tooling/cloud-infra/index.mdx | 3 +- .../developers/tooling/cloud-infra/spheron.md | 9 +- .../tooling/contracts-templates/cookbook.mdx | 6 +- .../tooling/contracts-templates/index.mdx | 3 +- docs/developers/tooling/cross-chain/axelar.md | 46 +- .../tooling/cross-chain/ccip-read-gateway.mdx | 59 +- docs/developers/tooling/cross-chain/index.mdx | 3 +- .../tooling/cross-chain/layerzero.md | 21 +- .../tooling/cross-chain/shortcuts.mdx | 102 +- .../tooling/data-indexers/covalent.md | 449 ++--- .../tooling/data-indexers/dipdup/overview.md | 2 + .../data-indexers/dipdup/quickstart.md | 16 +- docs/developers/tooling/data-indexers/dune.md | 3 +- .../tooling/data-indexers/etherscan.mdx | 32 +- .../tooling/data-indexers/flair.mdx | 1 - .../tooling/data-indexers/index.mdx | 3 +- .../tooling/data-indexers/moralis.md | 6 + .../tooling/data-indexers/nftscan.mdx | 48 +- .../tooling/data-indexers/scopescan.mdx | 27 +- .../tooling/data-indexers/sentio.mdx | 8 +- .../tooling/data-indexers/subquery.md | 7 +- .../tooling/data-indexers/subsquid.md | 5 +- .../tooling/data-indexers/thegraph.md | 9 +- docs/developers/tooling/libraries/index.mdx | 3 +- .../tooling/libraries/multicall.mdx | 6 +- docs/developers/tooling/libraries/viem.md | 4 +- docs/developers/tooling/libraries/wagmi.md | 7 +- .../tooling/node-providers/_category_.json | 4 +- .../tooling/node-providers/index.mdx | 61 +- docs/developers/tooling/oracles/api3.mdx | 39 +- docs/developers/tooling/oracles/chainlink.md | 4 +- docs/developers/tooling/oracles/dia.md | 5 +- docs/developers/tooling/oracles/index.mdx | 3 +- docs/developers/tooling/oracles/ora.md | 12 +- docs/developers/tooling/oracles/pyth.md | 60 +- docs/developers/tooling/oracles/redstone.md | 8 +- docs/developers/tooling/oracles/tellor.md | 41 +- .../permanent-data/irys/irys-querying.mdx | 234 +-- .../permanent-data/irys/irys-quickstart.mdx | 42 +- .../tooling/permanent-data/irys/overview.mdx | 22 +- docs/developers/tooling/privacy/index.mdx | 3 +- docs/developers/tooling/privacy/secret.md | 2 +- docs/developers/tooling/security/hexagate.md | 4 +- .../tooling/security/hypernative.mdx | 9 +- docs/developers/tooling/security/index.mdx | 3 +- .../tooling/social-login/arcana.mdx | 24 +- .../developers/tooling/social-login/index.mdx | 3 +- .../tooling/social-login/openfort.md | 10 +- docusaurus.config.js | 17 +- eslint.config.mjs | 234 +-- package-lock.json | 525 +++--- package.json | 4 +- scripts/fetchNodeSize.js | 77 +- src/components/HomepageCards/index.tsx | 9 +- src/components/LastUpdated.jsx | 22 +- src/components/NodeSize.jsx | 26 +- src/pages/index.tsx | 11 +- src/theme/DocItem/Layout/GetFeedback.jsx | 4 +- src/theme/DocItem/Layout/index.js | 40 +- static/files/besu/genesis-mainnet.json | 1611 ++++++++-------- static/files/besu/genesis-sepolia-geth.json | 1662 ++++++++-------- static/files/besu/genesis-sepolia.json | 1664 ++++++++--------- static/files/erigon/mainnet/genesis.json | 1610 ++++++++-------- static/files/erigon/sepolia/genesis.json | 1634 ++++++++-------- static/files/geth/mainnet/genesis.json | 1610 ++++++++-------- static/files/geth/sepolia/genesis.json | 1634 ++++++++-------- .../files/sepolia/genesis-sepolia-besu.json | 1664 ++++++++--------- .../files/sepolia/genesis-sepolia-geth.json | 1662 ++++++++-------- static/js/getfeedback.js | 4 +- static/js/navbarHighlight.js | 157 +- stylelint.config.mjs | 32 +- 128 files changed, 9941 insertions(+), 10691 deletions(-) diff --git a/docs/architecture/index.mdx b/docs/architecture/index.mdx index 998e0968d..c7ed9a115 100644 --- a/docs/architecture/index.mdx +++ b/docs/architecture/index.mdx @@ -17,8 +17,7 @@ Linea aims to be a fully decentralized, permissionless network. To support this ## Current state -Linea is in mainnet status, and the team is fervently working towards full decentralization. -The following is a good representation of the main components of Linea, and how they interact: +Linea is in mainnet status, and the team is fervently working towards full decentralization. The following is a good representation of the main components of Linea, and how they interact:
@@ -31,48 +30,27 @@ The following is a good representation of the main components of Linea, and how ## First of all: what _is_ Linea, anyway? What's a zkEVM L2? -There are several different mental models that people use to explain the different -networks and how they relate to one another. Some people prefer to call L2s "rollup networks", -or "scaling solutions". The term "layer" is a popular mental model: where one network is "built on top of another". +There are several different mental models that people use to explain the different networks and how they relate to one another. Some people prefer to call L2s "rollup networks", or "scaling solutions". The term "layer" is a popular mental model: where one network is "built on top of another". Let's set metaphor aside for a moment, and clarify: **The Ethereum network has several functional areas:** -- _Blockchain_: keeps track of addresses, and which tokens are allocated to -which addresses -- _Consensus_ mechanism: wherein many many nodes communicate about the movement of -tokens from one address to another, and each keeps their local copy of the ledger up to date -- _Execution environment_: the EVM (Ethereum Virtual Machine) wherein computer programs can be run. - -These three areas are heavily interconnected, and this is a simplification, but it's a helpful -one to understand the tradeoffs all networks must make. - -Ethereum prioritizes security: that consensus mechanism is designed to ensure that no one can -singlehandedly alter the state of the network. This is a very impressive feat of engineering, -and it comes with a tradeoff: the execution environment is highly limited in the amount of work -it can do, because the consensus mechanism intentionally runs slowly, to keep everything safe. - -Linea and other L2s are designed to participate in the security mechanism of Ethereum, -while optimizing for execution. In other words, L2s enables users to make many transactions, run -lots of programs, deploy contracts, mint NFTs, absolutely go to town—fast and cheap, and then compresses this data into a report back to Ethereum for inclusion in Ethereum's blockchain. By sending regular -reports of activity on Linea to Ethereum, the network can optimize for execution without being as -limited by security. - -This is the action known as "rolling up": we can say that Linea "rolls up its transactions to -Ethereum". And the fact that it relies on Ethereum for its security leads people to say -that it's "built on top of Ethereum": it's a "second-layer network", an L2. And before you ask, -yes, Ethereum is an L1, and L3s exist, too: networks that roll up to Linea would roll up to -Ethereum. - -The trick is in how that _rollup_ happens. Linea is special: it uses cutting-edge developments in -a branch of mathematics and computer science often referred to as zero-knowledge, or -_zero-knowledge cryptography_, to prove to the Ethereum network that everything that is happening -on the Linea network is, in fact, happening, without having to submit a complete record of every -last transaction and check each one. Instead, Linea submits a verifiable proof to Ethereum of each transaction: that's the 'zk' part. - -So, now that we've walked through some concepts, we can roll it all up: Linea is a zkEVM L2 -network. +- _Blockchain_: keeps track of addresses, and which tokens are allocated to which addresses +- _Consensus_ mechanism: wherein many many nodes communicate about the movement of tokens from one address to another, and each keeps their local copy of the ledger up to date +- _Execution environment_: the EVM (Ethereum Virtual Machine) wherein computer programs can be run. + +These three areas are heavily interconnected, and this is a simplification, but it's a helpful one to understand the tradeoffs all networks must make. + +Ethereum prioritizes security: that consensus mechanism is designed to ensure that no one can singlehandedly alter the state of the network. This is a very impressive feat of engineering, and it comes with a tradeoff: the execution environment is highly limited in the amount of work it can do, because the consensus mechanism intentionally runs slowly, to keep everything safe. + +Linea and other L2s are designed to participate in the security mechanism of Ethereum, while optimizing for execution. In other words, L2s enables users to make many transactions, run lots of programs, deploy contracts, mint NFTs, absolutely go to town—fast and cheap, and then compresses this data into a report back to Ethereum for inclusion in Ethereum's blockchain. By sending regular reports of activity on Linea to Ethereum, the network can optimize for execution without being as limited by security. + +This is the action known as "rolling up": we can say that Linea "rolls up its transactions to Ethereum". And the fact that it relies on Ethereum for its security leads people to say that it's "built on top of Ethereum": it's a "second-layer network", an L2. And before you ask, yes, Ethereum is an L1, and L3s exist, too: networks that roll up to Linea would roll up to Ethereum. + +The trick is in how that _rollup_ happens. Linea is special: it uses cutting-edge developments in a branch of mathematics and computer science often referred to as zero-knowledge, or _zero-knowledge cryptography_, to prove to the Ethereum network that everything that is happening on the Linea network is, in fact, happening, without having to submit a complete record of every last transaction and check each one. Instead, Linea submits a verifiable proof to Ethereum of each transaction: that's the 'zk' part. + +So, now that we've walked through some concepts, we can roll it all up: Linea is a zkEVM L2 network.
@@ -115,5 +93,4 @@ _...in other words, there's a lot involved._ ## Next steps - Learn more about the different components that comprise the [Linea architecture](./stack/index.mdx). -- Understand the first point of contact for many new L2 users, the bridge. Linea has more than one bridge; and that number is likely to continue to -grow. The [Linea canonical message service](./stack/canonical-msg-service/index.mdx) is key to these bridges and how they function. +- Understand the first point of contact for many new L2 users, the bridge. Linea has more than one bridge; and that number is likely to continue to grow. The [Linea canonical message service](./stack/canonical-msg-service/index.mdx) is key to these bridges and how they function. diff --git a/docs/architecture/overview/decentralization-roadmap/index.mdx b/docs/architecture/overview/decentralization-roadmap/index.mdx index dd1cb9ea1..9631cf3eb 100644 --- a/docs/architecture/overview/decentralization-roadmap/index.mdx +++ b/docs/architecture/overview/decentralization-roadmap/index.mdx @@ -4,8 +4,7 @@ sidebar_position: 9 image: /img/socialCards/decentralization-roadmap.jpg --- -The Linea roadmap is currently scoped in five phases which the team intends to deliver sequentially -in collaboration with the broader Linea ecosystem and community. +The Linea roadmap is currently scoped in five phases which the team intends to deliver sequentially in collaboration with the broader Linea ecosystem and community.
@@ -18,105 +17,44 @@ in collaboration with the broader Linea ecosystem and community. ## Phase 0 — Complete -Phase 0 began with the launch of the Linea Mainnet Alpha. From day one, Linea's EVM-equivalent zkEVM -offered default portability through its implementation of the EVM as specified by the Ethereum -Foundation. A developer building on Linea can choose at any time to move their dapp to another -EVM-supported chain, such as Ethereum, in the event they are unsatisfied with the Linea network, -without re-writing their smart contracts, retooling, or paying for new audits. +Phase 0 began with the launch of the Linea Mainnet Alpha. From day one, Linea's EVM-equivalent zkEVM offered default portability through its implementation of the EVM as specified by the Ethereum Foundation. A developer building on Linea can choose at any time to move their dapp to another EVM-supported chain, such as Ethereum, in the event they are unsatisfied with the Linea network, without re-writing their smart contracts, retooling, or paying for new audits. -During this phase we convened the first iteration of the Linea Security Council, formed to -monitor the network, protect users, and mitigate the risks associated with a new production system. -The Security Council is managed through a multi-sig Safe (formerly Gnosis Safe) contract that -requires certain thresholds of signatures to be submitted to carry out an action. Details can be -found in our [risk disclosures](../../../risk-disclosures/index.mdx). +During this phase we convened the first iteration of the Linea Security Council, formed to monitor the network, protect users, and mitigate the risks associated with a new production system. The Security Council is managed through a multi-sig Safe (formerly Gnosis Safe) contract that requires certain thresholds of signatures to be submitted to carry out an action. Details can be found in our [risk disclosures](../../../risk-disclosures/index.mdx). -Finally, the client software used to run a local node on the Linea network was made publicly -available, giving any actor the option to verify the Linea state for themselves and minimize trust -in the Linea operator. View our [node running guides](../../../developers/guides/run-a-node/index.mdx) to get started. +Finally, the client software used to run a local node on the Linea network was made publicly available, giving any actor the option to verify the Linea state for themselves and minimize trust in the Linea operator. View our [node running guides](../../../developers/guides/run-a-node/index.mdx) to get started. ## Phase 1 — Current -There are two significant components in this phase: the **open-source stack** and ensuring **100% -EVM coverage**. +There are two significant components in this phase: the **open-source stack** and ensuring **100% EVM coverage**. -Open-sourcing Linea's software stack is an essential element of our roadmap, fostering transparency -and aligning with web3 values. The Linea software stack is publicly available under the -[AGPL-2.0](https://www.apache.org/licenses/LICENSE-2.0) license, which ensures that users have the -freedom to view, fork, and modify the code. An overview of Linea's repositories is available in -our [architecture section](../../../architecture/stack/index.mdx). +Open-sourcing Linea's software stack is an essential element of our roadmap, fostering transparency and aligning with web3 values. The Linea software stack is publicly available under the [AGPL-2.0](https://www.apache.org/licenses/LICENSE-2.0) license, which ensures that users have the freedom to view, fork, and modify the code. An overview of Linea's repositories is available in our [architecture section](../../../architecture/stack/index.mdx). -The second cornerstone of this phase is the implementation of **100% EVM coverage** in the zkEVM -arithmetization. Linea will generate proofs of computation for all EVM opcodes and precompiles, -unlocking trustless execution for all use cases. The specification for the arithmetization -will be published, audited, and open to bug bounties to increase the security and reliability of -the system. +The second cornerstone of this phase is the implementation of **100% EVM coverage** in the zkEVM arithmetization. Linea will generate proofs of computation for all EVM opcodes and precompiles, unlocking trustless execution for all use cases. The specification for the arithmetization will be published, audited, and open to bug bounties to increase the security and reliability of the system. -## Phase 2 +## Phase 2 -There are two significant components in this phase: **diversifying the Security Council**, and -enabling **censorship-resistant withdrawals**. +There are two significant components in this phase: **diversifying the Security Council**, and enabling **censorship-resistant withdrawals**. -**Diversifying the Security Council** forms the first part of this stage. The Security Council -established during Linea's Mainnet Alpha launch plays a critical role in the oversight and control -of the network. However, to prevent the concentration of power and potential bias, we plan to expand -participation in the council, while also retaining a 6-of-8 multisig threshold (or stricter) for -immediate upgrades. This modification ensures a balanced representation and fosters more robust -collective decision-making, adding an additional layer of checks and balances to the system. +**Diversifying the Security Council** forms the first part of this stage. The Security Council established during Linea's Mainnet Alpha launch plays a critical role in the oversight and control of the network. However, to prevent the concentration of power and potential bias, we plan to expand participation in the council, while also retaining a 6-of-8 multisig threshold (or stricter) for immediate upgrades. This modification ensures a balanced representation and fosters more robust collective decision-making, adding an additional layer of checks and balances to the system. -Closely tied to our principle of user sovereignty, enabling **censorship-resistant withdrawals** is -a fundamental element of our roadmap. The architecture will be refined to prevent rollup operators -from preventing user withdrawals. We will ensure that users can independently initiate exits, which -guarantees continuous access to, and control over their assets on Linea. This assurance amplifies -user confidence and upholds our commitment to ensuring users have sovereignty over their assets. +Closely tied to our principle of user sovereignty, enabling **censorship-resistant withdrawals** is a fundamental element of our roadmap. The architecture will be refined to prevent rollup operators from preventing user withdrawals. We will ensure that users can independently initiate exits, which guarantees continuous access to, and control over their assets on Linea. This assurance amplifies user confidence and upholds our commitment to ensuring users have sovereignty over their assets. -Through these initiatives, our Phase 2 aims to further decentralize power, enhance transparency, -and boost the user experience, all while maintaining robust security and control measures. +Through these initiatives, our Phase 2 aims to further decentralize power, enhance transparency, and boost the user experience, all while maintaining robust security and control measures. ## Phase 3 -In this phase, we turn our focus to decentralizing the roles crucial to the functioning of the Linea -ecosystem, as well as our governance system itself, thereby further reinforcing our commitment to -trust minimization and decentralization. - -The first part of this phase is **decentralizing operators**. At present, provers and sequencers, -which generate zero-knowledge proofs and manage Layer 2 transactions respectively, are crucial -roles within our ecosystem. By decentralizing these roles, we aim to significantly bolster the trust -of our network participants and the overall integrity of our system. We acknowledge the technical -complexities this may bring, such as potential latency, increased transaction costs, and potential -MEV (maximum extractable value) issues. However, we are committed to navigating these challenges to -shepherd forward a trustworthy, efficient platform for the community. - -The second component of this phase is **decentralizing governance**. We believe that democratizing -Linea's governance is key to our continued evolution. This approach fosters an equitable, -transparent system where all stakeholders can participate and the future of Linea is steered by its -user community. This shared governance not only mitigates unilateral decisions and the risk of a -single point of failure but also reinforces the resilience of the network. In turn, this promotes -collective ownership and trust among network participants, thereby enhancing the ecosystem's -sustainable growth. +In this phase, we turn our focus to decentralizing the roles crucial to the functioning of the Linea ecosystem, as well as our governance system itself, thereby further reinforcing our commitment to trust minimization and decentralization. + +The first part of this phase is **decentralizing operators**. At present, provers and sequencers, which generate zero-knowledge proofs and manage Layer 2 transactions respectively, are crucial roles within our ecosystem. By decentralizing these roles, we aim to significantly bolster the trust of our network participants and the overall integrity of our system. We acknowledge the technical complexities this may bring, such as potential latency, increased transaction costs, and potential MEV (maximum extractable value) issues. However, we are committed to navigating these challenges to shepherd forward a trustworthy, efficient platform for the community. + +The second component of this phase is **decentralizing governance**. We believe that democratizing Linea's governance is key to our continued evolution. This approach fosters an equitable, transparent system where all stakeholders can participate and the future of Linea is steered by its user community. This shared governance not only mitigates unilateral decisions and the risk of a single point of failure but also reinforces the resilience of the network. In turn, this promotes collective ownership and trust among network participants, thereby enhancing the ecosystem's sustainable growth. ## Phase 4 -The final phase of our roadmap, aims to further ensure the robustness of our ecosystem and mitigate -trust-related risks through the implementation of a **multi-prover** and by **limiting governance -powers**. - -The EVM will continue to evolve as described in the Ethereum roadmap and will be driven by the -larger Ethereum community and Ethereum Foundation. Therefore, in order to make changes to the Linea -network at a reasonable pace and safeguard against implementation risk, we plan to incorporate -multiple diverse implementations of a zkEVM prover, known as a **multi-prover** rollup. With each -transaction on Linea verified by multiple heterogeneous implementations of the zkEVM, we can ensure -that even if one prover encounters a bug or becomes unavailable, which is not improbable given the -complexity, the system continues to operate uninterrupted. This approach not only boosts confidence -in the reliability of our platform during a period where the EVM specification is constantly -evolving but also encourages the exploration of innovative advancements, all while maintaining -exceptional levels of system uptime. - -Lastly, as part of our commitment to a robust and decentralized governance model limiting governance -to where it is only necessary, we plan to **limit governance powers**. Upgrades to the rollup logic -will be immutable, allowing upgrades only to be made to the verifier given a change in the EVM -specification, of which users will be given reasonable notice to exit the rollup. - -The role of the Security Council will be delineated to step in only in case of discrepancies or -potential system issues, such as when the prover system disagrees or appears to be stuck. By -implementing these measures, we hope to strike a balance between governance where necessary and the -principles of decentralization. +The final phase of our roadmap, aims to further ensure the robustness of our ecosystem and mitigate trust-related risks through the implementation of a **multi-prover** and by **limiting governance powers**. + +The EVM will continue to evolve as described in the Ethereum roadmap and will be driven by the larger Ethereum community and Ethereum Foundation. Therefore, in order to make changes to the Linea network at a reasonable pace and safeguard against implementation risk, we plan to incorporate multiple diverse implementations of a zkEVM prover, known as a **multi-prover** rollup. With each transaction on Linea verified by multiple heterogeneous implementations of the zkEVM, we can ensure that even if one prover encounters a bug or becomes unavailable, which is not improbable given the complexity, the system continues to operate uninterrupted. This approach not only boosts confidence in the reliability of our platform during a period where the EVM specification is constantly evolving but also encourages the exploration of innovative advancements, all while maintaining exceptional levels of system uptime. + +Lastly, as part of our commitment to a robust and decentralized governance model limiting governance to where it is only necessary, we plan to **limit governance powers**. Upgrades to the rollup logic will be immutable, allowing upgrades only to be made to the verifier given a change in the EVM specification, of which users will be given reasonable notice to exit the rollup. + +The role of the Security Council will be delineated to step in only in case of discrepancies or potential system issues, such as when the prover system disagrees or appears to be stuck. By implementing these measures, we hope to strike a balance between governance where necessary and the principles of decentralization. diff --git a/docs/architecture/overview/transaction-lifecycle.mdx b/docs/architecture/overview/transaction-lifecycle.mdx index ada206a81..5223467f0 100644 --- a/docs/architecture/overview/transaction-lifecycle.mdx +++ b/docs/architecture/overview/transaction-lifecycle.mdx @@ -1,21 +1,18 @@ --- title: Transaction lifecycle description: >- - An overview of what happens to transactions from the point of submission to - finalization + An overview of what happens to transactions from the point of submission to finalization + + image: /img/socialCards/transaction-lifecycle.jpg --- :::note[A note on finality] Finality has two definitions on Linea: -- Soft finality: The transaction is confirmed on Linea. This takes two seconds, i.e Linea's block -time. See [step 3](#step-3-transaction-data-sent-to-the-state-manager). For simplicity, Linea is -guaranteed to not reorg—remove competing versions of blockchain history in favor of a canonical -one—when there are reorgs on L1. -- Hard finality: The proof submitted to L1 has been verified, and two epochs have elapsed. The -typical time before hard finality is 8-32 hours, although the 8-hour minimum will be reduced to -zero in a future release. See [step 6](#step-6-batch-finalization). + +- Soft finality: The transaction is confirmed on Linea. This takes two seconds, i.e Linea's block time. See [step 3](#step-3-transaction-data-sent-to-the-state-manager). For simplicity, Linea is guaranteed to not reorg—remove competing versions of blockchain history in favor of a canonical one—when there are reorgs on L1. +- Hard finality: The proof submitted to L1 has been verified, and two epochs have elapsed. The typical time before hard finality is 8-32 hours, although the 8-hour minimum will be reduced to zero in a future release. See [step 6](#step-6-batch-finalization). ::: @@ -23,101 +20,61 @@ Transactions on Linea proceed through the following steps: ## Step 1: Submission -This is where every transaction originates: at the wallet level, a user signs a transaction and -broadcasts it to Linea. From here, transactions head straight to the **mempool**, similarly to -Ethereum, where they become pending transactions. +This is where every transaction originates: at the wallet level, a user signs a transaction and broadcasts it to Linea. From here, transactions head straight to the **mempool**, similarly to Ethereum, where they become pending transactions. ## Step 2: Block building -The Linea [sequencer](../stack/sequencer/index.mdx) is responsible for ordering, building, and -executing blocks. For each transaction added to the mempool, the sequencer checks its validity, -rejecting transactions as necessary. Transaction validity conditions are specific to Linea, and -differ slightly from those on other networks, including Ethereum. +The Linea [sequencer](../stack/sequencer/index.mdx) is responsible for ordering, building, and executing blocks. For each transaction added to the mempool, the sequencer checks its validity, rejecting transactions as necessary. Transaction validity conditions are specific to Linea, and differ slightly from those on other networks, including Ethereum. -The sequencer orders transactions according to the priority fee paid for each, a method known as -a priority gas auction. So, having passed the above checks, valid transactions are placed into -blocks in the correct sequence and executed. +The sequencer orders transactions according to the priority fee paid for each, a method known as a priority gas auction. So, having passed the above checks, valid transactions are placed into blocks in the correct sequence and executed. -At this point, the transaction's lifecycle is more or less complete — at least from a user -perspective. The block containing the transaction has been added to the "head" of the Linea -blockchain—the most recent block—and a transaction receipt is returned to the user's wallet as -confirmation. +At this point, the transaction's lifecycle is more or less complete — at least from a user perspective. The block containing the transaction has been added to the "head" of the Linea blockchain—the most recent block—and a transaction receipt is returned to the user's wallet as confirmation. -However, the transaction and its associated data will continue to be processed in order to -generate ZK proofs. Let's press on. +However, the transaction and its associated data will continue to be processed in order to generate ZK proofs. Let's press on. ## Step 3: Transaction data sent to the state manager -Data about the transaction and the state of the network at its time of execution are recorded -in **traces**, an output of part of the sequencer called the [trace generator](../stack/sequencer/traces-generator.md). +Data about the transaction and the state of the network at its time of execution are recorded in **traces**, an output of part of the sequencer called the [trace generator](../stack/sequencer/traces-generator.md). -Traces are passed to the state manager block-by-block and then used to update the network state. -Once state is up to date, you'll see the transaction reflected and confirmed in your wallet. +Traces are passed to the state manager block-by-block and then used to update the network state. Once state is up to date, you'll see the transaction reflected and confirmed in your wallet. -With the transaction executed and state updated, the transaction has reached **soft finality**: -as far as the Linea chain is concerned—if considered in isolation—your transaction is complete. -A L2 like Linea doesn't work in isolation, though, as we know; so there is more work to be done -before true finality is reached. +With the transaction executed and state updated, the transaction has reached **soft finality**: as far as the Linea chain is concerned—if considered in isolation—your transaction is complete. A L2 like Linea doesn't work in isolation, though, as we know; so there is more work to be done before true finality is reached. ## Step 4: Conflation -The transaction's block will then be subject to [conflation](../stack/sequencer/conflation.mdx), which -combines two or more blocks' transaction data into a single data set (batch) that forms part of -the package of data passed on to Ethereum. Combining the transaction data of multiple blocks -means that a single proof can be used to verify a large volume of transactions, minimizing the -costs of submitting proofs to L1. +The transaction's block will then be subject to [conflation](../stack/sequencer/conflation.mdx), which combines two or more blocks' transaction data into a single data set (batch) that forms part of the package of data passed on to Ethereum. Combining the transaction data of multiple blocks means that a single proof can be used to verify a large volume of transactions, minimizing the costs of submitting proofs to L1. -Occasionally, a batch may only consist of one block, with no conflation having taken place. -This occurs when chain activity levels are particularly high, and the block size is larger -than normal. +Occasionally, a batch may only consist of one block, with no conflation having taken place. This occurs when chain activity levels are particularly high, and the block size is larger than normal. Amongst Ethereum's L2 networks, Linea is the only network that uses batch conflation. ## Step 5: Generating a ZK proof using transaction data -With the block that contains the transaction's trace data conflated into a batch with one or -more others, the only remaining task on the checklist to achieve **_hard_ finality** is to use -the transaction's data—as contained in its trace—to generate a proof. +With the block that contains the transaction's trace data conflated into a batch with one or more others, the only remaining task on the checklist to achieve **_hard_ finality** is to use the transaction's data—as contained in its trace—to generate a proof. -When prompted by the [Coordinator](../stack/coordinator/index.mdx), Linea's [prover](../stack/trace-expansion-proving/index.mdx) -will first **expand** the trace, preparing it for inclusion in the proof. Linea's prover employs -a two-stage method for developing the proofs that eventually get passed to L1, first developing -an **inner proof** and then an **outer proof**. +When prompted by the [Coordinator](../stack/coordinator/index.mdx), Linea's [prover](../stack/trace-expansion-proving/index.mdx) will first **expand** the trace, preparing it for inclusion in the proof. Linea's prover employs a two-stage method for developing the proofs that eventually get passed to L1, first developing an **inner proof** and then an **outer proof**. -The inner proof uses a combination of tools, including Arcane and Vortex, to recursively reduce -the proof size. For a more in-depth look at Linea's inner proof system, see [this article](https://linea.mirror.xyz/B3b1lUK8--UKZ_Qehk7SfOyvdcGbcuoyvNsSukHgOY8). +The inner proof uses a combination of tools, including Arcane and Vortex, to recursively reduce the proof size. For a more in-depth look at Linea's inner proof system, see [this article](https://linea.mirror.xyz/B3b1lUK8--UKZ_Qehk7SfOyvdcGbcuoyvNsSukHgOY8). -Next, the outer proof is generated using the Consensys-maintained library [`gnark`](https://docs.gnark.consensys.net/), -compressing the proof size even further. The resulting proof is what's known as a zk-SNARK: -the proofs that are eventually submitted to Ethereum. +Next, the outer proof is generated using the Consensys-maintained library [`gnark`](https://docs.gnark.consensys.net/), compressing the proof size even further. The resulting proof is what's known as a zk-SNARK: the proofs that are eventually submitted to Ethereum. -Since the trace data of _every_ transaction in _every_ block feeds into producing the final proof, -the single transaction we started with remains vital to Linea's function, well beyond the point -at which it achieves soft finality in [step 3](#step-3-transaction-data-sent-to-the-state-manager). +Since the trace data of _every_ transaction in _every_ block feeds into producing the final proof, the single transaction we started with remains vital to Linea's function, well beyond the point at which it achieves soft finality in [step 3](#step-3-transaction-data-sent-to-the-state-manager). ## Step 6: Batch finalization -The final step in the process is to finalize the batch by submitting it to Ethereum mainnet, -proving its computational integrity. Since the batch of conflated blocks is comprised of -transactions, our transaction is involved in this process as well. +The final step in the process is to finalize the batch by submitting it to Ethereum mainnet, proving its computational integrity. Since the batch of conflated blocks is comprised of transactions, our transaction is involved in this process as well. Let's break down the two elements submitted to L1: - The proof, as explained [above](#step-5-generating-a-zk-proof-using-transaction-data), and; -- Blob data, which contains L2 transaction and messaging data. Once shared to L1, blob data -can be used to reconstruct Linea's state and verify the contents of the proof, before it disappears -after 4,096 epochs (~18 days). The Linea rollup contract on L1 calls the Ethereum verifier contract -using blob data, determining whether or not to accept the batch as valid. +- Blob data, which contains L2 transaction and messaging data. Once shared to L1, blob data can be used to reconstruct Linea's state and verify the contents of the proof, before it disappears after 4,096 epochs (~18 days). The Linea rollup contract on L1 calls the Ethereum verifier contract using blob data, determining whether or not to accept the batch as valid. :::note[Calldata] -Up until Linea Alpha v3, L2 transaction data was transported to L1 via `calldata` embedded in -transactions. Although effective, this method was costly, and has now been replaced by -blob-carrying transactions made possible by EIP-4844, added in Ethereum's Dencun upgrade. +Up until Linea Alpha v3, L2 transaction data was transported to L1 via `calldata` embedded in transactions. Although effective, this method was costly, and has now been replaced by blob-carrying transactions made possible by EIP-4844, added in Ethereum's Dencun upgrade. ::: You can also view finalized batches on Lineascan, [here](https://lineascan.build/batches). -Once the proof is verified and two epochs have passed, the transaction becomes immutable history, -and reaches **hard finality**. Its lifecycle is complete. +Once the proof is verified and two epochs have passed, the transaction becomes immutable history, and reaches **hard finality**. Its lifecycle is complete. diff --git a/docs/architecture/stack/bridges/canonical-token-bridge.mdx b/docs/architecture/stack/bridges/canonical-token-bridge.mdx index ad4892e90..ba06c7d65 100644 --- a/docs/architecture/stack/bridges/canonical-token-bridge.mdx +++ b/docs/architecture/stack/bridges/canonical-token-bridge.mdx @@ -18,21 +18,15 @@ import TabItem from "@theme/TabItem";
-The canonical token bridge is the pair of “lock & mint” contracts that allow bridging of any -ERC-20 token. The bridge relies on the [message service](../canonical-msg-service/message-service.mdx) -for cross-chain interactions. +The canonical token bridge is the pair of “lock & mint” contracts that allow bridging of any ERC-20 token. The bridge relies on the [message service](../canonical-msg-service/message-service.mdx) for cross-chain interactions. The Linea team operates a UI for the [official Linea bridge](https://bridge.linea.build/). -The canonical token bridge is optimized for technical partners who are deploying on Linea. -We recommend that everyday users of Linea seeking to bridge their personal tokens between -networks leverage one of the many bridges deployed to the network. +The canonical token bridge is optimized for technical partners who are deploying on Linea. We recommend that everyday users of Linea seeking to bridge their personal tokens between networks leverage one of the many bridges deployed to the network. -Linea seeks to foster a permissionless, resilient, decentralized environment — not to have our -bridge be a centralized arbiter and point of failure. +Linea seeks to foster a permissionless, resilient, decentralized environment — not to have our bridge be a centralized arbiter and point of failure. -To find out which bridges are currently operating on Linea, head to the [ecosystem portal](https://linea.build/apps) -and click on the **Bridge** button to show all that are available. +To find out which bridges are currently operating on Linea, head to the [ecosystem portal](https://linea.build/apps) and click on the **Bridge** button to show all that are available. ## Contracts diff --git a/docs/architecture/stack/canonical-msg-service/index.mdx b/docs/architecture/stack/canonical-msg-service/index.mdx index 4ef4ad46b..894d67b1b 100644 --- a/docs/architecture/stack/canonical-msg-service/index.mdx +++ b/docs/architecture/stack/canonical-msg-service/index.mdx @@ -1,5 +1,5 @@ --- -title: 'Canonical message service: overview' +title: "Canonical message service: overview" sidebar_position: 1 image: /img/socialCards/canonical-message-service-overview.jpg --- diff --git a/docs/architecture/stack/canonical-msg-service/message-service.mdx b/docs/architecture/stack/canonical-msg-service/message-service.mdx index e96c22ed5..742132253 100644 --- a/docs/architecture/stack/canonical-msg-service/message-service.mdx +++ b/docs/architecture/stack/canonical-msg-service/message-service.mdx @@ -1,5 +1,5 @@ --- -title: 'Message service: technical reference' +title: "Message service: technical reference" sidebar_position: 2 image: /img/socialCards/message-service-technical-reference.jpg --- @@ -14,8 +14,7 @@ import TabItem from "@theme/TabItem"; The message service is responsible for cross-chain messages between Ethereum and Linea, which: -- Allows a contract on the source chain to safely interact with a contract on the target chain -(e.g. L1TokenBridge triggering mint on the L2TokenBridge), +- Allows a contract on the source chain to safely interact with a contract on the target chain (e.g. L1TokenBridge triggering mint on the L2TokenBridge), - Is responsible for bridging ETH (native currency on L1 and L2) - Supports: - **push**: auto-execution on target layer if a fee is paid @@ -46,7 +45,7 @@ The message service is responsible for cross-chain messages between Ethereum and - + @@ -56,12 +55,12 @@ The message service is responsible for cross-chain messages between Ethereum and @@ -74,38 +73,25 @@ The message service is responsible for cross-chain messages between Ethereum and ### Workflow -1. Dapp calls `sendMessage(...)` on the origin layer using the proxy contract at one of the testnet -addresses above. +1. Dapp calls `sendMessage(...)` on the origin layer using the proxy contract at one of the testnet addresses above. - Args: - `_to`: the destination address on the destination chain - `_fee`: the message service fee on the origin chain - - An optional field used to incentivize a Postman to perform `claimMessage(...)` automatically - on the destination chain (not available when bridging from L2 to L1, or for non-ETH transfers) + - An optional field used to incentivize a Postman to perform `claimMessage(...)` automatically on the destination chain (not available when bridging from L2 to L1, or for non-ETH transfers) - `_calldata`: a flexible field that is generally created using `abi.encode(...)` -1. Dapp uses the [Postman SDK](https://www.npmjs.com/package/@consensys/linea-sdk?activeTab=readme) -to simplify the execution of messages on the destination layer by: +1. Dapp uses the [Postman SDK](https://www.npmjs.com/package/@consensys/linea-sdk?activeTab=readme) to simplify the execution of messages on the destination layer by: - Triggering the delivery - - If messages don't get delivered by the postman, the message can be manually claimed by - calling, with the parameters detailed in the [interface below](#interface-imessageservicesol), - one of: - - L2: `claimMessage` - - L1: `claimMessageWithProof` - You can also use the SDK to claim messages. + - If messages don't get delivered by the postman, the message can be manually claimed by calling, with the parameters detailed in the [interface below](#interface-imessageservicesol), one of: + - L2: `claimMessage` + - L1: `claimMessageWithProof` + You can also use the SDK to claim messages. - Receiving the delivery in the dapp smart contract - - This triggers `claimMessage(...)` on the destination layer that will call `_to` with - `_calldata` and a value equal to. + - This triggers `claimMessage(...)` on the destination layer that will call `_to` with `_calldata` and a value equal to. - The dapp smart contract can inherit from `MessageServiceBase.sol` to: - Verify that the call comes from the MessageService `onlyMessagingService` - - Verify that the sender on the origin chain comes from a trusted contract (usually the dapp - sibling contract) using `onlyAuthorizedRemoteSender()` + - Verify that the sender on the origin chain comes from a trusted contract (usually the dapp sibling contract) using `onlyAuthorizedRemoteSender()` -:::info[Proxy contract] -A proxy contract is one that simply points towards the actual "implementation" contracts. This model -is beneficial as it allows the implementation contracts to be upgraded independently of the proxy, -allowing contract upgrades without having to start afresh and lose the proxy contract's history. -When the implementation contracts are updated, the proxy contract is simply amended to point -towards the new implementation contract addresses. -::: +:::info[Proxy contract] A proxy contract is one that simply points towards the actual "implementation" contracts. This model is beneficial as it allows the implementation contracts to be upgraded independently of the proxy, allowing contract upgrades without having to start afresh and lose the proxy contract's history. When the implementation contracts are updated, the proxy contract is simply amended to point towards the new implementation contract addresses. ::: ## Interface IMessageService.sol diff --git a/docs/architecture/stack/evm-state-manager/index.mdx b/docs/architecture/stack/evm-state-manager/index.mdx index 7a43a05f2..811d3abb6 100644 --- a/docs/architecture/stack/evm-state-manager/index.mdx +++ b/docs/architecture/stack/evm-state-manager/index.mdx @@ -5,249 +5,158 @@ sidebar_position: 4 image: /img/socialCards/evm-state-manager.jpg --- -The state manager is the part of the execution client responsible for updating the state of the -network globally, and the state of every account individually. The state manager also audits the -"read" access made in the EVM, meaning it monitors, verifies, and logs all operations where the -EVM needs to read data from the blockchain state. +The state manager is the part of the execution client responsible for updating the state of the network globally, and the state of every account individually. The state manager also audits the "read" access made in the EVM, meaning it monitors, verifies, and logs all operations where the EVM needs to read data from the blockchain state. :::info -"State" refers to the data stored on the blockchain at any given point in time. To -update state is to update the record of the contents of every account whose contents have -changed. +"State" refers to the data stored on the blockchain at any given point in time. To update state is to update the record of the contents of every account whose contents have changed. ::: -The main task of the state manager is to receive blocks that have been executed by the [sequencer](../sequencer/index.mdx) -and use the trace data from their execution to update the state of the network. Linea uses two -data structure types to manage state: -1. A Merkle-Patricia Trie to record the world state, maintain consensus, and process blocks. This -mirrors how consensus and state are [managed on Ethereum Mainnet](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/). -2. A variant of regular Merkle trees called a sparse Merkle tree (SMT), which is used to more -efficiently track, manage, and update storage slots representing accounts. +The main task of the state manager is to receive blocks that have been executed by the [sequencer](../sequencer/index.mdx) and use the trace data from their execution to update the state of the network. Linea uses two data structure types to manage state: -It then passes this updated network state information to the [prover](../trace-expansion-proving/index.mdx) -in the form of Merkle proofs for submission to Ethereum Mainnet (L1). +1. A Merkle-Patricia Trie to record the world state, maintain consensus, and process blocks. This mirrors how consensus and state are [managed on Ethereum Mainnet](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/). +2. A variant of regular Merkle trees called a sparse Merkle tree (SMT), which is used to more efficiently track, manage, and update storage slots representing accounts. -Below, we'll explain the element of Linea's state management in greater detail, focussing on the -SMT configuration that sets Linea apart. +It then passes this updated network state information to the [prover](../trace-expansion-proving/index.mdx) in the form of Merkle proofs for submission to Ethereum Mainnet (L1). + +Below, we'll explain the element of Linea's state management in greater detail, focussing on the SMT configuration that sets Linea apart. ## Merkle trees -The Merkle tree and its variations are commonly used across EVM chains to store and retrieve -data about the state of every account on the blockchain. +The Merkle tree and its variations are commonly used across EVM chains to store and retrieve data about the state of every account on the blockchain. -A Merkle tree is comprised of 'nodes' that branch off from each other. At the base is the 'root', -or state root, from which branches stem, and leaves stem from the branches. +A Merkle tree is comprised of 'nodes' that branch off from each other. At the base is the 'root', or state root, from which branches stem, and leaves stem from the branches.
- ```mermaid - flowchart TD - A[root] --> B[node] & C[node] - B --> D[node] & E[node] - C --> F[node] & G[node] + ```mermaid + flowchart TD + A[root] --> B[node] & C[node] + B --> D[node] & E[node] + C --> F[node] & G[node] ```
-Each node, regardless of type, is represented by a cryptographic hash which encodes data about its -properties — for example, the contents of your account. Each hash encodes the hashes of its child -nodes. Taken to its full extent, this cascading system means the root encodes data of the state of -every single account on the blockchain. +Each node, regardless of type, is represented by a cryptographic hash which encodes data about its properties — for example, the contents of your account. Each hash encodes the hashes of its child nodes. Taken to its full extent, this cascading system means the root encodes data of the state of every single account on the blockchain. -Cryptographic hashes are deterministic, which means you can reverse the hash function to get the -data which it encoded. If you have the hash of the root—the only node without a parent—you can -theoretically derive from it the data of any node in the entire tree. +Cryptographic hashes are deterministic, which means you can reverse the hash function to get the data which it encoded. If you have the hash of the root—the only node without a parent—you can theoretically derive from it the data of any node in the entire tree. -As a layer 2 (L2) network, Linea is in the business of making transacting faster and more efficient. -Linea implements a sparse Merkle tree to track account state and generate and store proofs, and -unlock greater efficiency when compared to standard Merkle trees, which require recomputation for -every block, leading to excessive computational demands. +As a layer 2 (L2) network, Linea is in the business of making transacting faster and more efficient. Linea implements a sparse Merkle tree to track account state and generate and store proofs, and unlock greater efficiency when compared to standard Merkle trees, which require recomputation for every block, leading to excessive computational demands. ### Sparse Merkle trees -Linea's state management uses sparse Merkle trees to minimize computation and contribute to the -blockchain's efficiency. +Linea's state management uses sparse Merkle trees to minimize computation and contribute to the blockchain's efficiency. -A sparse Merkle tree is a variation of a standard Merkle tree where not all leaf nodes are filled -with data; instead, data is only stored in nodes where it's needed. It is a complete tree of fixed -depth, meaning that all branches of the tree have the same length—i.e. the same number of leaves. +A sparse Merkle tree is a variation of a standard Merkle tree where not all leaf nodes are filled with data; instead, data is only stored in nodes where it's needed. It is a complete tree of fixed depth, meaning that all branches of the tree have the same length—i.e. the same number of leaves. -At initialization—the beginning of the chain's history—all leaf nodes are set to a default value, -which is typically a hash of a specific value, such as zero. Because all leaf nodes have the same -hash value, the parent nodes and higher-level nodes also have the same hash value. A node whose -hash is the default value for its level is therefore considered to represent an _empty_ subtree. +At initialization—the beginning of the chain's history—all leaf nodes are set to a default value, which is typically a hash of a specific value, such as zero. Because all leaf nodes have the same hash value, the parent nodes and higher-level nodes also have the same hash value. A node whose hash is the default value for its level is therefore considered to represent an _empty_ subtree.
```mermaid - flowchart TD - A[root] --> B["`**node A**`" - null] & C["`**node B**`" - contains data] - B --> D["`**node C**`": - null] & E["`**node D:**`" - null] - C --> F["`**node E**`": - data] & G["`**node F**`": - data] + flowchart TD + A[root] --> B["`**node A**`" null] & C["`**node B**`" contains data] + B --> D["`**node C**`": null] & E["`**node D:**`" null] + C --> F["`**node E**`": data] & G["`**node F**`": data] ```
-In the example above, the children of node A (leaves) contain null values, which means node A does -too. Node B, meanwhile, reflects that its children also contain values. +In the example above, the children of node A (leaves) contain null values, which means node A does too. Node B, meanwhile, reflects that its children also contain values. -With this construction, we do not need to keep track of every individual node's hash. Instead, we -can assume hashes that reflect the default value are empty, and the subtree or node that lies -further down the chain of nodes can be disregarded; we only need to pay attention to the ones that -correspond to _non-empty_ subtrees. +With this construction, we do not need to keep track of every individual node's hash. Instead, we can assume hashes that reflect the default value are empty, and the subtree or node that lies further down the chain of nodes can be disregarded; we only need to pay attention to the ones that correspond to _non-empty_ subtrees. ## Cryptographic accumulator -In this context, we can consider Linea's sparse Merkle tree as a type of "cryptographic -accumulator". A cryptographic accumulator is a type of cryptographic primitive encoding a collection -of items into very short strings and allowing read/write operations to be proven. Merkle trees and -sparse Merkle trees are elementary examples of accumulators but there are others with more powerful -capabilities. +In this context, we can consider Linea's sparse Merkle tree as a type of "cryptographic accumulator". A cryptographic accumulator is a type of cryptographic primitive encoding a collection of items into very short strings and allowing read/write operations to be proven. Merkle trees and sparse Merkle trees are elementary examples of accumulators but there are others with more powerful capabilities. -Linea's state manager uses an extended version of a sparse Merkle tree that enables it to prove all -CRUD (create, read, update, delete) operations for a key-addressed database. As an outline, the -construction uses a sparse Merkle tree to store the nodes of a sorted doubly-linked list that -encodes all the non-zero items of the state. +Linea's state manager uses an extended version of a sparse Merkle tree that enables it to prove all CRUD (create, read, update, delete) operations for a key-addressed database. As an outline, the construction uses a sparse Merkle tree to store the nodes of a sorted doubly-linked list that encodes all the non-zero items of the state. -Linea's state manager uses the accumulator to track the account trie of Linea but also the storage -of every contract separately. +Linea's state manager uses the accumulator to track the account trie of Linea but also the storage of every contract separately. The leaves of the tree have the following structure: `prev || next || hKey || hVal`. -`hKey` and `hVal` are the hashes of the key and the value of the stored state entry, respectively. -`prev` and `next` are pointers storing the position of the leaves whose `hKeys` are immediately -lower and higher, respectively, following lexicographic order. The first two leaves of the SMT are -called the head and the tail, and are special in that they do not encode a stored tuple. The head is -the lowest possible `hKey`, while the tail is the highest possible `hKey`. They are therefore -situated at the beginning and the end of the linked list, respectively. Starting from the head, we -can access the SMT leaf stored at `head.next` to get the lowest "actually stored" item. Further -incrementing the `next` value will give us the second-lowest stored item and so on. Repeating the -process walks us through the entire set of stored items before we end up at the tail node, marking -the final step. +`hKey` and `hVal` are the hashes of the key and the value of the stored state entry, respectively. `prev` and `next` are pointers storing the position of the leaves whose `hKeys` are immediately lower and higher, respectively, following lexicographic order. The first two leaves of the SMT are called the head and the tail, and are special in that they do not encode a stored tuple. The head is the lowest possible `hKey`, while the tail is the highest possible `hKey`. They are therefore situated at the beginning and the end of the linked list, respectively. Starting from the head, we can access the SMT leaf stored at `head.next` to get the lowest "actually stored" item. Further incrementing the `next` value will give us the second-lowest stored item and so on. Repeating the process walks us through the entire set of stored items before we end up at the tail node, marking the final step. -Leaves can also be referred to as storage slots, in that they contain data about the contents of -the account in question. +Leaves can also be referred to as storage slots, in that they contain data about the contents of the account in question. ### Tracking empty leaves -All leaves in the tree are populated with default/zero values at initialization. Since a -deterministic hashing function will ensure that these leaves are always represented by the same -hash, empty leaves can be easily recognized by the accumulator. +All leaves in the tree are populated with default/zero values at initialization. Since a deterministic hashing function will ensure that these leaves are always represented by the same hash, empty leaves can be easily recognized by the accumulator. -However, in order for the state manager to update a storage slot with data about a Linea account's -contents, it must know which empty leaf to overwrite, and exactly where these empty leaves are. A -further consideration is that we require the index of any 'new' leaf—an empty leaf being updated -so that it stores data—to be overwritten in a deterministic way. This requirement means that anyone -can theoretically reconstruct the tree simply by looking at transaction history. +However, in order for the state manager to update a storage slot with data about a Linea account's contents, it must know which empty leaf to overwrite, and exactly where these empty leaves are. A further consideration is that we require the index of any 'new' leaf—an empty leaf being updated so that it stores data—to be overwritten in a deterministic way. This requirement means that anyone can theoretically reconstruct the tree simply by looking at transaction history. -To ensure consistency in the leaves' position, the state manager only ever inserts 'new' leaves to -the left of the previous leaf in the tree. If this wasn't the case, and the state manager was able -to insert any node in any position, it would be impossible to reconstitute the tree in the exact -same configuration, severely impacting the ability of L1 to verify the Merkle proof provided. +To ensure consistency in the leaves' position, the state manager only ever inserts 'new' leaves to the left of the previous leaf in the tree. If this wasn't the case, and the state manager was able to insert any node in any position, it would be impossible to reconstitute the tree in the exact same configuration, severely impacting the ability of L1 to verify the Merkle proof provided. ## Applying the accumulator The Ethereum Virtual Machine (EVM) uses a variant of a Merkle tree known as a [Merkle-Patricia Trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) to track: + - World state, which keeps track of accounts, and; -- Account storage state (or simply 'storage'), which keeps track of the contents of each account. +- Account storage state (or simply 'storage'), which keeps track of the contents of each account. -On Linea, we adapt this structure. The Merkle-Patricia Trie is still used for world state, but the -custom cryptographic accumulator described above is used for account storage state. +On Linea, we adapt this structure. The Merkle-Patricia Trie is still used for world state, but the custom cryptographic accumulator described above is used for account storage state. The accumulator can perform the following operations: -- **Insertion**: adding a new storage slot to the tree, triggered by storing a non-zero value in a -previously zero-valued slot. -- **Update**: changing the value of an existing storage slot in the tree, triggered by storing a new -non-zero value in a previously non-zero slot. -- **Deletion**: removing a storage slot from the tree, triggered by storing the zero value in a -previously non-zero slot. -- **Read zero**: proving non-membership, triggered when a storage slot has been accessed, but not -updated, and its value is zero. -- **Read non-zero**: proving membership, triggered when a storage slot has been accessed, but not -updated and its value is non-zero. + +- **Insertion**: adding a new storage slot to the tree, triggered by storing a non-zero value in a previously zero-valued slot. +- **Update**: changing the value of an existing storage slot in the tree, triggered by storing a new non-zero value in a previously non-zero slot. +- **Deletion**: removing a storage slot from the tree, triggered by storing the zero value in a previously non-zero slot. +- **Read zero**: proving non-membership, triggered when a storage slot has been accessed, but not updated, and its value is zero. +- **Read non-zero**: proving membership, triggered when a storage slot has been accessed, but not updated and its value is non-zero. These operations are applied to two trees; [world state](#world-state) and [account storage state](#account-storage-state). ### World state -The world state tree maps all accounts that exist on the blockchain—contracts and externally-owned -accounts (EOAs)—and points towards the account storage state for each. While on Ethereum Mainnet, -this data is stored in a standard trie, Linea uses the accumulator to map accounts as key:value -pairs. Otherwise, the implementation is similar to the EVM. +The world state tree maps all accounts that exist on the blockchain—contracts and externally-owned accounts (EOAs)—and points towards the account storage state for each. While on Ethereum Mainnet, this data is stored in a standard trie, Linea uses the accumulator to map accounts as key:value pairs. Otherwise, the implementation is similar to the EVM. Their structure is as follows: - `HKey`: Hash(`address`) - `Val`: Hash(`nonce`, `balance`, `storageRoot`, `codeHash`, `keccakCodeHash`, `CodeSize`) -Critically, every piece of data fed into the `Val` (value) hash function must have a finite field -interpretation. The data must be formatted this way to enable the Linea prover to correctly -access the world state when verifying proofs. Each element is formatted as follows (all elements -require one field, other than `keccakCodeHash`): +Critically, every piece of data fed into the `Val` (value) hash function must have a finite field interpretation. The data must be formatted this way to enable the Linea prover to correctly access the world state when verifying proofs. Each element is formatted as follows (all elements require one field, other than `keccakCodeHash`): -- `nonce`: The nonce is written in big-endian form into a `byte32`. For instance if the nonce is 10, -then the nonce should be encoded as `0x000000000000000000000000000000000000000000000000000000000000000a`. +- `nonce`: The nonce is written in big-endian form into a `byte32`. For instance if the nonce is 10, then the nonce should be encoded as `0x000000000000000000000000000000000000000000000000000000000000000a`. - `balance`: Formatted the same as the nonce; big-endian `byte32`. -- `storageRoot`: The storage root should _not_ be the Keccak of the Patricia trie root as in the -EVM, but the “custom Merkle tree” root of the account storage state that we describe in the -[following section](#account-storage-state). -- `codeHash`: The code hash should not be the Keccak of the code, it should instead be the one -obtained as described in the following section. -- 2 field elements for `keccakCodeHash`: One for the 128 most significant bits and one for the 128 -least significant bits. The Keccak code hash corresponds exactly to the Keccak hash as specified by -the EVM (i.e. the output of [EXTCODEHASH](https://eips.ethereum.org/EIPS/eip-1052). We keep the -Keccak and the “custom” version for practical reasons. -- `codeSize`: The code size should be the same value as that returned by the CODESIZE/EXTCODESIZE -opcodes. +- `storageRoot`: The storage root should _not_ be the Keccak of the Patricia trie root as in the EVM, but the “custom Merkle tree” root of the account storage state that we describe in the [following section](#account-storage-state). +- `codeHash`: The code hash should not be the Keccak of the code, it should instead be the one obtained as described in the following section. +- 2 field elements for `keccakCodeHash`: One for the 128 most significant bits and one for the 128 least significant bits. The Keccak code hash corresponds exactly to the Keccak hash as specified by the EVM (i.e. the output of [EXTCODEHASH](https://eips.ethereum.org/EIPS/eip-1052). We keep the Keccak and the “custom” version for practical reasons. +- `codeSize`: The code size should be the same value as that returned by the CODESIZE/EXTCODESIZE opcodes. ### Account storage state -Also referred to as the storage trie, the account storage state is the database the state manager -accesses to retrieve data about the contents of accounts. Account storage is mainly relevant for -contract accounts; for EOAs, the data about assets and transactions is stored in the [world state](#world-state) -`Val`, and the `codeHash` and its variants are empty. +Also referred to as the storage trie, the account storage state is the database the state manager accesses to retrieve data about the contents of accounts. Account storage is mainly relevant for contract accounts; for EOAs, the data about assets and transactions is stored in the [world state](#world-state) `Val`, and the `codeHash` and its variants are empty. -Since the main function of account storage is to record contracts in such a way that they can be -easily retrieved and processed, it must efficiently encode the contract. It does this using the -following format: +Since the main function of account storage is to record contracts in such a way that they can be easily retrieved and processed, it must efficiently encode the contract. It does this using the following format: - `HKey`: Hash(`StorageKeyMSB`, `StorageKeyLSB`) - `Val`: Hash(`StorageValueMSB`, `StorageValueLSB`) -In both cases, the `MSB` refers to the first 16 bytes of a 'word', and `LSB` the last 16. 'Word' in -this context refers to the natural unit of data used by the EVM, which is 256-bit (32 byte) chunks. +In both cases, the `MSB` refers to the first 16 bytes of a 'word', and `LSB` the last 16. 'Word' in this context refers to the natural unit of data used by the EVM, which is 256-bit (32 byte) chunks. + +For example, if the data regarding a contract's code was encoded in a `byte32`, the standard data type for words on the EVM and equivalents like Linea, it might look like this: -For example, if the data regarding a contract's code was encoded in a `byte32`, the standard data -type for words on the EVM and equivalents like Linea, it might look like this: ``` [a0, a1, a2, …., a15, b0, b1, …, b15] ``` That `byte32` would be split into an `MSB` and `LSB` like this: + - `MSB`: `[0, 0, .., 0, a0, a1, a2, a3, .., a15]` - `LSB`: `[0, 0, .., 0, b0, b1, b2, b3, .., b15]` -The `MSB` takes the first 16 bytes, and the `LSB` the second 16 bytes. +The `MSB` takes the first 16 bytes, and the `LSB` the second 16 bytes. ## Generating state-root-transition witnesses -The accumulator, built using a sparse Merkle tree, is simultaneously: +The accumulator, built using a sparse Merkle tree, is simultaneously: - A data structure on which we can perform operations; - A dataset that we can summarize using a short string at any time (i.e. the root hash); -- A tool that can be used by the Linea protocol to verify that a given operation triggered a -transition from hash A to hash B. - -Once the accumulator has processed the trace information it receives about a new block and updated -state accordingly, it can pass a new state root hash to the prover, via the coordinator. The state -root hash can then be used by the prover as a "witness": a verifiable method of proving that the -transactions in each block have taken place, without having to divulge the nature of those -transactions. +- A tool that can be used by the Linea protocol to verify that a given operation triggered a transition from hash A to hash B. + +Once the accumulator has processed the trace information it receives about a new block and updated state accordingly, it can pass a new state root hash to the prover, via the coordinator. The state root hash can then be used by the prover as a "witness": a verifiable method of proving that the transactions in each block have taken place, without having to divulge the nature of those transactions. diff --git a/docs/architecture/stack/index.mdx b/docs/architecture/stack/index.mdx index 97107b1fb..cec5d6419 100644 --- a/docs/architecture/stack/index.mdx +++ b/docs/architecture/stack/index.mdx @@ -5,24 +5,21 @@ image: /img/socialCards/linea-software.jpg import DocCardList from "@theme/DocCardList"; -Linea is open source, meaning you can inspect the code yourself. +Linea is open source, meaning you can inspect the code yourself. -Each repository that hosts the Linea software is listed below, together with a description of its purpose, with [further resources](#architecture-documentation) provided. +Each repository that hosts the Linea software is listed below, together with a description of its purpose, with [further resources](#architecture-documentation) provided. ## Linea repositories ### [`linea-monorepo`](https://github.com/Consensys/linea-monorepo) -The principal Linea repository. This mainly includes the smart contracts covering Linea's core -functions, the prover in charge of generating ZK proofs, the coordinator responsible for multiple -orchestrations, and the postman for executing bridge messages. +The principal Linea repository. This mainly includes the smart contracts covering Linea's core functions, the prover in charge of generating ZK proofs, the coordinator responsible for multiple orchestrations, and the postman for executing bridge messages. ### [`linea-specification`](https://github.com/Consensys/linea-specification) Specification of the constraint system underlying Linea's zkEVM. -Constraints are mathematical equations and a constraint system is a collection of such equations. -Linea's constraint system aims to capture the logic of valid EVM executions. +Constraints are mathematical equations and a constraint system is a collection of such equations. Linea's constraint system aims to capture the logic of valid EVM executions. The constraints specified here are implemented in the `linea-constraints` repo. @@ -30,17 +27,13 @@ The constraints specified here are implemented in the `linea-constraints` repo. Implementation of the constraint system specified in the `linea-specification` repo. -Linea's constraint system applies to so-called "traces", which are large matrices of fixed width -(i.e. fixed number of columns or "registries") and variable depth (correlating with the complexity -of the EVM execution). The production of such traces is the job of the `linea-tracer` repo. +Linea's constraint system applies to so-called "traces", which are large matrices of fixed width (i.e. fixed number of columns or "registries") and variable depth (correlating with the complexity of the EVM execution). The production of such traces is the job of the `linea-tracer` repo. Constraints and traces are two of the inputs to the prover. ### [`linea-tracer`](https://github.com/Consensys/linea-tracer) -Tracing refers to the process of extracting data from the execution of an EVM client in order to -construct large matrices known as execution traces. Execution traces are subject to the constraint -system specified in the `linea-specification` repo and implemented in the `linea-constraints` repo. +Tracing refers to the process of extracting data from the execution of an EVM client in order to construct large matrices known as execution traces. Execution traces are subject to the constraint system specified in the `linea-specification` repo and implemented in the `linea-constraints` repo. The repository contains the elements of Linea responsible for this process. @@ -48,13 +41,11 @@ The repository contains the elements of Linea responsible for this process. The Linea implementation of Besu, an Ethereum client, extended with plugins. -As Linea is EVM-equivalent, it is compatible with standard Ethereum clients without plugins; for -example, you can also [run a Linea node using Geth](../../developers/guides/run-a-node/index.mdx). +As Linea is EVM-equivalent, it is compatible with standard Ethereum clients without plugins; for example, you can also [run a Linea node using Geth](../../developers/guides/run-a-node/index.mdx). ### [`linea-sequencer`](https://github.com/Consensys/linea-sequencer) -The implementation of the sequencer, the component of Linea responsible for ordering and building -blocks, as well as executing them. +The implementation of the sequencer, the component of Linea responsible for ordering and building blocks, as well as executing them. ### [`gnark`](https://github.com/Consensys/gnark) @@ -62,7 +53,7 @@ Linea's zk-SNARK with a high-level API to design circuits and efficient cryptogr ### [`shomei`](https://github.com/Consensys/shomei) -A plugin that extends Besu functionality by maintaining and updating Linea's state. +A plugin that extends Besu functionality by maintaining and updating Linea's state. ## Architecture documentation diff --git a/docs/architecture/stack/sequencer/conflation.mdx b/docs/architecture/stack/sequencer/conflation.mdx index 8093141fa..fb8f1779c 100644 --- a/docs/architecture/stack/sequencer/conflation.mdx +++ b/docs/architecture/stack/sequencer/conflation.mdx @@ -4,12 +4,12 @@ sidebar_position: 2 image: /img/socialCards/conflation.jpg --- -import ConflationGraphic from '/img/architecture/stack/sequencer/conflation/Linea_block_conflation.svg'; +import ConflationGraphic from "/img/architecture/stack/sequencer/conflation/Linea_block_conflation.svg"; ## Conflation
- +
### What is it? diff --git a/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx b/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx index b43d20ebd..1a3dbd163 100644 --- a/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx +++ b/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx @@ -5,36 +5,23 @@ sidebar_position: 3 image: /img/socialCards/module-limits.jpg --- -Linea uses module limits to keep proof complexity manageable and ensure that the prover can -generate proofs efficiently without overwhelming the infrastructure. +Linea uses module limits to keep proof complexity manageable and ensure that the prover can generate proofs efficiently without overwhelming the infrastructure. + +Linea's arithmetization specification is divided into modules, and each module represents a collection of EVM or Linea zkEVM operations (opcodes). Modules can: -Linea's arithmetization specification is divided into modules, and each module represents a collection -of EVM or Linea zkEVM operations (opcodes). Modules can: - Process transaction data. - Manage zkEVM memory. - Coordinate interactions between modules. -Each module has a specific limit on the number of lines of data its operations can generate, -regardless of its purpose. You can view these limits in the -[Linea source code](https://github.com/Consensys/linea-monorepo/blob/main/config/common/traces-limits-besu-v2.toml). -Additional lines are generated each time unique instructions are provided to a module's operations, -but repeat calls with the same arguments do not generate new lines. +Each module has a specific limit on the number of lines of data its operations can generate, regardless of its purpose. You can view these limits in the [Linea source code](https://github.com/Consensys/linea-monorepo/blob/main/config/common/traces-limits-besu-v2.toml). Additional lines are generated each time unique instructions are provided to a module's operations, but repeat calls with the same arguments do not generate new lines. -High-complexity transactions that repeatedly use a large volume of operations may generate too many -lines of data and exceed a module's limit. Transactions that reach this point are rejected by the -[sequencer](../sequencer/index.mdx) to ensure that the trace data passed to the prover is of a -manageable scope, and that a proof can be generated. +High-complexity transactions that repeatedly use a large volume of operations may generate too many lines of data and exceed a module's limit. Transactions that reach this point are rejected by the [sequencer](../sequencer/index.mdx) to ensure that the trace data passed to the prover is of a manageable scope, and that a proof can be generated. -Transactions rejected for exceeding module limits can be identified through the following -methods, which return an error: +Transactions rejected for exceeding module limits can be identified through the following methods, which return an error: - [`linea_estimateGas`](../../../developers/reference/api/linea-estimategas.mdx) - [`eth_sendRawTransaction`](../../../developers/reference/api/eth-sendrawtransaction.mdx) -Use [`linea_getTransactionExclusionStatusV1`](../../../developers/reference/api/linea-gettransactionexclusionstatusv1.mdx) -to get the rejection status of a transaction hash, if it was sent and didn't get rejected directly, -nor included in a block. +Use [`linea_getTransactionExclusionStatusV1`](../../../developers/reference/api/linea-gettransactionexclusionstatusv1.mdx) to get the rejection status of a transaction hash, if it was sent and didn't get rejected directly, nor included in a block. -This API method can be used to query the reason for transaction rejection in edge cases where -`linea_estimateGas` or `eth_sendRawTransaction` did not return an error. It's intended to be used -only in cases the transaction execution differs between an RPC node and the sequencer. +This API method can be used to query the reason for transaction rejection in edge cases where `linea_estimateGas` or `eth_sendRawTransaction` did not return an error. It's intended to be used only in cases the transaction execution differs between an RPC node and the sequencer. diff --git a/docs/architecture/stack/trace-expansion-proving/proving.md b/docs/architecture/stack/trace-expansion-proving/proving.md index ec58419a7..b2c1627f8 100644 --- a/docs/architecture/stack/trace-expansion-proving/proving.md +++ b/docs/architecture/stack/trace-expansion-proving/proving.md @@ -1,5 +1,5 @@ --- -title: 'Proving: Circuit execution and runtime' +title: "Proving: Circuit execution and runtime" sidebar_position: 2 image: /img/socialCards/proving-circuit-execution-and-runtime.jpg --- diff --git a/docs/architecture/stack/trace-expansion-proving/trace-expansion.md b/docs/architecture/stack/trace-expansion-proving/trace-expansion.md index 4741c4df6..bce00e774 100644 --- a/docs/architecture/stack/trace-expansion-proving/trace-expansion.md +++ b/docs/architecture/stack/trace-expansion-proving/trace-expansion.md @@ -1,5 +1,5 @@ --- -title: 'Proving: Circuit building' +title: "Proving: Circuit building" sidebar_position: 1 image: /img/socialCards/proving-circuit-building.jpg --- diff --git a/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx b/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx index a808b02ca..493a4e4f9 100644 --- a/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx +++ b/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx @@ -7,29 +7,17 @@ image: /img/socialCards/bridge-erc-20-tokens-between-ethereum-and-linea.jpg :::note -We recommend that only tech operators that are providing liquidity use Linea's native bridge to -transfer ERC-20 tokens. +We recommend that only tech operators that are providing liquidity use Linea's native bridge to transfer ERC-20 tokens. -For everyday bridge transfers, we recommend you use the -[MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which aggregates bridging options -across Linea and shows you the best rates. Alternatively, use one of the -[third-party bridges](https://bridge.linea.build/) available to users. +For everyday bridge transfers, we recommend you use the [MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which aggregates bridging options across Linea and shows you the best rates. Alternatively, use one of the [third-party bridges](https://bridge.linea.build/) available to users. ::: -ERC-20 tokens can only be bridged using manual claiming, which -requires you to cover the ETH fee on the destination layer. Ensure your wallet is properly funded -before beginning this process. +ERC-20 tokens can only be bridged using manual claiming, which requires you to cover the ETH fee on the destination layer. Ensure your wallet is properly funded before beginning this process. -:::note -If you're bridging a token to Linea that hasn't been deployed before and you see a difference in the -transferred token amount, this could be a -["token bridge decimal mismatch"](#token-bridge-decimal-mismatch), which affects how -the value is displayed. The chance of encountering this is quite low, but still good to know about. -::: +:::note If you're bridging a token to Linea that hasn't been deployed before and you see a difference in the transferred token amount, this could be a ["token bridge decimal mismatch"](#token-bridge-decimal-mismatch), which affects how the value is displayed. The chance of encountering this is quite low, but still good to know about. ::: -The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our bridge -and appropriately fund your wallet. +The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our bridge and appropriately fund your wallet. 1. Go to the [Linea bridge](https://bridge.linea.build/). @@ -55,9 +43,7 @@ and appropriately fund your wallet. -4. Select one of the available tokens in the list. If the token is not in the list, use the search -bar to find it by contract address, symbol, or its full name. Click on your preferred token to -select it. +4. Select one of the available tokens in the list. If the token is not in the list, use the search bar to find it by contract address, symbol, or its full name. Click on your preferred token to select it.
@@ -81,16 +67,8 @@ select it. ## Token bridge decimal mismatch -When an ERC-20 token is bridged from one chain to the other and the token has not been deployed on -the destination chain, the Token Bridge Smart Contract will attempt to determine the “decimals” of -the ERC-20 token. If the decimals cannot be determined by reading the origin ERC-20 token contract -(e.g. a token contract doesn't adhere to the [ERC-20 standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), -it will default to 18 decimals. +When an ERC-20 token is bridged from one chain to the other and the token has not been deployed on the destination chain, the Token Bridge Smart Contract will attempt to determine the “decimals” of the ERC-20 token. If the decimals cannot be determined by reading the origin ERC-20 token contract (e.g. a token contract doesn't adhere to the [ERC-20 standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), it will default to 18 decimals. -This can result in the token quantities displaying incorrectly on the destination chain. For example, -if a token has 16 decimals on L1 but doesn't specify the decimals in token contract, it will -default to 18 decimals on Linea. Bridging 1 token from L1 will show up as 0.01 on L2. When you -bridge back the 0.01 to L1, it'll become 1 token again. +This can result in the token quantities displaying incorrectly on the destination chain. For example, if a token has 16 decimals on L1 but doesn't specify the decimals in token contract, it will default to 18 decimals on Linea. Bridging 1 token from L1 will show up as 0.01 on L2. When you bridge back the 0.01 to L1, it'll become 1 token again. -Decimal mismatches are rare, since most tokens with specified decimals usually adhere to the ERC-20 -standards. +Decimal mismatches are rare, since most tokens with specified decimals usually adhere to the ERC-20 standards. diff --git a/docs/developers/guides/bridge/how-to-bridge-eth.mdx b/docs/developers/guides/bridge/how-to-bridge-eth.mdx index 386cec58f..96ca81d22 100644 --- a/docs/developers/guides/bridge/how-to-bridge-eth.mdx +++ b/docs/developers/guides/bridge/how-to-bridge-eth.mdx @@ -7,40 +7,29 @@ image: /img/socialCards/bridge-eth-between-ethereum-and-linea.jpg :::note -We recommend that only tech operators that are providing liquidity use Linea's native bridge to -transfer ETH. +We recommend that only tech operators that are providing liquidity use Linea's native bridge to transfer ETH. -For everyday bridge transfers, we recommend you use the -[MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which aggregates bridging options -across Linea and shows you the best rates. Alternatively, use one of the -[third-party bridges](https://bridge.linea.build/) available to users. -::: +For everyday bridge transfers, we recommend you use the [MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which aggregates bridging options across Linea and shows you the best rates. Alternatively, use one of the [third-party bridges](https://bridge.linea.build/) available to users. ::: The native Linea bridge allows you to claim your bridged funds manually, or automatically: -- **Manual claiming** Requires two transactions to be approved. One on the source layer to initiate the -bridging process and the other on the target layer by the recipient to receive the funds, which we call -"claiming". This means, to receive the funds, the recipient has to pay a fee on the target layer. +- **Manual claiming** Requires two transactions to be approved. One on the source layer to initiate the bridging process and the other on the target layer by the recipient to receive the funds, which we call "claiming". This means, to receive the funds, the recipient has to pay a fee on the target layer. -- **Automatic claiming** Requires one transaction to be approved on the source layer. The recipient will -automatically receive their funds because a "postman" will handle the claiming process for them. +- **Automatic claiming** Requires one transaction to be approved on the source layer. The recipient will automatically receive their funds because a "postman" will handle the claiming process for them. ## Transfer ETH using Linea's native bridge This is a step by step guide to bridging ETH between Ethereum Mainnet (L1) to Linea (L2). -If you would like to bridge between Linea and other networks, we recommend you use one of the -third-party bridges available via [MetaMask Portfolio](https://portfolio.metamask.io/bridge). +If you would like to bridge between Linea and other networks, we recommend you use one of the third-party bridges available via [MetaMask Portfolio](https://portfolio.metamask.io/bridge). ## Bridge ETH from Ethereum (L1) to Linea (L2) :::caution -Please use the automatic claiming option the first time you bridge ETH from L1 to L2. Manual -claiming requires you to have L2 ETH available to pay for the fees. +Please use the automatic claiming option the first time you bridge ETH from L1 to L2. Manual claiming requires you to have L2 ETH available to pay for the fees. -If you don't have enough L2 ETH to cover the fees, your bridged funds will be stuck on the bridge -until you can cover the fees. +If you don't have enough L2 ETH to cover the fees, your bridged funds will be stuck on the bridge until you can cover the fees. ::: @@ -92,8 +81,7 @@ until you can cover the fees.
-6. After confirming the transaction, it should take around 20 minutes for the transaction to reach -Linea Mainnet. You can see your pending transaction under the "Transactions" tab. +6. After confirming the transaction, it should take around 20 minutes for the transaction to reach Linea Mainnet. You can see your pending transaction under the "Transactions" tab.
@@ -104,8 +92,7 @@ Linea Mainnet. You can see your pending transaction under the "Transactions" tab
-7. When your transaction is complete, it should say "Complete" and your ETH should be on -Linea Mainnet. +7. When your transaction is complete, it should say "Complete" and your ETH should be on Linea Mainnet.
@@ -116,10 +103,7 @@ Linea Mainnet.
-8. You can see your Linea account balance in MetaMask once you switch to the Linea network. You can -also check it on [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). -Just replace the account address in the URL with your account address and it should reflect your -account's balance. +8. You can see your Linea account balance in MetaMask once you switch to the Linea network. You can also check it on [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). Just replace the account address in the URL with your account address and it should reflect your account's balance. ### Manual claiming @@ -147,8 +131,7 @@ account's balance. -4. Enter the amount of ETH you want to bridge over to Linea Mainnet, and click the "Bridge" -button. +4. Enter the amount of ETH you want to bridge over to Linea Mainnet, and click the "Bridge" button.
@@ -170,8 +153,7 @@ button.
-6. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll see your transaction -labelled "Pending" until it is ready to claim. When it is ready, it will change to "Ready to claim". +6. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll see your transaction labelled "Pending" until it is ready to claim. When it is ready, it will change to "Ready to claim".
@@ -182,7 +164,7 @@ labelled "Pending" until it is ready to claim. When it is ready, it will change
-To claim, click on the transaction to open its details, then click "Claim". +To claim, click on the transaction to open its details, then click "Claim".
@@ -204,8 +186,7 @@ To claim, click on the transaction to open its details, then click "Claim".
-8. Under the "Transactions" tab, your transaction should now be marked as "Complete" and your ETH -should be on Linea Mainnet. +8. Under the "Transactions" tab, your transaction should now be marked as "Complete" and your ETH should be on Linea Mainnet.
@@ -216,17 +197,13 @@ should be on Linea Mainnet.
-9. You can see your Linea account balance in MetaMask once you switch to the Linea network. You can -also check it on [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). -Just replace the account address in the URL with your account address and it should reflect your -account's balance. +9. You can see your Linea account balance in MetaMask once you switch to the Linea network. You can also check it on [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). Just replace the account address in the URL with your account address and it should reflect your account's balance. ## Bridge ETH from Linea Mainnet (L2) to Ethereum Mainnet (L1) :::note -Automatic claiming is only available for bridging ETH from L1 to L2. You will not be able to select -this option for L2 to L1 bridging. +Automatic claiming is only available for bridging ETH from L1 to L2. You will not be able to select this option for L2 to L1 bridging. ::: @@ -243,8 +220,7 @@ this option for L2 to L1 bridging. -3. Verify that the bridge is set to Linea Mainnet -> Ethereum. Manual claiming is the only available -option for L2 to L1 bridging. +3. Verify that the bridge is set to Linea Mainnet -> Ethereum. Manual claiming is the only available option for L2 to L1 bridging.
@@ -255,8 +231,7 @@ option for L2 to L1 bridging.
-4. Enter the amount of ETH you want to bridge over to Ethereum Mainnet, and select the "Bridge" -button. +4. Enter the amount of ETH you want to bridge over to Ethereum Mainnet, and select the "Bridge" button.
@@ -278,8 +253,7 @@ button.
-6. The pending transaction will show up in the “Recent transactions” section of the bridge. It takes -at least 8 hours for the transaction to go through from L2 to L1. +6. The pending transaction will show up in the “Recent transactions” section of the bridge. It takes at least 8 hours for the transaction to go through from L2 to L1.
@@ -290,9 +264,7 @@ at least 8 hours for the transaction to go through from L2 to L1.
-7. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll see your transaction -labelled "Pending" until it is ready to claim. When it is ready, it will change to "Ready to claim". -To claim, click on the transaction to open its details, then click "Claim". +7. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll see your transaction labelled "Pending" until it is ready to claim. When it is ready, it will change to "Ready to claim". To claim, click on the transaction to open its details, then click "Claim".
diff --git a/docs/developers/guides/bridge/index.mdx b/docs/developers/guides/bridge/index.mdx index a67e751fc..8949bbf4e 100644 --- a/docs/developers/guides/bridge/index.mdx +++ b/docs/developers/guides/bridge/index.mdx @@ -4,21 +4,13 @@ sidebar_position: 3 image: /img/socialCards/bridge-your-tokens.jpg --- -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; -There are multiple options to bridge tokens (ETH or ERC-20) when you need to provide liquidity. -Linea's default canonical token bridge allows you to bridge ETH or ERC-20 tokens using a UI. +There are multiple options to bridge tokens (ETH or ERC-20) when you need to provide liquidity. Linea's default canonical token bridge allows you to bridge ETH or ERC-20 tokens using a UI. -The default canonical token bridge is suited for protocols that need their tokens on L2 for -DeFi and other uses without any special requirement for custom features (Vanilla ERC20). For protocols -that require custom features or want to implement complex cross-chain logic, consider a custom -implementation or building a dedicated token bridge. +The default canonical token bridge is suited for protocols that need their tokens on L2 for DeFi and other uses without any special requirement for custom features (Vanilla ERC20). For protocols that require custom features or want to implement complex cross-chain logic, consider a custom implementation or building a dedicated token bridge. -:::note -We recommend that tech operators that want to provide liquidity use the -[**Native Bridge for Tech Operators**](https://bridge.linea.build/) which provides the interface to -the [canonical token bridge](../../../architecture/stack/bridges/index.mdx). -::: +:::note We recommend that tech operators that want to provide liquidity use the [**Native Bridge for Tech Operators**](https://bridge.linea.build/) which provides the interface to the [canonical token bridge](../../../architecture/stack/bridges/index.mdx). ::: Select one of the following cards for instructions to bridge using the default canonical token bridge. @@ -28,13 +20,9 @@ Select one of the following cards for instructions to bridge using the default c ### Use the canonical token bridge with a custom `BridgedToken` implementation -This is suited for protocols that want to implement special features for the bridged ERC20 on L2. -**This is only possible if the token has not yet been bridged from L1 to L2 in order to avoid -unexpected changes for end-users.** +This is suited for protocols that want to implement special features for the bridged ERC20 on L2. **This is only possible if the token has not yet been bridged from L1 to L2 in order to avoid unexpected changes for end-users.** -Protocols that want to use a custom BridgedToken will be able to incorporate arbitrary logic on the L2 -ERC20, while still relying on the Token Bridge lock and mint logic and cross-chain communication. -**For this to work, protocols need to keep compatibility with the Token Bridge by enabling it to call the ERC20 mint and burn functions.** +Protocols that want to use a custom BridgedToken will be able to incorporate arbitrary logic on the L2 ERC20, while still relying on the Token Bridge lock and mint logic and cross-chain communication. **For this to work, protocols need to keep compatibility with the Token Bridge by enabling it to call the ERC20 mint and burn functions.** If you are interested in this option, please contact the Linea team to get started. The process is as follows: diff --git a/docs/developers/guides/community/index.mdx b/docs/developers/guides/community/index.mdx index fb6323c81..a21217edc 100644 --- a/docs/developers/guides/community/index.mdx +++ b/docs/developers/guides/community/index.mdx @@ -8,7 +8,6 @@ import DocCardList from "@theme/DocCardList"; Building on Linea is more than just deploying a smart contract! -Here you can find a list of tutorials and educational resources created by our community to help -guide you through Solidity, web3 fundamentals, and full blown dapp tutorials. +Here you can find a list of tutorials and educational resources created by our community to help guide you through Solidity, web3 fundamentals, and full blown dapp tutorials. diff --git a/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx b/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx index c4475470b..3ea9dd65b 100644 --- a/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx +++ b/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx @@ -4,13 +4,9 @@ image: /img/socialCards/create-a-dynamic-nft.jpg description: Create NFTs that evolve based on user actions. --- -Data on Irys is permanent and immutable, but you can use -[Irys's mutability features](https://docs.irys.xyz/build/d/features/mutability) to simulate -mutability and create dynamic NFTs that evolve based on onchain or offchain actions. +Data on Irys is permanent and immutable, but you can use [Irys's mutability features](https://docs.irys.xyz/build/d/features/mutability) to simulate mutability and create dynamic NFTs that evolve based on onchain or offchain actions. -A mutable-style URL is a single, static URL that is linked to a series of transactions. -You can add a new transaction to the series at any time, and the URL will always resolve to the -most recent transaction. +A mutable-style URL is a single, static URL that is linked to a series of transactions. You can add a new transaction to the series at any time, and the URL will always resolve to the most recent transaction.
@@ -21,8 +17,7 @@ most recent transaction.
-In this guide, you will create a dynamic NFT using Irys's mutability features. Dynamic NFTs are NFTs whose -metadata evolves over time. They are commonly used in: +In this guide, you will create a dynamic NFT using Irys's mutability features. Dynamic NFTs are NFTs whose metadata evolves over time. They are commonly used in: - Gaming projects where in-game assets evolve as players progress. - Loyalty programs where NFTs evolve as users accumulate points. @@ -36,38 +31,37 @@ metadata evolves over time. They are commonly used in:
-This tutorial focuses on creating a SuperMon NFT that can evolve during gameplay. The NFT starts with -a basic appearance that can be upgraded twice. We will use the -[Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to "mutate" the -metadata, simulating the automatic changes that would occur through player interactions in an actual game. +This tutorial focuses on creating a SuperMon NFT that can evolve during gameplay. The NFT starts with a basic appearance that can be upgraded twice. We will use the [Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to "mutate" the metadata, simulating the automatic changes that would occur through player interactions in an actual game. ## Prerequisites -[Install the Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to upload -your images and metadata. +[Install the Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to upload your images and metadata. ## How to create a "mutable" URL 1. Create a single static URL that is tied to a chain of transactions: - ```js - const irysUploader = await getIrysUploader(); - const receiptOne = await irysUploader.upload("First TX"); - console.log(`TX 1 uploaded https://gateway.irys.xyz/mutable/${receiptOne.id}`); - ``` + ```js + const irysUploader = await getIrysUploader(); + const receiptOne = await irysUploader.upload("First TX"); + console.log( + `TX 1 uploaded https://gateway.irys.xyz/mutable/${receiptOne.id}`, + ); + ``` 1. Update the "chain" by posting a second transaction (from the same wallet) tagged with the original transaction's ID: - ```js - const tags = [{ name: "Root-TX", value: receiptOne.id }]; - const receiptTwo = await irysUploader.upload("Second TX", { tags }); - console.log(`TX 2 uploaded https://gateway.irys.xyz/mutable/${receiptOne.id}`); - ``` + ```js + const tags = [{ name: "Root-TX", value: receiptOne.id }]; + const receiptTwo = await irysUploader.upload("Second TX", { tags }); + console.log( + `TX 2 uploaded https://gateway.irys.xyz/mutable/${receiptOne.id}`, + ); + ``` ## Deploy your smart contract -Deploy your NFT smart contract. The following is a simple example that you can use to mint -the NFT that we'll create. +Deploy your NFT smart contract. The following is a simple example that you can use to mint the NFT that we'll create. ```solidity filename="SuperMon.sol" // SPDX-License-Identifier: MIT @@ -98,8 +92,7 @@ contract SuperMon is ERC721URIStorage { ``` -[Deploy the smart contract using Remix](../../../quickstart/deploy-smart-contract/remix.mdx), or -[any other environment](https://docs.linea.build/developers/quickstart/deploy-smart-contract). +[Deploy the smart contract using Remix](../../../quickstart/deploy-smart-contract/remix.mdx), or [any other environment](https://docs.linea.build/developers/quickstart/deploy-smart-contract). ## Upload the images @@ -114,112 +107,102 @@ contract SuperMon is ERC721URIStorage { -1. Fund the Irys Devnet with 0.1 [Linea Sepolia ETH](https://www.infura.io/faucet/linea) to pay - for your uploads. +1. Fund the Irys Devnet with 0.1 [Linea Sepolia ETH](https://www.infura.io/faucet/linea) to pay for your uploads. - :::info - In all of these CLI examples, ensure you replace the value of the `-w` parameter with your own private key. - ::: + :::info In all of these CLI examples, ensure you replace the value of the `-w` parameter with your own private key. ::: - ```bash - irys fund 100000000000000000 \ - -n devnet \ - -t linea-eth \ - -w 6dd5e....54a120201cb6a \ - --provider-url https://rpc.sepolia.linea.build - ``` + ```bash + irys fund 100000000000000000 \ + -n devnet \ + -t linea-eth \ + -w 6dd5e....54a120201cb6a \ + --provider-url https://rpc.sepolia.linea.build + ``` - :::note - The `fund` command accepts a value in atomic units, 0.1 ETH is equal to 100000000000000000 in atomic units. - ::: + :::note The `fund` command accepts a value in atomic units, 0.1 ETH is equal to 100000000000000000 in atomic units. ::: 1. Use the Irys CLI to upload each of the images to the Irys Devnet. - ```bash - irys upload image-level-1.png \ - -n devnet \ - -t linea-eth \ - -w 6dd5e....54a120201cb6a \ - --provider-url https://rpc.sepolia.linea.build - - irys upload image-level-2.png \ - -n devnet \ - -t linea-eth \ - -w 6dd5e....54a120201cb6a \ - --provider-url https://rpc.sepolia.linea.build - - irys upload image-level-3.png \ - -n devnet \ - -t linea-eth \ - -w 6dd5e....54a120201cb6a \ - --provider-url https://rpc.sepolia.linea.build - ``` + ```bash + irys upload image-level-1.png \ + -n devnet \ + -t linea-eth \ + -w 6dd5e....54a120201cb6a \ + --provider-url https://rpc.sepolia.linea.build + + irys upload image-level-2.png \ + -n devnet \ + -t linea-eth \ + -w 6dd5e....54a120201cb6a \ + --provider-url https://rpc.sepolia.linea.build + + irys upload image-level-3.png \ + -n devnet \ + -t linea-eth \ + -w 6dd5e....54a120201cb6a \ + --provider-url https://rpc.sepolia.linea.build + ``` ## Upload the metadata -1. Create three metadata files similar to the ones below. Make sure to change the value of the image field - to match the URLs generated in the previous step. - - ```json filename="metadata-level-1.json" - { - "name": "SuperMon", - "symbol": "SMON", - "image": "https://gateway.irys.xyz/A7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x", - "description": "Super dooper, changing shapes, changing power", - "attributes": [ - { - "trait_type": "supermon-level", - "value": "1" - } - ] - } - ``` - - ```json filename="metadata-level-2.json" - { - "name": "SuperMon", - "symbol": "SMON", - "image": "https://gateway.irys.xyz/A7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x", - "description": "Super dooper, changing shapes, changing power", - "attributes": [ - { - "trait_type": "supermon-level", - "value": "2" - } - ] - - } - ``` - - ```json filename="metadata-level-3.json" - { - "name": "SuperMon", - "symbol": "SMON", - "image": "https://gateway.irys.xyz/A7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x", - "description": "Super dooper, changing shapes, changing power", - "attributes": [ - { - "trait_type": "supermon-level", - "value": "3" - } - ] - - } - ``` +1. Create three metadata files similar to the ones below. Make sure to change the value of the image field to match the URLs generated in the previous step. + + ```json filename="metadata-level-1.json" + { + "name": "SuperMon", + "symbol": "SMON", + "image": "https://gateway.irys.xyz/A7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x", + "description": "Super dooper, changing shapes, changing power", + "attributes": [ + { + "trait_type": "supermon-level", + "value": "1" + } + ] + } + ``` + + ```json filename="metadata-level-2.json" + { + "name": "SuperMon", + "symbol": "SMON", + "image": "https://gateway.irys.xyz/A7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x", + "description": "Super dooper, changing shapes, changing power", + "attributes": [ + { + "trait_type": "supermon-level", + "value": "2" + } + ] + } + ``` + + ```json filename="metadata-level-3.json" + { + "name": "SuperMon", + "symbol": "SMON", + "image": "https://gateway.irys.xyz/A7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x", + "description": "Super dooper, changing shapes, changing power", + "attributes": [ + { + "trait_type": "supermon-level", + "value": "3" + } + ] + } + ``` 1. Upload **just the first file** using the Irys CLI: - ```console - irys upload metadata-level-1.json \ - -n devnet \ - -t linea-eth \ - -w 6dd5e....54a120201cb6a \ - --provider-url https://rpc.sepolia.linea.build - ``` + ```console + irys upload metadata-level-1.json \ + -n devnet \ + -t linea-eth \ + -w 6dd5e....54a120201cb6a \ + --provider-url https://rpc.sepolia.linea.build + ``` -The CLI will return a URL similar to `https://gateway.irys.xyz/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`. -To convert that to a mutable references URL, interpolate it by adding `/mutable/` after the -domain and before the transaction ID. +The CLI will return a URL similar to `https://gateway.irys.xyz/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`. To convert that to a mutable references URL, interpolate it by adding `/mutable/` after the domain and before the transaction ID. Your final URL will be similar to `https://gateway.irys.xyz/mutable/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`. @@ -228,9 +211,7 @@ Your final URL will be similar to `https://gateway.irys.xyz/mutable/2N9YPwW3KdWc To mint your NFT in [Remix](https://remix.ethereum.org/): 1. Under **Deployed Contracts**, locate your contract and expand it to see its functions. -1. Under the `Mint` function, enter the wallet address you want to mint the NFT to and the - metadata URL (e.g. `https://gateway.irys.xyz/mutable/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`) from - the previous step. +1. Under the `Mint` function, enter the wallet address you want to mint the NFT to and the metadata URL (e.g. `https://gateway.irys.xyz/mutable/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`) from the previous step. 1. Select **Transact**.
@@ -246,10 +227,7 @@ You can now view the NFT on the [Opensea Testnet](https://testnets.opensea.io/ac ## Mutate the metadata -To "mutate" the NFT, upload a new version of the metadata tagging it as having a `Root-TX` -equal to the transaction ID of your first transaction. In this example, we pass the -value of `2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`, however make sure to change this to match your -unique transaction ID. +To "mutate" the NFT, upload a new version of the metadata tagging it as having a `Root-TX` equal to the transaction ID of your first transaction. In this example, we pass the value of `2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`, however make sure to change this to match your unique transaction ID. ```bash irys upload metadata-level-2.json \ @@ -275,15 +253,10 @@ Give it a few minutes and your updated NFT should be visible. ## Free metadata uploads -This tutorial uses the Irys Devnet where uploads are kept for ~60 days and are paid for with free -faucet currencies. When deploying production projects, you'll use Irys's mainnet where uploads are permanent. +This tutorial uses the Irys Devnet where uploads are kept for ~60 days and are paid for with free faucet currencies. When deploying production projects, you'll use Irys's mainnet where uploads are permanent. -Uploads of less than 100 KiB are free on Irys, which is more than enough for most metadata files. This -means projects can let users "evolve" their NFTs without having to pay gas fees. +Uploads of less than 100 KiB are free on Irys, which is more than enough for most metadata files. This means projects can let users "evolve" their NFTs without having to pay gas fees. ## Caching -Wallets and NFT websites typically cache metadata to optimize performance, this can affect the -visibility of updates to dynamic NFTs. While OpenSea offers a feature for users to manually request -metadata refreshes, not all platforms provide this level of control. When building dynamic NFT -projects, make sure to thoroughly test and understand the implications of caching on your platform. +Wallets and NFT websites typically cache metadata to optimize performance, this can affect the visibility of updates to dynamic NFTs. While OpenSea offers a feature for users to manually request metadata refreshes, not all platforms provide this level of control. When building dynamic NFT projects, make sure to thoroughly test and understand the implications of caching on your platform. diff --git a/docs/developers/guides/community/irys/irys-nfts.mdx b/docs/developers/guides/community/irys/irys-nfts.mdx index f68a23c5f..497dbdbc2 100644 --- a/docs/developers/guides/community/irys/irys-nfts.mdx +++ b/docs/developers/guides/community/irys/irys-nfts.mdx @@ -4,25 +4,19 @@ image: /img/socialCards/create-an-nft.jpg description: Build permanent NFTs using Irys and Linea. --- -You can use [Irys](../../../tooling/permanent-data/irys/overview.mdx) to create an NFT on Linea in three steps: +You can use [Irys](../../../tooling/permanent-data/irys/overview.mdx) to create an NFT on Linea in three steps: 1. Deploy your smart contract on Linea 2. Permanently store your NFT assets on Irys 3. Mint your NFTs using metadata stored on Irys -When you upload NFTs to Irys, you make a one-time payment for and your data is guaranteed to be retrievable forever. Creators and -collectors benefit from the assurance that their NFTs are preserved indefinitely. NFT metadata and -images stored are Irys are permanent and immutable. +When you upload NFTs to Irys, you make a one-time payment for and your data is guaranteed to be retrievable forever. Creators and collectors benefit from the assurance that their NFTs are preserved indefinitely. NFT metadata and images stored are Irys are permanent and immutable. -:::note -You can also use Irys to create [dynamic NFTs](./irys-dynamic-nfts.mdx) that evolve based on onchain or -offchain actions. -::: +:::note You can also use Irys to create [dynamic NFTs](./irys-dynamic-nfts.mdx) that evolve based on onchain or offchain actions. ::: ## Deploy your smart contract -If you're new to NFTs and smart contract development, consider deploying -one of [the audited ThirdWeb contracts](../../../../developers/quickstart/deploy-smart-contract/thirdweb.mdx) to learn more. +If you're new to NFTs and smart contract development, consider deploying one of [the audited ThirdWeb contracts](../../../../developers/quickstart/deploy-smart-contract/thirdweb.mdx) to learn more. You can also [deploy this minimal contract using Remix](../../../../developers/quickstart/deploy-smart-contract/remix.mdx). @@ -72,12 +66,9 @@ contract IrysLineaNFT is ERC721, ERC721URIStorage, Ownable { ## Store your assets on Irys -Uploads to Irys are fully unconstrained; you can upload files of any size and use Irys to make -images, videos, music, or interactive NFTs. +Uploads to Irys are fully unconstrained; you can upload files of any size and use Irys to make images, videos, music, or interactive NFTs. -This guide covers using the [Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to -upload your assets to Irys. You can also do the same using the -[Irys SDK](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-sdk). +This guide covers using the [Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to upload your assets to Irys. You can also do the same using the [Irys SDK](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-sdk). ### Store your visual assets @@ -88,6 +79,7 @@ Install the CLI globally using the `-g` flag. Depending on your setup, you may o ```bash npm i -g @irys/cli ``` + Depending on your setup, you may need to use the sudo command. ```bash @@ -144,8 +136,7 @@ The CLI also produces a `.json` file containing the transaction IDs of each uplo } ``` -You can download files by using the transaction ID directly, or by creating a URL using the manifest -ID combined with the original file name. For example, `nft1.png` can be downloaded with either of these URLs: +You can download files by using the transaction ID directly, or by creating a URL using the manifest ID combined with the original file name. For example, `nft1.png` can be downloaded with either of these URLs: - `https://gateway.irys.xyz/gF7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x` - `https://gateway.irys.xyz/F7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x/nft1.png` @@ -177,5 +168,4 @@ irys upload metadata.json \ ## Mint the NFTs -Now use your metadata URLs (in the format `https://gateway.irys.xyz/:txId`) to mint the NFTs -using [the contract you deployed on Linea](../../../../developers/quickstart/deploy-smart-contract/index.mdx). +Now use your metadata URLs (in the format `https://gateway.irys.xyz/:txId`) to mint the NFTs using [the contract you deployed on Linea](../../../../developers/quickstart/deploy-smart-contract/index.mdx). diff --git a/docs/developers/guides/deploy-subdomain.mdx b/docs/developers/guides/deploy-subdomain.mdx index 6babf7708..d153eb2fe 100644 --- a/docs/developers/guides/deploy-subdomain.mdx +++ b/docs/developers/guides/deploy-subdomain.mdx @@ -4,32 +4,17 @@ description: Guide to deploy a subdomain for any L1 .eth domain on Linea image: /img/socialCards/deploy-a-linea-subdomain.jpg --- -This guide is for developers who want to manage subdomains on Linea for domains they own -on [L1 ENS](https://app.ens.domains/). - -For example, if you own the domain `example.eth` on L1, you can create and manage subdomains like -`sub.example.eth` on Linea that resolves to the L1 domain, ensuring seamless integration and resolution -across both layers. - -## Requirements - -- [L2 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-contracts): - These Linea contracts handle all operations on your subdomains, including registrations and setting records. -- [L1 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-resolver): - These contracts enable subdomains created on Linea to resolve on L1. You can reuse the - existing Linea contracts, unless you require customizations. -- User interface (UI): The UI for managing subdomains; you can adapt the [Linea ENS app](https://names.linea.build/) - in the [Linea ENS GitHub repository](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app). - If you decide to deploy this UI, you will also need to deploy the - [Linea ENS Subgraph](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-subgraph), and - include your own values into the [`env.ts`](https://github.com/Consensys/linea-ens/blob/main/packages/linea-ens-subgraph/src/env.ts) - file. - - :::tip - Follow the [quickstart guide](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app#quick-start-on-localhost) - to test it locally. Replace the environment variables `BASE_DOMAIN`, `BASE_NODE`, `BASE_LABEL`, and - `BASE_LABEL_HASH` in the `.env` files (`.env.example` and `env.ts`) with the values matching your ENS domain. - ::: +This guide is for developers who want to manage subdomains on Linea for domains they own on [L1 ENS](https://app.ens.domains/). + +For example, if you own the domain `example.eth` on L1, you can create and manage subdomains like `sub.example.eth` on Linea that resolves to the L1 domain, ensuring seamless integration and resolution across both layers. + +## Requirements + +- [L2 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-contracts): These Linea contracts handle all operations on your subdomains, including registrations and setting records. +- [L1 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-resolver): These contracts enable subdomains created on Linea to resolve on L1. You can reuse the existing Linea contracts, unless you require customizations. +- User interface (UI): The UI for managing subdomains; you can adapt the [Linea ENS app](https://names.linea.build/) in the [Linea ENS GitHub repository](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app). If you decide to deploy this UI, you will also need to deploy the [Linea ENS Subgraph](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-subgraph), and include your own values into the [`env.ts`](https://github.com/Consensys/linea-ens/blob/main/packages/linea-ens-subgraph/src/env.ts) file. + + :::tip Follow the [quickstart guide](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app#quick-start-on-localhost) to test it locally. Replace the environment variables `BASE_DOMAIN`, `BASE_NODE`, `BASE_LABEL`, and `BASE_LABEL_HASH` in the `.env` files (`.env.example` and `env.ts`) with the values matching your ENS domain. ::: ## Available deployment methods @@ -37,41 +22,33 @@ Use one of the following deployment methods to deploy your subdomain. ### Use the same approach as `linea.eth` -Manage your subdomains the same way `linea.eth` subdomains are managed using the deployment [steps below](#steps). -This includes using the Proof of Humanity (PoH) check for registering subdomains. +Manage your subdomains the same way `linea.eth` subdomains are managed using the deployment [steps below](#steps). This includes using the Proof of Humanity (PoH) check for registering subdomains. -### Deploy registrar contracts only +### Deploy registrar contracts only -Deploy only your `Registrar` contracts while using the same `Registry` and `Resolver` contract -addresses deployed for the `linea.eth` subdomain. Contact [Linea Support](https://support.linea.build/) -to gain ownership of an L1 domain on Linea. This solution allows you to deploy only the registrar contracts. +Deploy only your `Registrar` contracts while using the same `Registry` and `Resolver` contract addresses deployed for the `linea.eth` subdomain. Contact [Linea Support](https://support.linea.build/) to gain ownership of an L1 domain on Linea. This solution allows you to deploy only the registrar contracts. -### Use ENS contracts +### Use ENS contracts -Modify the [original ENS contracts deployed on Ethereum Mainnet](https://github.com/ensdomains/ens-contracts). -You must modify the node managed by the Registrar contract to match your domain's node. +Modify the [original ENS contracts deployed on Ethereum Mainnet](https://github.com/ensdomains/ens-contracts). You must modify the node managed by the Registrar contract to match your domain's node. -For example, for `linea.eth`, we set the node in the [contract's constructor](https://github.com/Consensys/linea-ens/blob/49c1bd707467daa3a77d06592e2523d74825bdfb/packages/linea-ens-contracts/contracts/ethregistrar/ETHRegistrarController.sol#L162). +For example, for `linea.eth`, we set the node in the [contract's constructor](https://github.com/Consensys/linea-ens/blob/49c1bd707467daa3a77d06592e2523d74825bdfb/packages/linea-ens-contracts/contracts/ethregistrar/ETHRegistrarController.sol#L162). -:::warning +:::warning -If you modify the `PublicResolver` contract and it impacts storage, you must deploy your own -`L1Resolver` contract on L1 to match those modifications, as the `L1Resolver` uses hard-coded -storage slots (as seen [here](https://github.com/Consensys/linea-ens/blob/1b896c9f6f77c6258926957af370bb3d692f540a/packages/linea-ens-resolver/contracts/L1Resolver.sol#L36)). +If you modify the `PublicResolver` contract and it impacts storage, you must deploy your own `L1Resolver` contract on L1 to match those modifications, as the `L1Resolver` uses hard-coded storage slots (as seen [here](https://github.com/Consensys/linea-ens/blob/1b896c9f6f77c6258926957af370bb3d692f540a/packages/linea-ens-resolver/contracts/L1Resolver.sol#L36)). ::: ## Steps -The following steps show how to deploy and configure subdomain contracts on Linea in the same way that -they were used to create the `linea.eth` subdomain. +The following steps show how to deploy and configure subdomain contracts on Linea in the same way that they were used to create the `linea.eth` subdomain. ### 1. Deploy subdomain contracts Deploy the subdomain contracts on the Linea network: -1. Clone the [Linea ENS repository](https://github.com/Consensys/linea-ens) and execute the - following commands: +1. Clone the [Linea ENS repository](https://github.com/Consensys/linea-ens) and execute the following commands: ```bash cd ./packages/linea-ens-contracts @@ -79,12 +56,9 @@ Deploy the subdomain contracts on the Linea network: cp .env.org .env ``` -1. Replace the following keys in the `.env` file with your own information: +1. Replace the following keys in the `.env` file with your own information: - :::danger - Do not commit the `.env` file to your repository if it contains sensitive data. You can - create a `.gitignore` file to prevent accidentally committing the file. - ::: + :::danger Do not commit the `.env` file to your repository if it contains sensitive data. You can create a `.gitignore` file to prevent accidentally committing the file. ::: ``` DEPLOYER_PRIVATE_KEY= @@ -93,28 +67,23 @@ Deploy the subdomain contracts on the Linea network: BASE_DOMAIN= ``` - :::note - Replace `BASE_DOMAIN` environment variable with the L1 ENS domain you own. For example, for `linea.eth`, - it's `linea`. - ::: + :::note Replace `BASE_DOMAIN` environment variable with the L1 ENS domain you own. For example, for `linea.eth`, it's `linea`. ::: -1. Deploy the contract: +1. Deploy the contract: ```bash yarn hardhat deploy --network lineaMainnet ``` -1. Copy the `PublicResolver` contract address from the `./deployments/lineaMainnet/PublicResolver.json` -file: +1. Copy the `PublicResolver` contract address from the `./deployments/lineaMainnet/PublicResolver.json` file: - ``` - "address": "0x86c5AED9F27837074612288610fB98ccC1733126", - ``` + ``` + "address": "0x86c5AED9F27837074612288610fB98ccC1733126", + ``` - Copy this address — you'll need it in the next step. + Copy this address — you'll need it in the next step. -The contracts to manage your subdomains on Linea have now been deployed. The next step is to link -these subdomains to your L1 domain on L1 for [CCIP resolution](../tooling/cross-chain/ccip-read-gateway.mdx) to work. +The contracts to manage your subdomains on Linea have now been deployed. The next step is to link these subdomains to your L1 domain on L1 for [CCIP resolution](../tooling/cross-chain/ccip-read-gateway.mdx) to work. ### 2. Set the Linea target resolution @@ -122,31 +91,29 @@ Set the Linea target resolution on the L1 ENS domain: 1. Retrieve the DNS encoded name for your ENS domain by running: - ```bash - ts-node scripts/getENSHashes.ts yourdomain.eth - ``` + ```bash + ts-node scripts/getENSHashes.ts yourdomain.eth + ``` - For example, `ts-node scripts/getENSHashes.ts linea.eth` + For example, `ts-node scripts/getENSHashes.ts linea.eth` - Example output: + Example output: - ```bash - The namehash of 'linea.eth' is: 0x527aac89ac1d1de5dd84cff89ec92c69b028ce9ce3fa3d654882474ab4402ec3 - The DNS encoded name of 'linea.eth' is: 0x056c696e65610365746800 - ``` + ```bash + The namehash of 'linea.eth' is: 0x527aac89ac1d1de5dd84cff89ec92c69b028ce9ce3fa3d654882474ab4402ec3 + The DNS encoded name of 'linea.eth' is: 0x056c696e65610365746800 + ``` - Keep the DNS encoded name result, for example `0x056c696e65610365746800`. + Keep the DNS encoded name result, for example `0x056c696e65610365746800`. 1. Go to the [Linea Custom Resolver contract on Etherscan](https://etherscan.io/address/0xde16ee87B0C019499cEBDde29c9F7686560f679a#writeContract). -1. In the **Write Contract** tab, connect your wallet using the **Connect with web3** button. - Make sure to connect with the wallet containing the account that owns your L1 ENS domain. - In the `setTarget` function add the following parameters: - - `name`: The DNS encoded name you got from step 1. - - `target`: The Linea resolver target address you copied from the `PublicResolver.json` file - in the previous step. +1. In the **Write Contract** tab, connect your wallet using the **Connect with web3** button. Make sure to connect with the wallet containing the account that owns your L1 ENS domain. In the `setTarget` function add the following parameters: + + - `name`: The DNS encoded name you got from step 1. + - `target`: The Linea resolver target address you copied from the `PublicResolver.json` file in the previous step. - Then select **Write** and approve the transaction. + Then select **Write** and approve the transaction. 1. Go to the [ENS app](https://app.ens.domains/). @@ -158,6 +125,4 @@ Set the Linea target resolution on the L1 ENS domain: 1. Select **Update** and approve the transaction. -The setup to manage subdomains on Linea for your ENS domain is now complete and configured -similarly to `linea.eth`. This means anyone with an active PoH on Linea can now register a -`subdomain.yourdomain.eth` that will be resolved on the L1 ENS. +The setup to manage subdomains on Linea for your ENS domain is now complete and configured similarly to `linea.eth`. This means anyone with an active PoH on Linea can now register a `subdomain.yourdomain.eth` that will be resolved on the L1 ENS. diff --git a/docs/developers/guides/finalized-block.mdx b/docs/developers/guides/finalized-block.mdx index 68880f657..8bf9e5623 100644 --- a/docs/developers/guides/finalized-block.mdx +++ b/docs/developers/guides/finalized-block.mdx @@ -3,8 +3,7 @@ title: Retrieve finalized L2 blocks image: /img/socialCards/retrieve-finalized-l2-blocks.jpg --- -A finalized L2 block is a block on an L2 blockchain (Linea) that has been confirmed and validated -by the L1 blockchain (Ethereum), ensuring its immutability and security. +A finalized L2 block is a block on an L2 blockchain (Linea) that has been confirmed and validated by the L1 blockchain (Ethereum), ensuring its immutability and security. There are two methods to obtain the current finalized block: @@ -13,9 +12,7 @@ There are two methods to obtain the current finalized block: ## Use the `finalized` tag -Use the `finalized` tag in API calls to specify a block that has been confirmed by the L1 -network. For example, here the `eth_getBlockByNumber` method returns information about the current -finalized block: +Use the `finalized` tag in API calls to specify a block that has been confirmed by the L1 network. For example, here the `eth_getBlockByNumber` method returns information about the current finalized block: ```bash curl https://rpc.linea.build \ @@ -26,15 +23,11 @@ curl https://rpc.linea.build \ ### Supported methods -The `finalized` tag is supported by all applicable JSON-RPC API methods on Linea Mainnet and Linea -Sepolia with the exception of `eth_call`. +The `finalized` tag is supported by all applicable JSON-RPC API methods on Linea Mainnet and Linea Sepolia with the exception of `eth_call`. ## Query the rollup contract -Using the `finalized` tag in JSON-RPC API calls is recommended. As an alternative, you can query -the [Linea L1 rollup contract](https://etherscan.io/address/0xd19d4b5d358258f05d7b411e21a1460d11b0876f#readProxyContract) -to retrieve the value of the current finalized L2 block number stored in the `currentL2BlockNumber` -variable. +Using the `finalized` tag in JSON-RPC API calls is recommended. As an alternative, you can query the [Linea L1 rollup contract](https://etherscan.io/address/0xd19d4b5d358258f05d7b411e21a1460d11b0876f#readProxyContract) to retrieve the value of the current finalized L2 block number stored in the `currentL2BlockNumber` variable. ### Prerequisites @@ -44,74 +37,72 @@ variable. 1. In your project folder, initialize the project and install the `web3` package: - ```bash - npm init -y - ``` + ```bash + npm init -y + ``` - ```bash - npm install web3 - ``` + ```bash + npm install web3 + ``` 1. Create a JavaScript file (for example `index.js`) and copy the following code: - :::info - Update the Infura endpoint with your API key, or add a different RPC provider. - ::: - - ```JavaScript title="index.js" - const { Web3 } = require("web3") - - // Connect to an Ethereum node (e.g., Infura) - const web3 = new Web3( - new Web3.providers.HttpProvider( - `https://mainnet.infura.io/v3/` - ) - ) - // Define the minimal ABI to obtain the current finalized block number - const lineaRollupAbi = [ - { - "constant": true, - "inputs": [], - "name": "currentL2BlockNumber", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ]; - - // Define the contract address - const lineaRollupAddress = '0xd19d4b5d358258f05d7b411e21a1460d11b0876f'; - - // Create a contract instance - const lineaRollupContract = new web3.eth.Contract(lineaRollupAbi, lineaRollupAddress); - - // Function to get the finalized L2 block number - async function getFinalizedL2BlockNumber() { - try { - const currentL2BlockNumber = await lineaRollupContract.methods.currentL2BlockNumber().call(); - const blockNumberHex = '0x' + BigInt(currentL2BlockNumber).toString(16); // Convert BigInt to hex string - - console.log('Finalized L2 Block Number:', currentL2BlockNumber.toString()); // Print BigInt as string - console.log('Finalized L2 Block Number (Hex):', blockNumberHex); - - return { blockNumber: currentL2BlockNumber, blockNumberHex }; - } catch (error) { - console.error('Error fetching L2 block number:', error); - } - } - - // Call the function - getFinalizedL2BlockNumber(); - ``` + :::info Update the Infura endpoint with your API key, or add a different RPC provider. ::: + + ```JavaScript title="index.js" + const { Web3 } = require("web3") + + // Connect to an Ethereum node (e.g., Infura) + const web3 = new Web3( + new Web3.providers.HttpProvider( + `https://mainnet.infura.io/v3/` + ) + ) + // Define the minimal ABI to obtain the current finalized block number + const lineaRollupAbi = [ + { + "constant": true, + "inputs": [], + "name": "currentL2BlockNumber", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ]; + + // Define the contract address + const lineaRollupAddress = '0xd19d4b5d358258f05d7b411e21a1460d11b0876f'; + + // Create a contract instance + const lineaRollupContract = new web3.eth.Contract(lineaRollupAbi, lineaRollupAddress); + + // Function to get the finalized L2 block number + async function getFinalizedL2BlockNumber() { + try { + const currentL2BlockNumber = await lineaRollupContract.methods.currentL2BlockNumber().call(); + const blockNumberHex = '0x' + BigInt(currentL2BlockNumber).toString(16); // Convert BigInt to hex string + + console.log('Finalized L2 Block Number:', currentL2BlockNumber.toString()); // Print BigInt as string + console.log('Finalized L2 Block Number (Hex):', blockNumberHex); + + return { blockNumber: currentL2BlockNumber, blockNumberHex }; + } catch (error) { + console.error('Error fetching L2 block number:', error); + } + } + + // Call the function + getFinalizedL2BlockNumber(); + ``` 1. In the project directory, run the script: - ```bash - node index.js - ``` + ```bash + node index.js + ``` diff --git a/docs/developers/guides/gas-fees.mdx b/docs/developers/guides/gas-fees.mdx index 51f959c6a..5338a946a 100644 --- a/docs/developers/guides/gas-fees.mdx +++ b/docs/developers/guides/gas-fees.mdx @@ -4,62 +4,53 @@ sidebar_position: 6 image: /img/socialCards/how-to-estimate-linea-gas-costs.jpg --- -import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; # Estimate transaction costs ## How gas works on Linea Linea supports the [Ethereum EIP-1559 gas price model](https://ethereum.org/developers/docs/gas): + ``` total fee = units of gas used * (base fee + priority fee) ``` -Linea fundamentally works exactly the same as Ethereum. The only difference is that **the base fee -is constant at 7 wei.** Blocks created by Linea use up to 24 million gas (less than 50% of the -maximum Linea block size of 61 million gas), and the fee decreases by 12.5% per block, keeping it -at a stable 7 wei. +Linea fundamentally works exactly the same as Ethereum. The only difference is that **the base fee is constant at 7 wei.** Blocks created by Linea use up to 24 million gas (less than 50% of the maximum Linea block size of 61 million gas), and the fee decreases by 12.5% per block, keeping it at a stable 7 wei. -The gas cost to submit your transaction and include it on Ethereum involves the following fee -components: +The gas cost to submit your transaction and include it on Ethereum involves the following fee components: -- **Layer 2 cost**: The execution fee; the cost of including your transaction on the Linea - sequencer, and calculated using a similar formula to Ethereum (as described above). -- **Layer 1 cost**: The cost of publishing your L2 transaction on Ethereum, which varies - based on the blob fee market. +- **Layer 2 cost**: The execution fee; the cost of including your transaction on the Linea sequencer, and calculated using a similar formula to Ethereum (as described above). +- **Layer 1 cost**: The cost of publishing your L2 transaction on Ethereum, which varies based on the blob fee market. -These two resource costs are abstracted by the rollup and covered by the recommended L2 gas price -and gas used. +These two resource costs are abstracted by the rollup and covered by the recommended L2 gas price and gas used. -> Learn more about gas on Linea on our [support page](https://support.linea.build/getting-started/what-does-gas-pay-for/) -and release notes for [Alpha v2](../linea-version/index.mdx#alpha-v2) and [Alpha v3](../linea-version/index.mdx#alpha-v3). +> Learn more about gas on Linea on our [support page](https://support.linea.build/getting-started/what-does-gas-pay-for/) and release notes for [Alpha v2](../linea-version/index.mdx#alpha-v2) and [Alpha v3](../linea-version/index.mdx#alpha-v3). -`linea_estimateGas` is the recommended method for estimating gas on Linea. See our -[reference page](../reference/api/linea-estimategas.mdx) for more information. +`linea_estimateGas` is the recommended method for estimating gas on Linea. See our [reference page](../reference/api/linea-estimategas.mdx) for more information. Linea also supports: + - [`eth_estimateGas`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_estimategas) - [`eth_gasPrice`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_gasprice) - [`eth_feeHistory`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_feehistory). ## Gas pricing -The gas price returned by `linea_estimateGas` is based on the variable data cost of the previous -block with a multiplier applied as a buffer to ensure inclusion. +The gas price returned by `linea_estimateGas` is based on the variable data cost of the previous block with a multiplier applied as a buffer to ensure inclusion. + +Each Linea block's `extraData` field is populated with the following gas price values that are used by `linea_estimateGas` to calculate the cost of a transaction: -Each Linea block's `extraData` field is populated with the following gas price values that are used -by `linea_estimateGas` to calculate the cost of a transaction: - A `FIXED_COST` of 0.03 Gwei, which reflects infrastructure costs; - `VARIABLE_COST`, which is the cost per byte of data submitted to L1, and; -- `ETH_GAS_PRICE`, used to set a more accurate return value for any `eth_gasPrice` calls. +- `ETH_GAS_PRICE`, used to set a more accurate return value for any `eth_gasPrice` calls. :::note -The `extraData` field is a 32-byte space used to store arbitrary data, such as metadata or -additional information relevant to the block. +The `extraData` field is a 32-byte space used to store arbitrary data, such as metadata or additional information relevant to the block. -On Linea, it's used by the sequencer and Linea Besu nodes running the correct plugins to expose -`linea_estimateGas`. +On Linea, it's used by the sequencer and Linea Besu nodes running the correct plugins to expose `linea_estimateGas`. ::: @@ -69,25 +60,19 @@ Variable cost is calculated with the following formula: VARIABLE_COST (4 bytes) = min(max( ( ( - ((averageWeightedBaseFee + averageWeightedPriorityFee) * + ((averageWeightedBaseFee + averageWeightedPriorityFee) * blob-submission-expected-execution-gas + averageWeightedBlobBaseFee * expected-blob-gas ) / bytes-per-data-submission) * profit-margin ) , min-bound), max-bound) ``` -The `profit-margin` is `3`, ensuring the network is sustainable. `min-bound` and `max-bound` -are variable, and guarantee the gas price stays within a reasonable range. +The `profit-margin` is `3`, ensuring the network is sustainable. `min-bound` and `max-bound` are variable, and guarantee the gas price stays within a reasonable range. + +The variable cost formula enables `linea_estimateGas` to price according to the variable costs of submitting blob data to L1, working out the per-byte cost of that data. The amount of the blob data in each block stays roughly consistent, though the amount _per transaction_ varies, so the `linea_estimateGas` API accounts for this, and ensures a gas price is returned for the transaction that reflects the amount of data it contains. In turn, it ensures that the network is sustainable, and that the cost to the protocol of L1 data availability is covered. -The variable cost formula enables `linea_estimateGas` to price according to the variable costs of -submitting blob data to L1, working out the per-byte cost of that data. The amount of the blob data -in each block stays roughly consistent, though the amount _per transaction_ varies, so the -`linea_estimateGas` API accounts for this, and ensures a gas price is returned for the transaction -that reflects the amount of data it contains. In turn, it ensures that the network is sustainable, -and that the cost to the protocol of L1 data availability is covered. +To determine the priority fee per gas, `linea_estimateGas` takes the previous block's `VARIABLE_COST` into account: -To determine the priority fee per gas, `linea_estimateGas` takes the previous block's `VARIABLE_COST` -into account: ```python min-gas-price = previousBlock.extraData.variable_cost baseFeePerGas = vanillaProtocolBaseFee @@ -95,36 +80,22 @@ priorityFeePerGas = MINIMUM_MARGIN * (min-gas-price * L2_compressed_tx_size_in_b ``` Where: -- `extraData.variable_cost` is where the previous block's `VARIABLE_COST` is stored -block + +- `extraData.variable_cost` is where the previous block's `VARIABLE_COST` is stored block - `MINIMUM_MARGIN` varies depending on the stage of the transaction: - RPC method, i.e. calling `linea_estimateGas`: `1.2` - In the transaction pool: `0.8` - At transaction selection stage: `1.0` -:::note -The RPC method and transaction pool values are configurable by RPC providers or those running their -own nodes according to preference; the transaction selection stage value is fixed. For example, -it may be preferable to set a lower margin to facilitate lower gas prices, but this risks -transactions not being included. -::: +:::note The RPC method and transaction pool values are configurable by RPC providers or those running their own nodes according to preference; the transaction selection stage value is fixed. For example, it may be preferable to set a lower margin to facilitate lower gas prices, but this risks transactions not being included. ::: -`linea_estimateGas` simulates the transaction ordering logic that the sequencer uses when building -blocks, and then obtains a gas price that will ensure that the priority fee is high enough for -inclusion. The sequencer's transaction ordering policy includes transactions in block in order of -highest priority fee, a system known as a priority gas auction. It also checks that the priority -fees offered by each transaction are high enough to support network sustainability, and cover L1 -data costs. +`linea_estimateGas` simulates the transaction ordering logic that the sequencer uses when building blocks, and then obtains a gas price that will ensure that the priority fee is high enough for inclusion. The sequencer's transaction ordering policy includes transactions in block in order of highest priority fee, a system known as a priority gas auction. It also checks that the priority fees offered by each transaction are high enough to support network sustainability, and cover L1 data costs. -In some cases, transactions with lower priority fees are included ahead of others with higher -priority fees. This is because the nonce order of transactions submitted from the same account -takes precedence. +In some cases, transactions with lower priority fees are included ahead of others with higher priority fees. This is because the nonce order of transactions submitted from the same account takes precedence. ## [`linea_estimateGas`](../reference/api/linea-estimategas.mdx) -`linea_estimateGas` is the recommended method for estimating gas on Linea. It returns `gasLimit`, -`baseFeePerGas`, and `priorityFeePerGas`, and therefore provides a more precise gas estimate than -the alternatives. +`linea_estimateGas` is the recommended method for estimating gas on Linea. It returns `gasLimit`, `baseFeePerGas`, and `priorityFeePerGas`, and therefore provides a more precise gas estimate than the alternatives. It can also help prevent transactions from being rejected due to exceeding [module limits](../../architecture/stack/trace-expansion-proving/prover-limits.mdx). diff --git a/docs/developers/guides/index.mdx b/docs/developers/guides/index.mdx index 5179c053f..accf33e20 100644 --- a/docs/developers/guides/index.mdx +++ b/docs/developers/guides/index.mdx @@ -3,6 +3,6 @@ title: Guides image: /img/socialCards/guides.jpg --- -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/guides/linea-api.mdx b/docs/developers/guides/linea-api.mdx index 36adc4243..09a843ae7 100644 --- a/docs/developers/guides/linea-api.mdx +++ b/docs/developers/guides/linea-api.mdx @@ -5,41 +5,26 @@ sidebar_position: 6 image: /img/socialCards/use-the-linea-api.jpg --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -Linea supports the standard Ethereum JSON-RPC API methods, meaning the developer experience is -identical to building on Ethereum itself. However, some -[Linea-specific methods, and method implementations](../reference/api/index.mdx) differ to Ethereum. - -:::info -View the full list of Linea methods in the -[MetaMask services documentation](https://docs.metamask.io/services/reference/linea/json-rpc-methods/). -::: - -You must connect to an RPC endpoint when making calls to the Linea blockchain. Use one or more of the -following options: - -- **Run your own node**: Either [run your own node by setting it up yourself](./run-a-node/index.mdx), or - [use a node provider](../tooling/node-providers/index.mdx#run-your-own-node). - We recommend running [Linea Besu](./run-a-node/linea-besu.mdx) if you want to run a node yourself and interact with the - blockchain. -- **Connect to a private RPC endpoint**: [Connect to a blockchain infrastructure provider](../tooling/node-providers/index.mdx#private-rpc-endpoints) - such as Infura or Alchemy. Multiple providers offer free tier access. -- **Use a public endpoint**: [Public endpoints](../tooling/node-providers/index.mdx#public-rpc-endpoints) are - free to use but are rate limited and not suitable for production environments. +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +Linea supports the standard Ethereum JSON-RPC API methods, meaning the developer experience is identical to building on Ethereum itself. However, some [Linea-specific methods, and method implementations](../reference/api/index.mdx) differ to Ethereum. + +:::info View the full list of Linea methods in the [MetaMask services documentation](https://docs.metamask.io/services/reference/linea/json-rpc-methods/). ::: + +You must connect to an RPC endpoint when making calls to the Linea blockchain. Use one or more of the following options: + +- **Run your own node**: Either [run your own node by setting it up yourself](./run-a-node/index.mdx), or [use a node provider](../tooling/node-providers/index.mdx#run-your-own-node). We recommend running [Linea Besu](./run-a-node/linea-besu.mdx) if you want to run a node yourself and interact with the blockchain. +- **Connect to a private RPC endpoint**: [Connect to a blockchain infrastructure provider](../tooling/node-providers/index.mdx#private-rpc-endpoints) such as Infura or Alchemy. Multiple providers offer free tier access. +- **Use a public endpoint**: [Public endpoints](../tooling/node-providers/index.mdx#public-rpc-endpoints) are free to use but are rate limited and not suitable for production environments. ## Make calls -The following examples call the Linea API methods using an Infura endpoint, however you can substitute -the endpoint with whichever endpoint you prefer. +The following examples call the Linea API methods using an Infura endpoint, however you can substitute the endpoint with whichever endpoint you prefer. In the examples, replace `` with your actual Infura API key. -:::info -View the [list of node providers](../tooling/node-providers/index.mdx) if you require an endpoint. -::: - +:::info View the [list of node providers](../tooling/node-providers/index.mdx) if you require an endpoint. ::: ### cURL @@ -58,9 +43,7 @@ The following examples use various JavaScript libraries to make calls to the Lin #### Prerequisites -Install [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) -or [yarn](https://yarnpkg.com/getting-started/install) as the package manager. Then, in your project -folder, initialise your new project: +Install [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) or [yarn](https://yarnpkg.com/getting-started/install) as the package manager. Then, in your project folder, initialise your new project: @@ -79,24 +62,29 @@ folder, initialise your new project: #### Node Fetch -1. In your project folder, install the `node-fetch` package: +1. In your project folder, install the `node-fetch` package: - - + - ```bash - npm i node-fetch - ``` - - + - ```bash - yarn add node-fetch - ``` - - + ```bash + npm i node-fetch + ``` + + -1. Create your JavaScript file and copy the following code: + + + ```bash + yarn add node-fetch + ``` + + + + + +1. Create your JavaScript file and copy the following code: ```javascript title="index.js" const fetch = require("node-fetch"); @@ -115,14 +103,14 @@ folder, initialise your new project: }) .then((response) => response.json()) .then((data) => { - console.log(data) + console.log(data); }) .catch((error) => { - console.error(error) - }) + console.error(error); + }); ``` -1. Run the code using the following command: +1. Run the code using the following command: ```bash node index.js @@ -130,27 +118,32 @@ folder, initialise your new project: #### Axios -1. In your project folder, install the `axios` package: +1. In your project folder, install the `axios` package: - - + - ```bash - npm i axios - ``` - - + - ```bash - yarn add axios - ``` - - + ```bash + npm i axios + ``` + + + + -1. Create your JavaScript file and copy the following code: + ```bash + yarn add axios + ``` + + + + + +1. Create your JavaScript file and copy the following code: ```javascript title="index.js" - const axios = require("axios") + const axios = require("axios"); axios .post("https://linea-mainnet.infura.io/v3/", { @@ -160,14 +153,14 @@ folder, initialise your new project: id: 1, }) .then((response) => { - console.log(response.data) + console.log(response.data); }) .catch((error) => { - console.error(error) - }) + console.error(error); + }); ``` -1. Run the code using the following command: +1. Run the code using the following command: ```bash node index.js @@ -175,45 +168,51 @@ folder, initialise your new project: #### Viem -1. In your project folder, install the `viem` package: +1. In your project folder, install the `viem` package: - - + - ```bash - npm i viem - ``` - - + - ```bash - yarn add viem - ``` - - + ```bash + npm i viem + ``` + + + + + + ```bash + yarn add viem + ``` + + -1. Create your JavaScript file and copy the following code: + + +1. Create your JavaScript file and copy the following code: ```javascript title="index.js" - const { createClient, http } = require('viem'); + const { createClient, http } = require("viem"); const client = createClient({ - transport: http('https://linea-mainnet.infura.io/v3/') + transport: http("https://linea-mainnet.infura.io/v3/"), }); - client.request({ - method: 'eth_blockNumber', - params: [] - }) - .then((blockNumber) => { - console.log(parseInt(blockNumber, 16)); // Convert hex to decimal - }) - .catch((error) => { - console.error(error); - }); + client + .request({ + method: "eth_blockNumber", + params: [], + }) + .then((blockNumber) => { + console.log(parseInt(blockNumber, 16)); // Convert hex to decimal + }) + .catch((error) => { + console.error(error); + }); ``` -1. Run the code using the following command: +1. Run the code using the following command: ```bash node index.js diff --git a/docs/developers/guides/linea-inscriptions.mdx b/docs/developers/guides/linea-inscriptions.mdx index 0eebca16f..232738d6a 100644 --- a/docs/developers/guides/linea-inscriptions.mdx +++ b/docs/developers/guides/linea-inscriptions.mdx @@ -42,7 +42,7 @@ We recommend loading it from the contract code to reduce the amount of calldata - Explain what these are - Explain at a high level what you do with them - Sample code for interacting with them, getting information from them - - List the methods available? Is `mint` the only one? + - List the methods available? Is `mint` the only one? - We could point to Lineascan's built-in contract interaction capabilities, etc.--> ### Ethscription.sol diff --git a/docs/developers/guides/linea-safe.mdx b/docs/developers/guides/linea-safe.mdx index 563a0538e..56f924d2e 100644 --- a/docs/developers/guides/linea-safe.mdx +++ b/docs/developers/guides/linea-safe.mdx @@ -4,17 +4,10 @@ description: Use Safe to create a multi-signature smart contract wallet on Linea image: /img/socialCards/create-a-multi-signature-smart-contract-wallet.jpg --- -Safe is a multi-signature smart contract wallet, which means it requires a minimum number of -signatures to approve a transaction before it can occur. For example, if your business has three -main stakeholders, you can configure the wallet to require approval from either two out of three -or all three individuals before a transaction can proceed. This security measure ensures that no -single person can compromise the funds. +Safe is a multi-signature smart contract wallet, which means it requires a minimum number of signatures to approve a transaction before it can occur. For example, if your business has three main stakeholders, you can configure the wallet to require approval from either two out of three or all three individuals before a transaction can proceed. This security measure ensures that no single person can compromise the funds. -On top of that, Linea Safe gives complete self-custody over funds. In other words, the smart -contract deployed for the wallet has complete control over the wallet's contents, and doesn't -rely on any trusted external party for execution. +On top of that, Linea Safe gives complete self-custody over funds. In other words, the smart contract deployed for the wallet has complete control over the wallet's contents, and doesn't rely on any trusted external party for execution. -To create your Safe wallet click [here](https://app.safe.global/), and select Linea as the network. -To use the app on Linea Sepolia, click [here](https://safe.linea.build). +To create your Safe wallet click [here](https://app.safe.global/), and select Linea as the network. To use the app on Linea Sepolia, click [here](https://safe.linea.build). If you need guidance on using the Safe app, check out their support page [here](https://help.safe.global/). diff --git a/docs/developers/guides/run-a-node/besu.mdx b/docs/developers/guides/run-a-node/besu.mdx index 212e3d293..fb6c00e7f 100644 --- a/docs/developers/guides/run-a-node/besu.mdx +++ b/docs/developers/guides/run-a-node/besu.mdx @@ -11,14 +11,9 @@ import VolumeCreation from "./volume-creation.mdx"; import NodeSize from "../../../../src/components/NodeSize"; import LastUpdated from "../../../../src/components/LastUpdated"; -[Besu](https://besu.hyperledger.org/) is an open source Ethereum client developed under the -Apache 2.0 license and written in Java. +[Besu](https://besu.hyperledger.org/) is an open source Ethereum client developed under the Apache 2.0 license and written in Java. -:::info important -Install and run a Besu node if you want to follow the Linea network by -maintaining a local copy of the blockchain. However, if you want to interact with the network and use -Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. -::: +:::info important Install and run a Besu node if you want to follow the Linea network by maintaining a local copy of the blockchain. However, if you want to interact with the network and use Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. ::: You can run Besu from a [binary distribution](#run-using-the-binary-distribution) or [using Docker](#run-using-docker). @@ -26,10 +21,9 @@ You can run Besu from a [binary distribution](#run-using-the-binary-distribution ### Step 1. Install Besu -[Download and install Besu](https://besu.hyperledger.org/public-networks/get-started/install/binary-distribution) using -the instructions in the official documentation. +[Download and install Besu](https://besu.hyperledger.org/public-networks/get-started/install/binary-distribution) using the instructions in the official documentation. -### Step 2. Download the genesis file and Besu configuration file +### Step 2. Download the genesis file and Besu configuration file Download the genesis file and Besu configuration file. @@ -39,13 +33,10 @@ Download the genesis file and Besu configuration file. Mainnet [`genesis-mainnet.json`](pathname:///files/besu/genesis-mainnet.json) file and Besu [`config-mainnet.toml`](pathname:///files/besu/config-mainnet.toml) file. - :::note[bootnodes] - You can choose from a range of bootnodes for Linea Mainnet. The above configuration file uses - all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above configuration file uses all bootnodes by default. + +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: - The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. - ::: - @@ -58,7 +49,7 @@ Download the genesis file and Besu configuration file. ### Step 3. Define disk space volume (optional) \{#disk-space-besu} -Define a volume size appropriate to your expected usage. Besu nodes use: +Define a volume size appropriate to your expected usage. Besu nodes use: - Full node: - Archive node: @@ -67,8 +58,7 @@ Define a volume size appropriate to your expected usage. Besu nodes use: Use these figures as a basis to determine the extent to which you want to future-proof your node. -To limit disk space required, we recommend you configure Besu to use the [Bonsai](https://besu.hyperledger.org/public-networks/concepts/data-storage-formats#bonsai-tries) -data storage format, which prunes orphaned nodes and old branches. +To limit disk space required, we recommend you configure Besu to use the [Bonsai](https://besu.hyperledger.org/public-networks/concepts/data-storage-formats#bonsai-tries) data storage format, which prunes orphaned nodes and old branches. Ensure you mount the Besu `data-path` to the custom volume when you start the node. @@ -76,10 +66,9 @@ Ensure you mount the Besu `data-path` to the custom volume when you start the no ### Step 4. Configure the Besu configuration file -In your Besu configuration file (`config-mainnet.toml` or `config-sepolia.toml`), configure -the following options: +In your Besu configuration file (`config-mainnet.toml` or `config-sepolia.toml`), configure the following options: -- Set `data-path` to the location you want to store your data. +- Set `data-path` to the location you want to store your data. - Set `genesis-file` to the path of your downloaded genesis file. ### Step 5. Start the Besu client @@ -88,22 +77,14 @@ Run the Besu client with the location of your configuration file. For example: - - ```bash - besu --config-file=/Users/myuser/mainnet/config-mainnet.toml - ``` - + ```bash besu --config-file=/Users/myuser/mainnet/config-mainnet.toml ``` - - ```bash - besu --config-file=/Users/myuser/sepolia/config-sepolia.toml - ``` - + ```bash besu --config-file=/Users/myuser/sepolia/config-sepolia.toml ``` -The Besu node will attempt to find peers to begin synchronizing and to download the world state. +The Besu node will attempt to find peers to begin synchronizing and to download the world state. ## Run using Docker @@ -119,22 +100,17 @@ Download and install [Docker](https://www.docker.com/products/docker-desktop/). ### Step 1. Download configuration files -Download the configuration files for the relevant network (in ZIP format) and extract them. The configuration -files include the network genesis file, Docker Compose file and Besu configuration file. +Download the configuration files for the relevant network (in ZIP format) and extract them. The configuration files include the network genesis file, Docker Compose file and Besu configuration file. Download the mainnet [`besu-mainnet` ZIP file](pathname:///files/besu/besu-mainnet.zip). - :::note[bootnodes] - You can choose from a range of bootnodes for Linea Mainnet. The Besu `.zip` includes a - config file named `config-snap-mainnet.toml` where bootnodes are specified. The file uses all bootnodes - by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The Besu `.zip` includes a config file named `config-snap-mainnet.toml` where bootnodes are specified. The file uses all bootnodes by default. + +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: - The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. - ::: - @@ -159,22 +135,19 @@ You can use [this page](https://www.whatismyip.com/) to find your public IP addr ### Step 3. Start the Besu node -Open a terminal, in the directory containing the `docker-compose.yml` file, run `docker-compose up`. +Open a terminal, in the directory containing the `docker-compose.yml` file, run `docker-compose up`. It can take up to 20 minutes for the node to find peers. If it takes any longer than that, try restarting the node. :::tip Troubleshoot peering issues -Refer to the [Besu troubleshooting information](https://besu.hyperledger.org/public-networks/how-to/troubleshoot/peering) -for help if you experience peering issues. +Refer to the [Besu troubleshooting information](https://besu.hyperledger.org/public-networks/how-to/troubleshoot/peering) for help if you experience peering issues. ::: ## Confirm the node is running -You can call the JSON-RPC API methods to confirm the node is running. For example, call -[`eth_syncing`](https://besu.hyperledger.org/public-networks/reference/api#eth_syncing) to return the synchronization status. -For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). +You can call the JSON-RPC API methods to confirm the node is running. For example, call [`eth_syncing`](https://besu.hyperledger.org/public-networks/reference/api#eth_syncing) to return the synchronization status. For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). ```bash diff --git a/docs/developers/guides/run-a-node/bootnodes.mdx b/docs/developers/guides/run-a-node/bootnodes.mdx index 8c6edfbfd..66b0066f1 100644 --- a/docs/developers/guides/run-a-node/bootnodes.mdx +++ b/docs/developers/guides/run-a-node/bootnodes.mdx @@ -4,14 +4,13 @@ description: Bootnodes available for Linea Mainnet image: /img/socialCards/bootnodes.jpg --- -The following bootnodes enable your node to find a peer node when initializing. To -optimize performance, we recommend you select a location that corresponds to you: +The following bootnodes enable your node to find a peer node when initializing. To optimize performance, we recommend you select a location that corresponds to you: + - `us-east-2`: United States - `ap-southeast-1`: Asia-Pacific - `eu-north-1`: Europe -Choosing a closer region will minimize latency, but any enode will work regardless of the location -you choose. +Choosing a closer region will minimize latency, but any enode will work regardless of the location you choose. ## `us-east-2` diff --git a/docs/developers/guides/run-a-node/erigon.mdx b/docs/developers/guides/run-a-node/erigon.mdx index 15fee814a..c8492e641 100644 --- a/docs/developers/guides/run-a-node/erigon.mdx +++ b/docs/developers/guides/run-a-node/erigon.mdx @@ -11,22 +11,15 @@ import VolumeCreation from "./volume-creation.mdx"; Erigon is a client implementation focused on performance and saving disk space, written in Go. -:::info important -Install and run an Erigon if you want to follow the Linea network by -maintaining a local copy of the blockchain. However, if you want to interact with the network and use -Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. -::: +:::info important Install and run an Erigon if you want to follow the Linea network by maintaining a local copy of the blockchain. However, if you want to interact with the network and use Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. ::: You can run Erigon from a [binary distribution](#run-using-the-binary-distribution) or [using Docker](#run-using-docker). ## Run using the binary distribution -:::info -Ensure you review [Erigon's software prerequisites](https://erigon.gitbook.io/erigon/basic-usage/getting-started#software-prerequisites) -before installing the Erigon client. +:::info Ensure you review [Erigon's software prerequisites](https://erigon.gitbook.io/erigon/basic-usage/getting-started#software-prerequisites) before installing the Erigon client. -If you're not comfortable with installing the binary distribution, consider using [Docker](#run-using-docker) instead. -::: +If you're not comfortable with installing the binary distribution, consider using [Docker](#run-using-docker) instead. ::: ### Step 1. Install Erigon @@ -34,25 +27,23 @@ If you're not comfortable with installing the binary distribution, consider usin ### Step 2. Download the genesis file -Download the genesis file for the relevant network. In the example, we'll download the file to the -directory specified by [`datadir` in Step 4](#step-4-bootstrap-your-node). +Download the genesis file for the relevant network. In the example, we'll download the file to the directory specified by [`datadir` in Step 4](#step-4-bootstrap-your-node). - - Mainnet [`genesis.json`](pathname:///files/erigon/mainnet/genesis.json) file. - + Mainnet [`genesis.json`](pathname:///files/erigon/mainnet/genesis.json) + file. - - Sepolia [`genesis.json`](pathname:///files/erigon/sepolia/genesis.json) file. - + Sepolia [`genesis.json`](pathname:///files/erigon/sepolia/genesis.json) + file. ### Step 3. Define disk space volume (optional) Define a volume size appropriate to your expected usage. As of October 8 2024, Erigon nodes use: + - Full nodes: 122GB. - Archive nodes: 472GB. @@ -60,8 +51,7 @@ Use these figures as a basis to determine the extent to which you want to future Ensure you mount the Erigon `datadir` to the custom volume. -If you run out of space, or need to actively maintain how much space is being used, consider -[pruning](https://erigon.gitbook.io/erigon/advanced-usage/options). +If you run out of space, or need to actively maintain how much space is being used, consider [pruning](https://erigon.gitbook.io/erigon/advanced-usage/options). @@ -71,19 +61,13 @@ Bootstrap the node using the following command: - - ```bash - erigon --datadir $HOME/erigon-mainnet-data/ init $HOME/erigon-mainnet-data/genesis.json - ``` - + ```bash erigon --datadir $HOME/erigon-mainnet-data/ init + $HOME/erigon-mainnet-data/genesis.json ``` - + - - ```bash - erigon --datadir $HOME/erigon-sepolia-data/ init $HOME/erigon-sepolia-data/genesis.json - ``` - + ```bash erigon --datadir $HOME/erigon-sepolia-data/ init + $HOME/erigon-sepolia-data/genesis.json ``` @@ -113,13 +97,10 @@ Start the node using the following command: --verbosity 3 ``` - :::note[bootnodes] - You can choose from a range of bootnodes for Linea Mainnet. The above command uses - all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above command uses all bootnodes by default. + +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: - The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. - ::: - @@ -162,13 +143,10 @@ Download the configuration files for the relevant network. Ensure that you downl Download the mainnet [`docker-compose.yml`](pathname:///files/erigon/mainnet/docker-compose.yml) and [`genesis.json`](pathname:///files/erigon/mainnet/genesis.json) files. - :::note[bootnodes] - You can choose from a range of bootnodes for Linea Mainnet. The above command uses - all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above command uses all bootnodes by default. + +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: - The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. - ::: - @@ -180,16 +158,13 @@ Download the configuration files for the relevant network. Ensure that you downl ### Step 2. Start the Erigon node -Open up a terminal where the both `docker-compose.yml` and `genesis.json` are located (they should be in the same directory) -and run `docker compose up` +Open up a terminal where the both `docker-compose.yml` and `genesis.json` are located (they should be in the same directory) and run `docker compose up` The node should now be running and looking for peers to sync. ## Confirm the node is running -You can call the JSON-RPC API methods to confirm the node is running. For example, call -`eth_syncing` to return the synchronization status. -For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). +You can call the JSON-RPC API methods to confirm the node is running. For example, call `eth_syncing` to return the synchronization status. For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). ```bash diff --git a/docs/developers/guides/run-a-node/geth.mdx b/docs/developers/guides/run-a-node/geth.mdx index ce4c2914d..ba9dca646 100644 --- a/docs/developers/guides/run-a-node/geth.mdx +++ b/docs/developers/guides/run-a-node/geth.mdx @@ -13,11 +13,7 @@ import LastUpdated from "../../../../src/components/LastUpdated"; [Geth](https://geth.ethereum.org/) is an open-source Go implementation of Ethereum. -:::info important -Install and run a Geth node if you want to follow the Linea network by -maintaining a local copy of the blockchain. However, if you want to interact with the network and use -Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. -::: +:::info important Install and run a Geth node if you want to follow the Linea network by maintaining a local copy of the blockchain. However, if you want to interact with the network and use Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. ::: You can run Geth from a [binary distribution](#run-using-the-binary-distribution) or [using Docker](#run-using-docker). @@ -25,12 +21,11 @@ You can run Geth from a [binary distribution](#run-using-the-binary-distribution ### Step 1. Install Geth -[Download and install](https://geth.ethereum.org/docs/getting-started/installing-geth) the Geth client. +[Download and install](https://geth.ethereum.org/docs/getting-started/installing-geth) the Geth client. :::warning -Linea only supports Geth _up to_ v1.13.15 or lower. v1.14.0 and subsequent versions aren't -supported. +Linea only supports Geth _up to_ v1.13.15 or lower. v1.14.0 and subsequent versions aren't supported. ::: @@ -40,14 +35,10 @@ Download the genesis file for the relevant network. - - Mainnet [`genesis.json`](pathname:///files/geth/mainnet/genesis.json) file. - + Mainnet [`genesis.json`](pathname:///files/geth/mainnet/genesis.json) file. - - Sepolia [`genesis.json`](pathname:///files/geth/sepolia/genesis.json) file. - + Sepolia [`genesis.json`](pathname:///files/geth/sepolia/genesis.json) file. @@ -64,8 +55,7 @@ Use these figures as a basis to determine the extent to which you want to future Ensure you mount the Geth `datadir` to the custom volume. -If you run out of space, or need to actively maintain how much space is being used, consider -[pruning](https://geth.ethereum.org/docs/fundamentals/pruning). +If you run out of space, or need to actively maintain how much space is being used, consider [pruning](https://geth.ethereum.org/docs/fundamentals/pruning). @@ -75,19 +65,11 @@ Bootstrap the node using the following command: - - ```bash - geth --datadir ./geth-linea-data init ./genesis.json - ``` - + ```bash geth --datadir ./geth-linea-data init ./genesis.json ``` - + - - ```bash - geth --datadir ./geth-sepolia-data init ./genesis.json - ``` - + ```bash geth --datadir ./geth-sepolia-data init ./genesis.json ``` @@ -117,13 +99,10 @@ Start the node using the following command: --verbosity 3 ``` - :::note[bootnodes] - You can choose from a range of bootnodes for Linea Mainnet. The above command uses - all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above command uses all bootnodes by default. + +See our [bootnodes page](bootnodes.mdx) for a full list of available bootnodes. ::: - See our [bootnodes page](bootnodes.mdx) for a full list of available bootnodes. - ::: - @@ -148,17 +127,15 @@ Start the node using the following command: -The Linea network only produces blocks if there is currently at least 1 pending transaction. If you see no incoming blocks -to your node, **that doesn't mean that the node is not syncing**. +The Linea network only produces blocks if there is currently at least 1 pending transaction. If you see no incoming blocks to your node, **that doesn't mean that the node is not syncing**. -**If you don't see any incoming blocks**, check and make sure that you have **at least one peer from the bootnodes**; -otherwise, you might not be connected to the Linea network. +**If you don't see any incoming blocks**, check and make sure that you have **at least one peer from the bootnodes**; otherwise, you might not be connected to the Linea network.
@@ -178,13 +155,10 @@ Download the configuration files for the relevant network. Ensure that you downl Download the mainnet [`docker-compose.yml`](pathname:///files/geth/mainnet/docker-compose.yml) and [`genesis.json`](pathname:///files/geth/mainnet/genesis.json) files. - :::note[bootnodes] - You can choose from a range of bootnodes for Linea Mainnet. The Geth `docker-compose.yml` - file uses all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The Geth `docker-compose.yml` file uses all bootnodes by default. + +See our [bootnodes page](bootnodes.mdx) for a full list of available bootnodes. ::: - See our [bootnodes page](bootnodes.mdx) for a full list of available bootnodes. - ::: -
@@ -196,16 +170,13 @@ Download the configuration files for the relevant network. Ensure that you downl ### Step 2. Start the Geth node -Open up a terminal where the both `docker-compose.yml` and `genesis.json` are located (they should be in the same directory) -and run `docker compose up` +Open up a terminal where the both `docker-compose.yml` and `genesis.json` are located (they should be in the same directory) and run `docker compose up` The node should now be running and looking for peers to sync. ## Confirm the node is running -You can call the JSON-RPC API methods to confirm the node is running. For example, call -`eth_syncing` to return the synchronization status. -For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). +You can call the JSON-RPC API methods to confirm the node is running. For example, call `eth_syncing` to return the synchronization status. For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). ```bash diff --git a/docs/developers/guides/run-a-node/index.mdx b/docs/developers/guides/run-a-node/index.mdx index 4db7287a4..8a021007e 100644 --- a/docs/developers/guides/run-a-node/index.mdx +++ b/docs/developers/guides/run-a-node/index.mdx @@ -9,33 +9,21 @@ import DocCardList from "@theme/DocCardList"; This section guides you through running a Linea node using various compatible Ethereum clients. -:::info important -While Linea supports multiple clients, only Linea Besu currently allows you to access Linea-specific -features, such as using [Linea methods](../../reference/api/index.mdx) (for example, `linea_estimateGas`) -or calling methods using the `finalized` tag. +:::info important While Linea supports multiple clients, only Linea Besu currently allows you to access Linea-specific features, such as using [Linea methods](../../reference/api/index.mdx) (for example, `linea_estimateGas`) or calling methods using the `finalized` tag. -Linea Besu is recommended for infrastructure providers and operators who intend to run a Linea -node, whether for offering node services to others or for using Linea with a personal, private RPC endpoint. -::: +Linea Besu is recommended for infrastructure providers and operators who intend to run a Linea node, whether for offering node services to others or for using Linea with a personal, private RPC endpoint. ::: -The vanilla Ethereum clients such as Besu, Geth, and Erigon are recommended if you only want to follow the -Linea chain. They allow you to have a local copy of the Linea blockchain. This view of the state is -"trusted" until the transaction, or the block that transaction is in, has been finalized on L1. +The vanilla Ethereum clients such as Besu, Geth, and Erigon are recommended if you only want to follow the Linea chain. They allow you to have a local copy of the Linea blockchain. This view of the state is "trusted" until the transaction, or the block that transaction is in, has been finalized on L1. -The following table lists the clients covered in this guide, and whether they provide direct access -to Linea-specific features. +The following table lists the clients covered in this guide, and whether they provide direct access to Linea-specific features. -| Name | Description | Run Linea-specific features? | -|--------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------| -| [Besu](./besu.mdx) | An Java-based open-source Ethereum client that can be extended using plugins. | ❌ | -| [Linea Besu](./linea-besu.mdx) | Besu client with plugins that implement Linea-specific features, such as [API methods](../../reference/api/index.mdx) and [`finalized`](../finalized-block.mdx) tag. | ✅ | -| [Erigon](./erigon.mdx) | A client implementation focused on performance and saving disk space, written in Go. | ❌ | -| [Geth](./geth.mdx) | The most widely used open-source Ethereum client, written in Go. | ❌ | - - -There are no financial incentives for running a Linea node, and there is currently no option to -vote on blocks as part of the consensus mechanism or -[fork-choice](https://eth2book.info/capella/part3/forkchoice/#whats-a-fork-choice) like on Ethereum. +| Name | Description | Run Linea-specific features? | +| --- | --- | --- | +| [Besu](./besu.mdx) | An Java-based open-source Ethereum client that can be extended using plugins. | ❌ | +| [Linea Besu](./linea-besu.mdx) | Besu client with plugins that implement Linea-specific features, such as [API methods](../../reference/api/index.mdx) and [`finalized`](../finalized-block.mdx) tag. | ✅ | +| [Erigon](./erigon.mdx) | A client implementation focused on performance and saving disk space, written in Go. | ❌ | +| [Geth](./geth.mdx) | The most widely used open-source Ethereum client, written in Go. | ❌ | +There are no financial incentives for running a Linea node, and there is currently no option to vote on blocks as part of the consensus mechanism or [fork-choice](https://eth2book.info/capella/part3/forkchoice/#whats-a-fork-choice) like on Ethereum. diff --git a/docs/developers/guides/run-a-node/linea-besu.mdx b/docs/developers/guides/run-a-node/linea-besu.mdx index 6556a4188..c002f95eb 100644 --- a/docs/developers/guides/run-a-node/linea-besu.mdx +++ b/docs/developers/guides/run-a-node/linea-besu.mdx @@ -11,23 +11,18 @@ import VolumeCreation from "./volume-creation.mdx"; import NodeSize from "../../../../src/components/NodeSize"; import LastUpdated from "../../../../src/components/LastUpdated"; -Linea Besu is an implementation of the Besu client that extends its functionality using plugins -adapted specifically for Linea, such as the -[Linea Sequencer plugin](https://github.com/Consensys/linea-sequencer). +Linea Besu is an implementation of the Besu client that extends its functionality using plugins adapted specifically for Linea, such as the [Linea Sequencer plugin](https://github.com/Consensys/linea-sequencer). -Plugins enable full functionality for the node. For example, -Linea-specific API endpoints like `linea_estimateGas` require the `linea-sequencer` plugin. -Plugins are installed with the `advanced` profile during the configuration steps. +Plugins enable full functionality for the node. For example, Linea-specific API endpoints like `linea_estimateGas` require the `linea-sequencer` plugin. Plugins are installed with the `advanced` profile during the configuration steps. :::warning -The `advanced` profile option doesn't currently support macOS/ARM. Please use -Linux/ARM or Windows/X86_64. +The `advanced` profile option doesn't currently support macOS/ARM. Please use Linux/ARM or Windows/X86_64. ::: -We recommend using Linea Besu over standard Besu if you intend to run a node to interact -with the blockchain, rather than just following it. Use Linea Besu if: +We recommend using Linea Besu over standard Besu if you intend to run a node to interact with the blockchain, rather than just following it. Use Linea Besu if: + - You are responsible for operating nodes as a service for others to use. - You want to use Linea with a personal, private RPC endpoint. @@ -35,18 +30,13 @@ with the blockchain, rather than just following it. Use Linea Besu if: ### Step 1. Download the Linea Besu package -[Download the latest version](https://github.com/Consensys/linea-besu-package/releases) of the -Linea Besu package from the releases page. +[Download the latest version](https://github.com/Consensys/linea-besu-package/releases) of the Linea Besu package from the releases page. -:::note -Find the **Assets** subheading on the latest release and download the file named -`linea-besu-package-.tar.gz`. -::: +:::note Find the **Assets** subheading on the latest release and download the file named `linea-besu-package-.tar.gz`. ::: ### Step 2. Extract the package contents -The `linea-besu-package-.tar.gz` is a compressed file; move it to the directory of your choice -and extract it. +The `linea-besu-package-.tar.gz` is a compressed file; move it to the directory of your choice and extract it. ```bash tar -xzvf linea-besu-package-.tar.gz @@ -54,7 +44,7 @@ tar -xzvf linea-besu-package-.tar.gz ### Step 3. Define disk space volume (optional) \{#disk-space-besu} -Define a volume size appropriate to your expected usage. Besu nodes use: +Define a volume size appropriate to your expected usage. Besu nodes use: - Full node: - Archive node: @@ -69,32 +59,30 @@ Ensure you mount the `data-path` to the custom volume when you start the node. ### Step 4. Select a profile -In the extracted directory, find `profiles`. The `.toml` configuration files in this folder define -the parameters for each possible profile you can select for your Linea Besu node. +In the extracted directory, find `profiles`. The `.toml` configuration files in this folder define the parameters for each possible profile you can select for your Linea Besu node. - Select one according to your preferences: - - `basic-mainnet`: Creates a basic follower node on Linea Mainnet with no plugins enabled. - - `advanced-mainnet`: Creates an advanced node on Linea Mainnet with plugins that enable support for - `linea_estimateGas` and the `finalized` block parameter tag. + Select one according to your preferences: - `basic-mainnet`: Creates a basic + follower node on Linea Mainnet with no plugins enabled. - + `advanced-mainnet`: Creates an advanced node on Linea Mainnet with plugins + that enable support for `linea_estimateGas` and the `finalized` block + parameter tag. - Select one according to your preferences: - - `basic-testnet`: Creates a basic follower node on Linea Sepolia with no plugins enabled. - - `advanced-testnet`: Creates an advanced node on Linea Sepolia with plugins that enable support for - `linea_estimateGas` and the `finalized` block parameter tag. + Select one according to your preferences: - `basic-testnet`: Creates a basic + follower node on Linea Sepolia with no plugins enabled. - + `advanced-testnet`: Creates an advanced node on Linea Sepolia with plugins + that enable support for `linea_estimateGas` and the `finalized` block + parameter tag. ### Step 5. Start the Linea Besu client -In a terminal, navigate to the `linea-besu-package-` directory, where the `bin`, `genesis`, -`profiles` etc. directories are. +In a terminal, navigate to the `linea-besu-package-` directory, where the `bin`, `genesis`, `profiles` etc. directories are. -Now run Linea Besu, specifying your preferred profile. The `--plugin-linea-l1-rpc-endpoint` must -only be defined if you are running an `advanced` node, since this is needed to query finalization -on L1. +Now run Linea Besu, specifying your preferred profile. The `--plugin-linea-l1-rpc-endpoint` must only be defined if you are running an `advanced` node, since this is needed to query finalization on L1. @@ -119,23 +107,22 @@ Download and install [Docker](https://www.docker.com/products/docker-desktop/). ### Step 1. Download the relevant `docker-compose.yaml` file -Access the [`/docker` directory](https://github.com/Consensys/linea-besu-package/tree/main/docker) -in the Linea Besu repository. There are several `.yaml` files here corresponding to Besu profiles. -Each profile enables you to run a node with different Linea Besu plugin configurations depending on -your use case. +Access the [`/docker` directory](https://github.com/Consensys/linea-besu-package/tree/main/docker) in the Linea Besu repository. There are several `.yaml` files here corresponding to Besu profiles. Each profile enables you to run a node with different Linea Besu plugin configurations depending on your use case. - Download the appropriate `.yaml` file for your use case: - - `basic-mainnet`: Creates a basic follower node on Linea Mainnet with no plugins enabled. - - `advanced-mainnet`: Creates an advanced node on Linea Mainnet with plugins that enable support - for `linea_estimateGas` and the `finalized` block parameter tag. + Download the appropriate `.yaml` file for your use case: - `basic-mainnet`: + Creates a basic follower node on Linea Mainnet with no plugins enabled. - + `advanced-mainnet`: Creates an advanced node on Linea Mainnet with plugins + that enable support for `linea_estimateGas` and the `finalized` block + parameter tag. - Download the appropriate `.yaml` file for your use case: - - `basic-testnet`: Creates a basic follower node on Linea Sepolia with no plugins enabled. - - `advanced-testnet`: Creates an advanced node on Linea Sepolia with plugins that enable support - for `linea_estimateGas` and the `finalized` block parameter tag. + Download the appropriate `.yaml` file for your use case: - `basic-testnet`: + Creates a basic follower node on Linea Sepolia with no plugins enabled. - + `advanced-testnet`: Creates an advanced node on Linea Sepolia with plugins + that enable support for `linea_estimateGas` and the `finalized` block + parameter tag. @@ -155,8 +142,7 @@ You can use [this page](https://www.whatismyip.com/) to find your public IP addr ### Step 3. Configure your L1 RPC endpoint -If you're using an `advanced` profile, insert your preferred L1 RPC endpoint in the -`docker-compose.yaml` file: +If you're using an `advanced` profile, insert your preferred L1 RPC endpoint in the `docker-compose.yaml` file: ```yaml --plugin-linea-l1-rpc-endpoint=YOUR_L1_RPC_ENDPOINT @@ -169,36 +155,38 @@ If you only intend to run a `basic` profile, go straight to the next step. In a terminal, navigate to your `.yaml` file's directory. Then start the node by running - `docker compose`: + `docker compose`: ```bash docker compose -f ./your-file-path/docker-compose-advanced-mainnet.yaml up ``` - Alternatively, you can run a node without downloading a `.yaml` file with a `docker run` command. + Alternatively, you can run a node without downloading a `.yaml` file with a `docker run` command. For example: ```bash docker run -e BESU_PROFILE=advanced-mainnet consensys/linea-besu-package:latest ``` - Adjust the `BESU_PROFILE` to match one of the profiles listed in step 1. + Adjust the `BESU_PROFILE` to match one of the profiles listed in step 1. + In a terminal, navigate to your `.yaml` file's directory. Then start the node by running - `docker compose`: + `docker compose`: ```bash docker compose -f ./your-file-path/docker-compose-advanced-testnet.yaml up ``` - Alternatively, you can run a node without downloading a `.yaml` file with a `docker run` command. + Alternatively, you can run a node without downloading a `.yaml` file with a `docker run` command. For example: ```bash docker run -e BESU_PROFILE=advanced-testnet consensys/linea-besu-package:latest ``` - Adjust the `BESU_PROFILE` to match one of the profiles listed in step 1. + Adjust the `BESU_PROFILE` to match one of the profiles listed in step 1. + diff --git a/docs/developers/guides/run-a-node/volume-creation.mdx b/docs/developers/guides/run-a-node/volume-creation.mdx index a2996a898..3d2c489d5 100644 --- a/docs/developers/guides/run-a-node/volume-creation.mdx +++ b/docs/developers/guides/run-a-node/volume-creation.mdx @@ -5,9 +5,7 @@ image: /img/socialCards/creating-a-custom-volume.jpg :::note -Blockchain clients can take up a lot of disk space. By defining the amount of disk space you're willing to -dedicate to your client (and the block data that it will be syncing), you can ensure that you still have enough room on -your disk for whatever else you need. +Blockchain clients can take up a lot of disk space. By defining the amount of disk space you're willing to dedicate to your client (and the block data that it will be syncing), you can ensure that you still have enough room on your disk for whatever else you need. ::: diff --git a/docs/developers/linea-version/index.mdx b/docs/developers/linea-version/index.mdx index c02c8875d..e5152dff9 100644 --- a/docs/developers/linea-version/index.mdx +++ b/docs/developers/linea-version/index.mdx @@ -20,16 +20,18 @@ import TabItem from "@theme/TabItem"; **Linea Sepolia: September 26** Beta v1 on Linea introduces new arithmetization, and is split into two phases: + 1. Beta v1a: Transition to the new arithmetization, and; 2. Beta v1b: Ensure the new arithmetization is 100% proven. The overall objective of the Linea Beta is to prove 100% of the zkEVM specification. This release includes: + - New arithmetization, with selected modules activated from the [Linea specification](https://github.com/Consensys/linea-specification). -- The transition to generating traces with Besu. +- The transition to generating traces with Besu. -## Alpha v3.6 +## Alpha v3.6 ### Block size changes @@ -37,8 +39,7 @@ This release includes: **Linea Sepolia: September 25** -Increase block limit to 30M units of gas. The transaction limit remains at 24M. Block time also -remains the same, at 2 seconds. +Increase block limit to 30M units of gas. The transaction limit remains at 24M. Block time also remains the same, at 2 seconds. ## Alpha v3.5.2 @@ -48,18 +49,17 @@ remains the same, at 2 seconds. **Linea Sepolia: September 18** -Introduces an API that can be used to check whether a transaction was rejected because it exceeded -the sequencer's trace limits. +Introduces an API that can be used to check whether a transaction was rejected because it exceeded the sequencer's trace limits. ## Alpha v3.5.1 -### Linea native bridge UI v2 +### Linea native bridge UI v2 **Mainnet: September 18** **Linea Sepolia: September 18** -Upgrades the [Linea bridge](https://bridge.linea.build/) UI. +Upgrades the [Linea bridge](https://bridge.linea.build/) UI. ## Alpha v3.5.0 @@ -69,9 +69,7 @@ Upgrades the [Linea bridge](https://bridge.linea.build/) UI. **Linea Sepolia: September 17** -Adds support for the `finalized` tag to the `blockParameters` strings that can be used in various -JSON-RPC API calls. The tag enables you to confirm whether or not a block has been finalized on L1. -See our [guide](../guides/finalized-block.mdx) for more. +Adds support for the `finalized` tag to the `blockParameters` strings that can be used in various JSON-RPC API calls. The tag enables you to confirm whether or not a block has been finalized on L1. See our [guide](../guides/finalized-block.mdx) for more. ## Alpha v3.4.1 @@ -81,8 +79,7 @@ See our [guide](../guides/finalized-block.mdx) for more. **Linea Sepolia: September 9** -Reactivates [`linea_estimateGas`](../reference/api/linea-estimategas.mdx), disabling compatibility -mode. +Reactivates [`linea_estimateGas`](../reference/api/linea-estimategas.mdx), disabling compatibility mode. ## Alpha v3.4 @@ -90,24 +87,15 @@ mode. ### ENS on Linea -Adds support for Linea ENS domains, including a frontend app for users to register and manage their -domains. The Linea ENS system is comparable to ENS on Ethereum Mainnet, except that domains are -limited to one per account and registering requires completion of [Proof of Humanity](https://poh.linea.build/). -As the system leverages CCIP Read, which enables L1 to trustlessly query the Linea ENS registry -through an offchain gateway, Linea ENS domains resolve on L1. +Adds support for Linea ENS domains, including a frontend app for users to register and manage their domains. The Linea ENS system is comparable to ENS on Ethereum Mainnet, except that domains are limited to one per account and registering requires completion of [Proof of Humanity](https://poh.linea.build/). As the system leverages CCIP Read, which enables L1 to trustlessly query the Linea ENS registry through an offchain gateway, Linea ENS domains resolve on L1. Read more about ENS in the user guide [here](https://support.linea.build/general/ens). ### CCIP Read -One of the building blocks of ENS on Linea is a custom implementation of CCIP Read, which uses the -gateway system introduced in EIP-3668 to enable Linea ENS names to resolve on L1. The key -contracts created by ENS have been adjusted by the Linea team to ensure they work with Linea's -Sparse Merkle Tree system. +One of the building blocks of ENS on Linea is a custom implementation of CCIP Read, which uses the gateway system introduced in EIP-3668 to enable Linea ENS names to resolve on L1. The key contracts created by ENS have been adjusted by the Linea team to ensure they work with Linea's Sparse Merkle Tree system. -The CCIP Read functionality can be applied to any context where a L1 protocol may benefit from -securely querying data on Linea. See our [page on CCIP Read](../tooling/cross-chain/ccip-read-gateway.mdx) -for more information and guidance on how to use the relevant contracts. +The CCIP Read functionality can be applied to any context where a L1 protocol may benefit from securely querying data on Linea. See our [page on CCIP Read](../tooling/cross-chain/ccip-read-gateway.mdx) for more information and guidance on how to use the relevant contracts. The Linea repository containing the relevant contracts is [here](https://github.com/Consensys/linea-ens). @@ -121,7 +109,7 @@ Available on Linea Sepolia on July 31; available on Mainnet from August 1. ::: -Activates the `linea_estimateGas` endpoint for use on Mainnet in compatibility mode. +Activates the `linea_estimateGas` endpoint for use on Mainnet in compatibility mode. See our [reference page](../reference/api/linea-estimategas.mdx) for more information and usage. @@ -135,17 +123,16 @@ See our [reference page](../reference/api/linea-estimategas.mdx) for more inform Reducing block time to 2 seconds, with a target block size of 24M gas. -The change will increase transaction throughput by approximately 20%, improving user experience by -making Linea faster and more responsive. +The change will increase transaction throughput by approximately 20%, improving user experience by making Linea faster and more responsive. :::warning[Actions recommended for node runners] -We recommend you adjust your node configurations to ensure any submitted transactions are handled -in line with the sequencer. +We recommend you adjust your node configurations to ensure any submitted transactions are handled in line with the sequencer. **Besu:** In the `besu-sequencer` plugin, adjust: + - `plugin-linea-max-tx-gas-limit` to `24000000` - `plugin-linea-max-block-gas` to `24000000` @@ -165,13 +152,15 @@ In the `besu-sequencer` plugin, adjust: ### Smart contract gas optimization Upgraded smart contracts to achieve gas optimizations in several areas: + - Major gas optimizations in blob submission, primarily in [`LineaRollup.sol`](https://github.com/Consensys/linea-contracts/blob/main/contracts/LineaRollup.sol) - Finalization -- The token bridge. +- The token bridge. -The upgrade commit is available [here](https://github.com/Consensys/linea-contracts/releases/tag/contract-audit-2024-05-24). +The upgrade commit is available [here](https://github.com/Consensys/linea-contracts/releases/tag/contract-audit-2024-05-24). Code in the upgrade has been audited by: + - OpenZeppelin, whose report is available [here](https://blog.openzeppelin.com/linea-gas-optimizations-audit), and; - Cyfrin, whose report is [here](https://github.com/Cyfrin/cyfrin-audit-reports/blob/main/reports/2024-05-24-cyfrin-linea-v2.0.pdf). @@ -183,61 +172,54 @@ May 29: Fully functional on testnet; ETH and USDC supported on mainnet. June 4: Fully functional on mainnet. -::: +::: -The [Linea bridge](https://bridge.linea.build/) has been upgraded to enable recipient addresses to -always be able to claim bridged funds. Bridge transfers to alternative recipients (i.e. an address -that isn't the sender's address) now appear on the recipient's "Recent transactions" list, -enabling them to claim. +The [Linea bridge](https://bridge.linea.build/) has been upgraded to enable recipient addresses to always be able to claim bridged funds. Bridge transfers to alternative recipients (i.e. an address that isn't the sender's address) now appear on the recipient's "Recent transactions" list, enabling them to claim. -These changes have been audited by [OpenZeppelin](https://blog.openzeppelin.com/linea-gas-optimizations-audit) -and [Cyfrin](https://github.com/Cyfrin/cyfrin-audit-reports/blob/main/reports/2024-05-24-cyfrin-linea-v2.0.pdf). +These changes have been audited by [OpenZeppelin](https://blog.openzeppelin.com/linea-gas-optimizations-audit) and [Cyfrin](https://github.com/Cyfrin/cyfrin-audit-reports/blob/main/reports/2024-05-24-cyfrin-linea-v2.0.pdf). ## Alpha v3.1 **Mainnet: May 14** - Introduces dynamic L1 gwei thresholds for submitting data to L1 for finalization. -- Adds the [`eth_sendRawTransaction`](../reference/api/eth-sendrawtransaction.mdx) method, -available only via Besu endpoints. +- Adds the [`eth_sendRawTransaction`](../reference/api/eth-sendrawtransaction.mdx) method, available only via Besu endpoints. ## Alpha v3 ### Summary -The main objective of Alpha v3 is to implement EIP-4844 on Linea, following its introduction to -Ethereum mainnet with the Dencun upgrade on March 13. +The main objective of Alpha v3 is to implement EIP-4844 on Linea, following its introduction to Ethereum mainnet with the Dencun upgrade on March 13. ### Features **March 26: EIP-4844** -Begin using blobs to post compressed L2 data to L1, with the aim of reducing data availability -costs. Blobs represent a transient data storage mechanism and an alternative to `calldata`, and -can be significantly cheaper in L1 ETH costs depending on market demand. +Begin using blobs to post compressed L2 data to L1, with the aim of reducing data availability costs. Blobs represent a transient data storage mechanism and an alternative to `calldata`, and can be significantly cheaper in L1 ETH costs depending on market demand.
Learn more about EIP-4844 - EIP-4844's arrival on Ethereum Mainnet enabled Ethereum L2s to start using a new transaction type - that transports L2 transaction and messaging data to L1 in "blobs". Blobs are a considerably - more cost-efficient alternative to the existing method of posting L2 transaction and messaging data + EIP-4844's arrival on Ethereum Mainnet enabled Ethereum L2s to start using a new transaction type + that transports L2 transaction and messaging data to L1 in "blobs". Blobs are a considerably + more cost-efficient alternative to the existing method of posting L2 transaction and messaging data to L1, which involved sending `calldata` embedded in a transaction. - With Alpha v3, L2 transaction data is added to blobs. The savings generated by using blobs rather + With Alpha v3, L2 transaction data is added to blobs. The savings generated by using blobs rather than `calldata` mainly derive from avoiding the highly competitive L1 gas fee market. - Since transactions containing `calldata` have to compete with regular L1 transactions for - block space, L2s are vulnerable to L1 network congestion and the fee spikes it can generate. - Before the transition to using blobs, L1 data availability—i.e. the cost of posting data to L1 + Since transactions containing `calldata` have to compete with regular L1 transactions for + block space, L2s are vulnerable to L1 network congestion and the fee spikes it can generate. + Before the transition to using blobs, L1 data availability—i.e. the cost of posting data to L1 in `calldata`—made up more than 95% of the gas costs on Linea. - Conversely, blobs have their own fee market, completely separate to the regular gas fee market on - L1. As a result, L2s like Linea now have an alternative to paying regular gas fees, and can - instead compete for blob space. + Conversely, blobs have their own fee market, completely separate to the regular gas fee market on + L1. As a result, L2s like Linea now have an alternative to paying regular gas fees, and can + instead compete for blob space. - Due to having an entirely new market designed for L2 data availability, the cost of using blobs + Due to having an entirely new market designed for L2 data availability, the cost of using blobs will be a fraction of the cost of using `calldata`. +
L1 and L2 smart contracts have been updated and deployed for Alpha v3. The contract addresses are: @@ -252,17 +234,14 @@ L1 and L2 smart contracts have been updated and deployed for Alpha v3. The contr - Linea Sepolia: [0x971e727e956690b9957be6d51Ec16E73AcAC83A7](https://sepolia.lineascan.build/address/0x971e727e956690b9957be6d51Ec16E73AcAC83A7) - Linea Mainnet: [0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec](https://lineascan.build/address/0x508ca82df566dcd1b0de8296e70a96332cd644ec) -Smart contract updates will be executed by the Linea Security Council using the Safe multi-sig -procedure. +Smart contract updates will be executed by the Linea Security Council using the Safe multi-sig procedure. Additionally, all contracts have been audited by OpenZeppelin. You can find the report [here](https://blog.openzeppelin.com/linea-blob-submission-audit). **March 27** -- Block time reduced to 3 seconds. This change increases the throughput of the network to avoid -any potential L2 execution bottlenecks from increased Linea activity. -- Gas fee reductions. After EIP-4844 was implemented on March 26, we monitored data for 24 hours -before reducing gas fees for all users on March 27. +- Block time reduced to 3 seconds. This change increases the throughput of the network to avoid any potential L2 execution bottlenecks from increased Linea activity. +- Gas fee reductions. After EIP-4844 was implemented on March 26, we monitored data for 24 hours before reducing gas fees for all users on March 27. ### Breaking changes @@ -273,26 +252,28 @@ None. ### February 19 **Testnet:** + - Released a higher priced version of `linea_estimateGas` (this will change once the endpoint is fully functional) **Mainnet:** + - Released a higher priced version of `linea_estimateGas` (this will change once the endpoint is fully functional) ### February 12 **Testnet:** -- Updated Bridge UI to v0,5.4 to support the new claiming method via Linea SDK v0.2.1 + +- Updated Bridge UI to v0,5.4 to support the new claiming method via Linea SDK v0.2.1 **Mainnet:** -- Updated Bridge UI to v0,5.4 to support the new claiming method via Linea SDK v0.2.1 + +- Updated Bridge UI to v0,5.4 to support the new claiming method via Linea SDK v0.2.1 ### February 5 **Testnet:** -- Deployed Linea Gas API to estimate how much gas is necessary to be included and published on Ethereum. -:::note -Learn how to use the Linea Gas API [here](https://docs.linea.build/reference/api/linea-estimategas). -::: + +- Deployed Linea Gas API to estimate how much gas is necessary to be included and published on Ethereum. :::note Learn how to use the Linea Gas API [here](https://docs.linea.build/reference/api/linea-estimategas). ::: ## Alpha v2 @@ -323,37 +304,29 @@ L1 costs are primarily driven by the following: - Hashing the batch submission data to produce the public input of the Plonk verifier. -- Calldata costs, driven by the size of the batch submission data. This includes all the -transaction data from L2, as well as messaging data (one hash per L2 to L1 message). +- Calldata costs, driven by the size of the batch submission data. This includes all the transaction data from L2, as well as messaging data (one hash per L2 to L1 message). ### Features To decrease L1 costs, we implemented the following features: - Proof aggregation: - - This allows us to create a set of execution proofs for conflated batches and generates an aggregated proof - that verifies that all the batches are correct. Since it takes the same amount of gas to verify - an aggregated proof vs. a proof for a single batch of conflated blocks, the average cost of verifying a - proof aggregating N proofs is N times cheaper. + - This allows us to create a set of execution proofs for conflated batches and generates an aggregated proof that verifies that all the batches are correct. Since it takes the same amount of gas to verify an aggregated proof vs. a proof for a single batch of conflated blocks, the average cost of verifying a proof aggregating N proofs is N times cheaper.
- Learn more about proof aggregation +{" "} + +Learn more about proof aggregation - Generating a zkSNARK proof on L1 is an essential step for finalizing transactions, as a verified - proof demonstrates the integrity and validity of the submitted transactions. +Generating a zkSNARK proof on L1 is an essential step for finalizing transactions, as a verified proof demonstrates the integrity and validity of the submitted transactions. - Previously, Linea generated one proof per batch of transactions. After Alpha v2, Linea began - to recursively aggregate multiple proofs into one. +Previously, Linea generated one proof per batch of transactions. After Alpha v2, Linea began to recursively aggregate multiple proofs into one. - The verification process on L1 costs ~400,000 gas — a cost that previously had to be covered for - every batch. This gas cost is the same, however, for verifying a single batch of conflated batches - (as Linea did in Alpha v1) as it is for verifying an aggregated proof representing multiple - batches (as in Alpha v2). A proof that aggregates N proofs is N times cheaper, as the cost - remains consistent. +The verification process on L1 costs ~400,000 gas — a cost that previously had to be covered for every batch. This gas cost is the same, however, for verifying a single batch of conflated batches (as Linea did in Alpha v1) as it is for verifying an aggregated proof representing multiple batches (as in Alpha v2). A proof that aggregates N proofs is N times cheaper, as the cost remains consistent. + +With Alpha v2 upgrades, Linea now averages ~30 batches per final proof, making the process 1/30th as costly as it was in Alpha v1. - With Alpha v2 upgrades, Linea now averages ~30 batches per final proof, making the process - 1/30th as costly as it was in Alpha v1.
- Data compression: @@ -361,40 +334,31 @@ To decrease L1 costs, we implemented the following features:
- Learn more about data compression +{" "} + +Learn more about data compression - Data compression significantly reduces the cost of posting L2 transaction and messaging data - to L1. +Data compression significantly reduces the cost of posting L2 transaction and messaging data to L1. - The system leverages the Linea prover's ability to operate with a compressed input, meaning it - can decompress `calldata` or blob data to validate L2 state transitions. The data passed to the - L1 smart contract can therefore be considerably smaller, driving down the sum cost of transactions - in each block. +The system leverages the Linea prover's ability to operate with a compressed input, meaning it can decompress `calldata` or blob data to validate L2 state transitions. The data passed to the L1 smart contract can therefore be considerably smaller, driving down the sum cost of transactions in each block. - The data compression algorithm is completely lossless, and can achieve compression ratios of up to - 15:1 (where the data is 15 times smaller than its uncompressed state). This affords Linea - the ability to submit data about far more transactions in each batch: before Alpha v2, - Linea averaged ~150 transactions per batch; afterwards, it averages ~1,500. +The data compression algorithm is completely lossless, and can achieve compression ratios of up to 15:1 (where the data is 15 times smaller than its uncompressed state). This affords Linea the ability to submit data about far more transactions in each batch: before Alpha v2, Linea averaged ~150 transactions per batch; afterwards, it averages ~1,500. + +As a result, significantly more transactions can be processed for the same computational cost on L1. The combination of blobs and data compression further amplifies the gas fee savings that are passed on to Linea users. - As a result, significantly more transactions can be processed for the same computational cost on L1. - The combination of blobs and data compression further amplifies the gas fee savings that are - passed on to Linea users.
- Switched L2 to L1 messaging anchoring from individual hashes to Merkle trees: - - Due to the size of the Merkle trees (32 messages) requiring only one Merkle root to be anchored, there - is a 32x calldata size reduction for message hashes + - Due to the size of the Merkle trees (32 messages) requiring only one Merkle root to be anchored, there is a 32x calldata size reduction for message hashes ### Smart contract changes -To support these new features, we implemented changes to our smart contracts. +To support these new features, we implemented changes to our smart contracts. -We introduce a `VERIFIER_SETTER_ROLE`, that will be attributed to the Timelock.sol so that all core -contract upgrades (Rollup and Message and Token bridge) and verifiers are executed through a TimeLock mechanism. -Note that we are also using this upgrade to update the way the type 2 state was calculated; as such we'll -need to call `finalizeWithoutProof` to perform a state transition from type2 state v1 to type2 state v2. +We introduce a `VERIFIER_SETTER_ROLE`, that will be attributed to the Timelock.sol so that all core contract upgrades (Rollup and Message and Token bridge) and verifiers are executed through a TimeLock mechanism. Note that we are also using this upgrade to update the way the type 2 state was calculated; as such we'll need to call `finalizeWithoutProof` to perform a state transition from type2 state v1 to type2 state v2. The Security Council will first execute the following transactions on L1: + - Assign Operator Role via the Safe to the account for blob submission - Assign Verifier Setter role via the Safe to the Timelock - Schedule Set new Verifier at index 0 @@ -404,17 +368,18 @@ The Security Council will first execute the following transactions on L1: - Update Zodiac delegate roles from pauseByType(bytes32) -> pauseByType(uint8) The Security Council will then execute the following transactions on L2: + - Schedule L2MessageService upgrade - Execute L2MessageService upgrade Post upgrade, Execute the following Security Council transactions on L1: + - Call FinalizeWithoutProof - Clear verifier mapping at index 6 and 7 -The audited commit for this update can be found -[here](https://github.com/Consensys/linea-contracts-audit/commit/99039ebc8d6cb3009cf46286d5de4c484e03bc81). +The audited commit for this update can be found [here](https://github.com/Consensys/linea-contracts-audit/commit/99039ebc8d6cb3009cf46286d5de4c484e03bc81). -Two independent audits have been performed for this update. Reports can be found here: +Two independent audits have been performed for this update. Reports can be found here: - Diligence: https://consensys.io/diligence/audits/2024/01/linea-contracts-update/ @@ -424,28 +389,22 @@ Two independent audits have been performed for this update. Reports can be found **Message claiming** -- Parties claiming messages on Layer 1 will need to adjust claiming behavior to account for Merkle Proof - generation requests and their submission when claiming a message. This applies to messages sent post - upgrading. Pre-existing messages must be claimed with the current approach. +- Parties claiming messages on Layer 1 will need to adjust claiming behavior to account for Merkle Proof generation requests and their submission when claiming a message. This applies to messages sent post upgrading. Pre-existing messages must be claimed with the current approach. -:::info[Note] +:::info[Note] -If you are using the Linea Bridge UI, then this is already done for you. If you are a partner/user who manages -their claiming outside of the Bridge UI, then we recommend looking at the updated [SDK](../guides/linea-sdk/index.md). +If you are using the Linea Bridge UI, then this is already done for you. If you are a partner/user who manages their claiming outside of the Bridge UI, then we recommend looking at the updated [SDK](../guides/linea-sdk/index.md). ::: **Finalization events** -- After migration to the new finalization mechanism, the rollup contract will no longer emit finalization - events per block, but will instead emit events for data submission as well as an event indicating the - current point of finalization. +- After migration to the new finalization mechanism, the rollup contract will no longer emit finalization events per block, but will instead emit events for data submission as well as an event indicating the current point of finalization. - The calldata will contain only the final block state root hash and final block number. :::info[Note] -This is a breaking change for consumers listening to the existing events. The `BlockFinalized` event will -be replaced by the `DataFinalized` event. +This is a breaking change for consumers listening to the existing events. The `BlockFinalized` event will be replaced by the `DataFinalized` event. ::: @@ -484,9 +443,11 @@ be replaced by the `DataFinalized` event. ### December 11 **Testnet:** + - Transitioned the sequencer to Besu from Geth **Mainnet:** + - Fixes to the Linea bridge UI: - Users are now redirected to MetaMask Mobile when attempting to access the bridge on a mobile browser - Default token list now refreshes on every load rather than being stored locally; only the user's custom tokens are stored @@ -494,23 +455,27 @@ be replaced by the `DataFinalized` event. ### December 4 **Testnet:** + - Fixes to the Linea bridge UI: - Users are now redirected to MetaMask Mobile when attempting to access the bridge on a mobile browser - Default token list now refreshes on every load rather than being stored locally; only the user's custom tokens are stored **Mainnet:** + - Lowered block time to 6 seconds ## November 2023 ### November 27 -**Testnet:** +**Testnet:** + - Upgrades to the official Linea bridge: - UI updated to display tokens from the official token list - Improved page to redirect most users to MetaMask Portfolio to bridge **Mainnet:** + - Upgrades to the official Linea bridge: - UI updated to display tokens from the official token list - Improved page to redirect most users to MetaMask Portfolio to bridge @@ -518,10 +483,12 @@ be replaced by the `DataFinalized` event. ### November 13 **Testnet:** + - Lowered block time to 6 seconds - Updated default `gasPrice` to 3 Gwei **Mainnet:** + - Increased block size from 60KB to 109KB - Deployed the Linea Voyage XP (LXP) [token contract](https://lineascan.build/address/0xd83af4fbD77f3AB65C3B1Dc4B38D7e67AEcf599A) - Lowered block time to 8 seconds @@ -532,29 +499,26 @@ be replaced by the `DataFinalized` event. ### October 23 **Testnet:** + - Increased block size limit from 70KB to 109KB ## Summary release notes (June - October) ### Performance improvements -- Changes to the Genesis File: We made changes to the genesis file to enable block times to be reduced. This - enhancement improves the overall performance and throughput of Linea. +- Changes to the Genesis File: We made changes to the genesis file to enable block times to be reduced. This enhancement improves the overall performance and throughput of Linea. - Improved Gas Limit Estimation for Finalization on L1: We improved the gas limit estimation for finalization on L1. ### Cost efficiency -- We updated the L1 message service contract to work with the Merkle tree, reducing gas costs and further - enhancing the cost-effectiveness of Linea. +- We updated the L1 message service contract to work with the Merkle tree, reducing gas costs and further enhancing the cost-effectiveness of Linea. -- We added a fixed cost to the gas price to cover infrastructure costs for system economic sustainability. This - change ensures the long-term financial viability of Linea. +- We added a fixed cost to the gas price to cover infrastructure costs for system economic sustainability. This change ensures the long-term financial viability of Linea. ### User experience -- We smoothed the L2 gas price estimation by using an L1 moving average. This update makes our gas price - estimation more accurate and reliable. +- We smoothed the L2 gas price estimation by using an L1 moving average. This update makes our gas price estimation more accurate and reliable. ## Linea Alpha v0.2.3 (June 22, 2023) @@ -570,15 +534,13 @@ This release focuses on updating the Postman SDK configuration values and revisi ### Features -- Updated the Postman SDK configuration files to handle messages that are contract calls with zero ETH value - being transferred and revised gas fee calculations. +- Updated the Postman SDK configuration files to handle messages that are contract calls with zero ETH value being transferred and revised gas fee calculations. ## Linea Alpha v0.2.1 (June 15, 2023) ### Summary -This release reduces the gas cost of submitting a batch of transactions on L1 by optimizing L2 logs in the -calldata that is sent to L1. +This release reduces the gas cost of submitting a batch of transactions on L1 by optimizing L2 logs in the calldata that is sent to L1. ### Features @@ -607,36 +569,27 @@ calldata that is sent to L1. ### Summary -This release focuses on testing a substantial architecture upgrade in preparation for Mainnet launch. It -contains multiple improvements and breaking changes, specifically around the messaging layer which is changed -to a push model. It also improves EVM prover coverage, and provides batch conflation. +This release focuses on testing a substantial architecture upgrade in preparation for Mainnet launch. It contains multiple improvements and breaking changes, specifically around the messaging layer which is changed to a push model. It also improves EVM prover coverage, and provides batch conflation. ### Features - Add Batch Conflation feature to the sequencer to minimize L1 transactions cost. - - With Batch Conflation, L2 blocks' proofs that should have been independent are instead merged together. - Therefore, L1 costs for these blocks’ proofs are divided by the number of merged blocks. + - With Batch Conflation, L2 blocks' proofs that should have been independent are instead merged together. Therefore, L1 costs for these blocks’ proofs are divided by the number of merged blocks. - Improve the following smart contracts: - Rollup zkEVM: Upgrade the rollup main contract with support for - Conflation - Security Council management - Verifier - - Outer proof system moved from Groth16 to Plonk + custom gates to support efficient - Fiat Shamir, c.f.: https://eprint.iacr.org/2022/1072.pdf section 6.2 + - Outer proof system moved from Groth16 to Plonk + custom gates to support efficient Fiat Shamir, c.f.: https://eprint.iacr.org/2022/1072.pdf section 6.2 - Messaging Service - - Changed the message service model by splitting the delivery into anchoring and claiming of - messages to allow more flexible workflows, remove the mandatory fee for L1→L2, reduce the mandatory fee for L2→L1 - - Canonical Token Bridge: Upgrade from 1-1 ERC-20 basic token bridge to N-N ERC-20 canonical token bridge - with reservation and token registry + - Changed the message service model by splitting the delivery into anchoring and claiming of messages to allow more flexible workflows, remove the mandatory fee for L1→L2, reduce the mandatory fee for L2→L1 + - Canonical Token Bridge: Upgrade from 1-1 ERC-20 basic token bridge to N-N ERC-20 canonical token bridge with reservation and token registry - Add Postman Service for message execution - - The Postman Service is Linea’s off-chain message delivery service. It’s decentralized, permissionless, and - used to claim messages once the protocol has anchored the message hashes. The first release will only - contain the following scenarios: + - The Postman Service is Linea’s off-chain message delivery service. It’s decentralized, permissionless, and used to claim messages once the protocol has anchored the message hashes. The first release will only contain the following scenarios: - DApps/protocols operating the SDK (to be released) claiming messages and paying for gas - The protocol can filter messages based on origin or destination smart-contracts - Linea operating the SDK for dApps/Protocols that aren’t yet integrated - - If messages don’t get delivered by the postman, the message can be manually claimed by calling - `claimMessage` with the `MessageSent` event parameters or by using the SDK. + - If messages don’t get delivered by the postman, the message can be manually claimed by calling `claimMessage` with the `MessageSent` event parameters or by using the SDK. - Update prover to integrate with the new architecture and support Batch Conflation ### Breaking changes @@ -722,7 +675,6 @@ to a push model. It also improves EVM prover coverage, and provides batch confla :::note - Contracts audit is in progress. This doesn't reflect final versions. ::: @@ -750,7 +702,7 @@ Contracts audit is in progress. This doesn't reflect final versions. - Contracts - - Transparent Proxy: `0xC499a572640B64eA1C8c194c43Bc3E19940719dC` + - Transparent Proxy: `0xC499a572640B64eA1C8c194c43Bc3E19940719dC` - Implementation: `0xc0557e2149751e201749b87f86acd91DB22e2662` - Bridging partners, before sending messages on L2, need to retrieve the service protection fee before sending messages and include it in the value sent. diff --git a/docs/developers/quickstart/deploy-smart-contract/atlas.mdx b/docs/developers/quickstart/deploy-smart-contract/atlas.mdx index eceebf420..fc923f8dc 100644 --- a/docs/developers/quickstart/deploy-smart-contract/atlas.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/atlas.mdx @@ -12,19 +12,17 @@ Atlas is a browser-based IDE with an integrated AI assistant that allows you to 1. Go to the top right and change the network to the Linea mainnet or testnet. 1. Select **Deploy**. -You can write tests for your contract (Foundry is built-in), and ask the AI to help you write your -contracts, deployment scripts, and more. +You can write tests for your contract (Foundry is built-in), and ask the AI to help you write your contracts, deployment scripts, and more. -View [the tutorial](https://www.youtube.com/embed/mnyYizj3l_8?si=eVXHsWWZxlg9EU4D), which shows how to build a -DEX from scratch on Linea. You can also [open and run the tutorial](https://app.atlaszk.com/projects?template=https://github.com/sameesiddiqui/LilDex&open=LilDex.sol) in one click. +View [the tutorial](https://www.youtube.com/embed/mnyYizj3l_8?si=eVXHsWWZxlg9EU4D), which shows how to build a DEX from scratch on Linea. You can also [open and run the tutorial](https://app.atlaszk.com/projects?template=https://github.com/sameesiddiqui/LilDex&open=LilDex.sol) in one click.
-
- -
+
+ +
diff --git a/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx b/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx index 17d903a68..780e9bf33 100644 --- a/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx @@ -4,14 +4,12 @@ description: Deploy a smart contract using Cookbook.dev. image: /img/socialCards/cookbookdev.jpg --- -import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; -[Cookbook.dev](https://www.cookbook.dev/?utm=lineadocs) is an open-source smart contract registry where -developers can find solidity primitives, libraries, and smart contracts for protocols. It provides an easy and -fast way to develop smart contracts by integrating with a variety of blockchain-native developer tools. +[Cookbook.dev](https://www.cookbook.dev/?utm=lineadocs) is an open-source smart contract registry where developers can find solidity primitives, libraries, and smart contracts for protocols. It provides an easy and fast way to develop smart contracts by integrating with a variety of blockchain-native developer tools. -Here, we'll walk through searching for a protocol on Cookbook and deploying it to Linea using -Cookbook's no-code deploy and using Cookbook with Remix, Hardhat and Foundry. +Here, we'll walk through searching for a protocol on Cookbook and deploying it to Linea using Cookbook's no-code deploy and using Cookbook with Remix, Hardhat and Foundry. ## Search Cookbook's smart contract registry @@ -26,11 +24,9 @@ Navigate to [cookbook.dev/chains/Linea](https://www.cookbook.dev/chains/Linea?ut
-To learn about a smart contract on Cookbook, select the protocol, and select **Expand**. This opens the code -alongside ChefGPT, Cookbook's AI Solidity assistant. +To learn about a smart contract on Cookbook, select the protocol, and select **Expand**. This opens the code alongside ChefGPT, Cookbook's AI Solidity assistant. -Highlight selections of the code and press **Analyze Snippet** to get more information about the smart contract -code you're looking at, or ask ChefGPT questions about Linea, solidity, or your smart contract. +Highlight selections of the code and press **Analyze Snippet** to get more information about the smart contract code you're looking at, or ask ChefGPT questions about Linea, solidity, or your smart contract.
@@ -81,14 +77,11 @@ Manage your deployed smart contract under **My Dashboard** in Cookbook. ### Method 1 - Use the Cookbook.dev website and open in Remix -On a smart contract or protocol page in Cookbook, select the **Open in Remix** option. Your smart contract will -automatically be opened in a new Remix workspace. +On a smart contract or protocol page in Cookbook, select the **Open in Remix** option. Your smart contract will automatically be opened in a new Remix workspace. -Select **Compile** to compile your smart contract in Remix. Most contracts opened with Cookbook will automatically -compile within Remix. +Select **Compile** to compile your smart contract in Remix. Most contracts opened with Cookbook will automatically compile within Remix. -Refer to the [Remix instructions](./remix.mdx) for more information on how to compile and deploy smart -contracts in the Remix IDE. +Refer to the [Remix instructions](./remix.mdx) for more information on how to compile and deploy smart contracts in the Remix IDE. ### Method 2 - Use the Cookbook Remix plug-in within the Remix IDE @@ -96,48 +89,44 @@ contracts in the Remix IDE. 1. Add the Cookbook Plugin to Remix by clicking the Cookbook Logo under **Featured Plugins** on the Remix Homepage. -
-
- Cookbook Remix Featured Plugin -
-
- - Alternatively, search Cookbook and select **Activate** in the Remix Plugin Manager. - -
-
- Cookbook Remix Add Plugin -
-
+
+
+ Cookbook Remix Featured Plugin +
+
+ + Alternatively, search Cookbook and select **Activate** in the Remix Plugin Manager. + +
+
+ Cookbook Remix Add Plugin +
+
1. Search for any protocol or smart contract and click the search result to import the smart contract code into Remix. - Cookbook's AI solidity co-pilot, ChefGPT, is available within the Remix plugin to answer questions about - Linea, Solidity, or the smart contract you're working with. + Cookbook's AI solidity co-pilot, ChefGPT, is available within the Remix plugin to answer questions about Linea, Solidity, or the smart contract you're working with. -
-
- Cookbook Remix Search -
-
+
+
+ Cookbook Remix Search +
+
1. Compile and deploy the smart contract as described in [the Remix instructions](./remix.mdx). ## Deploy your smart contract with Hardhat -After finding the smart contract or protocol you want to work with in [Cookbook](https://www.cookbook.dev/?utm=lineadocs), -select the **Download Source** option and select **Hardhat** to download the contract boilerplate. For -this example, we'll use [Cookbook's Simple ERC-20 Token Smart Contract](https://www.cookbook.dev/contracts/simple-token?utm=lineadocs). - +After finding the smart contract or protocol you want to work with in [Cookbook](https://www.cookbook.dev/?utm=lineadocs), select the **Download Source** option and select **Hardhat** to download the contract boilerplate. For this example, we'll use [Cookbook's Simple ERC-20 Token Smart Contract](https://www.cookbook.dev/contracts/simple-token?utm=lineadocs). ### Compile the smart contract @@ -153,8 +142,7 @@ Then, compile the smart contract: npx hardhat compile ``` -Add arguments to the `constructorArgs` array in the `deploy.js` file in the `scripts` folder and save. If you -do not need any arguments, leave the array empty. +Add arguments to the `constructorArgs` array in the `deploy.js` file in the `scripts` folder and save. If you do not need any arguments, leave the array empty. ### Deploy the smart contract @@ -164,29 +152,29 @@ do not need any arguments, leave the array empty. 1. In your `.env` file, add your Infura Linea API key and add your wallet private key. - ``` - INFURA_API_KEY_LINEA_SEPOLIA = "" - WALLET_PRIVATE_KEY = "" - ``` + ``` + INFURA_API_KEY_LINEA_SEPOLIA = "" + WALLET_PRIVATE_KEY = "" + ``` 1. In the `hardhat.config.js` file, add the following lines: - ```js - const INFURA_API_KEY_LINEA_SEPOLIA = process.env.INFURA_API_KEY_LINEA; - ``` + ```js + const INFURA_API_KEY_LINEA_SEPOLIA = process.env.INFURA_API_KEY_LINEA; + ``` - ```js - lineaSepolia: { - url: `https://linea-sepolia.io/v3/${INFURA_API_KEY_LINEA}`, - accounts: [PRIVATE_KEY], - }, + ```js + lineaSepolia: { + url: `https://linea-sepolia.io/v3/${INFURA_API_KEY_LINEA}`, + accounts: [PRIVATE_KEY], + }, ``` 1. In the `hardhat.config.js` file, uncomment the following line: - ```js - const PRIVATE_KEY = process.env.PRIVATE_KEY; - ``` + ```js + const PRIVATE_KEY = process.env.PRIVATE_KEY; + ``` 1. Deploy the smart contract to the Linea Sepolia testnet @@ -194,37 +182,37 @@ do not need any arguments, leave the array empty. npx hardhat run --network (lineaSepolia) scripts/deploy.js ``` -Hardhat will return the deployed smart contract address in your terminal. View and verify your smart contract -on the [Linea Sepolia block explorer](https://sepolia.lineascan.build/). - +Hardhat will return the deployed smart contract address in your terminal. View and verify your smart contract on the [Linea Sepolia block explorer](https://sepolia.lineascan.build/). + + 1. In your `.env` file, add your Infura Linea API key and add your wallet private key. - ``` - INFURA_API_KEY_LINEA = "" - WALLET_PRIVATE_KEY = "" - ``` + ``` + INFURA_API_KEY_LINEA = "" + WALLET_PRIVATE_KEY = "" + ``` 1. In the `hardhat.config.js` file, add the following lines: - ```js - const INFURA_API_KEY_LINEA = process.env.INFURA_API_KEY_LINEA; - ``` + ```js + const INFURA_API_KEY_LINEA = process.env.INFURA_API_KEY_LINEA; + ``` - ```js - linea: { - url: `https://linea-mainnet.io/v3/${INFURA_API_KEY_LINEA}`, - accounts: [PRIVATE_KEY], - }, - ``` + ```js + linea: { + url: `https://linea-mainnet.io/v3/${INFURA_API_KEY_LINEA}`, + accounts: [PRIVATE_KEY], + }, + ``` 1. In the `hardhat.config.js` file, uncomment the following line: - ```js - const PRIVATE_KEY = process.env.PRIVATE_KEY; - ``` + ```js + const PRIVATE_KEY = process.env.PRIVATE_KEY; + ``` 1. Deploy the smart contract to the Linea Mainnet: @@ -232,17 +220,15 @@ on the [Linea Sepolia block explorer](https://sepolia.lineascan.build/). npx hardhat run --network (linea) scripts/deploy.js ``` -Hardhat will return the deployed smart contract address in your terminal. View and verify your smart contract -on the [Linea Mainnet block explorer](https://lineascan.build/). - +Hardhat will return the deployed smart contract address in your terminal. View and verify your smart contract on the [Linea Mainnet block explorer](https://lineascan.build/). + + ## Deploy your smart contract with Foundry -After finding the smart contract or protocol you want to work with in [Cookbook](https://www.cookbook.dev/chains/Linea?utm=lineadocs), -select the **Download Source** option and select **Foundry** to download the contract boilerplate. For this -example, we'll use [Cookbook's Simple ERC-20 Token Smart Contract](https://www.cookbook.dev/contracts/simple-token?utm=lineadocs). +After finding the smart contract or protocol you want to work with in [Cookbook](https://www.cookbook.dev/chains/Linea?utm=lineadocs), select the **Download Source** option and select **Foundry** to download the contract boilerplate. For this example, we'll use [Cookbook's Simple ERC-20 Token Smart Contract](https://www.cookbook.dev/contracts/simple-token?utm=lineadocs). **Prerequisites**: @@ -251,52 +237,45 @@ example, we'll use [Cookbook's Simple ERC-20 Token Smart Contract](https://www.c 1. In the project directory, build the contracts: - ```sh - forge build - ``` + ```sh + forge build + ``` - If you encounter a "stack too deep" error, try running the following command instead + If you encounter a "stack too deep" error, try running the following command instead - ```sh - forge build --via - ``` + ```sh + forge build --via + ``` -1. In the `scripts` directory, uncomment all the code in the `contract.s.sol` file. - Replace `"ARG1"`, `"ARG2"`, `2000` with your `Token Name`, `Token Symbol` and desired - `Token Quantity` where you see the code below: +1. In the `scripts` directory, uncomment all the code in the `contract.s.sol` file. Replace `"ARG1"`, `"ARG2"`, `2000` with your `Token Name`, `Token Symbol` and desired `Token Quantity` where you see the code below: - ```solidity - FixedToken _contract = new FixedToken("ARG1", "ARG2", 2000); - ``` + ```solidity + FixedToken _contract = new FixedToken("ARG1", "ARG2", 2000); + ``` -1. Update the `.env` file with your [Linea RPC URL](https://docs.infura.io/api/networks/linea/choose-a-network), followed - by your [MetaMask wallet private key](https://metamask.io/) and your - [Etherscan API key token values](https://etherscan.io/apis). +1. Update the `.env` file with your [Linea RPC URL](https://docs.infura.io/api/networks/linea/choose-a-network), followed by your [MetaMask wallet private key](https://metamask.io/) and your [Etherscan API key token values](https://etherscan.io/apis). - :::note + :::note - The example uses Sepolia, but you can update it to use Mainnet instead. + The example uses Sepolia, but you can update it to use Mainnet instead. - ::: + ::: 1. Run the command to define your environment variables globally: - ```sh - source .env - ``` + ```sh + source .env + ``` 1. Deploy your contracts: - ```sh - forge script script/contract.s.sol:ContractScript --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv - ``` + ```sh + forge script script/contract.s.sol:ContractScript --rpc-url $SEPOLIA_RPC_URL --broadcast --verify -vvvv + ``` - :::note - If using Mainnet, then update the `--rpc-url` accordingly with the variable in the `.env` file. - ::: + :::note If using Mainnet, then update the `--rpc-url` accordingly with the variable in the `.env` file. ::: -Your contract will be verified on the Linea Sepolia explorer automatically upon deployment. You can manage and -interact with your newly deployed smart contract in the [Linea Sepolia block explorer](https://sepolia.lineascan.build/). +Your contract will be verified on the Linea Sepolia explorer automatically upon deployment. You can manage and interact with your newly deployed smart contract in the [Linea Sepolia block explorer](https://sepolia.lineascan.build/). :::note @@ -306,8 +285,7 @@ The tests in the `contract.t.sol` file are only examples, please generate your o ## Resources -For more information on using Cookbook to find, learn about or build with smart contracts, see -the following resources: +For more information on using Cookbook to find, learn about or build with smart contracts, see the following resources: - [Documentation](https://docs.cookbook.dev/) - [Blog](https://medium.com/@cookbookdev) diff --git a/docs/developers/quickstart/deploy-smart-contract/foundry.mdx b/docs/developers/quickstart/deploy-smart-contract/foundry.mdx index 346f543a5..3968fd0d0 100644 --- a/docs/developers/quickstart/deploy-smart-contract/foundry.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/foundry.mdx @@ -4,19 +4,20 @@ description: Deploy a smart contract using Foundry. image: /img/socialCards/foundry.jpg --- -import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; In this quickstart, we'll create a basic [Foundry](https://book.getfoundry.sh/) project. Here's a video walkthrough:
-
- -
+
+ +
## Prerequisites @@ -47,16 +48,13 @@ cd linea-tutorial ## Deploy a smart contract -To deploy a smart contract we highly recommend using an Infura endpoint, as the public endpoint may experience -rate limiting and is not meant for production use. +To deploy a smart contract we highly recommend using an Infura endpoint, as the public endpoint may experience rate limiting and is not meant for production use. -[Sign up for an Infura account](https://docs.infura.io/api/getting-started) to get an API key that -provides access to the Linea endpoints. Assign the Linea endpoints you want to access to your API key. +[Sign up for an Infura account](https://docs.infura.io/api/getting-started) to get an API key that provides access to the Linea endpoints. Assign the Linea endpoints you want to access to your API key. :::caution -These instructions use API keys and private keys inline. We highly recommend hiding them -[in `.env` files](#deploy-a-smart-contract-using-a-env-file) +These instructions use API keys and private keys inline. We highly recommend hiding them [in `.env` files](#deploy-a-smart-contract-using-a-env-file) ::: @@ -68,9 +66,7 @@ forge create --rpc-url YOUR_LINEA_ENDPOINT src/Counter.sol:Counter --private-key In the command: -- Replace `YOUR_LINEA_ENDPOINT` with the URL of a - [supported Infura Linea network](https://docs.infura.io/api/networks/linea/choose-a-network) - or [public endpoint URL](../info-contracts.mdx#network-information). +- Replace `YOUR_LINEA_ENDPOINT` with the URL of a [supported Infura Linea network](https://docs.infura.io/api/networks/linea/choose-a-network) or [public endpoint URL](../info-contracts.mdx#network-information). - Replace `YOUR_PRIVATE_KEY` with your wallet's private key. Your output should look similar to: @@ -83,10 +79,7 @@ Transaction hash: 0x967e1290b285e67b3d74940ee19925416734c345f58bd1ec64dcea134647 ## Deploy a smart contract using a `.env` file -Directly pasting your private key into the command line poses security risks. To avoid exposing sensitive -information such as wallet private keys or API keys, use files with the `.env` extension to store private -data. Create a `.env` file, then add the file to the `.gitignore` file to prevent committing it. Populate -the `.env` file with the relevant private information: +Directly pasting your private key into the command line poses security risks. To avoid exposing sensitive information such as wallet private keys or API keys, use files with the `.env` extension to store private data. Create a `.env` file, then add the file to the `.gitignore` file to prevent committing it. Populate the `.env` file with the relevant private information: ```bash PRIVATE_KEY=YOUR_PRIVATE_KEY diff --git a/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx b/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx index 776621053..20633232f 100644 --- a/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx @@ -19,129 +19,124 @@ To create an empty Hardhat project: 1. Create your project directory: - ```bash - mkdir linea-tutorial; cd linea-tutorial - ``` -1. Initialize your Node.js project: + ```bash + mkdir linea-tutorial; cd linea-tutorial + ``` - ```bash - npm init - ``` +1. Initialize your Node.js project: + + ```bash + npm init + ``` 1. Install Hardhat: - ```bash - npm install --save-dev hardhat - ``` + ```bash + npm install --save-dev hardhat + ``` 1. Initialize the Hardhat project: - ```bash - npx hardhat init - ``` + ```bash + npx hardhat init + ``` - In the menu that appears, select **Create a JavaScript project** and press **Enter**. Accept all - the default values in the questionnaire. + In the menu that appears, select **Create a JavaScript project** and press **Enter**. Accept all the default values in the questionnaire. You should now have a sample contract that deploys and tests a `Lock` contract that locks funds for a set time. :::note - -The default script in `ignition/modules/Lock.js` locks 1 GWEI in the contract upon deployment, you can modify this -value in the script. +The default script in `ignition/modules/Lock.js` locks 1 GWEI in the contract upon deployment, you can modify this value in the script. ::: ## Deploy the contract -You can use the public endpoints or node provider (such as Infura) to deploy your contract to the Linea mainnet or -or testnets. +You can use the public endpoints or node provider (such as Infura) to deploy your contract to the Linea mainnet or or testnets. :::important -The public endpoints are rate limited and not meant for production systems. We recommend using a -node provider such as Infura. You can [sign up for a free Infura account to get an API key](https://docs.infura.io/api/getting-started). +The public endpoints are rate limited and not meant for production systems. We recommend using a node provider such as Infura. You can [sign up for a free Infura account to get an API key](https://docs.infura.io/api/getting-started). ::: -The sample project already includes the deployment script. To deploy on Linea, you'll just need to make -a few modifications to the `hardhat.config.js` file: +The sample project already includes the deployment script. To deploy on Linea, you'll just need to make a few modifications to the `hardhat.config.js` file: -1. Create a `.env` file in the root folder with your wallet's private key and Infura API (if using Infura). +1. Create a `.env` file in the root folder with your wallet's private key and Infura API (if using Infura). - ``` - PRIVATE_KEY=YOUR_PRIVATE_KEY - INFURA_API_KEY=INFURA_API_KEY - ``` + ``` + PRIVATE_KEY=YOUR_PRIVATE_KEY + INFURA_API_KEY=INFURA_API_KEY + ``` - :::warning + :::warning - Please do not check your keys into source control. Please add `.env` to your `.gitignore` + Please do not check your keys into source control. Please add `.env` to your `.gitignore` - ::: + ::: -1. Download and install `dotenv` +1. Download and install `dotenv` - ``` - npm i -D dotenv - ``` + ``` + npm i -D dotenv + ``` + +1. Add Linea to your `hardhat.config.js` file. The following example shows how to add an Infura endpoint and public endpoint to the configuration file. -1. Add Linea to your `hardhat.config.js` file. The following example shows how to add an Infura endpoint and - public endpoint to the configuration file. - - - - - ```javascript - require("@nomicfoundation/hardhat-toolbox"); - require("dotenv").config(); - const { PRIVATE_KEY, INFURA_API_KEY } = process.env; - - module.exports = { - solidity: "0.8.19", - networks: { - linea_sepolia: { - url: `https://linea-sepolia.infura.io/v3/${INFURA_API_KEY}`, - accounts: [PRIVATE_KEY], - }, - linea_mainnet: { - url: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`, - accounts: [PRIVATE_KEY], - }, + + + + + ```javascript + require("@nomicfoundation/hardhat-toolbox"); + require("dotenv").config(); + const { PRIVATE_KEY, INFURA_API_KEY } = process.env; + + module.exports = { + solidity: "0.8.19", + networks: { + linea_sepolia: { + url: `https://linea-sepolia.infura.io/v3/${INFURA_API_KEY}`, + accounts: [PRIVATE_KEY], }, - }; - ``` - - - - - ```javascript - require("@nomicfoundation/hardhat-toolbox"); - require("dotenv").config(); - const { PRIVATE_KEY } = process.env; - - module.exports = { - solidity: "0.8.24", - networks: { - linea_sepolia: { - url: `https://rpc.sepolia.linea.build/`, - accounts: [PRIVATE_KEY], - }, - linea_mainnet: { - url: `https://rpc.linea.build/`, - accounts: [PRIVATE_KEY], - }, + linea_mainnet: { + url: `https://linea-mainnet.infura.io/v3/${INFURA_API_KEY}`, + accounts: [PRIVATE_KEY], }, - }; - ``` + }, + }; + ``` + + + + + + ```javascript + require("@nomicfoundation/hardhat-toolbox"); + require("dotenv").config(); + const { PRIVATE_KEY } = process.env; + + module.exports = { + solidity: "0.8.24", + networks: { + linea_sepolia: { + url: `https://rpc.sepolia.linea.build/`, + accounts: [PRIVATE_KEY], + }, + linea_mainnet: { + url: `https://rpc.linea.build/`, + accounts: [PRIVATE_KEY], + }, + }, + }; + ``` - + - + -1. Deploy your contract. Replace `NETWORK` with a relevant network defined in the `hardhat.config.js` file. For - example `linea_mainnet`. +1. Deploy your contract. Replace `NETWORK` with a relevant network defined in the `hardhat.config.js` file. For example `linea_mainnet`. ```bash npx hardhat ignition deploy ./ignition/modules/Lock.js --network NETWORK diff --git a/docs/developers/quickstart/deploy-smart-contract/index.mdx b/docs/developers/quickstart/deploy-smart-contract/index.mdx index 8a65e1734..8232c8a1c 100644 --- a/docs/developers/quickstart/deploy-smart-contract/index.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/index.mdx @@ -5,6 +5,6 @@ description: Deploy a contract to Linea using a variety of libraries. image: /img/socialCards/deploy-a-smart-contract.jpg --- -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/quickstart/deploy-smart-contract/remix.mdx b/docs/developers/quickstart/deploy-smart-contract/remix.mdx index 9e550b0e0..1dc02fda6 100644 --- a/docs/developers/quickstart/deploy-smart-contract/remix.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/remix.mdx @@ -4,14 +4,14 @@ description: Deploy a smart contract using Remix. image: /img/socialCards/remix.jpg --- -import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; In this tutorial, we'll walk through creating a basic Remix project and deploying a sample contract. ## Explore the Remix workspace -To start using Remix, navigate to their [website](https://remix.ethereum.org/). The default project includes a -code sample with a configured smart contract. +To start using Remix, navigate to their [website](https://remix.ethereum.org/). The default project includes a code sample with a configured smart contract.
@@ -37,20 +37,15 @@ Navigate to the **Solidity compiler** tab on the left navigation and click **Com ## Deploy the contract -You can deploy a smart contract using the injected provider, meaning Remix can auto-detect the network you're -on and your account information. To do this, navigate to the **Deploy & run transactions** tab. +You can deploy a smart contract using the injected provider, meaning Remix can auto-detect the network you're on and your account information. To do this, navigate to the **Deploy & run transactions** tab. :::caution -The public endpoints are rate limited and not meant for production systems. To use Infura, you'll need to -[get an API key](https://docs.infura.io/api/getting-started). -Then, [manually add a network to your MetaMask wallet](https://support.metamask.io/hc/en-us/articles/360043227612-How-to-add-a-custom-network-RPC#h_01G63GGJ83DGDRCS2ZWXM37CV5) using the -[network information](../info-contracts.mdx#network-information). +The public endpoints are rate limited and not meant for production systems. To use Infura, you'll need to [get an API key](https://docs.infura.io/api/getting-started). Then, [manually add a network to your MetaMask wallet](https://support.metamask.io/hc/en-us/articles/360043227612-How-to-add-a-custom-network-RPC#h_01G63GGJ83DGDRCS2ZWXM37CV5) using the [network information](../info-contracts.mdx#network-information). ::: -Switch to the Linea network (mainnet or testnets) in your MetaMask wallet, and from the **ENVIRONMENT** drop down, select -**Injected provider - MetaMask**. +Switch to the Linea network (mainnet or testnets) in your MetaMask wallet, and from the **ENVIRONMENT** drop down, select **Injected provider - MetaMask**.
diff --git a/docs/developers/quickstart/ethereum-differences.mdx b/docs/developers/quickstart/ethereum-differences.mdx index 7dc5637f5..74bbf8b5e 100644 --- a/docs/developers/quickstart/ethereum-differences.mdx +++ b/docs/developers/quickstart/ethereum-differences.mdx @@ -8,80 +8,82 @@ image: /img/socialCards/ethereum-and-linea-differences.jpg ## EVM opcodes -:::info important -Linea uses the London version of the Ethereum Virtual Machine (EVM). All EVM opcodes are managed -identically to Ethereum London unless presented in the following table. +:::info important Linea uses the London version of the Ethereum Virtual Machine (EVM). All EVM opcodes are managed identically to Ethereum London unless presented in the following table. -Solidity 8.23 and later compiles newer versions of the EVM by default. Use the `solc --evm-version london` -command to ensure compatibility with Linea. -::: +Solidity 8.23 and later compiles newer versions of the EVM by default. Use the `solc --evm-version london` command to ensure compatibility with Linea. ::: -Check out [Ethereum's history](https://ethereum.org/en/history/) to learn about major milestones, -forks, and updates to the blockchain. +Check out [Ethereum's history](https://ethereum.org/en/history/) to learn about major milestones, forks, and updates to the blockchain. > ⚠️ At the moment we do not support the `eth_newFilter` and `eth_newBlockFilter` RPC calls.
- 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5 + 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5 - 0x971e727e956690b9957be6d51Ec16E73AcAC83A7 + 0x971e727e956690b9957be6d51Ec16E73AcAC83A7
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opcode nameEthereumLineaExplanation
`BLOBHASH`Returns a versioned hash.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`BLOBBASEFEE`Returns the value of the blob base-fee of the current block.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`DIFFICULTY`/`PREVRANDAO`Returns the RANDAO value from the previous blockReturns a fixed number: `2`In Ethereum, `PREVRANDAO` was previously known as `DIFFICULTY`. It was renamed to - `PREVRANDAO` in [EIP-4399](https://eips.ethereum.org/EIPS/eip-4399) and its functionality - changed due to the switch from PoW to PoS. `PREVRANDAO` returns a full 256-bit value that - represents the randomness beacon output of the previous block. For more, see the 'Security - Considerations' section of EIP-4399.
`MCOPY`Copies memory areas, allowing the destination and source to overlap.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`PUSH0`Pushes the constant value 0 onto the stackn/aPUSH0 was introduced in the Ethereum Mainnet Shanghai upgrade and became available in - Solidity compiler version 0.8.20, which came after the London release. However, Linea - currently supports compiled code targeting the London release of the Ethereum Mainnet. Using - the EVM Version of London when compiling, or using Solidity compiler 0.8.19 or lower will - align with Linea's capabilities.
`TLOAD`Load word from transient storage.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`TSTORE`Save word to transient storage.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
Opcode nameEthereumLineaExplanation
`BLOBHASH`Returns a versioned hash.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`BLOBBASEFEE`Returns the value of the blob base-fee of the current block.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`DIFFICULTY`/`PREVRANDAO`Returns the RANDAO value from the previous blockReturns a fixed number: `2` + In Ethereum, `PREVRANDAO` was previously known as `DIFFICULTY`. It was + renamed to `PREVRANDAO` in + [EIP-4399](https://eips.ethereum.org/EIPS/eip-4399) and its functionality + changed due to the switch from PoW to PoS. `PREVRANDAO` returns a full + 256-bit value that represents the randomness beacon output of the previous + block. For more, see the 'Security Considerations' section of EIP-4399. +
`MCOPY` + Copies memory areas, allowing the destination and source to overlap. + n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`PUSH0`Pushes the constant value 0 onto the stackn/a + PUSH0 was introduced in the Ethereum Mainnet Shanghai upgrade and became + available in Solidity compiler version 0.8.20, which came after the London + release. However, Linea currently supports compiled code targeting the + London release of the Ethereum Mainnet. Using the EVM Version of London + when compiling, or using Solidity compiler 0.8.19 or lower will align with + Linea's capabilities. +
`TLOAD`Load word from transient storage.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
`TSTORE`Save word to transient storage.n/aUnavailable on Linea due to being introduced in the Cancun upgrade.
-_Consult the Ethereum Foundation's [Opcode Reference](https://ethereum.org/en/developers/docs/evm/opcodes/) -for more._ +_Consult the Ethereum Foundation's [Opcode Reference](https://ethereum.org/en/developers/docs/evm/opcodes/) for more._ [Evmdiff](https://www.evmdiff.com) is also a useful resource for comparing Linea with Ethereum. @@ -89,19 +91,16 @@ for more._ ### Precompiles as transaction recipients -On Linea, transactions cannot set the recipient of a transaction (the address in `to`) as a -precompile. The `to` address of transactions cannot be in the range `0x01`-`0x09`. +On Linea, transactions cannot set the recipient of a transaction (the address in `to`) as a precompile. The `to` address of transactions cannot be in the range `0x01`-`0x09`. ### MODEXP -`MODEXP` (`0x05`) on Linea currently only supports arguments (base, exponent, modulus) that do not -exceed 512-byte integers. +`MODEXP` (`0x05`) on Linea currently only supports arguments (base, exponent, modulus) that do not exceed 512-byte integers. ### Point evaluation -The point evaluation precompile was introduced in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile), and is therefore unavailable on Linea. +The point evaluation precompile was introduced in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile), and is therefore unavailable on Linea. ## JSON RPC API -Linea uses the standard Ethereum JSON RPC API methods. However, in a few cases, methods differ from -those on Ethereum. These methods are documented in the [reference section](../reference/api/). +Linea uses the standard Ethereum JSON RPC API methods. However, in a few cases, methods differ from those on Ethereum. These methods are documented in the [reference section](../reference/api/). diff --git a/docs/developers/quickstart/index.mdx b/docs/developers/quickstart/index.mdx index ae05d127e..57c85fc5d 100644 --- a/docs/developers/quickstart/index.mdx +++ b/docs/developers/quickstart/index.mdx @@ -13,11 +13,10 @@ It's always best practice to work on a test network before deploying a contract Before you begin, ensure you've: 1. [Set up your wallet](https://support.metamask.io/getting-started/getting-started-with-metamask/). -2. Funded your wallet with Linea ETH, either through [bridging](../guides/bridge/index.mdx) or using -an on-ramp such as [MetaMask Portfolio](https://portfolio.metamask.io/buy). +2. Funded your wallet with Linea ETH, either through [bridging](../guides/bridge/index.mdx) or using an on-ramp such as [MetaMask Portfolio](https://portfolio.metamask.io/buy). ## Resources -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/quickstart/info-contracts.mdx b/docs/developers/quickstart/info-contracts.mdx index d7f20d219..6bcd0f480 100644 --- a/docs/developers/quickstart/info-contracts.mdx +++ b/docs/developers/quickstart/info-contracts.mdx @@ -1,5 +1,5 @@ --- -title: 'Network info, deployed contracts, and block explorers' +title: "Network info, deployed contracts, and block explorers" sidebar_position: 5 image: /img/socialCards/network-info-deployed-contracts-and-block-explorers.jpg --- @@ -12,61 +12,97 @@ import TabItem from "@theme/TabItem"; **Status**: [https://linea.statuspage.io/](https://linea.statuspage.io/) - - + +
- - + + - - + + - - + + - - + + - - + + -
Network NameLinea + Network Name + Linea
RPC URLhttps://rpc.linea.build or via Infura (recommended) + RPC URL + + https://rpc.linea.build or via{" "} + + Infura + {" "} + (recommended) +
Chain ID59144 + Chain ID + 59144
Currency SymbolETH + Currency Symbol + ETH
Block Explorer URL Lineascan + Block Explorer URL + + {" "} + Lineascan{" "} +
+
- +
- - + + - - + + - - + + - - + + - - + + -
Network NameLinea + Network Name + Linea
RPC URLhttps://rpc.sepolia.linea.build or via Infura (recommended) + RPC URL + + https://rpc.sepolia.linea.build or via{" "} + + Infura + {" "} + (recommended) +
Chain ID59141 + Chain ID + 59141
Currency SymbolETH + Currency Symbol + ETH
Block Explorer URL Lineascan + Block Explorer URL + + {" "} + Lineascan{" "} +
-
+ +
## Connect with node providers -If your dapp is using public endpoints, it may encounter rate limiting. You can find Linea node providers -[here](../tooling/node-providers/index.mdx). +If your dapp is using public endpoints, it may encounter rate limiting. You can find Linea node providers [here](../tooling/node-providers/index.mdx). We recommend connecting to Linea via [private RPCs](../tooling/node-providers/index.mdx#private-rpc-endpoints). @@ -97,7 +133,7 @@ We recommend connecting to Linea via [private RPCs](../tooling/node-providers/in
- + @@ -107,7 +143,7 @@ We recommend connecting to Linea via [private RPCs](../tooling/node-providers/in @@ -115,7 +151,7 @@ We recommend connecting to Linea via [private RPCs](../tooling/node-providers/in @@ -128,15 +164,11 @@ We recommend connecting to Linea via [private RPCs](../tooling/node-providers/in -To see **the most up to date list of tokens on Linea**, see -[the token explorer here](https://consensys.github.io/linea-token-list/), which is derived from the -official lists in [this repo](https://github.com/Consensys/linea-token-list/blob/main/json/linea-mainnet-token-shortlist.json). +To see **the most up to date list of tokens on Linea**, see [the token explorer here](https://consensys.github.io/linea-token-list/), which is derived from the official lists in [this repo](https://github.com/Consensys/linea-token-list/blob/main/json/linea-mainnet-token-shortlist.json). :::warning[Note] -We recommend you rely on the shortlist in the above links, rather than the full list. The shortlist is -actively curated by our team, whereas the full list isn't, and automatically populates with all -tokens bridged to Linea. +We recommend you rely on the shortlist in the above links, rather than the full list. The shortlist is actively curated by our team, whereas the full list isn't, and automatically populates with all tokens bridged to Linea. ::: @@ -144,8 +176,7 @@ To **get your own token included**, please follow the instructions on this [repo To see **which third-party bridges are available**, consult our [Ecosystem Portal's list](https://linea.build/apps?types=bridge). -If you're **looking to bridge tokens to or from Linea**, head to the [Linea bridge page](https://bridge.linea.build/) -to access the various options. +If you're **looking to bridge tokens to or from Linea**, head to the [Linea bridge page](https://bridge.linea.build/) to access the various options. @@ -293,8 +324,7 @@ As users take actions on the network, there are changes to those accounts and to ## Faucets -You can use one of the following Linea Sepolia faucets to drip testnet ETH directly to your -Linea Sepolia address: +You can use one of the following Linea Sepolia faucets to drip testnet ETH directly to your Linea Sepolia address: - [Covalent](https://www.covalenthq.com/faucet/) - [Infura](https://www.infura.io/faucet/linea) diff --git a/docs/developers/quickstart/verify-smart-contract/foundry.mdx b/docs/developers/quickstart/verify-smart-contract/foundry.mdx index 8cd199f7a..c875e1563 100644 --- a/docs/developers/quickstart/verify-smart-contract/foundry.mdx +++ b/docs/developers/quickstart/verify-smart-contract/foundry.mdx @@ -3,22 +3,18 @@ title: Foundry image: /img/socialCards/foundry.jpg --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; -To verify your Foundry contracts, you can use Foundry's [`verify-contract`](https://book.getfoundry.sh/reference/forge/forge-verify-contract) -to verify contracts on Lineascan. +To verify your Foundry contracts, you can use Foundry's [`verify-contract`](https://book.getfoundry.sh/reference/forge/forge-verify-contract) to verify contracts on Lineascan. -You'll need to get a Lineascan (Linea instance of Etherscan) API key by creating an account at -[https://lineascan.build/myapikey](https://lineascan.build/myapikey). +You'll need to get a Lineascan (Linea instance of Etherscan) API key by creating an account at [https://lineascan.build/myapikey](https://lineascan.build/myapikey). ## Verify your smart contract :::note -These instructions verify using the Linea instance of Etherscan, which currently doesn't support -Yul. If you would like to verify using Blockscout, please use the [Blockscout API URL for the -required network](../info-contracts.mdx#block-explorers). +These instructions verify using the Linea instance of Etherscan, which currently doesn't support Yul. If you would like to verify using Blockscout, please use the [Blockscout API URL for the required network](../info-contracts.mdx#block-explorers). ::: @@ -88,11 +84,9 @@ You can check that it was verified correctly by navigating to the [testnet block ## Using `.env` and `foundry.toml` to store etherscan information -If you don't want to paste your keys inline and have multiple Etherscan API keys to manage, you can use -the `.env` and `foundry.toml` files to set up custom configurations. +If you don't want to paste your keys inline and have multiple Etherscan API keys to manage, you can use the `.env` and `foundry.toml` files to set up custom configurations. -These steps assume you stored your secret keys in a `.env` file. which you can read more about -[in the Foundry deployment instructions](../deploy-smart-contract/foundry.mdx#deploy-a-smart-contract-using-a-env-file). +These steps assume you stored your secret keys in a `.env` file. which you can read more about [in the Foundry deployment instructions](../deploy-smart-contract/foundry.mdx#deploy-a-smart-contract-using-a-env-file). ```bash LINEASCAN_API_KEY=YOUR_LINEASCAN_API_KEY @@ -131,8 +125,4 @@ forge verify-contract --chain linea-sepolia YOUR_CONTRACT_ADDRESS path_to_contra -:::info -Learn more about different configurations for verifying your smart contracts using the -[`forge verify-contract`](https://book.getfoundry.sh/reference/forge/forge-verify-contract#forge-verify-contract) -command and the [Forge deployment instructions](https://book.getfoundry.sh/forge/deploying). -::: +:::info Learn more about different configurations for verifying your smart contracts using the [`forge verify-contract`](https://book.getfoundry.sh/reference/forge/forge-verify-contract#forge-verify-contract) command and the [Forge deployment instructions](https://book.getfoundry.sh/forge/deploying). ::: diff --git a/docs/developers/quickstart/verify-smart-contract/hardhat.mdx b/docs/developers/quickstart/verify-smart-contract/hardhat.mdx index ff44a980b..0fa4e1ad4 100644 --- a/docs/developers/quickstart/verify-smart-contract/hardhat.mdx +++ b/docs/developers/quickstart/verify-smart-contract/hardhat.mdx @@ -11,8 +11,7 @@ This is included as part of the `hardhat-toolbox` plugin. ::: -These steps assume you stored your secret keys in a `.env` file. which you can read more about -[in the Hardhat deployment instructions](../deploy-smart-contract/hardhat.mdx#deploy-the-contract). +These steps assume you stored your secret keys in a `.env` file. which you can read more about [in the Hardhat deployment instructions](../deploy-smart-contract/hardhat.mdx#deploy-the-contract). ## Download the plugin @@ -20,8 +19,7 @@ If you aren't already using `@nomicfoundation/hardhat-toolbox`, you can use `@no ## Add your Lineascan API Key -Obtain a Lineascan (Linea instance of Etherscan) key by creating an account at -[https://lineascan.build/myapikey](https://lineascan.build/myapikey). Grab your key, and add it to the `.env` file: +Obtain a Lineascan (Linea instance of Etherscan) key by creating an account at [https://lineascan.build/myapikey](https://lineascan.build/myapikey). Grab your key, and add it to the `.env` file: ``` LINEASCAN_API_KEY=YOUR_API_KEY_HERE @@ -37,13 +35,12 @@ const { PRIVATE_KEY, LINEASCAN_API_KEY } = process.env; :::note - -These instructions verify using the Linea instance of Etherscan, which currently doesn't support Yul. If you -would like to verify using Blockscout, please use the [Blockscout API URL for the required network](../info-contracts.mdx#block-explorers). +These instructions verify using the Linea instance of Etherscan, which currently doesn't support Yul. If you would like to verify using Blockscout, please use the [Blockscout API URL for the required network](../info-contracts.mdx#block-explorers). ::: -import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; First, we'll need to add a custom chain like so: @@ -104,7 +101,6 @@ etherscan: { :::note - The Etherscan `apiKey` and network name for your custom chain must match the network name under `networks` in your `hardhat.config.js`. ::: @@ -154,7 +150,6 @@ https://sepolia.lineascan.build/address/address/0x3Af089fee468eb7fcf750e929321b0 :::note - If you get an error saying that the address doesn't have bytecode, it probably means that Etherscan has not indexed your contract yet. In that case, wait for a while and then try again. ::: @@ -163,7 +158,6 @@ You can check that it was verified correctly by navigating to the [testnet block :::info - [Learn more about different configurations for verifying your smart contracts](https://hardhat.org/hardhat-runner/docs/guides/verifying). ::: diff --git a/docs/developers/quickstart/verify-smart-contract/index.mdx b/docs/developers/quickstart/verify-smart-contract/index.mdx index 58e0dfeae..4b2a8ce95 100644 --- a/docs/developers/quickstart/verify-smart-contract/index.mdx +++ b/docs/developers/quickstart/verify-smart-contract/index.mdx @@ -5,6 +5,6 @@ description: Verify a contract on Linea using a variety of libraries. image: /img/socialCards/verify-a-smart-contract.jpg --- -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/reference/api/eth-sendrawtransaction.mdx b/docs/developers/reference/api/eth-sendrawtransaction.mdx index 995db9ca7..718b2eb77 100644 --- a/docs/developers/reference/api/eth-sendrawtransaction.mdx +++ b/docs/developers/reference/api/eth-sendrawtransaction.mdx @@ -8,30 +8,21 @@ image: /img/socialCards/ethsendrawtransaction.jpg :::note -`eth_sendRawTransaction` is functionally very similar to the [Ethereum Mainnet equivalent](https://docs.infura.io/api/networks/ethereum/json-rpc-methods/eth_sendrawtransaction). +`eth_sendRawTransaction` is functionally very similar to the [Ethereum Mainnet equivalent](https://docs.infura.io/api/networks/ethereum/json-rpc-methods/eth_sendrawtransaction). -The difference lies in the [error responses](#errors). On Linea, `eth_sendRawTransaction` has some -unique error responses. +The difference lies in the [error responses](#errors). On Linea, `eth_sendRawTransaction` has some unique error responses. ::: -Submits a pre-signed and serialized transaction and returns the transaction hash if successful. -This endpoint can help prevent transactions being rejected due to exceeding the sequencer's -per-block line limit. If the line count check fails, it returns an error message indicating the -transaction is likely to be rejected. +Submits a pre-signed and serialized transaction and returns the transaction hash if successful. This endpoint can help prevent transactions being rejected due to exceeding the sequencer's per-block line limit. If the line count check fails, it returns an error message indicating the transaction is likely to be rejected. :::info -Please note the error relating to exceeding the line limit is only available on Besu nodes using -version `delivery-25` or later, together with `linea-sequencer` v0.1.4-test28 or later. +Please note the error relating to exceeding the line limit is only available on Besu nodes using version `delivery-25` or later, together with `linea-sequencer` v0.1.4-test28 or later. ::: -On Linea, each transaction is represented by a sequence of lines representing the operations -happening at the EVM level. These lines are grouped by modules and are used as inputs to the prover. -In order to limit the resources required to generate proofs, limits are enforced on the maximum -number of lines each module can have. Hence, when a transaction is considered for inclusion in a -block, a [line count check is performed to ensure it conforms to the requirements](../../../architecture/stack/trace-expansion-proving/prover-limits.mdx). +On Linea, each transaction is represented by a sequence of lines representing the operations happening at the EVM level. These lines are grouped by modules and are used as inputs to the prover. In order to limit the resources required to generate proofs, limits are enforced on the maximum number of lines each module can have. Hence, when a transaction is considered for inclusion in a block, a [line count check is performed to ensure it conforms to the requirements](../../../architecture/stack/trace-expansion-proving/prover-limits.mdx). ## Parameters @@ -51,6 +42,7 @@ curl https://linea-mainnet.infura.io/v3/YOUR-API-KEY \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"],"id":1}' ``` + ### Response ```JSON @@ -65,14 +57,10 @@ curl https://linea-mainnet.infura.io/v3/YOUR-API-KEY \ ### Gas price too low -The error `Gas price too low` is thrown when the transaction's gas is too low; specifically, the -offered gas doesn't create enough of a buffer to ensure that Linea can cover the costs of -finalizing the transaction on L1. +The error `Gas price too low` is thrown when the transaction's gas is too low; specifically, the offered gas doesn't create enough of a buffer to ensure that Linea can cover the costs of finalizing the transaction on L1. ### Transaction line count above limit -This error will display in the format: -`Transaction line count for module [A] is above the limit [B]` +This error will display in the format: `Transaction line count for module [A] is above the limit [B]` -Where `[A]` is the module for which the number of lines is above the maximum allowed value `[B]`, -with `[B]` a parameter of the system. +Where `[A]` is the module for which the number of lines is above the maximum allowed value `[B]`, with `[B]` a parameter of the system. diff --git a/docs/developers/reference/api/index.mdx b/docs/developers/reference/api/index.mdx index 2c9280020..03cd39aa6 100644 --- a/docs/developers/reference/api/index.mdx +++ b/docs/developers/reference/api/index.mdx @@ -2,11 +2,11 @@ description: Linea API methods image: /img/socialCards/linea-api-methods.jpg --- + import DocCardList from "@theme/DocCardList"; # Linea JSON-RPC API -Linea supports the standard Ethereum JSON-RPC API methods. However, this reference lists the -Linea-specific API methods. +Linea supports the standard Ethereum JSON-RPC API methods. However, this reference lists the Linea-specific API methods. diff --git a/docs/developers/reference/api/linea-estimategas.mdx b/docs/developers/reference/api/linea-estimategas.mdx index 3be0c84b4..a0686690c 100644 --- a/docs/developers/reference/api/linea-estimategas.mdx +++ b/docs/developers/reference/api/linea-estimategas.mdx @@ -4,73 +4,60 @@ description: Reference content for the linea_estimateGas method. image: /img/socialCards/lineaestimategas.jpg --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; # `linea_estimateGas` -Generates and returns an estimate of how much gas is necessary to allow the transaction to complete -and be published on Ethereum. The transaction will not be added to the blockchain. +Generates and returns an estimate of how much gas is necessary to allow the transaction to complete and be published on Ethereum. The transaction will not be added to the blockchain. -For more information about estimating gas, and how this API formulates the transaction costs, see -the [Estimate transaction costs](../../guides/gas-fees.mdx) topic. +For more information about estimating gas, and how this API formulates the transaction costs, see the [Estimate transaction costs](../../guides/gas-fees.mdx) topic. -The `priorityFeePerGas` returned by this method includes the cost of submitting the transaction to -Ethereum, which can vary based on the size of the calldata. +The `priorityFeePerGas` returned by this method includes the cost of submitting the transaction to Ethereum, which can vary based on the size of the calldata. :::note -`linea_estimateGas` uses the same inputs as the standard -[`eth_estimateGas`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_estimategas), but -returns the recommended gas limit, the base fee per gas, and the priority fee per gas. We recommend -using `linea_estimateGas` for more accurate results. +`linea_estimateGas` uses the same inputs as the standard [`eth_estimateGas`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_estimategas), but returns the recommended gas limit, the base fee per gas, and the priority fee per gas. We recommend using `linea_estimateGas` for more accurate results. ::: ## Parameters - `TRANSACTION CALL OBJECT` _\[required]_ + - `from`: _\[optional]_ 20 bytes - The address the transaction is sent from. - `to`: _\[optional]_ 20 bytes - The address the transaction is directed to. - - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. `linea_estimateGas` consumes - zero gas, but this parameter may be needed by some executions. + - `gas`: _\[optional]_ Hexadecimal value of the gas provided for the transaction execution. `linea_estimateGas` consumes zero gas, but this parameter may be needed by some executions. - `gasPrice`: _\[optional]_ Hexadecimal value of the gas price used for each paid gas. - `maxPriorityFeePerGas`: _\[optional]_ Maximum fee, in wei, the sender is willing to pay per gas above the base fee. - `maxFeePerGas`: _\[optional]_ Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. - `value`: _\[optional]_ Hexadecimal value of the value sent with this transaction. - - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the - [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). - - `block number`: _\[optional]_ A string representing a block number, or one of the string tags `latest`, `earliest`, - `pending`, or `finalized`. + - `data`: _\[optional]_ Hash of the method signature and encoded parameters. See the [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). + - `block number`: _\[optional]_ A string representing a block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. - :::note - A `finalized` block is a block on an L2 blockchain (Linea) that has been confirmed and validated by - the L1 blockchain (Ethereum). - ::: + :::note A `finalized` block is a block on an L2 blockchain (Linea) that has been confirmed and validated by the L1 blockchain (Ethereum). ::: ## Returns -Hexadecimal values representing the recommended gas limit, the base fee per gas, and the priority -fee per gas. +Hexadecimal values representing the recommended gas limit, the base fee per gas, and the priority fee per gas. ## Example :::tip -You can also call the API using [Infura's supported Linea endpoints](https://docs.infura.io/api/networks/linea/choose-a-network). -::: +You can also call the API using [Infura's supported Linea endpoints](https://docs.infura.io/api/networks/linea/choose-a-network). ::: ### Request - ```bash - curl https://linea-mainnet.infura.io/v3/YOUR-API-KEY \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0","method": "linea_estimateGas","params": [{"from": "0x971e727e956690b9957be6d51Ec16E73AcAC83A7","gas":"0x21000"}],"id": 53}' - ``` +```bash +curl https://linea-mainnet.infura.io/v3/YOUR-API-KEY \ +-X POST \ +-H "Content-Type: application/json" \ +-d '{"jsonrpc": "2.0","method": "linea_estimateGas","params": [{"from": "0x971e727e956690b9957be6d51Ec16E73AcAC83A7","gas":"0x21000"}],"id": 53}' +``` {/* @@ -81,45 +68,41 @@ You can also call the API using [Infura's supported Linea endpoints](https://doc gasLimit: string; }; - const provider = new ethers.JsonRpcProvider(""); +const provider = new ethers.JsonRpcProvider(""); - const params = { - from: "0x...", // Signer address - to: "0x...", // Recipient address - value: ethers.parseEther("1").toString(), // Value in wei - data: "0x...", // Encoded call in case of smart contract interaction - }; +const params = { from: "0x...", // Signer address to: "0x...", // Recipient address value: ethers.parseEther("1").toString(), // Value in wei data: "0x...", // Encoded call in case of smart contract interaction }; - const fees: LineaEstimateGasResponse = await provider.send("linea_estimateGas", [params]); - console.log(fees); - ``` - */} - - ```javascript - import { createPublicClient, http, parseEther } from 'viem' - import { linea } from 'viem/chains' - import { estimateGas } from 'viem/linea' - - async function EstimateGas() { - const client = createPublicClient({ - chain: linea, - transport: http(), - }); +const fees: LineaEstimateGasResponse = await provider.send("linea_estimateGas", [params]); console.log(fees); - try { - const gasEstimate = await estimateGas(client, { - account: '0x...', // Source account's address - to: '0x...', // Destination account's address - value: parseEther('0.004') // Amount of ETH to transfer - }); - console.log('Gas Estimate:', gasEstimate); - } catch (error) { - console.error('Error estimating gas:', error); - } +```` + */} + +```javascript +import { createPublicClient, http, parseEther } from 'viem' +import { linea } from 'viem/chains' +import { estimateGas } from 'viem/linea' + +async function EstimateGas() { + const client = createPublicClient({ + chain: linea, + transport: http(), + }); + + try { + const gasEstimate = await estimateGas(client, { + account: '0x...', // Source account's address + to: '0x...', // Destination account's address + value: parseEther('0.004') // Amount of ETH to transfer + }); + console.log('Gas Estimate:', gasEstimate); + } catch (error) { + console.error('Error estimating gas:', error); } +} + +EstimateGas(); +```` - EstimateGas(); - ``` @@ -138,17 +121,13 @@ You can also call the API using [Infura's supported Linea endpoints](https://doc ``` Where: + - `baseFeePerGas` - Uses the Linea base fee which is set at 7 wei. - `gasLimit` - Uses the standard `eth_estimateGas` API calculation. -- `priorityFeePerGas` - Calculates the fee required to prioritize a transaction by considering factors such as the - compressed transaction size, layer 1 verification costs and capacity, gas price ratio between layer 1 and - layer 2, the transaction's gas usage, the minimum gas price on layer 2, and a minimum - margin (for error) for gas price estimation. +- `priorityFeePerGas` - Calculates the fee required to prioritize a transaction by considering factors such as the compressed transaction size, layer 1 verification costs and capacity, gas price ratio between layer 1 and layer 2, the transaction's gas usage, the minimum gas price on layer 2, and a minimum margin (for error) for gas price estimation. :::note -The result of the request returns hexadecimal equivalent integers of gas prices in wei. Convert the hexadecimal value into -decimals to get the wei value. You can use any hexadecimal to decimal converter such as -[RapidTables](https://www.rapidtables.com/convert/number/hex-to-decimal.html). +The result of the request returns hexadecimal equivalent integers of gas prices in wei. Convert the hexadecimal value into decimals to get the wei value. You can use any hexadecimal to decimal converter such as [RapidTables](https://www.rapidtables.com/convert/number/hex-to-decimal.html). ::: diff --git a/docs/developers/reference/api/linea-getproof.mdx b/docs/developers/reference/api/linea-getproof.mdx index 606e50904..dade37ac3 100644 --- a/docs/developers/reference/api/linea-getproof.mdx +++ b/docs/developers/reference/api/linea-getproof.mdx @@ -6,13 +6,10 @@ image: /img/socialCards/lineagetproof.jpg # `linea_getProof` -Returns the account and storage values, including the Merkle proof, of the specified account. -The supplied block parameter must be an L2 block that has been finalized on L1. +Returns the account and storage values, including the Merkle proof, of the specified account. The supplied block parameter must be an L2 block that has been finalized on L1. -- When an account or storage slot exists, the response includes the `leafIndex` and - a proof of existence. -- When an account or storage slot doesn't exist, the response will include the proof of the - elements before and after it in the tree. +- When an account or storage slot exists, the response includes the `leafIndex` and a proof of existence. +- When an account or storage slot doesn't exist, the response will include the proof of the elements before and after it in the tree. In the [example response](#response) the account exists but the slot doesn't. @@ -20,13 +17,7 @@ In the [example response](#response) the account exists but the slot doesn't. - `address`: A string representing the address (20 bytes) for which the proof is requested. - `storageKeys`: An array of 32-byte storage keys to be proofed and included. -- `blockParameter`: A hexadecimal block number, or one of the string tags `latest`, `earliest`, - `pending`, or `finalized`. - - :::note - A `finalized` block is a block on an L2 blockchain (Linea) that has been confirmed and validated by - the L1 blockchain (Ethereum). - ::: +- `blockParameter`: A hexadecimal block number, or one of the string tags `latest`, `earliest`, `pending`, or `finalized`. :::note A `finalized` block is a block on an L2 blockchain (Linea) that has been confirmed and validated by the L1 blockchain (Ethereum). ::: ## Returns @@ -38,14 +29,10 @@ In the [example response](#response) the account exists but the slot doesn't. - `value`: The value stored at the account's leaf node in the sparse Merkle tree. - `storageProof`: An array of storage-entries as requested. Each entry is an object with these properties: - `key`: The requested storage key. - - `leftLeafIndex`: The index of the left leaf node in the sparse Merkle tree that corresponds to the - storage slot. - - `leftProof`: Contains the proof data for the left leaf node, which includes the array of nodes used - to construct the proof and the value stored at the left leaf node in the sparse Merkle tree. - - `rightLeafIndex`: The index of the right leaf node in the sparse Merkle tree that corresponds to - the storage slot. - - `rightProof`: Contains the proof data for the right leaf node, which includes the array of nodes used - to construct the proof and the value stored at the right leaf node in the sparse Merkle tree. + - `leftLeafIndex`: The index of the left leaf node in the sparse Merkle tree that corresponds to the storage slot. + - `leftProof`: Contains the proof data for the left leaf node, which includes the array of nodes used to construct the proof and the value stored at the left leaf node in the sparse Merkle tree. + - `rightLeafIndex`: The index of the right leaf node in the sparse Merkle tree that corresponds to the storage slot. + - `rightProof`: Contains the proof data for the right leaf node, which includes the array of nodes used to construct the proof and the value stored at the right leaf node in the sparse Merkle tree. ## Example diff --git a/docs/developers/reference/api/linea-gettransactionexclusionstatusv1.mdx b/docs/developers/reference/api/linea-gettransactionexclusionstatusv1.mdx index b54e090fa..fa231665d 100644 --- a/docs/developers/reference/api/linea-gettransactionexclusionstatusv1.mdx +++ b/docs/developers/reference/api/linea-gettransactionexclusionstatusv1.mdx @@ -4,25 +4,20 @@ description: Reference content for the linea_getTransactionExclusionStatusV1 met image: /img/socialCards/lineagettransactionexclusionstatusv1.jpg --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; # `linea_getTransactionExclusionStatusV1` -Queries a temporary database maintained by the transaction exclusion API service to check if a -transaction was rejected by the sequencer, connected P2P node, or RPC nodes for exceeding data line limits -that would prevent the prover from generating a proof. - +Queries a temporary database maintained by the transaction exclusion API service to check if a transaction was rejected by the sequencer, connected P2P node, or RPC nodes for exceeding data line limits that would prevent the prover from generating a proof. :::info -You can only check for transaction rejection within seven days of the transaction attempt. Querying -transactions older than this will return a `null` response. +You can only check for transaction rejection within seven days of the transaction attempt. Querying transactions older than this will return a `null` response. ::: -If the transaction is rejected, the API call will succeed and provide the reason; otherwise, it -will return `null`. +If the transaction is rejected, the API call will succeed and provide the reason; otherwise, it will return `null`. ## Parameters @@ -30,17 +25,16 @@ will return `null`. ## Returns -- `txHash`: The hash of the subject transaction. -- `from`: The public address of the account that sent the transaction. -- `nonce`: Number of transaction made by the sender, in hexadecimal format. +- `txHash`: The hash of the subject transaction. +- `from`: The public address of the account that sent the transaction. +- `nonce`: Number of transaction made by the sender, in hexadecimal format. - `txRejectionStage`: A string detailing the point at which the transaction was rejected. One of: - - `SEQUENCER`: Rejected by the sequencer. - - `RPC`: Rejected by an RPC node (e.g. `https://rpc.linea.build`). - - `P2P`: Rejected by a P2P-connected node (for example, a bootnode). -- `reasonMessage`: Explains why the transaction was rejected. -- `blockNumber`: The block that the transaction was rejected from, in hexadecimal format. Only -returned for transactions rejected by the sequencer. -- `timestamp`: Time of rejection, in ISO 8601 format. + - `SEQUENCER`: Rejected by the sequencer. + - `RPC`: Rejected by an RPC node (e.g. `https://rpc.linea.build`). + - `P2P`: Rejected by a P2P-connected node (for example, a bootnode). +- `reasonMessage`: Explains why the transaction was rejected. +- `blockNumber`: The block that the transaction was rejected from, in hexadecimal format. Only returned for transactions rejected by the sequencer. +- `timestamp`: Time of rejection, in ISO 8601 format. ## Example @@ -86,19 +80,17 @@ returned for transactions rejected by the sequencer. :::note -This example is purely representative; the database retains transaction data for only seven days, so -you'll be unable to reproduce this response with the above example. +This example is purely representative; the database retains transaction data for only seven days, so you'll be unable to reproduce this response with the above example. ::: -If a transaction was not rejected for exceeding line limits, it will not be found in the database, -and a `null` result is returned. For example: +If a transaction was not rejected for exceeding line limits, it will not be found in the database, and a `null` result is returned. For example: ```json { - "jsonrpc": "2.0", - "id": 1, - "result": null + "jsonrpc": "2.0", + "id": 1, + "result": null } ``` diff --git a/docs/developers/tooling/account-abstraction/account-abstraction.mdx b/docs/developers/tooling/account-abstraction/account-abstraction.mdx index bcb2b0329..5de416451 100644 --- a/docs/developers/tooling/account-abstraction/account-abstraction.mdx +++ b/docs/developers/tooling/account-abstraction/account-abstraction.mdx @@ -5,24 +5,24 @@ image: /img/socialCards/account-abstraction.jpg `Account abstraction` is a broad category of fast-moving development in the Ethereum ecosystem. It generally refers to different ways to create and manage accounts, other than using a Secret Recovery Phrase and a wallet. -One milestone in this area was the inclusion of [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) in the Ethereum protocol. +One milestone in this area was the inclusion of [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) in the Ethereum protocol. - This includes, but is not limited to: +This includes, but is not limited to: - - Creating accounts using a cryptographic library running in a dapp (an "embedded wallet") - - The creation of an account that is to some degree controlled by a smart contract +- Creating accounts using a cryptographic library running in a dapp (an "embedded wallet") +- The creation of an account that is to some degree controlled by a smart contract That second point may seem small, but it enables things like: - - Account Recovery ("social recovery", recovery via email or other identities or accounts) - - Use case-specific limitations - - Paying for a user's gas fees - - Delegation of assets +- Account Recovery ("social recovery", recovery via email or other identities or accounts) +- Use case-specific limitations +- Paying for a user's gas fees +- Delegation of assets -and a *lot more*. +and a _lot more_. As a network, Linea is heavily invested in innovating in the account abstraction space; consult the resources here to see how you can implement the tools we already have... and then build your own. -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/account-abstraction/arcana.md b/docs/developers/tooling/account-abstraction/arcana.md index 02d544539..53503da4a 100644 --- a/docs/developers/tooling/account-abstraction/arcana.md +++ b/docs/developers/tooling/account-abstraction/arcana.md @@ -5,10 +5,8 @@ image: /img/socialCards/arcana.jpg # Gasless Transactions -[Arcana Network](https://arcana.network) SDKs integrate with Web3 apps to enable gasless transactions in the embedded, -non-custodial [Arcana Wallet](../social-login/arcana.mdx#arcana-wallet) and third-party browser-based wallets. +[Arcana Network](https://arcana.network) SDKs integrate with Web3 apps to enable gasless transactions in the embedded, non-custodial [Arcana Wallet](../social-login/arcana.mdx#arcana-wallet) and third-party browser-based wallets. -Web3 app developers can use the [Arcana Dashboard](https://dashboard.arcana.network) to add gas tanks on one or more -blockchain networks, deposit funds to sponsor gas fee, and whitelist app operations. +Web3 app developers can use the [Arcana Dashboard](https://dashboard.arcana.network) to add gas tanks on one or more blockchain networks, deposit funds to sponsor gas fee, and whitelist app operations. [Learn more...](https://docs.arcana.network/quick-start/gasless-quick-start). diff --git a/docs/developers/tooling/account-abstraction/oklink.md b/docs/developers/tooling/account-abstraction/oklink.md index b36701dc0..257c0465c 100644 --- a/docs/developers/tooling/account-abstraction/oklink.md +++ b/docs/developers/tooling/account-abstraction/oklink.md @@ -3,7 +3,7 @@ title: OKLink image: /img/socialCards/oklink.jpg --- -[OKLink](https://www.oklink.com/) is a one-stop blockchain data platform covering a wide range of on-chain metrics. +[OKLink](https://www.oklink.com/) is a one-stop blockchain data platform covering a wide range of on-chain metrics. OKLink provides on-chain information, prioritizing accessibility by simplifying insights for easy understanding. Users can search through transactions, blocks, wallet addresses, smart contracts, and other on-chain data covering 40+ chains. diff --git a/docs/developers/tooling/account-abstraction/openfort.md b/docs/developers/tooling/account-abstraction/openfort.md index f8c35c3a0..ea2ebb478 100644 --- a/docs/developers/tooling/account-abstraction/openfort.md +++ b/docs/developers/tooling/account-abstraction/openfort.md @@ -9,4 +9,4 @@ image: /img/socialCards/openfort.jpg Powered by [ERC-6551](https://eips.ethereum.org/EIPS/eip-6551) and [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337). -[This page](https://www.openfort.xyz/docs) will help you get started with Openfort by deploying a smart account on Linea and creating your first transaction. +[This page](https://www.openfort.xyz/docs) will help you get started with Openfort by deploying a smart account on Linea and creating your first transaction. diff --git a/docs/developers/tooling/analytics/dune.md b/docs/developers/tooling/analytics/dune.md index b28b8fce8..6e5966e5f 100644 --- a/docs/developers/tooling/analytics/dune.md +++ b/docs/developers/tooling/analytics/dune.md @@ -5,7 +5,7 @@ image: /img/socialCards/dune.jpg ## Crypto's data platform -[Dune](https://dune.com/) is crypto's data platform. Teams and individuals alike use Dune to explore, query, access, and export blockchain data. Dune's community of data engineers, researchers, and analysts use the platform to gain deeper insights into blockchain activity. Dune provides organized, decoded and human-readable blockchain data, across 15+ chains and 1.5M datasets. +[Dune](https://dune.com/) is crypto's data platform. Teams and individuals alike use Dune to explore, query, access, and export blockchain data. Dune's community of data engineers, researchers, and analysts use the platform to gain deeper insights into blockchain activity. Dune provides organized, decoded and human-readable blockchain data, across 15+ chains and 1.5M datasets. ### Features @@ -32,4 +32,3 @@ Here are some resources to help you learn more about Dune Analytics: - [Blog](https://dune.com/blog): The Dune blog features articles, case studies, and updates about the platform. - [Twitter](https://twitter.com/duneanalytics): Follow Dune Analytics on Twitter for the latest news and announcements. - diff --git a/docs/developers/tooling/analytics/index.mdx b/docs/developers/tooling/analytics/index.mdx index 356d7f558..e0aa37385 100644 --- a/docs/developers/tooling/analytics/index.mdx +++ b/docs/developers/tooling/analytics/index.mdx @@ -3,6 +3,6 @@ title: Analytics image: /img/socialCards/analytics.jpg --- -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/attestations/index.mdx b/docs/developers/tooling/attestations/index.mdx index bfc72fe60..fcfcd095c 100644 --- a/docs/developers/tooling/attestations/index.mdx +++ b/docs/developers/tooling/attestations/index.mdx @@ -3,7 +3,7 @@ title: Attestations image: /img/socialCards/attestations.jpg --- -An attestation is evidence or proof of something, issued by a given authority. +An attestation is evidence or proof of something, issued by a given authority. Some common examples of attestations are: @@ -11,10 +11,10 @@ Some common examples of attestations are: - University degree: Proof of education - Driver's license: Proof of being able and legally approved to drive a car -In the world of web3, attestations can prove digital identity, ownership of digital assets, and more. +In the world of web3, attestations can prove digital identity, ownership of digital assets, and more. This space is currently rapidly evolving, and use cases for attestations are still being discovered and built. -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/cloud-infra/index.mdx b/docs/developers/tooling/cloud-infra/index.mdx index 62f7550c4..7ff68fecb 100644 --- a/docs/developers/tooling/cloud-infra/index.mdx +++ b/docs/developers/tooling/cloud-infra/index.mdx @@ -3,7 +3,6 @@ title: Cloud Infrastructure image: /img/socialCards/cloud-infrastructure.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/cloud-infra/spheron.md b/docs/developers/tooling/cloud-infra/spheron.md index cd6901218..36e5473d6 100644 --- a/docs/developers/tooling/cloud-infra/spheron.md +++ b/docs/developers/tooling/cloud-infra/spheron.md @@ -5,11 +5,6 @@ image: /img/socialCards/spheron-network.jpg ## What is Spheron? -[Spheron Network](https://www.spheron.network/) is a decentralized compute provider and marketplace that offers scalable and secure -infrastructure solutions. It aims to create a decentralized GPU exchange for global AI workloads, enabling -projects from DeFi to AI to access high-quality compute solutions at lower costs compared to traditional -providers. Spheron focuses on simplicity, usability, and support to build an efficient global compute system -for the next generation of applications. +[Spheron Network](https://www.spheron.network/) is a decentralized compute provider and marketplace that offers scalable and secure infrastructure solutions. It aims to create a decentralized GPU exchange for global AI workloads, enabling projects from DeFi to AI to access high-quality compute solutions at lower costs compared to traditional providers. Spheron focuses on simplicity, usability, and support to build an efficient global compute system for the next generation of applications. -View the [Spheron documentation](https://docs.spheron.network/) for information on how to deploy and manage -your decentralized applications using the platform. +View the [Spheron documentation](https://docs.spheron.network/) for information on how to deploy and manage your decentralized applications using the platform. diff --git a/docs/developers/tooling/contracts-templates/cookbook.mdx b/docs/developers/tooling/contracts-templates/cookbook.mdx index 1b5af1dfd..b3d6570ee 100644 --- a/docs/developers/tooling/contracts-templates/cookbook.mdx +++ b/docs/developers/tooling/contracts-templates/cookbook.mdx @@ -52,7 +52,7 @@ Add The Cookbook Plugin to Remix by clicking the Chef Hat Logo under **Featured
- Cookbook Remix Featured Plugin @@ -63,7 +63,7 @@ Alternatively, search Cookbook and select **Activate** in the Remix Plugin Manag
- Cookbook Remix Add Plugin @@ -76,7 +76,7 @@ Cookbook's AI solidity co-pilot, ChefGPT, is available within the Remix plugin t
- Cookbook Remix Search diff --git a/docs/developers/tooling/contracts-templates/index.mdx b/docs/developers/tooling/contracts-templates/index.mdx index c3537f002..73f39bd03 100644 --- a/docs/developers/tooling/contracts-templates/index.mdx +++ b/docs/developers/tooling/contracts-templates/index.mdx @@ -3,7 +3,6 @@ title: Contract Templates image: /img/socialCards/contract-templates.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/cross-chain/axelar.md b/docs/developers/tooling/cross-chain/axelar.md index 9e3d8a198..fa1559924 100644 --- a/docs/developers/tooling/cross-chain/axelar.md +++ b/docs/developers/tooling/cross-chain/axelar.md @@ -3,34 +3,24 @@ title: Axelar image: /img/socialCards/axelar.jpg --- -[Axelar](https://docs.axelar.dev/) is a blockchain of blockchains that allows for universal web3 -interoperability. By integrating with Axelar, your Linea-based application now has access to the -[45+ chains](https://axelarscan.io/) that are also connected via Axelar. As Axelar is a blockchain -of blockchains, it overcomes many of the challenges of more centralized interoperability solutions; -transactions that go through the Axelar network cannot be censored by any oracle, relayer, or -sequencer. +[Axelar](https://docs.axelar.dev/) is a blockchain of blockchains that allows for universal web3 interoperability. By integrating with Axelar, your Linea-based application now has access to the [45+ chains](https://axelarscan.io/) that are also connected via Axelar. As Axelar is a blockchain of blockchains, it overcomes many of the challenges of more centralized interoperability solutions; transactions that go through the Axelar network cannot be censored by any oracle, relayer, or sequencer. ## Available functionality Axelar enables powerful interchain features for builders on Linea. 1. The ability to [send tokens](https://docs.axelar.dev/dev/send-tokens/overview) across blockchains -1. The ability to send [general messages](https://docs.axelar.dev/dev/general-message-passing/overview) -across blockchains +1. The ability to send [general messages](https://docs.axelar.dev/dev/general-message-passing/overview) across blockchains ## Linea integration When integrating with Axelar there are two key contracts that need to be utilized. These are: 1. The [Axelar Gateway](https://docs.axelar.dev/learn#gateway-smart-contracts) - - On the source chain, this contract exposes the functions which you will use to initiate an - interchain transaction. - - On the destination chain, this contract enables messages to be executed automatically to - complete the interchain transaction. + - On the source chain, this contract exposes the functions which you will use to initiate an interchain transaction. + - On the destination chain, this contract enables messages to be executed automatically to complete the interchain transaction. 1. The [Axelar Gas Service](https://docs.axelar.dev/dev/general-message-passing/gas-services/intro) - - This contract is the entrypoint into Axelar's gas service, which handles gas payment for your - transaction on both the Axelar network and the destination chain. You as the caller now only - need the gas of the source chain. + - This contract is the entrypoint into Axelar's gas service, which handles gas payment for your transaction on both the Axelar network and the destination chain. You as the caller now only need the gas of the source chain. ### Contract addresses @@ -41,41 +31,27 @@ When integrating with Axelar there are two key contracts that need to be utilize | Gas Service | Mainnet | [0x2d5d7d31F671F86C782533cc367F14109a082712](https://lineascan.build/address/0x2d5d7d31F671F86C782533cc367F14109a082712) | 59144 | | Gas Service | Testnet | [0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6](https://sepolia.lineascan.build/address/0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6) | 59141 | -Once you have submitted your transaction, you can view it on the [Axelarscan block explorer](https://axelarscan.io/). -The Axelarscan explorer is specifically tailored to show your interchain transaction step-by-step -as it passes from the source chain, via the Axelar network, to the destination chain. +Once you have submitted your transaction, you can view it on the [Axelarscan block explorer](https://axelarscan.io/). The Axelarscan explorer is specifically tailored to show your interchain transaction step-by-step as it passes from the source chain, via the Axelar network, to the destination chain. ## Linea-Axelar example -For a full end-to-end example of a Linea-Axelar integration, check out our [video walkthrough](https://www.youtube.com/watch?v=-KgJZmq8Umc&t=1s) -of the process. The complementary code can be found [here](https://github.com/Olanetsoft/linea-interchain-workshop-with-axelar). +For a full end-to-end example of a Linea-Axelar integration, check out our [video walkthrough](https://www.youtube.com/watch?v=-KgJZmq8Umc&t=1s) of the process. The complementary code can be found [here](https://github.com/Olanetsoft/linea-interchain-workshop-with-axelar). ## Axelar use cases -For inspiration, here are some live use cases demonstrating the kind of interchain applications -that can be built on top of Axelar: +For inspiration, here are some live use cases demonstrating the kind of interchain applications that can be built on top of Axelar: 1. Interchain token swaps (e.g. [Squid](https://app.squidrouter.com/)) - - Squid is an exciting new protocol built on top of Axelar that allows users to swap tokens - with a Uniswap-like experience, leveraging Axelar for swaps between tokens across different - blockchains. Squid takes DeFi to the next level, reducing the need to revert to centralized - exchanges or multiple different exchanges to swap tokens across chains. + - Squid is an exciting new protocol built on top of Axelar that allows users to swap tokens with a Uniswap-like experience, leveraging Axelar for swaps between tokens across different blockchains. Squid takes DeFi to the next level, reducing the need to revert to centralized exchanges or multiple different exchanges to swap tokens across chains. 1. Interchain lending (e.g. [Prime Protocol](https://www.primeprotocol.xyz/)) - - A chain-agnostic prime brokerage that allows users to deposit assets from any connected - chain and use their aggregate value as collateral for loans on any other connected chain. Prime - offers the ability to build interchain applications that connect from any blockchain to any - other blockchain, rather than just connecting a series of blockchains to Ethereum. Prime's - interchain design allows for a variety of new DeFi use cases, including cross-chain margining. + - A chain-agnostic prime brokerage that allows users to deposit assets from any connected chain and use their aggregate value as collateral for loans on any other connected chain. Prime offers the ability to build interchain applications that connect from any blockchain to any other blockchain, rather than just connecting a series of blockchains to Ethereum. Prime's interchain design allows for a variety of new DeFi use cases, including cross-chain margining. 1. Interchain gaming (e.g. [Junkyard](https://junkyard.wtf/)) - - Web3 gaming is heavily reliant on NFTs, and enabling NFTs to be passed between blockchains - is a critical next step for NFT-based games. Junkyard leverages Axelar to allow interchain - NFTs in its game. In Junkyard, players can deposit their NFTs to the Junkyard contract. The - NFT can come from any chain connected to the Axelar ecosystem, including Linea. + - Web3 gaming is heavily reliant on NFTs, and enabling NFTs to be passed between blockchains is a critical next step for NFT-based games. Junkyard leverages Axelar to allow interchain NFTs in its game. In Junkyard, players can deposit their NFTs to the Junkyard contract. The NFT can come from any chain connected to the Axelar ecosystem, including Linea. ## Get involved with Axelar diff --git a/docs/developers/tooling/cross-chain/ccip-read-gateway.mdx b/docs/developers/tooling/cross-chain/ccip-read-gateway.mdx index 76337fb4a..70f2298fe 100644 --- a/docs/developers/tooling/cross-chain/ccip-read-gateway.mdx +++ b/docs/developers/tooling/cross-chain/ccip-read-gateway.mdx @@ -4,22 +4,15 @@ description: Use a CCIP Read gateway to query data on Linea from L1 image: /img/socialCards/ccip-read.jpg --- -import LineaCCIPGraphic from "/img/developers/tooling/cross_chain/ccip_read_gateway/Linea_ENS_CCIP_read.svg" +import LineaCCIPGraphic from "/img/developers/tooling/cross_chain/ccip_read_gateway/Linea_ENS_CCIP_read.svg"; -[CCIP Read](https://eips.ethereum.org/EIPS/eip-3668), also referred to by its full name [Cross-chain Interoperability Protocol](https://chain.link/cross-chain), -is a protocol developed by Chainlink to enable applications to access cross-chain (i.e. on an L2) -or offchain data through a gateway server. +[CCIP Read](https://eips.ethereum.org/EIPS/eip-3668), also referred to by its full name [Cross-chain Interoperability Protocol](https://chain.link/cross-chain), is a protocol developed by Chainlink to enable applications to access cross-chain (i.e. on an L2) or offchain data through a gateway server. -Ethereum Name Service (ENS) implements CCIP Read so that it can resolve domains on Ethereum even if -the relevant data and records are stored on an L2 chain — an offchain resolver framework. The -process is trust-minimal, as the gateway returns a storage proof that can be verified on L1, and -which is immune from any intervention or tampering. +Ethereum Name Service (ENS) implements CCIP Read so that it can resolve domains on Ethereum even if the relevant data and records are stored on an L2 chain — an offchain resolver framework. The process is trust-minimal, as the gateway returns a storage proof that can be verified on L1, and which is immune from any intervention or tampering. -Linea adapted the functionality of the relevant ENS contract, [`evm-gateway`](https://github.com/ensdomains/evmgateway), -so that it would function correctly with Linea's sparse Merkle tree design. The Linea ENS repository -therefore adds support for CCIP Read to Linea. +Linea adapted the functionality of the relevant ENS contract, [`evm-gateway`](https://github.com/ensdomains/evmgateway), so that it would function correctly with Linea's sparse Merkle tree design. The Linea ENS repository therefore adds support for CCIP Read to Linea. -:::info +:::info Read more about sparse Merkle trees in our [architecture documentation](../../../architecture/stack/evm-state-manager/index.mdx). @@ -27,18 +20,11 @@ Read more about sparse Merkle trees in our [architecture documentation](../../.. ### Linea ENS -Linea ENS allows Linea users to register human-readable domains for considerably lower fees than on -Ethereum Mainnet, it also leverages smart contracts with considerable utility for developers by -enabling CCIP Read. See the user guide [here](https://support.linea.build/explore/ens). +Linea ENS allows Linea users to register human-readable domains for considerably lower fees than on Ethereum Mainnet, it also leverages smart contracts with considerable utility for developers by enabling CCIP Read. See the user guide [here](https://support.linea.build/explore/ens). -The [Linea ENS repository](https://github.com/Consensys/linea-ens) contains a frontend and -associated contracts for ENS to work on Linea, including functionality that enables any L1 -application to query L2 data using CCIP Read. +The [Linea ENS repository](https://github.com/Consensys/linea-ens) contains a frontend and associated contracts for ENS to work on Linea, including functionality that enables any L1 application to query L2 data using CCIP Read. -However, Linea ENS is just one example use case; CCIP Read is beneficial in any scenario where it's -advantageous to store data on L2. In addition to ENS-like systems, the library enables L1 -applications to create allowlists that use cross-chain Verax attestations to determine eligibility -for NFT mints or governance voting, for example. +However, Linea ENS is just one example use case; CCIP Read is beneficial in any scenario where it's advantageous to store data on L2. In addition to ENS-like systems, the library enables L1 applications to create allowlists that use cross-chain Verax attestations to determine eligibility for NFT mints or governance voting, for example. :::tip[Deploy a subdomain on Linea] @@ -48,39 +34,34 @@ You can use the building blocks of Linea ENS to [deploy your own subdomain on Li ## Use CCIP Read on Linea -While the repository was created to bring ENS to Linea, its component libraries can be applied in -other contexts. +While the repository was created to bring ENS to Linea, its component libraries can be applied in other contexts. -The two main contracts are: -- The [Linea CCIP Gateway](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ccip-gateway), which - implements the gateway required for L1 protocols to query data on Linea, and; -- The [Linea State Verifier](https://github.com/Consensys/linea-ens/tree/main/packages/linea-state-verifier), which - verifies the state proofs generated by the gateway. +The two main contracts are: -Together, they can be used to retrieve data on Linea in a trustless way. They are 'generic' in the -sense that they can be applied to any use case. +- The [Linea CCIP Gateway](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ccip-gateway), which implements the gateway required for L1 protocols to query data on Linea, and; +- The [Linea State Verifier](https://github.com/Consensys/linea-ens/tree/main/packages/linea-state-verifier), which verifies the state proofs generated by the gateway. + +Together, they can be used to retrieve data on Linea in a trustless way. They are 'generic' in the sense that they can be applied to any use case. The basic outline for using these contracts in a read capacity is as follows: -
+
-1. Your L1 contract, which we'll refer to as the client contract, requires data from L2. To do this, -it builds a request to the `EVMFetcher` contract (part of the Linea State Verifier). +1. Your L1 contract, which we'll refer to as the client contract, requires data from L2. To do this, it builds a request to the `EVMFetcher` contract (part of the Linea State Verifier). -2. The `EVMFetcher` contract uses CCIP Read to call the offchain gateway. +2. The `EVMFetcher` contract uses CCIP Read to call the offchain gateway. -3. The gateway retrieves the requested information from your associated L2 contract. +3. The gateway retrieves the requested information from your associated L2 contract. 4. The gateway returns data and proofs to the [`IEVMVerifier`](https://github.com/Consensys/linea-ens/blob/main/packages/linea-state-verifier/contracts/IEVMVerifier.sol) contract. -5. `IEVMVerifier` and [`LineaSparseProofVerifier`](https://github.com/Consensys/linea-ens/blob/main/packages/linea-state-verifier/contracts/LineaSparseProofVerifier.sol) verify the proofs and return -the data to the L1 client contract. +5. `IEVMVerifier` and [`LineaSparseProofVerifier`](https://github.com/Consensys/linea-ens/blob/main/packages/linea-state-verifier/contracts/LineaSparseProofVerifier.sol) verify the proofs and return the data to the L1 client contract. ## Example -The below contract fetches another contract's storage value, `testUint`. +The below contract fetches another contract's storage value, `testUint`. ``` // SPDX-License-Identifier: MIT diff --git a/docs/developers/tooling/cross-chain/index.mdx b/docs/developers/tooling/cross-chain/index.mdx index 8cae242ea..b809d5602 100644 --- a/docs/developers/tooling/cross-chain/index.mdx +++ b/docs/developers/tooling/cross-chain/index.mdx @@ -3,7 +3,6 @@ title: Cross-chain tooling image: /img/socialCards/cross-chain-tooling.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/cross-chain/layerzero.md b/docs/developers/tooling/cross-chain/layerzero.md index f838218aa..d9023982e 100644 --- a/docs/developers/tooling/cross-chain/layerzero.md +++ b/docs/developers/tooling/cross-chain/layerzero.md @@ -5,26 +5,13 @@ image: /img/socialCards/layerzero-omnichain-messaging.jpg # LayerZero -LayerZero is an omnichain interoperability protocol that enables cross-chain messaging. -Applications built on Linea can use the LayerZero protocol to seamlessly connect to 35+ supported -blockchains. +LayerZero is an omnichain interoperability protocol that enables cross-chain messaging. Applications built on Linea can use the LayerZero protocol to seamlessly connect to 35+ supported blockchains. -LayerZero Endpoint has been deployed on Linea for builders to leverage omnichain messaging in -their dapps. LayerZero’s Endpoint ULNv2 validation library relies on two parties, the Oracle and -Relayer, to transfer messages between on-chain smart contracts known as endpoints. When LayerZero -sends a message from Linea to chain X, the message is routed through the endpoint on Linea to the -ULNv2 validation library. The ULNv2 library notifies the Oracle and Relayer of the message and -its destination chain X. The Oracle forwards the packet hash to the endpoint on chain X, and the -Relayer submits the packet to be verified on-chain against the hash, and delivers the message. +LayerZero Endpoint has been deployed on Linea for builders to leverage omnichain messaging in their dapps. LayerZero’s Endpoint ULNv2 validation library relies on two parties, the Oracle and Relayer, to transfer messages between on-chain smart contracts known as endpoints. When LayerZero sends a message from Linea to chain X, the message is routed through the endpoint on Linea to the ULNv2 validation library. The ULNv2 library notifies the Oracle and Relayer of the message and its destination chain X. The Oracle forwards the packet hash to the endpoint on chain X, and the Relayer submits the packet to be verified on-chain against the hash, and delivers the message. -As a developer, you can leverage LayerZero's Endpoint contract by using our LzApp interface for -your User Application (UA). The Endpoint allows UAs to configure the Messaging Library for sending -and receiving verified messages and guarantees the message-delivering ordering across all messaging -libraries: +As a developer, you can leverage LayerZero's Endpoint contract by using our LzApp interface for your User Application (UA). The Endpoint allows UAs to configure the Messaging Library for sending and receiving verified messages and guarantees the message-delivering ordering across all messaging libraries: -`Send()`: the message will be sent through the endpoint first, and then redirected to the -UA-configured Messaging Library. `Receive()`: the message will be verified at the Messaging -Library first, then forwarded to the endpoint and eventually delivered to the UA. +`Send()`: the message will be sent through the endpoint first, and then redirected to the UA-configured Messaging Library. `Receive()`: the message will be verified at the Messaging Library first, then forwarded to the endpoint and eventually delivered to the UA. Learn how to integrate LayerZero into your contracts [here](https://layerzero.gitbook.io/docs/). diff --git a/docs/developers/tooling/cross-chain/shortcuts.mdx b/docs/developers/tooling/cross-chain/shortcuts.mdx index a78db27f8..f6d617a76 100644 --- a/docs/developers/tooling/cross-chain/shortcuts.mdx +++ b/docs/developers/tooling/cross-chain/shortcuts.mdx @@ -4,32 +4,27 @@ description: No-code tool for executing multiple DeFi actions in one transaction image: /img/socialCards/onthis-shortcuts.jpg --- -import ShortcutsDiagram from "/img/developers/tooling/cross_chain/shortcuts/Shortcuts.svg" +import ShortcutsDiagram from "/img/developers/tooling/cross_chain/shortcuts/Shortcuts.svg"; A Shortcut allows users to execute onchain actions by sending funds to a contract address. -Each Shortcut is a unique smart contract designed to carry out the desired function. Shortcuts are -represented by ENS domains, making addresses human-readable. +Each Shortcut is a unique smart contract designed to carry out the desired function. Shortcuts are represented by ENS domains, making addresses human-readable. :::note -Shortcuts currently only supports Ethereum Mainnet as the source chain, unless explicitly specified -by the Shortcut description. Shortcut addresses are not chain-agnostic, but are different from -network to network. Sending ETH (or other tokens) to the wrong network may result in a loss of funds. +Shortcuts currently only supports Ethereum Mainnet as the source chain, unless explicitly specified by the Shortcut description. Shortcut addresses are not chain-agnostic, but are different from network to network. Sending ETH (or other tokens) to the wrong network may result in a loss of funds. ::: ## How it works (user flow) -A simple use case for a Shortcut could involve a user who wants to streamline the process of -bridging ETH to Linea: +A simple use case for a Shortcut could involve a user who wants to streamline the process of bridging ETH to Linea: -1. A user sends ETH to a Shortcut address +1. A user sends ETH to a Shortcut address 2. The ETH is automatically bridged to Linea via [Across](https://across.to/) 3. The ETH is returned as native Linea ETH to the sender on the destination chain (Linea). -More complex Shortcuts can do additional things: bridge and swap, bridge and deposit to a liquidity -pool, bridge and stake/restake. The developer's imagination is the only limit. +More complex Shortcuts can do additional things: bridge and swap, bridge and deposit to a liquidity pool, bridge and stake/restake. The developer's imagination is the only limit.
@@ -37,69 +32,52 @@ pool, bridge and stake/restake. The developer's imagination is the only limit. ## How it works (technical) -Shortcuts trigger actions using a fallback function in the smart contract called `receive()`. This -allows users to initiate a transaction without approvals. The contract engages with Across -intent-based listeners and paths that will execute the action on the destination chain. +Shortcuts trigger actions using a fallback function in the smart contract called `receive()`. This allows users to initiate a transaction without approvals. The contract engages with Across intent-based listeners and paths that will execute the action on the destination chain. -The output token(s) from the automation are returned to `msg.sender` (the account that called the -function; in this case, the person using the Shortcut). +The output token(s) from the automation are returned to `msg.sender` (the account that called the function; in this case, the person using the Shortcut). ## Onthis Snap -A MetaMask Snap has been built specifically to help you verify that a Shortcut is behaving as -intended. +A MetaMask Snap has been built specifically to help you verify that a Shortcut is behaving as intended. :::info[MetaMask Snaps] -MetaMask Snaps is a system that enables third-party developers to add features and functionality -to MetaMask. Read more in the [MetaMask Help Center](https://support.metamask.io/metamask-snaps), -or visit the [Snaps directory](https://snaps.metamask.io/) to browse what's available. +MetaMask Snaps is a system that enables third-party developers to add features and functionality to MetaMask. Read more in the [MetaMask Help Center](https://support.metamask.io/metamask-snaps), or visit the [Snaps directory](https://snaps.metamask.io/) to browse what's available. ::: -Before you send funds to the Shortcut, the Snap automatically recognizes that the transaction -involves an Onthis Shortcut, and provides a breakdown of: +Before you send funds to the Shortcut, the Snap automatically recognizes that the transaction involves an Onthis Shortcut, and provides a breakdown of: + - The contract address, enabling you to confirm it is correct -- A description of what will happen once you send funds to the Shortcut. +- A description of what will happen once you send funds to the Shortcut. -Install the Snap by heading either to the [Snaps Directory](https://snaps.metamask.io/snap/npm/onthis-snap/) -or the [dedicated Onthis page](https://www.onthis.xyz/snap), and then hitting 'Add to MetaMask'. +Install the Snap by heading either to the [Snaps Directory](https://snaps.metamask.io/snap/npm/onthis-snap/) or the [dedicated Onthis page](https://www.onthis.xyz/snap), and then hitting 'Add to MetaMask'. ## Fees -Shortcuts are provided by [onthis.xyz](https://www.onthis.xyz/) and are built on top of [Across](https://across.to/). -Both services charge users a fee on the origin network. This fee covers the bridging costs and -automation costs and is shared between the two providers. The fee is calculated as a percentage -of the amount transferred, and is on top of the network gas fee paid to execute the action on the -origin chain. +Shortcuts are provided by [onthis.xyz](https://www.onthis.xyz/) and are built on top of [Across](https://across.to/). Both services charge users a fee on the origin network. This fee covers the bridging costs and automation costs and is shared between the two providers. The fee is calculated as a percentage of the amount transferred, and is on top of the network gas fee paid to execute the action on the origin chain. Here is an example of the Shortcuts fee model: -| Amount ($) | Swap + bridge fees | -| ------------- | ------------------ | -| 100 | 5.4% ($5.40) | -| 500 | 0.5% ($0.50) | -| 1,000 | 0.5% ($5.00) | -| 10,000 | 0.5% ($50.00) | -| 100,000 | 0.5% ($500.00) | +| Amount ($) | Swap + bridge fees | +| ---------- | ------------------ | +| 100 | 5.4% ($5.40) | +| 500 | 0.5% ($0.50) | +| 1,000 | 0.5% ($5.00) | +| 10,000 | 0.5% ($50.00) | +| 100,000 | 0.5% ($500.00) | ## Risks -Shortcuts do not store value, so the smart contract risk is lower than a traditional dapps. Since -they are built on Across, they share its risk profile. +Shortcuts do not store value, so the smart contract risk is lower than a traditional dapps. Since they are built on Across, they share its risk profile. -There are several other risks inherent in Shortcuts: +There are several other risks inherent in Shortcuts: ### Chain-dependent addressing -Every Shortcut has a different contract address. Even the same Shortcut deployed on two different -networks (Ethereum Mainnet and Arbitrum, for example) will have a different address. Moreover, -Shortcuts only work with ETH. Sending tokens (ERC-20, ERC-721, or others) to a Shortcut may result -in a loss of funds, as will sending ETH to a Shortcut deployed on a different network. +Every Shortcut has a different contract address. Even the same Shortcut deployed on two different networks (Ethereum Mainnet and Arbitrum, for example) will have a different address. Moreover, Shortcuts only work with ETH. Sending tokens (ERC-20, ERC-721, or others) to a Shortcut may result in a loss of funds, as will sending ETH to a Shortcut deployed on a different network. -Linea addresses this risk by clearly identifying the Shortcut's network in its name. If a network -is specified, it means that the Shortcut can only accept ETH on that specific network. The naming -convention for Shortcut ENS names curated by Linea is as follows: +Linea addresses this risk by clearly identifying the Shortcut's network in its name. If a network is specified, it means that the Shortcut can only accept ETH on that specific network. The naming convention for Shortcut ENS names curated by Linea is as follows: `[network].[usecase/partner].onlinea.eth` @@ -107,35 +85,23 @@ In practice, this could look something like: `arbitrum.bridge.onlinea.eth` -The omission of the `[network]` prefix indicates that the Shortcut relates to Ethereum Mainnet; -`bridge.onlinea.eth`, for example, only works on Ethereum Mainnet. +The omission of the `[network]` prefix indicates that the Shortcut relates to Ethereum Mainnet; `bridge.onlinea.eth`, for example, only works on Ethereum Mainnet. ### Naming system -The easy UX of sending ETH to an ENS name can present a risk for the user. An attacker can obtain -access to the owner key of the ENS name and change the address record, pointing it to their own -wallet and collecting the funds sent there. +The easy UX of sending ETH to an ENS name can present a risk for the user. An attacker can obtain access to the owner key of the ENS name and change the address record, pointing it to their own wallet and collecting the funds sent there. -Linea addresses this risk by controlling the ENS name with a multisig wallet and assigning the -manager role to the Linea Security Council (the maximum grade of security). We also have monitors -in place that listen for role changes for the ENS name. +Linea addresses this risk by controlling the ENS name with a multisig wallet and assigning the manager role to the Linea Security Council (the maximum grade of security). We also have monitors in place that listen for role changes for the ENS name. -### Upgradability of contracts +### Upgradability of contracts -Shortcuts can be upgraded by the creator. An attacker can upgrade the contract and change its -behavior. Linea addresses this risk by requiring trusted creators (like the [onthis.xyz](https://www.onthis.xyz/) team) -to hold the owner keys in a secure multisig or asking the creators to hand over the ownership of -the contracts to the Linea multisig. +Shortcuts can be upgraded by the creator. An attacker can upgrade the contract and change its behavior. Linea addresses this risk by requiring trusted creators (like the [onthis.xyz](https://www.onthis.xyz/) team) to hold the owner keys in a secure multisig or asking the creators to hand over the ownership of the contracts to the Linea multisig. -### Contract security +### Contract security -Even though Shortcuts contracts do not store value, security audits are still important. Shortcuts -created via the [Creator Tool](https://create.onthis.xyz/) have a deterministic output that is -included in the audit scope of the Creator Tool itself. Custom built shortcuts require an -independent audit. +Even though Shortcuts contracts do not store value, security audits are still important. Shortcuts created via the [Creator Tool](https://create.onthis.xyz/) have a deterministic output that is included in the audit scope of the Creator Tool itself. Custom built shortcuts require an independent audit. -Linea addresses this risk by including a third-party audit of the Shortcuts listed under -onlinea.eth as part of the curation process. +Linea addresses this risk by including a third-party audit of the Shortcuts listed under onlinea.eth as part of the curation process. ## Further information diff --git a/docs/developers/tooling/data-indexers/covalent.md b/docs/developers/tooling/data-indexers/covalent.md index 8c78841d5..9847d3cf7 100644 --- a/docs/developers/tooling/data-indexers/covalent.md +++ b/docs/developers/tooling/data-indexers/covalent.md @@ -5,8 +5,7 @@ image: /img/socialCards/covalent.jpg # GoldRush - powered by Covalent -[GoldRush](https://goldrush.dev/?utm_source=linea&utm_medium=partner-docs) is a set of data tools that enable easy web3 development across [200+ supported blockchains](https://goldrush.dev/docs/networks/?utm_source=linea&utm_medium=partner-docs), -including Linea mainnet and Sepolia testnet. The mission of GoldRush is to improve the lives of developers by providing structured onchain data for dapps. +[GoldRush](https://goldrush.dev/?utm_source=linea&utm_medium=partner-docs) is a set of data tools that enable easy web3 development across [200+ supported blockchains](https://goldrush.dev/docs/networks/?utm_source=linea&utm_medium=partner-docs), including Linea mainnet and Sepolia testnet. The mission of GoldRush is to improve the lives of developers by providing structured onchain data for dapps. Developers can utilize GoldRush via SDKs, APIs, UI Kits, human-readable transactions and pre-built templates for a number of web3 use cases. The GoldRush suite is powered by Covalent, which is decentralized and cryptographically secure. Whether you are fetching NFTs, DeFi transactions, or other onchain data, GoldRush helps scale hundreds of projects from crypto native teams to Fortune 500 companies. @@ -31,26 +30,22 @@ The GoldRush APIs enables developers to quickly and easily access structured onc ### Wallet API -- **Features:** All token balances (ERC20, 721, 1155, native), token transfers and prices (spot and -historical) for a wallet. +- **Features:** All token balances (ERC20, 721, 1155, native), token transfers and prices (spot and historical) for a wallet. - **Use cases:** [Wallets, portfolio trackers](https://goldrush-wallet-portfolio-ui.vercel.app/?utm_source=linea&utm_medium=partner-docs), token gating, airdrop snapshots. ### Transactions API -- **Features:** All historical transactions with human-readable log events. Includes gas usage/spend -summaries. +- **Features:** All historical transactions with human-readable log events. Includes gas usage/spend summaries. - **Use cases:** [Accounting and tax tools](https://bit.ly/crypto-tax-tool), branded in-app [transaction receipts](https://goldrush-dfk-tx-receipt-ui.vercel.app/tx/defi-kingdoms-mainnet/0x4e5c0af28b2cea27d06677fae1f573572e0ff863c43ae42d2959ca67b90c4390/?utm_source=linea&utm_medium=partner-docs). ### NFT API -- **Features:** Media assets, metadata, sales, owners, trait & attribute filters, thumbnails, and -previews. +- **Features:** Media assets, metadata, sales, owners, trait & attribute filters, thumbnails, and previews. - **Use cases:** [NFT galleries and marketplaces](https://goldrush-nft-gallery-ui.vercel.app/?utm_source=linea&utm_medium=partner-docs), real world asset (RWA) tracking, token gating. ### Cross-Chain Activity API -- **Features:** Single API call to fetch a list of active chains and the latest transaction date -on each for an address. +- **Features:** Single API call to fetch a list of active chains and the latest transaction date on each for an address. - **Use cases:** [App onboarding](https://goldrush-wallet-portfolio-ui.vercel.app/activity/0xfc43f5f9dd45258b3aff31bdbe6561d97e8b71de/?utm_source=linea&utm_medium=partner-docs). ### Security API @@ -69,229 +64,235 @@ There are 4 primary developer tools for using the APIs: 1. [GoldRush API](https://goldrush.dev/docs/api/?utm_source=linea&utm_medium=partner-docs) - REST API with enterprise-grade endpoints to use with any programming language. Switch blockchains with one path parameter. - ```bash - curl -X GET https://api.covalenthq.com/v1/linea-mainnet/address/0xc882b111a75c0c657fc507c04fbfcd2cc984f071/balances_v2/ \ - -H 'Content-Type: application/json' \ - -u YOUR_API_KEY: - ``` + ```bash + curl -X GET https://api.covalenthq.com/v1/linea-mainnet/address/0xc882b111a75c0c657fc507c04fbfcd2cc984f071/balances_v2/ \ + -H 'Content-Type: application/json' \ + -u YOUR_API_KEY: + ``` 2. [GoldRush SDKs](https://goldrush.dev/docs/unified-api/sdk/?utm_source=linea&utm_medium=partner-docs) - official client libraries including TypeScript, Python, Go and Viem. - ```jsx - npm install @covalenthq/client-sdk - ``` - - ```jsx - import { CovalentClient } from "@covalenthq/client-sdk"; - - (async () => { - try { - const client = new CovalentClient("YOUR_API_KEY"); - const transactions = client.TransactionService.getAllTransactionsForAddress("linea-mainnet", "0xc882b111a75c0c657fc507c04fbfcd2cc984f071"); - - for await (const tx of transactions) { - console.log("tx", tx); - } - } catch (error) { - console.log(error.message); - } - })(); - ``` + ```jsx + npm install @covalenthq/client-sdk + ``` + + ```jsx + import { CovalentClient } from "@covalenthq/client-sdk"; + + (async () => { + try { + const client = new CovalentClient("YOUR_API_KEY"); + const transactions = + client.TransactionService.getAllTransactionsForAddress( + "linea-mainnet", + "0xc882b111a75c0c657fc507c04fbfcd2cc984f071", + ); + + for await (const tx of transactions) { + console.log("tx", tx); + } + } catch (error) { + console.log(error.message); + } + })(); + ``` 3. [GoldRush UI Kit](https://github.com/covalenthq/goldrush-kit/?utm_source=linea&utm_medium=partner-docs) - beautifully designed React components for your dApp frontend. - [![GoldRush Component Example](https://www.datocms-assets.com/86369/1711147954-goldrush_wallet_ui_example.png)](https://goldrush-wallet-portfolio-ui.vercel.app/dashboard/balance/0xfc43f5f9dd45258b3aff31bdbe6561d97e8b71de/transfers/eth-mainnet/0xf8c3527cc04340b208c854e985240c02f7b7793f) + [![GoldRush Component Example](https://www.datocms-assets.com/86369/1711147954-goldrush_wallet_ui_example.png)](https://goldrush-wallet-portfolio-ui.vercel.app/dashboard/balance/0xfc43f5f9dd45258b3aff31bdbe6561d97e8b71de/transfers/eth-mainnet/0xf8c3527cc04340b208c854e985240c02f7b7793f) 4. [GoldRush Decoder](https://github.com/covalenthq/goldrush-decoder/?utm_source=linea&utm_medium=partner-docs) - decode any raw event logs into human-readable structured data. - **Request:** - ```bash - curl -X POST http://localhost:8080/api/v1/tx/decode \ - -H 'Content-Type: application/json' \ - -d '{ - "chain_name": "linea-mainnet", - "tx_hash": "0xfb6277bb32b5c5fb9c84925a42406ff47e65efd3b0eeea526f8d270429c9e453" - }' - ``` - - **Custom decoded response:** - ```json - { - "success": true, - "events": [ - { - "action": "Transferred", - "category": "Token", - "name": "Transfer", - "protocol": { - "logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", - "name": "SLToken1" - }, - "details": [ - { - "heading": "From", - "value": "0xb5c6a0625E6F01CAbF9DDBdf64AaAbd1B178e1E2", - "type": "address" - }, - { - "heading": "To", - "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", - "type": "address" - } - ], - "tokens": [ - { - "decimals": 18, - "heading": "Token Amount", - "pretty_quote": "$0.00", - "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", - "ticker_symbol": "SLTT1", - "value": "1000" - } - ] - }, - { - "action": "Transferred", - "category": "Token", - "name": "Transfer", - "protocol": { - "logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", - "name": "SLToken1" - }, - "details": [ - { - "heading": "From", - "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", - "type": "address" - }, - { - "heading": "To", - "value": "0x7160570BB153Edd0Ea1775EC2b2Ac9b65F1aB61B", - "type": "address" - } - ], - "tokens": [ - { - "decimals": 18, - "heading": "Token Amount", - "pretty_quote": "$0.00", - "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", - "ticker_symbol": "SLTT1", - "value": "1000" - } - ] - }, - { - "action": "Transferred", - "category": "Token", - "name": "Transfer", - "protocol": { - "logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", - "name": "SLToken5" - }, - "details": [ - { - "heading": "From", - "value": "0x7160570BB153Edd0Ea1775EC2b2Ac9b65F1aB61B", - "type": "address" - }, - { - "heading": "To", - "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", - "type": "address" - } - ], - "tokens": [ - { - "decimals": 18, - "heading": "Token Amount", - "pretty_quote": "$0.00", - "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", - "ticker_symbol": "SLTT5", - "value": "989" - } - ] - }, - { - "action": "Transferred", - "category": "Token", - "name": "Transfer", - "protocol": { - "logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", - "name": "SLToken5" - }, - "details": [ - { - "heading": "From", - "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", - "type": "address" - }, - { - "heading": "To", - "value": "0xb5c6a0625E6F01CAbF9DDBdf64AaAbd1B178e1E2", - "type": "address" - } - ], - "tokens": [ - { - "decimals": 18, - "heading": "Token Amount", - "pretty_quote": "$0.00", - "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", - "ticker_symbol": "SLTT5", - "value": "988" - } - ] - }, - { - "action": "Account Abstraction Transaction", - "category": "Others", - "name": "User Operation Event", - "protocol": { - "logo": "https://logos.covalenthq.com/tokens/59144/0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789.png", - "name": "4337 Entry Point" - }, - "details": [ - { - "heading": "Gas Cost", - "value": "25590122985514", - "type": "text" - }, - { - "heading": "Gas Used", - "value": "426502", - "type": "text" - }, - { - "heading": "Paymaster", - "value": "0x0000000000000000000000000000000000000000", - "type": "address" - }, - { - "heading": "Sender", - "value": "0xb5c6a0625E6F01CAbF9DDBdf64AaAbd1B178e1E2", - "type": "address" - }, - { - "heading": "User Operation Hash", - "value": "0xfce86b467cae9f1375483acc23edaf5ead45f1fcff1939f06e00b28b2f776f94", - "type": "address" - } - ] - } - ], - "tx_metadata": { - ... - }, - "explorers": [ - { - "label": null, - "url": "https://lineascan.build/tx/0xfb6277bb32b5c5fb9c84925a42406ff47e65efd3b0eeea526f8d270429c9e453" - } - ] - } - } - ``` + **Request:** + + ```bash + curl -X POST http://localhost:8080/api/v1/tx/decode \ + -H 'Content-Type: application/json' \ + -d '{ + "chain_name": "linea-mainnet", + "tx_hash": "0xfb6277bb32b5c5fb9c84925a42406ff47e65efd3b0eeea526f8d270429c9e453" + }' + ``` + + **Custom decoded response:** + + ```json + { + "success": true, + "events": [ + { + "action": "Transferred", + "category": "Token", + "name": "Transfer", + "protocol": { + "logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", + "name": "SLToken1" + }, + "details": [ + { + "heading": "From", + "value": "0xb5c6a0625E6F01CAbF9DDBdf64AaAbd1B178e1E2", + "type": "address" + }, + { + "heading": "To", + "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", + "type": "address" + } + ], + "tokens": [ + { + "decimals": 18, + "heading": "Token Amount", + "pretty_quote": "$0.00", + "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", + "ticker_symbol": "SLTT1", + "value": "1000" + } + ] + }, + { + "action": "Transferred", + "category": "Token", + "name": "Transfer", + "protocol": { + "logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", + "name": "SLToken1" + }, + "details": [ + { + "heading": "From", + "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", + "type": "address" + }, + { + "heading": "To", + "value": "0x7160570BB153Edd0Ea1775EC2b2Ac9b65F1aB61B", + "type": "address" + } + ], + "tokens": [ + { + "decimals": 18, + "heading": "Token Amount", + "pretty_quote": "$0.00", + "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xc1061a8315095945d83650a1ba28cd026d64cdb0.png", + "ticker_symbol": "SLTT1", + "value": "1000" + } + ] + }, + { + "action": "Transferred", + "category": "Token", + "name": "Transfer", + "protocol": { + "logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", + "name": "SLToken5" + }, + "details": [ + { + "heading": "From", + "value": "0x7160570BB153Edd0Ea1775EC2b2Ac9b65F1aB61B", + "type": "address" + }, + { + "heading": "To", + "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", + "type": "address" + } + ], + "tokens": [ + { + "decimals": 18, + "heading": "Token Amount", + "pretty_quote": "$0.00", + "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", + "ticker_symbol": "SLTT5", + "value": "989" + } + ] + }, + { + "action": "Transferred", + "category": "Token", + "name": "Transfer", + "protocol": { + "logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", + "name": "SLToken5" + }, + "details": [ + { + "heading": "From", + "value": "0xf081470f5C6FBCCF48cC4e5B82Dd926409DcdD67", + "type": "address" + }, + { + "heading": "To", + "value": "0xb5c6a0625E6F01CAbF9DDBdf64AaAbd1B178e1E2", + "type": "address" + } + ], + "tokens": [ + { + "decimals": 18, + "heading": "Token Amount", + "pretty_quote": "$0.00", + "ticker_logo": "https://logos.covalenthq.com/tokens/59144/0xfe3b40b2d513b8e7ab3c7b6c758df3f00a2772dd.png", + "ticker_symbol": "SLTT5", + "value": "988" + } + ] + }, + { + "action": "Account Abstraction Transaction", + "category": "Others", + "name": "User Operation Event", + "protocol": { + "logo": "https://logos.covalenthq.com/tokens/59144/0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789.png", + "name": "4337 Entry Point" + }, + "details": [ + { + "heading": "Gas Cost", + "value": "25590122985514", + "type": "text" + }, + { + "heading": "Gas Used", + "value": "426502", + "type": "text" + }, + { + "heading": "Paymaster", + "value": "0x0000000000000000000000000000000000000000", + "type": "address" + }, + { + "heading": "Sender", + "value": "0xb5c6a0625E6F01CAbF9DDBdf64AaAbd1B178e1E2", + "type": "address" + }, + { + "heading": "User Operation Hash", + "value": "0xfce86b467cae9f1375483acc23edaf5ead45f1fcff1939f06e00b28b2f776f94", + "type": "address" + } + ] + } + ], + "tx_metadata": { + ... + }, + "explorers": [ + { + "label": null, + "url": "https://lineascan.build/tx/0xfb6277bb32b5c5fb9c84925a42406ff47e65efd3b0eeea526f8d270429c9e453" + } + ] + } + } + ``` ## Get started diff --git a/docs/developers/tooling/data-indexers/dipdup/overview.md b/docs/developers/tooling/data-indexers/dipdup/overview.md index cd08cd85c..a4a03b5fc 100644 --- a/docs/developers/tooling/data-indexers/dipdup/overview.md +++ b/docs/developers/tooling/data-indexers/dipdup/overview.md @@ -7,6 +7,7 @@ image: /img/socialCards/overview.jpg [DipDup](https://dipdup.io/) is a Python framework for building smart contract indexers. It helps developers focus on business logic instead of writing a boilerplate to store and serve data. DipDup-based indexers are selective, which means only required data is requested. This approach allows to achieve faster indexing times and decreased load on underlying APIs. ## Understanding DipDup + DipDup is a software framework that helps web3 developers create selective indexers for decentralized applications. It uses blockchain data provided by various off-chain data sources. Some of the key features of DipDup include: - **Ready For Multichain**: DipDup supports dozens of blockchains, and we are constantly adding new ones. You can easily reuse your business logic for different networks or even index multiple chains in a single project. @@ -16,4 +17,5 @@ DipDup is a software framework that helps web3 developers create selective index - **Powerful CLI**: DipDup CLI has everything you need to manage your project, from creating a new one to running and deploying. And it's very convenient. There are lots of templates for various blockchains and use cases, so you can start quickly. ## Explore DipDup + To learn more about DipDup features, visit the [official DipDup documentation](https://dipdup.io/docs). It offers an in-depth explanation of the framework concepts, lots of examples from basic to the most advanced, allowing rapid and efficient development of blockchain data indexers of any complexity. diff --git a/docs/developers/tooling/data-indexers/dipdup/quickstart.md b/docs/developers/tooling/data-indexers/dipdup/quickstart.md index ad369cb51..632c53359 100644 --- a/docs/developers/tooling/data-indexers/dipdup/quickstart.md +++ b/docs/developers/tooling/data-indexers/dipdup/quickstart.md @@ -3,11 +3,13 @@ title: Quickstart sidebar_position: 2 image: /img/socialCards/quickstart.jpg --- + This page will guide you through the steps to get your first DipDup indexer up and running in a few minutes without getting too deep into the details. Let's create an indexer for output transactions from a specific address. We will need to set up the indexing environment, configure the indexer, and store the results in a database. ## Prerequisites + Here are a few things you need to get started with DipDup: - **Skills**: Basic Python 3 knowledge to implement data handlers. @@ -15,6 +17,7 @@ Here are a few things you need to get started with DipDup: - **Python Version**: Python 3.11 is required for DipDup. You can check your Python version by running `python3 --version` in your terminal. ## Step 1 — Install DipDup + The easiest way to install DipDup as a CLI application is [pipx](https://pipx.pypa.io/stable/) with pipx install dipdup command. If you don't want to deal with tooling, we have a convenient installer script. Run the following command in your terminal: ```bash @@ -24,6 +27,7 @@ curl -Lsf https://dipdup.io/install.py | python3 See the [Installation](https://dipdup.io/docs/installation) page for other options. ## Step 2 — Create a project + DipDup CLI has a built-in project generator with lots of templates. To create a new project interactively, run the following command: ```bash @@ -35,6 +39,7 @@ For educational purposes, we'll create a project from scratch, so choose `[none] Follow the instructions; the project will be created in the new directory. ## Step 3 — Configuration file + The project root directory contains a bash file named `dipdup.bash`. It's the main configuration file of your indexer. Available options are described in detail on [this page](https://dipdup.io/docs/getting-started/config). For now, just replace its content with the following: ```bash @@ -43,16 +48,16 @@ package: linea datasources: subsquid: - kind: evm.subsquid + kind: evm.subsquid url: https://v2.archive.subsquid.io/network/linea-mainnet node: evm_node etherscan: - kind: abi.etherscan - url: https://api.lineascan.build/api + kind: abi.etherscan + url: https://api.lineascan.build/api mainnet_node: - kind: evm.node + kind: evm.node url: https://linea-mainnet.infura.io/v3 ws_url: wss://linea-mainnet.infura.io/ws/v3 @@ -86,6 +91,7 @@ dipdup init You can read more about the structure of the DipDup package [here](https://dipdup.io/docs/getting-started/package). ## Step 4 — Define models and implement data handlers + In this step, we define the business logic of our application. DipDup supports storing data in SQLite, PostgreSQL and TimescaleDB databases. We use custom ORM based on Tortoise ORM as an abstraction layer. First, you need to define a model class. Our schema will consist of a single `Transaction` model: @@ -104,7 +110,6 @@ class Transaction(Model): created_at = fields.DatetimeField(auto_now_add=True) ``` - Our single handler will be responsible for processing output transactions as described in the index definition in config: ```bash @@ -128,6 +133,7 @@ async def on_output_transaction( ``` ## Step 5 — Results + Time to run the indexer. Processed data will be written to the SQLite file defined in the configuration: ```bash diff --git a/docs/developers/tooling/data-indexers/dune.md b/docs/developers/tooling/data-indexers/dune.md index b28b8fce8..6e5966e5f 100644 --- a/docs/developers/tooling/data-indexers/dune.md +++ b/docs/developers/tooling/data-indexers/dune.md @@ -5,7 +5,7 @@ image: /img/socialCards/dune.jpg ## Crypto's data platform -[Dune](https://dune.com/) is crypto's data platform. Teams and individuals alike use Dune to explore, query, access, and export blockchain data. Dune's community of data engineers, researchers, and analysts use the platform to gain deeper insights into blockchain activity. Dune provides organized, decoded and human-readable blockchain data, across 15+ chains and 1.5M datasets. +[Dune](https://dune.com/) is crypto's data platform. Teams and individuals alike use Dune to explore, query, access, and export blockchain data. Dune's community of data engineers, researchers, and analysts use the platform to gain deeper insights into blockchain activity. Dune provides organized, decoded and human-readable blockchain data, across 15+ chains and 1.5M datasets. ### Features @@ -32,4 +32,3 @@ Here are some resources to help you learn more about Dune Analytics: - [Blog](https://dune.com/blog): The Dune blog features articles, case studies, and updates about the platform. - [Twitter](https://twitter.com/duneanalytics): Follow Dune Analytics on Twitter for the latest news and announcements. - diff --git a/docs/developers/tooling/data-indexers/etherscan.mdx b/docs/developers/tooling/data-indexers/etherscan.mdx index d440b1b94..67a29727b 100644 --- a/docs/developers/tooling/data-indexers/etherscan.mdx +++ b/docs/developers/tooling/data-indexers/etherscan.mdx @@ -3,16 +3,13 @@ title: Etherscan description: Use one API key across multiple chains with the Etherscan API v2 --- -Use the Etherscan API v2 to access data across over 50 [supported chains](https://docs.etherscan.io/etherscan-v2/getting-started/supported-chains), -including Linea, with a single API key. +Use the Etherscan API v2 to access data across over 50 [supported chains](https://docs.etherscan.io/etherscan-v2/getting-started/supported-chains), including Linea, with a single API key. -To get started, create an account on [Etherscan](https://etherscan.io/register), and then head to -the [API key page](https://etherscan.io/myapikey) and generate a new key. +To get started, create an account on [Etherscan](https://etherscan.io/register), and then head to the [API key page](https://etherscan.io/myapikey) and generate a new key. :::warning -Although you can use the same API key across multiple chains, you can only make requests to one -chain at a time. +Although you can use the same API key across multiple chains, you can only make requests to one chain at a time. ::: @@ -20,29 +17,26 @@ From here, you can use the API key in any request, defining the chains you want ```javascript async function main() { + // query ETH balances on Ethereum Mainnet and Linea - // query ETH balances on Ethereum Mainnet and Linea + const chains = [1, 59144]; - const chains = [1, 59144] - - for (const chain of chains) { - - const query = await fetch(`https://api.etherscan.io/v2/api + for (const chain of chains) { + const query = await fetch(`https://api.etherscan.io/v2/api ?chainid=${chain} &module=account &action=balance &address=INSERT_ADDRESS - &tag=latest&apikey=INSERT_API_KEY`) - - const response = await query.json() + &tag=latest&apikey=INSERT_API_KEY`); - const balance = response.result - console.log(balance) + const response = await query.json(); - } + const balance = response.result; + console.log(balance); + } } -main() +main(); ``` For full details of how to use the Etherscan API v2, see the [documentation](https://docs.etherscan.io/etherscan-v2). diff --git a/docs/developers/tooling/data-indexers/flair.mdx b/docs/developers/tooling/data-indexers/flair.mdx index ac5e6bb7c..aeb1d0a96 100644 --- a/docs/developers/tooling/data-indexers/flair.mdx +++ b/docs/developers/tooling/data-indexers/flair.mdx @@ -52,7 +52,6 @@ git clone https://github.com/flair-sdk/starter-boilerplate.git :::info - Boilerplate instructions will create a **new cluster**, generate **an API Key**, and set up a manifest.yml to index your **first contract** with **sample custom processor** scripts. Learn more about the [structure of manifest.yml](https://docs.flair.dev/reference/manifest.yml). diff --git a/docs/developers/tooling/data-indexers/index.mdx b/docs/developers/tooling/data-indexers/index.mdx index 41cd21cf0..7980d36ec 100644 --- a/docs/developers/tooling/data-indexers/index.mdx +++ b/docs/developers/tooling/data-indexers/index.mdx @@ -3,7 +3,6 @@ title: Data indexers image: /img/socialCards/data-indexers.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/data-indexers/moralis.md b/docs/developers/tooling/data-indexers/moralis.md index ed2fd304c..8f7ea031e 100644 --- a/docs/developers/tooling/data-indexers/moralis.md +++ b/docs/developers/tooling/data-indexers/moralis.md @@ -10,6 +10,7 @@ image: /img/socialCards/moralis.jpg ## Indexed data APIs Moralis' Linea API integration supports: + - **[Wallet API](https://moralis.io/api/wallet/?utm_source=linea-docs&utm_medium=partner-docs)**: Insights into wallet balances, token balances, NFTs, wallet history, transactions, wallet net-worth, and more. - **[NFT API](https://moralis.io/api/nft/?utm_source=linea-docs&utm_medium=partner-docs)**: NFT metadata, NFT transfers, NFT owners, NFT prices, and more. - **[Token API](https://moralis.io/api/token/?utm_source=linea-docs&utm_medium=partner-docs)**: Token metadata, token transfers, token approvals, token prices, and more. @@ -20,6 +21,7 @@ Moralis' Linea API integration supports: ### Example features Moralis indexed data APIs can be used for: + - Fetching all NFTs for a user's wallet - Fetching all ERC20 tokens, with prices, for a user's wallet - Fetching a decoded transaction history for a user's wallet @@ -30,6 +32,7 @@ Moralis indexed data APIs can be used for: ### Example use cases Moralis indexed data APIs can be used to build: + - **Web3 wallets:** Integrating wallet functionalities such as displaying token balances, transaction history, and NFT holdings. - **Portfolio pages:** Creating personalized portfolio trackers to monitor asset performance across multiple blockchains. - **NFT marketplaces:** Building platforms for buying, selling, and trading NFTs by fetching and displaying NFT data. @@ -38,11 +41,13 @@ Moralis indexed data APIs can be used to build: ## Real-time data APIs Moralis' Linea real-time data integration supports: + - **[Streams API](https://moralis.io/streams/?utm_source=linea-docs&utm_medium=partner-docs)**: Stream blockchain data directly to your server via webhooks in real-time. Setup and configure advanced filters, or use any of our out-of-the-box configurations. ### Example features Moralis real-time data APIs can be used for: + - Listening to transfer events for a given ERC20 token - Listening to native transfer events for a given wallet - Listening to token mints or burns @@ -53,6 +58,7 @@ Moralis real-time data APIs can be used for: ### Example use cases Moralis real-time data APIs can be used to build: + - **In-app notifications:** Sending real-time alerts to users based on their wallet holdings, for events like token transfers, price changes, staking rewards etc. to increase engagement. - **Real-time token balances:** Continuously updating and displaying users' wallet balances in real-time within dapps, enabling instant visibility into their current asset holdings and values. - **Discord alerts:** Providing real-time updates to Discord communities about blockchain activities and token movements. diff --git a/docs/developers/tooling/data-indexers/nftscan.mdx b/docs/developers/tooling/data-indexers/nftscan.mdx index 37f675b7e..b00476515 100644 --- a/docs/developers/tooling/data-indexers/nftscan.mdx +++ b/docs/developers/tooling/data-indexers/nftscan.mdx @@ -32,10 +32,10 @@ Before using the NFTScan API, you need to visit the developer website and create
- NFTScan sign up page + NFTScan sign up page
@@ -43,10 +43,10 @@ After logging in, find your unique API KEY on the Dashboard and copy it. Visit t
- NFTScan API key + NFTScan API key
@@ -54,10 +54,10 @@ In the Dashboard, developers can also view statistics on their API usage, helpin
- NFTScan dashboard + NFTScan dashboard
@@ -73,10 +73,10 @@ The covered NFT data is diverse, providing a complete set of interfaces for acce
- NFTScan API documentation + NFTScan API documentation
@@ -86,10 +86,10 @@ In the API documentation, you'll notice a section for selecting the blockchain.
- NFTScan set chain to Linea + NFTScan set chain to Linea
@@ -99,10 +99,10 @@ Now that you've configured the blockchain to Linea, you can start using the API
- NFTScan querying API requests + NFTScan querying API requests
diff --git a/docs/developers/tooling/data-indexers/scopescan.mdx b/docs/developers/tooling/data-indexers/scopescan.mdx index 532644b4d..0a396e092 100644 --- a/docs/developers/tooling/data-indexers/scopescan.mdx +++ b/docs/developers/tooling/data-indexers/scopescan.mdx @@ -3,11 +3,12 @@ title: Scopescan image: /img/socialCards/scopescan.jpg --- -As Web3 platforms, protocols, and dapps become more mainstream, there is an increasing demand for these companies to know their users’ behaviors and connections. Thus, having a partner that can help companies and developers understand their users better is important for Linea and its mission to provide better scalability. +As Web3 platforms, protocols, and dapps become more mainstream, there is an increasing demand for these companies to know their users’ behaviors and connections. Thus, having a partner that can help companies and developers understand their users better is important for Linea and its mission to provide better scalability. This article provides information on using Scopescan and its analytical tools to determine authentic users and their relations on Linea. ## Scopescan and its unique value proposition + Understanding Web3 users’ patterns can be difficult, especially given that any particular user can have multiple addresses and that Web3 prioritizes privacy. Unlike their Web2 counterparts, Web3 companies understandably have additional hurdles to clear to fine-tune their products to users’ evolving needs. This is where Scopescan brings unique value to the Linea platform and its projects. Scopescan is an on-chain data analytics platform that allows the creation of real-time profiles, called entities, with meaningful connections. It features an extensive list of analytical tools that are built on user-based data and powered by the 0xScope Web3 AI Data Layer, for high-quality data extraction and processing that meets the high data standards of AI solutions. @@ -24,17 +25,13 @@ In this mode, Scopescan users can find profiles of the top addresses, tokens, an
- +
- +
@@ -46,17 +43,13 @@ In addition, you can create your own dashboard that can track specific addresses
- +
- +
@@ -66,17 +59,13 @@ Under Investigation Mode, there are several tools focused on transactions and to
- +
- +
diff --git a/docs/developers/tooling/data-indexers/sentio.mdx b/docs/developers/tooling/data-indexers/sentio.mdx index 1527f20fe..b9acf65e4 100644 --- a/docs/developers/tooling/data-indexers/sentio.mdx +++ b/docs/developers/tooling/data-indexers/sentio.mdx @@ -11,10 +11,10 @@ Users can use Sentio’s SDK to **collect** and **transform** [Metrics](https://
- Sentio dashboard + Sentio dashboard
diff --git a/docs/developers/tooling/data-indexers/subquery.md b/docs/developers/tooling/data-indexers/subquery.md index 420be415d..b970494f1 100644 --- a/docs/developers/tooling/data-indexers/subquery.md +++ b/docs/developers/tooling/data-indexers/subquery.md @@ -1,6 +1,6 @@ --- title: SubQuery -description: 'Fast, flexible, universal, open source and decentralised APIs' +description: "Fast, flexible, universal, open source and decentralised APIs" image: /img/socialCards/subquery.jpg --- @@ -8,8 +8,8 @@ SubQuery is a leading blockchain data indexer that provides developers with fast Another one of SubQuery's competitive advantages is the ability to aggregate data not only within a chain but across multiple blockchains all within a single project. This allows the creation of feature-rich dashboard analytics and multi-chain block scanners. -Other advantages include superior performance with multiple RPC endpoint configurations, multi-worker capabilities and a configurable caching architecture. -**Useful resources**: +Other advantages include superior performance with multiple RPC endpoint configurations, multi-worker capabilities and a configurable caching architecture. **Useful resources**: + - SubQuery Docs: [SubQuery Academy (Documentation)](https://academy.subquery.network/) - Intro Quick Start Guide: [1. Create a New Project](https://academy.subquery.network/quickstart/quickstart.html) - [Linea Starter Project](https://github.com/subquery/ethereum-subql-starter/tree/main/Linea/linea-starter) @@ -24,6 +24,7 @@ You can also follow along this [step by step guide](https://academy.subquery.net # Running and hosting your Linea SubQuery APIs SubQuery is open-source, meaning you have the freedom to run it in the following three ways: + - Locally on your own computer (or a cloud provider of your choosing). View the instructions on how to run SubQuery locally [here](https://academy.subquery.network/run_publish/run.html). - You can publish it to SubQuery's enterprise-level [Managed Service](https://managedservice.subquery.network/), where we'll host your SubQuery project in production-ready services for mission critical data with zero-downtime blue/green deployments. There is even a generous free tier. [Find out how](https://academy.subquery.network/run_publish/publish.html). - You can publish it to the decentralised [SubQuery Network](https://subquery.network/network), the most open, performant, reliable, and scalable data service for dapp developers. The SubQuery Network indexes and services data to the global community in an incentivised and verifiable way and supports Linea from launch. diff --git a/docs/developers/tooling/data-indexers/subsquid.md b/docs/developers/tooling/data-indexers/subsquid.md index 5b6ed22e5..e4d27ec4c 100644 --- a/docs/developers/tooling/data-indexers/subsquid.md +++ b/docs/developers/tooling/data-indexers/subsquid.md @@ -3,7 +3,4 @@ title: Subsquid image: /img/socialCards/subsquid.jpg --- -[Subsquid](https://subsquid.io/) is a decentralized indexing toolkit optimized for batch extraction of large volumes of data. -It currently serves historical on-chain data including event logs, transaction receipts, traces and per-transaction state diffs. -Subsquid offers a powerful toolkit for creating custom data extraction and processing pipelines, achieving indexing speed of up to 50k blocks per second. - +[Subsquid](https://subsquid.io/) is a decentralized indexing toolkit optimized for batch extraction of large volumes of data. It currently serves historical on-chain data including event logs, transaction receipts, traces and per-transaction state diffs. Subsquid offers a powerful toolkit for creating custom data extraction and processing pipelines, achieving indexing speed of up to 50k blocks per second. diff --git a/docs/developers/tooling/data-indexers/thegraph.md b/docs/developers/tooling/data-indexers/thegraph.md index d61bc0aa4..57fe018ff 100644 --- a/docs/developers/tooling/data-indexers/thegraph.md +++ b/docs/developers/tooling/data-indexers/thegraph.md @@ -3,21 +3,18 @@ title: TheGraph network image: /img/socialCards/thegraph-network.jpg --- -As a dapp developer, retrieving on-chain data for your dapp can be challenging because you will -most likely: +As a dapp developer, retrieving on-chain data for your dapp can be challenging because you will most likely: 1. Consume your RPC provider quota with calls. 2. Need to implement error handling on multiple levels. 3. Define creative strategies to avoid UX impacts when managing a high volume of data. -The Graph is a decentralized data indexer provider that indexes the Linea blockchain for you and -exposes on-chain data through an HTTPS API. +The Graph is a decentralized data indexer provider that indexes the Linea blockchain for you and exposes on-chain data through an HTTPS API. We run The Graph indexers on Linea to allow you to leverage the power of this technology. :::info[update] -TheGraph is now live with Linea Mainnet! For more information, take a look at their official -[documentation](https://thegraph.com/docs/en/) +TheGraph is now live with Linea Mainnet! For more information, take a look at their official [documentation](https://thegraph.com/docs/en/) ::: diff --git a/docs/developers/tooling/libraries/index.mdx b/docs/developers/tooling/libraries/index.mdx index a6bba289f..138ba541f 100644 --- a/docs/developers/tooling/libraries/index.mdx +++ b/docs/developers/tooling/libraries/index.mdx @@ -3,7 +3,6 @@ title: Libraries image: /img/socialCards/libraries.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/libraries/multicall.mdx b/docs/developers/tooling/libraries/multicall.mdx index f476983c2..d5d072e59 100644 --- a/docs/developers/tooling/libraries/multicall.mdx +++ b/docs/developers/tooling/libraries/multicall.mdx @@ -7,11 +7,7 @@ image: /img/socialCards/multicallv3.jpg Multicall aggregates results from multiple contract constant function calls. -This reduces the number of separate JSON RPC requests that need to be sent (especially useful if -using remote nodes like Infura), while also providing the guarantee that all values returned are -from the same block (like an atomic read) and returning the block number the values are from -(giving them important context so that results from old blocks can be ignored if they're from an -out-of-date node). +This reduces the number of separate JSON RPC requests that need to be sent (especially useful if using remote nodes like Infura), while also providing the guarantee that all values returned are from the same block (like an atomic read) and returning the block number the values are from (giving them important context so that results from old blocks can be ignored if they're from an out-of-date node). import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; diff --git a/docs/developers/tooling/libraries/viem.md b/docs/developers/tooling/libraries/viem.md index 4f4d14de6..14d05cd37 100644 --- a/docs/developers/tooling/libraries/viem.md +++ b/docs/developers/tooling/libraries/viem.md @@ -5,8 +5,8 @@ image: /img/socialCards/viem.jpg Based on our experience, we developed Viem with a TypeScript interface for Ethereum that provides low-level stateless features for interactions focused on reliability, performance, and a great developer experience. -To point to your dapp on Linea, you need to use ```import { linea, lineaSepolia } from 'viem/chains'``` 'lineaSepolia', and `linea` for Linea Mainnet. +To point to your dapp on Linea, you need to use `import { linea, lineaSepolia } from 'viem/chains'` 'lineaSepolia', and `linea` for Linea Mainnet. -For more specifics, see here: [https://viem.sh/docs/chains/introduction](https://viem.sh/docs/chains/introduction). +For more specifics, see here: [https://viem.sh/docs/chains/introduction](https://viem.sh/docs/chains/introduction). See the [Viem docs](https://viem.sh/docs/getting-started) for more information. diff --git a/docs/developers/tooling/libraries/wagmi.md b/docs/developers/tooling/libraries/wagmi.md index febdc099c..564329b98 100644 --- a/docs/developers/tooling/libraries/wagmi.md +++ b/docs/developers/tooling/libraries/wagmi.md @@ -5,12 +5,9 @@ image: /img/socialCards/wagmi.jpg Wagmi is a collection of React Hooks containing everything you need to start working with Linea. -Wagmi makes it easy for users to connect their wallet, display ENS names and balance information, -sign messages, interact with contracts, and much more — all with caching, request deduplication, -and persistence. Wagmi supports Linea (along with MetaMask). +Wagmi makes it easy for users to connect their wallet, display ENS names and balance information, sign messages, interact with contracts, and much more — all with caching, request deduplication, and persistence. Wagmi supports Linea (along with MetaMask). -To point to your dapp on Linea, you need to use the chain tag `lineaSepolia` for Linea Testnet -and `linea` for Linea Mainnet. +To point to your dapp on Linea, you need to use the chain tag `lineaSepolia` for Linea Testnet and `linea` for Linea Mainnet. For more specifics, see here: [https://wagmi.sh/core/chains#supported-chains](https://wagmi.sh/core/chains#supported-chains). diff --git a/docs/developers/tooling/node-providers/_category_.json b/docs/developers/tooling/node-providers/_category_.json index bf65e86de..2f0af0f2f 100644 --- a/docs/developers/tooling/node-providers/_category_.json +++ b/docs/developers/tooling/node-providers/_category_.json @@ -1,3 +1,3 @@ { - "label": "Node Providers" -} \ No newline at end of file + "label": "Node Providers" +} diff --git a/docs/developers/tooling/node-providers/index.mdx b/docs/developers/tooling/node-providers/index.mdx index 944692d66..c915fedf0 100644 --- a/docs/developers/tooling/node-providers/index.mdx +++ b/docs/developers/tooling/node-providers/index.mdx @@ -25,6 +25,7 @@ image: /img/socialCards/node-providers.jpg - [One-click deploy with RapidNode](https://rapidnode.xyz) ## Use RPC proxy and caching + - [eRPC](./erpc.md) ## Public RPC endpoints @@ -42,46 +43,68 @@ Public endpoints are rate limited, and not meant for production systems.
- - + + - - + + - - + + - - + + - + - - + + - - + +
ContractL1 Message Service - 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5 + 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5
L2 Message Service - 0x971e727e956690b9957be6d51Ec16E73AcAC83A7 + 0x971e727e956690b9957be6d51Ec16E73AcAC83A7
Linea feature support*
https://linea-mainnet.public.blastapi.iohttps://linea-sepolia.public.blastapi.io + https://linea-mainnet.public.blastapi.io + + https://linea-sepolia.public.blastapi.io + :white_check_mark:
https://rpc.linea.buildhttps://rpc.sepolia.linea.build + https://rpc.linea.build + + https://rpc.sepolia.linea.build + :white_check_mark:
https://linea.rpc.thirdweb.comhttps://linea-sepolia.rpc.thirdweb.com + https://linea.rpc.thirdweb.com + + https://linea-sepolia.rpc.thirdweb.com + :x:
https://linea.blockpi.network/v1/rpc/publichttps://linea-sepolia.blockpi.network/v1/rpc/public + https://linea.blockpi.network/v1/rpc/public + + https://linea-sepolia.blockpi.network/v1/rpc/public + :white_check_mark:
https://linea-mainnet-public.unifra.io + https://linea-mainnet-public.unifra.io + N/A :x:
https://go.getblock.io/ACCESS_TOKENhttps://go.getblock.io/ACCESS_TOKEN + https://go.getblock.io/ACCESS_TOKEN + + https://go.getblock.io/ACCESS_TOKEN + :x:
https://site1.moralis-nodes.com/linea/API_KEYhttps://site1.moralis-nodes.com/linea-sepolia/API_KEY + https://site1.moralis-nodes.com/linea/API_KEY + + https://site1.moralis-nodes.com/linea-sepolia/API_KEY + :x:
-> \* _"Linea feature support" indicates endpoints that support custom features beyond standard -Ethereum functionality, such as the [`linea_estimateGas`](../../reference/api/linea-estimategas.mdx) -API method, or features that require a specific implementation to work on Linea, such as use of the -[`finalized` tag](../../guides/finalized-block.mdx)._ +> \* _"Linea feature support" indicates endpoints that support custom features beyond standard Ethereum functionality, such as the [`linea_estimateGas`](../../reference/api/linea-estimategas.mdx) API method, or features that require a specific implementation to work on Linea, such as use of the [`finalized` tag](../../guides/finalized-block.mdx)._ -If you're an RPC endpoint provider and would like to be added to the list, reach out to our team, -or make a PR to the docs. +If you're an RPC endpoint provider and would like to be added to the list, reach out to our team, or make a PR to the docs. diff --git a/docs/developers/tooling/oracles/api3.mdx b/docs/developers/tooling/oracles/api3.mdx index b59c1e943..aafa262d8 100644 --- a/docs/developers/tooling/oracles/api3.mdx +++ b/docs/developers/tooling/oracles/api3.mdx @@ -19,10 +19,10 @@ An on-chain smart contract makes a request in the [RRP (Request Response Protoco
- Airnode + Airnode
@@ -37,10 +37,10 @@ The requester calling an Airnode primarily focuses on two tasks:
- Airnode + Airnode
@@ -151,10 +151,10 @@ The [API3 Market](https://market.api3.org/linea) enables users to connect to a d
- dapi-main + dapi-main
@@ -179,10 +179,7 @@ The current supported configurations for dAPIs are:
- dapi-1 + dapi-1
@@ -198,10 +195,7 @@ After selecting the dAPI and the configuration, you will be presented with an op
- dapi-2 + dapi-2
@@ -213,10 +207,7 @@ Once you are done configuring and activating the dAPI, you can now integrate it.
- dapi-5 + dapi-5
diff --git a/docs/developers/tooling/oracles/chainlink.md b/docs/developers/tooling/oracles/chainlink.md index 43c5c55d2..811a9336b 100644 --- a/docs/developers/tooling/oracles/chainlink.md +++ b/docs/developers/tooling/oracles/chainlink.md @@ -14,9 +14,7 @@ Chainlink is the industry standard for building, accessing, and selling oracle s 5. [Functions](https://docs.chain.link/chainlink-functions): Grants smart contracts access to a trust-minimized compute infrastructure. 6. [Data Feeds](https://docs.chain.link/data-feeds): Connects smart contracts with real-world data like asset prices, NFT floor prices, and more, enhancing decentralized applications' functionality and reliability. -:::info -Linea live on Chainlink Data Feeds Check out the data feeds [here](https://data.chain.link/) and filter by Linea Mainnet! -::: +:::info Linea live on Chainlink Data Feeds Check out the data feeds [here](https://data.chain.link/) and filter by Linea Mainnet! ::: ## Use cases diff --git a/docs/developers/tooling/oracles/dia.md b/docs/developers/tooling/oracles/dia.md index 51e38884f..7f58fd0b3 100644 --- a/docs/developers/tooling/oracles/dia.md +++ b/docs/developers/tooling/oracles/dia.md @@ -34,9 +34,7 @@ You can find DIA's oracle integration samples in Solidity and Vyper languages by DIA has deployed the following demo oracles for the Linea community. It provides a limited selection of cryptocurrency price feeds with predefined configuration settings. -:::note -DIA demo oracles are not intended for use in production environments. Developers can request a dedicated, production-ready oracle with custom price feeds and configuration settings. Start the request process: [Request a Custom Oracle | DIA Documentation](https://docs.diadata.org/introduction/intro-to-dia-oracles/request-an-oracle) -::: +:::note DIA demo oracles are not intended for use in production environments. Developers can request a dedicated, production-ready oracle with custom price feeds and configuration settings. Start the request process: [Request a Custom Oracle | DIA Documentation](https://docs.diadata.org/introduction/intro-to-dia-oracles/request-an-oracle) ::: ### Demo Oracle Smart Contracts @@ -61,6 +59,7 @@ DIA NFT floor price feeds provide smart contracts with real-time price informati DIA also supports API endpoints to return cryptocurrency price data. Developers can directly access the example endpoints listed below or [visit the DIA Documentation](https://docs.diadata.org/products/nft-floor-price-feeds/access-api-endpoints) to see all API endpoints. # Learn more about DIA + - [Twitter](https://twitter.com/DIAdata_org) - [Discord](https://go.diadata.org/discord-menu) - [Website](https://diadata.org/) diff --git a/docs/developers/tooling/oracles/index.mdx b/docs/developers/tooling/oracles/index.mdx index ab267ac4f..8512e619c 100644 --- a/docs/developers/tooling/oracles/index.mdx +++ b/docs/developers/tooling/oracles/index.mdx @@ -3,7 +3,6 @@ title: Oracles image: /img/socialCards/oracles.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/oracles/ora.md b/docs/developers/tooling/oracles/ora.md index f37def62b..17c1f4bac 100644 --- a/docs/developers/tooling/oracles/ora.md +++ b/docs/developers/tooling/oracles/ora.md @@ -3,9 +3,7 @@ title: ORA image: /img/socialCards/ora.jpg --- -[ORA](https://ora.io) is Ethereum's Trustless AI. -As a verifiable oracle protocol, ORA brings AI and complex compute onchain. -Its main product, **Onchain AI Oracle (OAO)**, integrates AI capabilities directly onchain. +[ORA](https://ora.io) is Ethereum's Trustless AI. As a verifiable oracle protocol, ORA brings AI and complex compute onchain. Its main product, **Onchain AI Oracle (OAO)**, integrates AI capabilities directly onchain. ORA breaks down the limitations of smart contracts by offering verifiable AI inference, so developers can innovate freely. @@ -19,9 +17,9 @@ This quickstart is designed to help you to build a smart contract on Linea able 2. Each AI request will initiate an opML inference. 3. OAO will emit a `requestCallback` event which will be collected by opML node. 4. opML node will run the AI inference, and then upload the result on Linea, waiting for the challenge period. - 1. During the challenge period, the opML validators will check the result, and challenge it if the submitted result is incorrect. - 2. If the submitted result is successfully challenged by one of the validators, the submitted result will be updated on Linea. - 3. After the challenge period, the submitted result on chain is finalized. + 1. During the challenge period, the opML validators will check the result, and challenge it if the submitted result is incorrect. + 2. If the submitted result is successfully challenged by one of the validators, the submitted result will be updated on Linea. + 3. After the challenge period, the submitted result on chain is finalized. 5. When the result is uploaded or updated on Linea, the provided AI inference in opML will be dispatched to the user's smart contract via its specific callback function. ## Integration @@ -62,7 +60,7 @@ For simpler application scenarios (eg. Prompt Engineering-based AI like GPTs), y SimplePrompt saves gas by only emitting the event without storing historical data. -Linea mainnet: +Linea mainnet: - OAO Proxy: [0x0A0f4321214BB6C7811dD8a71cF587bdaF03f0A0](https://lineascan.build/address/0x0A0f4321214BB6C7811dD8a71cF587bdaF03f0A0) - Prompt: [0xC20DeDbE8642b77EfDb4372915947c87b7a526bD](https://lineascan.build/address/0xC20DeDbE8642b77EfDb4372915947c87b7a526bD) diff --git a/docs/developers/tooling/oracles/pyth.md b/docs/developers/tooling/oracles/pyth.md index d53bdd20d..25a5aa90a 100644 --- a/docs/developers/tooling/oracles/pyth.md +++ b/docs/developers/tooling/oracles/pyth.md @@ -3,47 +3,25 @@ title: Pyth Network image: /img/socialCards/pyth-network.jpg --- -Pyth Network is an oracle that publishes financial market data to multiple blockchains. Our market -data is contributed by over 80 [first-party publishers](https://pyth.network/publishers), including -some of the biggest exchanges and market making firms in the world. We offer price feeds for a -number of different asset classes, including [US equities, commodities, and cryptocurrencies](https://pyth.network/price-feeds). -Each price feed publishes a [robust aggregate](https://docs.pyth.network/documentation/how-pyth-works/price-aggregation) -of publisher prices that updates multiple times per second. +Pyth Network is an oracle that publishes financial market data to multiple blockchains. Our market data is contributed by over 80 [first-party publishers](https://pyth.network/publishers), including some of the biggest exchanges and market making firms in the world. We offer price feeds for a number of different asset classes, including [US equities, commodities, and cryptocurrencies](https://pyth.network/price-feeds). Each price feed publishes a [robust aggregate](https://docs.pyth.network/documentation/how-pyth-works/price-aggregation) of publisher prices that updates multiple times per second. ## How Pyth works -Pyth is a protocol that allows market participants to publish pricing information on-chain for -others to use. The protocol is an interaction between three parties: +Pyth is a protocol that allows market participants to publish pricing information on-chain for others to use. The protocol is an interaction between three parties: -- _Publishers_ submit pricing information to Pyth's oracle program. Pyth has multiple data -publishers for every product to improve the accuracy and robustness of the system. -- Pyth's _oracle program_ combines publishers' data to produce a single aggregate price and -confidence interval. +- _Publishers_ submit pricing information to Pyth's oracle program. Pyth has multiple data publishers for every product to improve the accuracy and robustness of the system. +- Pyth's _oracle program_ combines publishers' data to produce a single aggregate price and confidence interval. - _Consumers_ read the price information produced by the oracle program. ## Pyth on-demand model -Pyth Network uses a pull price update model that is slightly different from other oracles you -may be more familiar with. Most oracles today use a push model, where the oracle runs an -off-chain process that continuously sends transactions to update an on-chain price. In contrast, -Pyth Network doesn't operate an off-chain process that pushes prices on-chain. Instead, it -delegates this work to Pyth Network users. +Pyth Network uses a pull price update model that is slightly different from other oracles you may be more familiar with. Most oracles today use a push model, where the oracle runs an off-chain process that continuously sends transactions to update an on-chain price. In contrast, Pyth Network doesn't operate an off-chain process that pushes prices on-chain. Instead, it delegates this work to Pyth Network users. -Pyth price updates are created on [Pythnet](https://docs.pyth.network/documentation/how-pyth-works/pythnet) -and streamed off-chain via the Wormhole Network, a cross-chain messaging protocol. These updates -are signed such that the Pyth on-chain program can verify their authenticity. Updating the on-chain -price is a permissionless operation: anyone can submit a valid Wormhole message to the Pyth -contract to update the price. Typically, users of Pyth Network prices will submit a single -transaction that simultaneously updates the price and uses it in a downstream application. +Pyth price updates are created on [Pythnet](https://docs.pyth.network/documentation/how-pyth-works/pythnet) and streamed off-chain via the Wormhole Network, a cross-chain messaging protocol. These updates are signed such that the Pyth on-chain program can verify their authenticity. Updating the on-chain price is a permissionless operation: anyone can submit a valid Wormhole message to the Pyth contract to update the price. Typically, users of Pyth Network prices will submit a single transaction that simultaneously updates the price and uses it in a downstream application. -On-chain prices can only move forward in time. If a user submits a Wormhole message with a less -recent price the Pyth program will not fail but will also not update the price. This in particular -means that there's no guarantee that when a user atomically updates the price and then interacts -with an application powered by Pyth, the price that the application will read will be equal to -the price the user submitted. +On-chain prices can only move forward in time. If a user submits a Wormhole message with a less recent price the Pyth program will not fail but will also not update the price. This in particular means that there's no guarantee that when a user atomically updates the price and then interacts with an application powered by Pyth, the price that the application will read will be equal to the price the user submitted. -You can find an in-depth explanation from one of our contributors, Jayant: -[Explaining the Pyth Network Oracle Model: Pyth Tutorials](https://www.youtube.com/watch?v=qdwrs23Qc9g) +You can find an in-depth explanation from one of our contributors, Jayant: [Explaining the Pyth Network Oracle Model: Pyth Tutorials](https://www.youtube.com/watch?v=qdwrs23Qc9g) Read more about on-demand updates [here](https://docs.pyth.network/documentation/pythnet-price-feeds/on-demand). @@ -51,28 +29,17 @@ Read more about on-demand updates [here](https://docs.pyth.network/documentation ### Price feed IDs -Each Pyth Network price feed is referred to via a unique ID. However, the IDs may be represented in -different formats (e.g., hex or base58) depending on the blockchain. Price feeds also have different -IDs in mainnets than testnets or devnets. The full list of price feeds is listed on the -[pyth.network website](https://pyth.network/price-feeds). The [price feed IDs page](https://pyth.network/developers/price-feed-ids) -lists the ID of each available price feed on every chain where they are available. To use a price -feed on-chain, look up its ID using these pages, then store the feed ID in your program to use for -price feed queries. +Each Pyth Network price feed is referred to via a unique ID. However, the IDs may be represented in different formats (e.g., hex or base58) depending on the blockchain. Price feeds also have different IDs in mainnets than testnets or devnets. The full list of price feeds is listed on the [pyth.network website](https://pyth.network/price-feeds). The [price feed IDs page](https://pyth.network/developers/price-feed-ids) lists the ID of each available price feed on every chain where they are available. To use a price feed on-chain, look up its ID using these pages, then store the feed ID in your program to use for price feed queries. ## Pyth on EVM (Linea) -On-chain EVM programs can use the [Solidity SDK](https://github.com/pyth-network/pyth-sdk-solidity) -to read Pyth prices. The [EVM API reference](https://docs.pyth.network/evm) lets you interactively -explore the complete API of the Pyth contract. +On-chain EVM programs can use the [Solidity SDK](https://github.com/pyth-network/pyth-sdk-solidity) to read Pyth prices. The [EVM API reference](https://docs.pyth.network/evm) lets you interactively explore the complete API of the Pyth contract. -The off-chain portion of the application can use [pyth-evm-js](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/ethereum/sdk/js) -to generate price update transactions. This repository's [Quickstart](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/ethereum/sdk/js#quickstart) -includes an example of both the on- and off-chain code necessary to integrate with Pyth. +The off-chain portion of the application can use [pyth-evm-js](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/ethereum/sdk/js) to generate price update transactions. This repository's [Quickstart](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/ethereum/sdk/js#quickstart) includes an example of both the on- and off-chain code necessary to integrate with Pyth. ### Examples -View [the example applications](https://github.com/pyth-network/pyth-examples/tree/main/price_feeds) -in the Pyth repository. +View [the example applications](https://github.com/pyth-network/pyth-examples/tree/main/price_feeds) in the Pyth repository. ### Networks @@ -85,8 +52,7 @@ Pyth is currently available on the following Linea networks: ### Price feed IDs -The price feed IDs for EVM chains differs depending on whether they are a mainnet or testnet (see -above): +The price feed IDs for EVM chains differs depending on whether they are a mainnet or testnet (see above): - [List of mainnet ids](https://pyth.network/developers/price-feed-ids#pyth-evm-mainnet) - [List of testnet ids](https://pyth.network/developers/price-feed-ids#pyth-evm-testnet) diff --git a/docs/developers/tooling/oracles/redstone.md b/docs/developers/tooling/oracles/redstone.md index 3314298d0..9f83ccf48 100644 --- a/docs/developers/tooling/oracles/redstone.md +++ b/docs/developers/tooling/oracles/redstone.md @@ -5,13 +5,9 @@ image: /img/socialCards/redstone-oracles.jpg # RedStone Oracles -RedStone provides data feeds with update times of less than 10 seconds, suitable for various DeFi applications -such as lending, perpetuals, options, derivatives, and stablecoins. The infrastructure is used on mainnets -and by several protocols in the DeFi space. +RedStone provides data feeds with update times of less than 10 seconds, suitable for various DeFi applications such as lending, perpetuals, options, derivatives, and stablecoins. The infrastructure is used on mainnets and by several protocols in the DeFi space. -:::tip -Learn more about how to integrate RedStone Oracles in the [official Redstone documentation](https://docs.redstone.finance/). -::: +:::tip Learn more about how to integrate RedStone Oracles in the [official Redstone documentation](https://docs.redstone.finance/). ::: ## Links diff --git a/docs/developers/tooling/oracles/tellor.md b/docs/developers/tooling/oracles/tellor.md index b88982d13..b13715ccf 100644 --- a/docs/developers/tooling/oracles/tellor.md +++ b/docs/developers/tooling/oracles/tellor.md @@ -1,35 +1,31 @@ --- title: Tellor description: >- - A versatile oracle protocol that can provide data of any type permissionlessly - with crypto-economic liveness and security. + A versatile oracle protocol that can provide data of any type permissionlessly with crypto-economic liveness and security. + + image: /img/socialCards/tellor.jpg --- # Tellor -Tellor pushes the horizon of the oracle far past arbitrary price data. The Tellor oracle is a protocol for -answering verifiable on-chain queries of any format. The Tellor protocol incentivizes an open, permissionless network of data reporting and data validation, ensuring that data can be provided by anyone and checked by everyone. -Built for any data type, our network of reporters supports your basic spot prices, more sophisticated pricing specs (TWAP/VWAP), RNG, or any custom data needs you have. If your data can be verified, Tellor can bring it on-chain. +Tellor pushes the horizon of the oracle far past arbitrary price data. The Tellor oracle is a protocol for answering verifiable on-chain queries of any format. The Tellor protocol incentivizes an open, permissionless network of data reporting and data validation, ensuring that data can be provided by anyone and checked by everyone. Built for any data type, our network of reporters supports your basic spot prices, more sophisticated pricing specs (TWAP/VWAP), RNG, or any custom data needs you have. If your data can be verified, Tellor can bring it on-chain. ## How it works -The oracle mechanism works by using simple crypto-economic incentives to secure data through staking -and dispute mechanisms, while the protocol is bound by a token which utilizes -governance and monetary incentives to reward data reporters and development of the network. +The oracle mechanism works by using simple crypto-economic incentives to secure data through staking and dispute mechanisms, while the protocol is bound by a token which utilizes governance and monetary incentives to reward data reporters and development of the network. -At a high level, Tellor is an oracle system where a bonded set of “reporters” answer questions on-chain -for others to use freely. To create a properly incentivized system, Tellor mints a native token, “Tributes” -(TRB). Rewards in TRB incentivize reporters to submit data using peer-to-peer payments. Using TRB, parties can “tip” a specific question or “query” they want updated, then reporters can choose whether the reward for fetching the data is worth the cost of placing the value on-chain. The security of Tellor comes through a deposit of TRB that acts as a bond or stake requirement in order for reporters to participate in providing data. The reporters risk losing this stake if they submit data that is successfully disputed. +At a high level, Tellor is an oracle system where a bonded set of “reporters” answer questions on-chain for others to use freely. To create a properly incentivized system, Tellor mints a native token, “Tributes” (TRB). Rewards in TRB incentivize reporters to submit data using peer-to-peer payments. Using TRB, parties can “tip” a specific question or “query” they want updated, then reporters can choose whether the reward for fetching the data is worth the cost of placing the value on-chain. The security of Tellor comes through a deposit of TRB that acts as a bond or stake requirement in order for reporters to participate in providing data. The reporters risk losing this stake if they submit data that is successfully disputed. ## Getting started -To use Tellor data, you can use the [UsingTellor](https://github.com/tellor-io/usingtellor) helper contract. After connecting it to the oracle you can read a value using your queryid. Follow the guides in our [documentation](https://docs.tellor.io) for further instruction. +To use Tellor data, you can use the [UsingTellor](https://github.com/tellor-io/usingtellor) helper contract. After connecting it to the oracle you can read a value using your queryid. Follow the guides in our [documentation](https://docs.tellor.io) for further instruction. -> **Looking for help getting started?** We welcome you to ask us anything in the developers' channel of our [Discord server.](https://discord.gg/tellor) +> **Looking for help getting started?** We welcome you to ask us anything in the developers' channel of our [Discord server.](https://discord.gg/tellor) ## Requesting data feeds -Tellor's network of data reporters already actively supports a large variety of price/data feeds and adding new ones upon request can happen with a quick turnaround. You can even do it permissionlessly. For both price feed requests and non-price/custom feeds, anyone can submit a data specification and get their query supported by Tellor. + +Tellor's network of data reporters already actively supports a large variety of price/data feeds and adding new ones upon request can happen with a quick turnaround. You can even do it permissionlessly. For both price feed requests and non-price/custom feeds, anyone can submit a data specification and get their query supported by Tellor. -[Current price feeds](https://github.com/tellor-io/telliot-feeds/tree/main/src/telliot_feeds/feeds) @@ -41,15 +37,14 @@ Tellor's network of data reporters already actively supports a large variety of **Linea Sepolia Testnet** -* Token: [0x34Fae97547E990ef0E05e05286c51E4645bf1A85](https://sepolia.lineascan.build/address/0x34Fae97547E990ef0E05e05286c51E4645bf1A85) -* Oracle: [0xC7199e0686DF9844B511fAf2796C518F6D7292EB](https://sepolia.lineascan.build/address/0xC7199e0686DF9844B511fAf2796C518F6D7292EB)] -* Governance: [0xB3bB03eA894C609C8560Af3d8726556f52140a39](https://sepolia.lineascan.build/address/0xB3bB03eA894C609C8560Af3d8726556f52140a39) -* Autopay: [0x02FB285409Cec68EE12183cc3035a090A456f66C](https://sepolia.lineascan.build/address/0x02FB285409Cec68EE12183cc3035a090A456f66C) +- Token: [0x34Fae97547E990ef0E05e05286c51E4645bf1A85](https://sepolia.lineascan.build/address/0x34Fae97547E990ef0E05e05286c51E4645bf1A85) +- Oracle: [0xC7199e0686DF9844B511fAf2796C518F6D7292EB](https://sepolia.lineascan.build/address/0xC7199e0686DF9844B511fAf2796C518F6D7292EB)] +- Governance: [0xB3bB03eA894C609C8560Af3d8726556f52140a39](https://sepolia.lineascan.build/address/0xB3bB03eA894C609C8560Af3d8726556f52140a39) +- Autopay: [0x02FB285409Cec68EE12183cc3035a090A456f66C](https://sepolia.lineascan.build/address/0x02FB285409Cec68EE12183cc3035a090A456f66C) **Linea Mainnet** -* Token: [0x35482B93941B439dEA2244Cc30A20D1Ed862DF86](https://lineascan.build/token/0x35482b93941b439dea2244cc30a20d1ed862df86) -* Oracle: [0x896419Ed2E0dC848a1f7d2814F4e5Df4b9B9bFcc](https://lineascan.build/address/0x896419ed2e0dc848a1f7d2814f4e5df4b9b9bfcc#code) -* Governance: [0xC866DB9021fe81856fF6c5B3E3514BF9D1593D81](https://lineascan.build/address/0xC866DB9021fe81856fF6c5B3E3514BF9D1593D81) -* Autopay: [0x9EA18BFDB50E9bb4A18F9d3Df7804E398F8fE0dc](https://lineascan.build/address/0x9EA18BFDB50E9bb4A18F9d3Df7804E398F8fE0dc) - +- Token: [0x35482B93941B439dEA2244Cc30A20D1Ed862DF86](https://lineascan.build/token/0x35482b93941b439dea2244cc30a20d1ed862df86) +- Oracle: [0x896419Ed2E0dC848a1f7d2814F4e5Df4b9B9bFcc](https://lineascan.build/address/0x896419ed2e0dc848a1f7d2814f4e5df4b9b9bfcc#code) +- Governance: [0xC866DB9021fe81856fF6c5B3E3514BF9D1593D81](https://lineascan.build/address/0xC866DB9021fe81856fF6c5B3E3514BF9D1593D81) +- Autopay: [0x9EA18BFDB50E9bb4A18F9d3Df7804E398F8fE0dc](https://lineascan.build/address/0x9EA18BFDB50E9bb4A18F9d3Df7804E398F8fE0dc) diff --git a/docs/developers/tooling/permanent-data/irys/irys-querying.mdx b/docs/developers/tooling/permanent-data/irys/irys-querying.mdx index 83b80cafc..52a48a779 100644 --- a/docs/developers/tooling/permanent-data/irys/irys-querying.mdx +++ b/docs/developers/tooling/permanent-data/irys/irys-querying.mdx @@ -25,25 +25,16 @@ https://uploader.irys.xyz/graphql Any of the following query arguments can be used as search parameters: -| Field | Description | -| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ids` | An array of transaction IDs passed as strings. Values are ORed together, matching results will include transactions that have any of the supplied IDs. | +| Field | Description | +| --- | --- | +| `ids` | An array of transaction IDs passed as strings. Values are ORed together, matching results will include transactions that have any of the supplied IDs. | | `owner` | The address used when posting the transaction. Can be a native address from [any of the chains supported by Irys](https://docs.irys.xyz/build/d/features/supported-tokens). Note in results fields, this is referred to as `address`. | -| `token` | The [token](https://docs.irys.xyz/build/d/features/supported-tokens) used to pay for the transaction. | -| `tags` | An array of tag name / value pairs passed as JSON objects. | +| `token` | The [token](https://docs.irys.xyz/build/d/features/supported-tokens) used to pay for the transaction. | +| `tags` | An array of tag name / value pairs passed as JSON objects. | ## Results Fields -When building a query, any of the following values be included in your results: -| Field | Description | -|---|---| -| `id` | The transaction ID. | -| `address` | The address used when posting the transaction. Can be a native address from any of the chains supported by Irys. Note in query arguements, this is referred to as `owner`. | -| `token` | The token used to pay for the transaction. | -| `receipt { `
  `deadlineHeight `
  `signature `
  `version `
`}` | An optional receipt, only exists if a user requested one at upload.
`deadlineHeight`: The block number by which the transaction must be finalized.
`signature`: A signed deep hash of the JSON receipt. | -| `tags { `
  `name `
  `value`
`}` | An array of tags supplied as name / value pairs. Exists if the user added them at upload. | -|`timestamp` | The timestamp, accurate to the millisecond of when the transaction was posted. This value is the same as the receipt timestamp. | - +When building a query, any of the following values be included in your results: | Field | Description | |---|---| | `id` | The transaction ID. | | `address` | The address used when posting the transaction. Can be a native address from any of the chains supported by Irys. Note in query arguements, this is referred to as `owner`. | | `token` | The token used to pay for the transaction. | | `receipt { `
  `deadlineHeight `
  `signature `
  `version `
`}` | An optional receipt, only exists if a user requested one at upload.
`deadlineHeight`: The block number by which the transaction must be finalized.
`signature`: A signed deep hash of the JSON receipt. | | `tags { `
  `name `
  `value`
`}` | An array of tags supplied as name / value pairs. Exists if the user added them at upload. | |`timestamp` | The timestamp, accurate to the millisecond of when the transaction was posted. This value is the same as the receipt timestamp. | ## Sample Queries @@ -55,17 +46,22 @@ Search by transaction IDs. ```graphql query getByIds { - transactions(ids: ["--52WQHJIJod_rni8pkl1Vxt9MFGoXZAm8SC7ex6C1o", "--52THRWpX_RJzGcNXmtQ2DSP37d1e1VQ4YmvbY5ZXo"]) { - edges { - node { - id - tags { - name - value - } - } - } - } + transactions( + ids: [ + "--52WQHJIJod_rni8pkl1Vxt9MFGoXZAm8SC7ex6C1o" + "--52THRWpX_RJzGcNXmtQ2DSP37d1e1VQ4YmvbY5ZXo" + ] + ) { + edges { + node { + id + tags { + name + value + } + } + } + } } ``` @@ -75,20 +71,17 @@ Search by timestamps: ```graphql query getByTimestamp { - transactions(timestamp: { from: 1688144401000, to: 1688317201000 }) { - edges { - node { - id - } - } - } + transactions(timestamp: { from: 1688144401000, to: 1688317201000 }) { + edges { + node { + id + } + } + } } ``` - -> Irys timestamps are accurate to the millisecond, so you need to provide a timestamp in millisecond format when querying. You can -convert from human-readable time to UNIX timestamp using websites like [Epoch101](https://www.epoch101.com/), be sure -to convert in **millisecond** format, not **second**. +> Irys timestamps are accurate to the millisecond, so you need to provide a timestamp in millisecond format when querying. You can convert from human-readable time to UNIX timestamp using websites like [Epoch101](https://www.epoch101.com/), be sure to convert in **millisecond** format, not **second**. ### Owners @@ -96,14 +89,19 @@ Search for transactions matching the wallet address used when posting the transa ```graphql query getByOwner { - transactions(owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE", "0xaC568a981B1370B2e1bAA8cE30BD5AC9E28C572D"]) { - edges { - node { - id - address - } - } - } + transactions( + owners: [ + "0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE" + "0xaC568a981B1370B2e1bAA8cE30BD5AC9E28C572D" + ] + ) { + edges { + node { + id + address + } + } + } } ``` @@ -113,14 +111,14 @@ Search for transactions matching [tag](https://docs.irys.xyz/build/d/features/ta ```graphql query getAllPNGs { - transactions(tags: [{ name: "Content-Type", values: ["image/png"] }]) { - edges { - node { - id - address - } - } - } + transactions(tags: [{ name: "Content-Type", values: ["image/png"] }]) { + edges { + node { + id + address + } + } + } } ``` @@ -128,16 +126,18 @@ Search for transactions matching the tag with name **Content-Type** and the valu ```graphql query getTagsWithOR { - transactions(tags: [{ name: "Content-Type", values: ["image/png", "image/jpg"] }]) { - edges { - node { - tags { - name - value - } - } - } - } + transactions( + tags: [{ name: "Content-Type", values: ["image/png", "image/jpg"] }] + ) { + edges { + node { + tags { + name + value + } + } + } + } } ``` @@ -145,18 +145,21 @@ Search for transactions matching the tag with name **Content-Type** and the valu ```graphql query getTagsWithAnd { - transactions( - tags: [{ name: "Content-Type", values: ["image/jpg"] }, { name: "Content-Type", values: ["image/png"] }] - ) { - edges { - node { - tags { - name - value - } - } - } - } + transactions( + tags: [ + { name: "Content-Type", values: ["image/jpg"] } + { name: "Content-Type", values: ["image/png"] } + ] + ) { + edges { + node { + tags { + name + value + } + } + } + } } ``` @@ -166,14 +169,17 @@ Limit the number of results returned by including the `limit` parameter: ```graphql query getAllPNGs { - transactions(limit: 10, tags: [{ name: "Content-Type", values: ["image/png"] }]) { - edges { - node { - id - address - } - } - } + transactions( + limit: 10 + tags: [{ name: "Content-Type", values: ["image/png"] }] + ) { + edges { + node { + id + address + } + } + } } ``` @@ -190,18 +196,18 @@ The following query returns 10 transactions tagged `image/png` occurring after t ```graphql query getPNGs { - transactions( - limit: 10 - tags: [{ name: "Content-Type", values: ["image/png"] }] - after: "LS02d1NsM3R6aUprd3dKUzVjN1FXaWg5aUxsbXh5dVJJbGlydHJtNlpPbw" - ) { - edges { - node { - id - } - cursor - } - } + transactions( + limit: 10 + tags: [{ name: "Content-Type", values: ["image/png"] }] + after: "LS02d1NsM3R6aUprd3dKUzVjN1FXaWg5aUxsbXh5dVJJbGlydHJtNlpPbw" + ) { + edges { + node { + id + } + cursor + } + } } ``` @@ -211,26 +217,32 @@ You can sort results by timestamp in either ascending or descending order using ```graphql query getAllByOwnerAsc { - transactions(owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE"], order: ASC) { - edges { - node { - id - address - } - } - } + transactions( + owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE"] + order: ASC + ) { + edges { + node { + id + address + } + } + } } ``` ```graphql query getAllByOwnerDesc { - transactions(owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE"], order: DESC) { - edges { - node { - id - address - } - } - } + transactions( + owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE"] + order: DESC + ) { + edges { + node { + id + address + } + } + } } ``` diff --git a/docs/developers/tooling/permanent-data/irys/irys-quickstart.mdx b/docs/developers/tooling/permanent-data/irys/irys-quickstart.mdx index c8dabc42b..d9dcf58ca 100644 --- a/docs/developers/tooling/permanent-data/irys/irys-quickstart.mdx +++ b/docs/developers/tooling/permanent-data/irys/irys-quickstart.mdx @@ -25,7 +25,7 @@ or yarn: yarn add @irys/upload @irys/upload-ethereum ``` -### Import +### Import ```ts import { Uploader } from "@irys/upload"; @@ -42,7 +42,9 @@ Using ETH on Linea: ```ts const getIrysUploader = async () => { - const irysUploader = await Uploader(LineaEth).withWallet(process.env.PRIVATE_KEY); + const irysUploader = await Uploader(LineaEth).withWallet( + process.env.PRIVATE_KEY, + ); return irysUploader; }; ``` @@ -58,7 +60,7 @@ const getIrysUploader = async () => { .withWallet(process.env.PRIVATE_KEY) .withRpc(rpcURL) .devnet(); - + return irysUploader; }; ``` @@ -81,22 +83,22 @@ import { WebUploader } from "@irys/web-upload"; import { WebLineaEth } from "@irys/web-upload-ethereum"; import { EthersV6Adapter } from "@irys/web-upload-ethereum-ethers-v6"; import { ethers } from "ethers"; - + const getIrysUploader = async () => { const provider = new ethers.BrowserProvider(window.ethereum); - const irysUploader = await WebUploader(WebLineaEth).withAdapter(EthersV6Adapter(provider)); - + const irysUploader = await WebUploader(WebLineaEth).withAdapter( + EthersV6Adapter(provider), + ); + return irysUploader; }; ``` ### Fund your account -When you use Irys to upload data, you pay once and the data is guaranteed to be retrievable forever. -The [fee is based on the number of bytes uploaded](https://docs.irys.xyz/build/d/sdk/payment/getPrice). +When you use Irys to upload data, you pay once and the data is guaranteed to be retrievable forever. The [fee is based on the number of bytes uploaded](https://docs.irys.xyz/build/d/sdk/payment/getPrice). -When calling `fund()` pass a value in atomic units. Use the utility functions `utils.toAtomic()` -and `utils.fromAtomic()` to convert between atomic and standard units. +When calling `fund()` pass a value in atomic units. Use the utility functions `utils.toAtomic()` and `utils.fromAtomic()` to convert between atomic and standard units. You can fund up-front, allowing you send over enough tokens to cover all of a project’s uploads. @@ -248,7 +250,7 @@ Use the `fund` command to fund a node. ```console irys fund 1000000000000000 \ -t linea-eth \ - -w bf20......c9885307 + -w bf20......c9885307 ``` ### Withdraw funds @@ -258,7 +260,7 @@ Use the `withdraw` command to withdraw funds from a node. ```console irys withdraw 1000000000000000 \ -t linea-eth \ - -w bf20......c9885307 + -w bf20......c9885307 ``` ### Upload a file @@ -269,7 +271,7 @@ Use the `upload` command to upload a file. irys upload myImage.png \ -t linea-eth \ -w bf20......c9885307 \ - --tags tagName1 tagValue1 tagName2 tagValue2 + --tags tagName1 tagValue1 tagName2 tagValue2 ``` ### Upload a folder @@ -279,28 +281,25 @@ Use the `upload-dir` command to upload a folder. ```console irys upload-dir ./myImages \ -t linea-eth \ - -w bf20......c9885307 + -w bf20......c9885307 ``` ### Use tags Use the `-t` option, followed by a series of name / value pairs to append metadata tags to your upload. -Irys supports adding any optional [metadata tags](./overview.mdx#tagging) to each upload. When uploading -files with a filename extension, the related -[`Content-Type`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type) (MIME type) tag is automatically added. +Irys supports adding any optional [metadata tags](./overview.mdx#tagging) to each upload. When uploading files with a filename extension, the related [`Content-Type`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type) (MIME type) tag is automatically added. ```console irys upload myImage.png \ -t linea-eth \ -w bf20......c9885307 \ - --tags tagName1 tagValue1 tagName2 tagValue2 + --tags tagName1 tagValue1 tagName2 tagValue2 ``` ### Pricing -Use the `price` command, followed by a number of bytes to get the cost to upload that number of bytes. You must -also provide a token (`-t`) and a node URL (`-h`) +Use the `price` command, followed by a number of bytes to get the cost to upload that number of bytes. You must also provide a token (`-t`) and a node URL (`-h`) ```console irys price 1000000 \ @@ -311,7 +310,6 @@ irys price 1000000 \ ## Download data -When you upload data to Irys, you're given a [receipt](./overview.mdx#receipts) -containing a transaction ID. Use this ID to download your data from the Irys gateway by creating a URL in the format: +When you upload data to Irys, you're given a [receipt](./overview.mdx#receipts) containing a transaction ID. Use this ID to download your data from the Irys gateway by creating a URL in the format: `https://gateway.irys.xyz/:txId` diff --git a/docs/developers/tooling/permanent-data/irys/overview.mdx b/docs/developers/tooling/permanent-data/irys/overview.mdx index 477601e1b..29477d84b 100644 --- a/docs/developers/tooling/permanent-data/irys/overview.mdx +++ b/docs/developers/tooling/permanent-data/irys/overview.mdx @@ -10,7 +10,6 @@ Irys makes it easy to store your data onchain by supporting payments with ETH on Data on Irys is fully verifiable; you can inspect the blockchain at any time and verify what data was posted, when, and where it's located in Irys’s data ledgers. - ## Use Irys with Linea Irys is **chain agnostic**, smart contracts on Linea can link to data on Irys. @@ -26,7 +25,7 @@ You can use [ETH on Linea](https://arweave-tools.irys.xyz/overview/supported-tok ## Paying for uploads -Irys has a pay-once-store-forever payment model based on the number of bytes you upload. +Irys has a pay-once-store-forever payment model based on the number of bytes you upload. ## Free uploads @@ -34,7 +33,7 @@ Uploads of less than 100KiB are free on Irys. ## Receipts -Each upload to Irys is given a cryptographically signed receipt that can be trustlessly verified. +Each upload to Irys is given a cryptographically signed receipt that can be trustlessly verified. Receipts are a JSON object with the following format: @@ -49,19 +48,18 @@ Receipts are a JSON object with the following format: } ``` -| Field | Description | -|----------------|------------------------------------------------------------------------| -| id | Transaction id (used to download the data) | -| timestamp | Timestamp (UNIX milliseconds) of when the transaction was created | -| version | The version of this JSON file, currently 1.0.0 | -| public | Public key of the bundler node used | -| signature | A signed deep hash of the JSON receipt | +| Field | Description | +| --- | --- | +| id | Transaction id (used to download the data) | +| timestamp | Timestamp (UNIX milliseconds) of when the transaction was created | +| version | The version of this JSON file, currently 1.0.0 | +| public | Public key of the bundler node used | +| signature | A signed deep hash of the JSON receipt | | deadlineHeight | The block number by which the transaction must be finalized on Arweave | ## Paying for users' uploads -Use [balance approvals](https://docs.irys.xyz/build/d/features/balance-approvals) to pay for -your users' uploads and build a Web2-style UX that saves users from having to convert fiat or own tokens. +Use [balance approvals](https://docs.irys.xyz/build/d/features/balance-approvals) to pay for your users' uploads and build a Web2-style UX that saves users from having to convert fiat or own tokens. With balance approvals: diff --git a/docs/developers/tooling/privacy/index.mdx b/docs/developers/tooling/privacy/index.mdx index 4a64b5230..ec51cbccd 100644 --- a/docs/developers/tooling/privacy/index.mdx +++ b/docs/developers/tooling/privacy/index.mdx @@ -3,7 +3,6 @@ title: Security image: /img/socialCards/security.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/privacy/secret.md b/docs/developers/tooling/privacy/secret.md index ab3e88c6f..9ba8e4745 100644 --- a/docs/developers/tooling/privacy/secret.md +++ b/docs/developers/tooling/privacy/secret.md @@ -15,7 +15,7 @@ To start, check out Secret Network’s [Confidential Computing Layer](https://sc - [Basics](https://docs.scrt.network/secret-network-documentation/development/ethereum-evm-developer-toolkit/basics) - explains the cross-chain communication technologies used, and how to connect a MetaMask wallet to Secret Network. - [Use-cases](https://docs.scrt.network/secret-network-documentation/development/ethereum-evm-developer-toolkit/usecases) - provides tutorials showing how to build various types of EVM applications using Secret’s CCL. All of these tutorials can be used to connect Linea cross-chain with Secret Network. -- [Supported Networks](https://docs.scrt.network/secret-network-documentation/development/ethereum-evm-developer-toolkit/supported-networks) - provides a list of gateway contract addresses. This is how your Linea application will communicate with Secret. +- [Supported Networks](https://docs.scrt.network/secret-network-documentation/development/ethereum-evm-developer-toolkit/supported-networks) - provides a list of gateway contract addresses. This is how your Linea application will communicate with Secret. ## Get Support diff --git a/docs/developers/tooling/security/hexagate.md b/docs/developers/tooling/security/hexagate.md index 5f0b20131..c166b5d6b 100644 --- a/docs/developers/tooling/security/hexagate.md +++ b/docs/developers/tooling/security/hexagate.md @@ -3,6 +3,4 @@ title: Hexagate image: /img/socialCards/hexagate.jpg --- -[Hexagate](https://hexagate.com) is a proactive Web3 security & risk analytics solution. -Hexagate's enterprise-grade security platform prevents cyber exploits, hacks, governance and financial risks for protocols, Web3 apps and asset managers. -The platform allows end-to-end detection and response for any type of threat to mitigate risk and threats ahead of time, before it impacts any digital assets. +[Hexagate](https://hexagate.com) is a proactive Web3 security & risk analytics solution. Hexagate's enterprise-grade security platform prevents cyber exploits, hacks, governance and financial risks for protocols, Web3 apps and asset managers. The platform allows end-to-end detection and response for any type of threat to mitigate risk and threats ahead of time, before it impacts any digital assets. diff --git a/docs/developers/tooling/security/hypernative.mdx b/docs/developers/tooling/security/hypernative.mdx index f06e192e3..740265d3b 100644 --- a/docs/developers/tooling/security/hypernative.mdx +++ b/docs/developers/tooling/security/hypernative.mdx @@ -3,11 +3,6 @@ title: Hypernative image: /img/socialCards/hypernative.jpg --- -[Hypernative](https://hypernative.io/) stops zero-day cyber attacks, economic risks, detects -on-chain anomalies, and protects digital assets, protocols, and Web3 applications from significant -losses or threats. +[Hypernative](https://hypernative.io/) stops zero-day cyber attacks, economic risks, detects on-chain anomalies, and protects digital assets, protocols, and Web3 applications from significant losses or threats. -Powered by our “pre-cog” platform, Hypernative monitors on and offchain data sources using our -proprietary machine learning models to accurately predict cyber, economic, and governance threats -before they manifest. The detections are then connected to various automated playbooks to prevent -and mitigate risks in real time. +Powered by our “pre-cog” platform, Hypernative monitors on and offchain data sources using our proprietary machine learning models to accurately predict cyber, economic, and governance threats before they manifest. The detections are then connected to various automated playbooks to prevent and mitigate risks in real time. diff --git a/docs/developers/tooling/security/index.mdx b/docs/developers/tooling/security/index.mdx index 4a64b5230..ec51cbccd 100644 --- a/docs/developers/tooling/security/index.mdx +++ b/docs/developers/tooling/security/index.mdx @@ -3,7 +3,6 @@ title: Security image: /img/socialCards/security.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/social-login/arcana.mdx b/docs/developers/tooling/social-login/arcana.mdx index dba4df384..7ffa00143 100644 --- a/docs/developers/tooling/social-login/arcana.mdx +++ b/docs/developers/tooling/social-login/arcana.mdx @@ -3,13 +3,13 @@ title: Arcana image: /img/socialCards/arcana.jpg --- -[Arcana Network](https://arcana.network) SDKs enable Web3 developers to use [social login](https://docs.arcana.network/concepts/social-login) and onboard app users easily. +[Arcana Network](https://arcana.network) SDKs enable Web3 developers to use [social login](https://docs.arcana.network/concepts/social-login) and onboard app users easily. Authenticated users can instantly access the embedded, non-custodial [Arcana wallet](https://docs.arcana.network/concepts/anwallet/) from within the app context and sign blockchain transactions. Developers can leverage the built-in gasless feature to sponsor gas fees for whitelisted blockchain transactions. The gasless transactions can be enabled for Arcana Wallet and third-party, browser-based wallets. -Use [Auth Quick Start Guide](https://docs.arcana.network/howto/) to allow social login for onboarding users and enable Arcana Wallet in the app context. +Use [Auth Quick Start Guide](https://docs.arcana.network/howto/) to allow social login for onboarding users and enable Arcana Wallet in the app context. To enable gasless transactions in third-party wallets, see [Arcana Gasless Quick Start Guide](https://docs.arcana.network/quick-start/gasless-standalone-quick-start). @@ -19,10 +19,10 @@ Linea chain is available out of the box as part of the pre-configured blockchain
- Arcana wallet Linea default + Arcana wallet Linea default
@@ -40,7 +40,7 @@ Developers need to follow these steps for integration: 1. **Register the app** with the [Arcana Developer Dashboard](https://dashboard.arcana.network/), and copy the unique client identifier for the app. 2. **Configure Auth SDK usage** via the dashboard, specify social login options, wallet user experience settings, gasless transaction settings, etc. -3. **Install the Arcana Auth SDK and use the client identifier to integrate the app**. Initialize the `AuthProvider`, then add a single line code to onboard users by calling the `connect()` method and enabling the plug-and-play login UI. After a successful user login, *Arcana wallet will automatically display within the app context*, enabling the user to sign blockchain transactions instantly. +3. **Install the Arcana Auth SDK and use the client identifier to integrate the app**. Initialize the `AuthProvider`, then add a single line code to onboard users by calling the `connect()` method and enabling the plug-and-play login UI. After a successful user login, _Arcana wallet will automatically display within the app context_, enabling the user to sign blockchain transactions instantly. :::note @@ -50,8 +50,8 @@ Arcana wallet supports [JSON/RPC calls and Web3 wallet operations](https://docs. ## References -* [Social login Providers](https://docs.arcana.network/state-of-the-arcana-auth#app-login) -* [Blockchain networks](https://docs.arcana.network/state-of-the-arcana-auth#supported-blockchains) -* [Browsers](https://docs.arcana.network/state-of-the-arcana-auth#supported-browsers) -* [Supported App Types](https://docs.arcana.network/sdk-installation) -* [SDK Reference Guides](https://docs.arcana.network/dev-resources/sdk-ref/) +- [Social login Providers](https://docs.arcana.network/state-of-the-arcana-auth#app-login) +- [Blockchain networks](https://docs.arcana.network/state-of-the-arcana-auth#supported-blockchains) +- [Browsers](https://docs.arcana.network/state-of-the-arcana-auth#supported-browsers) +- [Supported App Types](https://docs.arcana.network/sdk-installation) +- [SDK Reference Guides](https://docs.arcana.network/dev-resources/sdk-ref/) diff --git a/docs/developers/tooling/social-login/index.mdx b/docs/developers/tooling/social-login/index.mdx index ae1ba2d4d..06ebcf8a8 100644 --- a/docs/developers/tooling/social-login/index.mdx +++ b/docs/developers/tooling/social-login/index.mdx @@ -3,7 +3,6 @@ title: Social login image: /img/socialCards/social-login.jpg --- - -import DocCardList from '@theme/DocCardList'; +import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/social-login/openfort.md b/docs/developers/tooling/social-login/openfort.md index 2ec26fdfe..0893b946c 100644 --- a/docs/developers/tooling/social-login/openfort.md +++ b/docs/developers/tooling/social-login/openfort.md @@ -5,12 +5,8 @@ image: /img/socialCards/openfort.jpg ## Account abstraction infrastructure for Web3 games -[Openfort](https://openfort.xyz) is an infrastructure provider designed to simplify the development -of games and gamified experiences across their suite of API endpoints. +[Openfort](https://openfort.xyz) is an infrastructure provider designed to simplify the development of games and gamified experiences across their suite of API endpoints. -Authenticated users can instantly access the embedded, non-custodial -[smart account](https://www.openfort.xyz/docs/security#smart-contract-accounts) from within the app context -and sign blockchain transactions. +Authenticated users can instantly access the embedded, non-custodial [smart account](https://www.openfort.xyz/docs/security#smart-contract-accounts) from within the app context and sign blockchain transactions. -Use [Auth Quick Start Guide](https://www.openfort.xyz/docs/guides/getting-started) to allow social login -for onboarding users. +Use [Auth Quick Start Guide](https://www.openfort.xyz/docs/guides/getting-started) to allow social login for onboarding users. diff --git a/docusaurus.config.js b/docusaurus.config.js index 995460a06..2f348496e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -41,8 +41,8 @@ const config = { }, scripts: [ - {src: "/js/getfeedback.js", defer: true, async: true}, - {src: "/js/navbarHighlight.js", defer: true} + { src: "/js/getfeedback.js", defer: true, async: true }, + { src: "/js/navbarHighlight.js", defer: true }, ], markdown: { @@ -51,7 +51,7 @@ const config = { // Enable experimental infrastructure for Docusaurus Faster project future: { - experimental_faster: true + experimental_faster: true, }, presets: [ @@ -65,7 +65,7 @@ const config = { path: "docs", routeBasePath: "/", // @ts-ignore - // eslint-disable-next-line global-require + remarkPlugins: [require("remark-docusaurus-tabs")], remarkPlugins: [math], rehypePlugins: [katex], @@ -163,7 +163,7 @@ const config = { { to: "/developers/linea-version", position: "right", - className: "header-release-notes-link" + className: "header-release-notes-link", }, { href: "https://discord.gg/linea", @@ -295,10 +295,7 @@ const config = { }, { to: "/zero-knowledge-glossary", - from: [ - "/reference/glossary", - "/users/zero-knowledge-glossary" - ], + from: ["/reference/glossary", "/users/zero-knowledge-glossary"], }, { to: "/", @@ -337,7 +334,7 @@ const config = { "/build-on-linea/gas-fees", "/developers/guides/gas/gas-fees", "/use-mainnet/gas-on-linea", - "/developers/guides/gas/gas-on-linea" + "/developers/guides/gas/gas-on-linea", ], }, { diff --git a/eslint.config.mjs b/eslint.config.mjs index c17edba7c..e0dcb6d17 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,6 +1,5 @@ import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; import react from "eslint-plugin-react"; -import reactHooks from "eslint-plugin-react-hooks"; import jsxA11Y from "eslint-plugin-jsx-a11y"; import _import from "eslint-plugin-import"; import prettier from "eslint-plugin-prettier"; @@ -15,131 +14,150 @@ import { FlatCompat } from "@eslint/eslintrc"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, }); export default [ - { - files: [ - "**/*.js", - "**/*.jsx", - "**/*.ts", - "**/*.tsx" - ] - }, - { + { + files: ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"], + }, + { ignores: [ - "**/build/", - "**/.eslintrc.js", - "docs/test-api", - "./node_modules/*", - "**/*.md", - "**/*.mdx", - "**/*.mp4", - "**/*.mov", - "src/components/cardlist.jsx", - "src/components/HomepageCards/index.tsx", - "**/sidebars.js", - "**/LICENSE", - "**/*.json", + "**/build/", + "**/.eslintrc.js", + "docs/test-api", + "./node_modules/*", + "**/*.md", + "**/*.mdx", + "**/*.mp4", + "**/*.mov", + "src/components/cardlist.jsx", + "src/components/HomepageCards/index.tsx", + "**/sidebars.js", + "**/LICENSE", + "**/*.json", + "**/.docusaurus/**/*", + "**/.releaserc.js", ], -}, ...fixupConfigRules(compat.extends( - "plugin:react/recommended", - "airbnb-typescript", - "plugin:import/typescript", - "plugin:prettier/recommended", -)), { + }, + ...fixupConfigRules( + compat.extends( + "plugin:react/recommended", + "plugin:import/typescript", + "plugin:prettier/recommended", + ), + ), + { plugins: { - react: fixupPluginRules(react), - "react-hooks": fixupPluginRules(reactHooks), - "jsx-a11y": jsxA11Y, - import: fixupPluginRules(_import), - prettier: fixupPluginRules(prettier), - "@typescript-eslint": typescriptEslint, + react: fixupPluginRules(react), + "jsx-a11y": jsxA11Y, + import: fixupPluginRules(_import), + prettier: fixupPluginRules(prettier), + "@typescript-eslint": typescriptEslint, }, languageOptions: { - globals: { - ...globals.browser, - }, + globals: { + ...globals.browser, + }, - parser: tsParser, - ecmaVersion: 2020, - sourceType: "module", + parser: tsParser, + ecmaVersion: 2020, + sourceType: "module", - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - - project: ["./tsconfig.json"], + parserOptions: { + ecmaFeatures: { + jsx: true, }, + + project: ["./tsconfig.json"], + }, }, settings: { - react: { - pragma: "React", - fragment: "Fragment", - version: "detect", - }, + react: { + pragma: "React", + fragment: "Fragment", + version: "detect", + }, + + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"], + }, + + "import/resolver": { + typescript: {}, + }, + }, - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"], + rules: { + "react/jsx-filename-extension": [ + 1, + { + extensions: [".js", ".tsx", ".jsx"], }, + ], - "import/resolver": { - typescript: {}, + "import/prefer-default-export": 0, + "react/prop-types": 0, + + "import/no-unresolved": [ + "error", + { + ignore: ["^@theme", "^@docusaurus", "^@site"], }, - }, + ], + + "no-nested-ternary": 0, + "no-console": 0, + "no-unused-vars": 0, + "no-use-before-define": 0, + "arrow-body-style": 0, + "jsx-a11y/anchor-is-valid": 0, + "jsx-a11y/no-static-element-interactions": 0, + "jsx-a11y/click-events-have-key-events": 0, + "@typescript-eslint/no-unused-expressions": 0, + + "@typescript-eslint/no-unused-vars": [ + "warn", + { + args: "none", + }, + ], + + "@typescript-eslint/no-use-before-define": "warn", + "react/require-default-props": 0, + "react/jsx-props-no-spreading": 0, + "react/button-has-type": 0, + + "jsx-a11y/label-has-associated-control": [ + "error", + { + labelComponents: [], + labelAttributes: [], + controlComponents: [], + assert: "either", + depth: 2, + }, + ], + + "@typescript-eslint/naming-convention": [ + "error", + { + selector: "variableLike", + leadingUnderscore: "forbid", + trailingUnderscore: "forbid", + format: ["camelCase", "PascalCase", "UPPER_CASE"], + filter: { + regex: "^(__filename|__dirname)$", + match: false, + }, + }, + ], - rules: { - "react/jsx-filename-extension": [1, { - extensions: [".js", ".tsx", ".jsx"], - }], - - "import/prefer-default-export": 0, - "react/prop-types": 0, - - "import/no-unresolved": ["error", { - ignore: ["^@theme", "^@docusaurus", "^@site"], - }], - - "no-nested-ternary": 0, - "no-console": 0, - "no-unused-vars": 0, - "no-use-before-define": 0, - "arrow-body-style": 0, - "jsx-a11y/anchor-is-valid": 0, - "jsx-a11y/no-static-element-interactions": 0, - "jsx-a11y/click-events-have-key-events": 0, - "@typescript-eslint/no-unused-expressions": 0, - - "@typescript-eslint/no-unused-vars": ["warn", { - args: "none", - }], - - "@typescript-eslint/no-use-before-define": "warn", - "react/require-default-props": 0, - "react/jsx-props-no-spreading": 0, - "react/button-has-type": 0, - - "jsx-a11y/label-has-associated-control": ["error", { - labelComponents: [], - labelAttributes: [], - controlComponents: [], - assert: "either", - depth: 2, - }], - - "@typescript-eslint/naming-convention": ["error", { - selector: "variableLike", - leadingUnderscore: "forbid", - trailingUnderscore: "forbid", - format: ["camelCase", "PascalCase", "UPPER_CASE"], - }], - - "import/extensions": 0, + "import/extensions": 0, }, -}]; \ No newline at end of file + }, +]; diff --git a/package-lock.json b/package-lock.json index d678490b2..5fa60c11d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@docusaurus/preset-classic": "^3.6.0", "@docusaurus/theme-mermaid": "^3.6.0", "@easyops-cn/docusaurus-search-local": "^0.44.3", + "@eslint/compat": "^1.2.2", "@mdx-js/react": "^3.0.0", "axios": "^1.7.7", "clsx": "^2.1.1", @@ -45,14 +46,13 @@ "@semantic-release/npm": "^12.0.1", "@semantic-release/release-notes-generator": "^14.0.1", "cz-conventional-changelog": "^3.3.0", - "eslint": "^8.56.0", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.5.4", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", "globals": "^15.9.0", "lint-staged": "^15.2.9", "prettier": "3.3.3", @@ -621,9 +621,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -3499,6 +3499,17 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", @@ -3507,15 +3518,52 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.2.tgz", + "integrity": "sha512-jhgiIrsw+tRfcBQ4BFl2C3vCrIUw2trCY0cnDvGZpwTtKCEDmZhAtMfrEUP/KpnwM6PrO0T+Ltm+ccW74olG3Q==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -3523,7 +3571,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3545,14 +3593,11 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3563,23 +3608,31 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@hapi/hoek": { @@ -3595,18 +3648,36 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -3621,11 +3692,17 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead" + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@iconify/types": { "version": "2.0.0", @@ -6780,15 +6857,15 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz", - "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", + "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.13.0", - "@typescript-eslint/type-utils": "8.13.0", - "@typescript-eslint/utils": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/type-utils": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -6812,14 +6889,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz", - "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==", - "dependencies": { - "@typescript-eslint/scope-manager": "8.13.0", - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/typescript-estree": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", + "dependencies": { + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4" }, "engines": { @@ -6839,12 +6916,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", - "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", "dependencies": { - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6855,12 +6932,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz", - "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", + "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", "dependencies": { - "@typescript-eslint/typescript-estree": "8.13.0", - "@typescript-eslint/utils": "8.13.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/utils": "8.14.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -6878,9 +6955,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", - "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -6890,12 +6967,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", - "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dependencies": { - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -6939,14 +7016,14 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", - "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", + "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.13.0", - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/typescript-estree": "8.13.0" + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6960,11 +7037,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", - "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", "dependencies": { - "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/types": "8.14.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -6975,6 +7052,17 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -7757,12 +7845,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { @@ -7790,11 +7878,11 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -10742,14 +10830,15 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-converter": { @@ -10873,9 +10962,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.55", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", - "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==" + "version": "1.5.56", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.56.tgz", + "integrity": "sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -11362,58 +11451,62 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.14.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -11551,18 +11644,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -11663,30 +11744,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -11714,26 +11771,26 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11809,20 +11866,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -11889,17 +11932,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -11912,16 +11944,16 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -12404,14 +12436,14 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-loader": { @@ -12627,16 +12659,15 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -19002,13 +19033,13 @@ } }, "node_modules/mlly": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz", - "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz", + "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==", "dependencies": { - "acorn": "^8.12.1", + "acorn": "^8.14.0", "pathe": "^1.1.2", - "pkg-types": "^1.2.0", + "pkg-types": "^1.2.1", "ufo": "^1.5.4" } }, @@ -23252,9 +23283,9 @@ } }, "node_modules/postcss": { - "version": "8.4.48", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.48.tgz", - "integrity": "sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -23548,12 +23579,12 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz", + "integrity": "sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -23563,12 +23594,24 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -23577,6 +23620,18 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", @@ -27982,13 +28037,13 @@ } }, "node_modules/typescript-eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.13.0.tgz", - "integrity": "sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.14.0.tgz", + "integrity": "sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.13.0", - "@typescript-eslint/parser": "8.13.0", - "@typescript-eslint/utils": "8.13.0" + "@typescript-eslint/eslint-plugin": "8.14.0", + "@typescript-eslint/parser": "8.14.0", + "@typescript-eslint/utils": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/package.json b/package.json index 20c695e56..7333bbdba 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "@docusaurus/preset-classic": "^3.6.0", "@docusaurus/theme-mermaid": "^3.6.0", "@easyops-cn/docusaurus-search-local": "^0.44.3", + "@eslint/compat": "^1.2.2", "@mdx-js/react": "^3.0.0", "axios": "^1.7.7", "clsx": "^2.1.1", @@ -67,14 +68,13 @@ "@semantic-release/npm": "^12.0.1", "@semantic-release/release-notes-generator": "^14.0.1", "cz-conventional-changelog": "^3.3.0", - "eslint": "^8.56.0", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.5.4", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", "globals": "^15.9.0", "lint-staged": "^15.2.9", "prettier": "3.3.3", diff --git a/scripts/fetchNodeSize.js b/scripts/fetchNodeSize.js index 9f4da44d8..46756ea8e 100644 --- a/scripts/fetchNodeSize.js +++ b/scripts/fetchNodeSize.js @@ -1,7 +1,7 @@ -require('dotenv').config(); -const axios = require('axios'); -const fs = require('fs'); -const path = require('path'); +require("dotenv").config(); +const axios = require("axios"); +const fs = require("fs"); +const path = require("path"); // Function to calculate the daily increase using "Range", matching the "Reduce" transformation in Grafana const calculateDailyIncrease = (values) => { @@ -9,11 +9,12 @@ const calculateDailyIncrease = (values) => { values.sort((a, b) => a[0] - b[0]); // Calculate the total time range in days - const timeRangeDays = (values[values.length - 1][0] - values[0][0]) / (24 * 60 * 60); + const timeRangeDays = + (values[values.length - 1][0] - values[0][0]) / (24 * 60 * 60); // Find the minimum and maximum values - const minValue = Math.min(...values.map(v => parseFloat(v[1]))); - const maxValue = Math.max(...values.map(v => parseFloat(v[1]))); + const minValue = Math.min(...values.map((v) => parseFloat(v[1]))); + const maxValue = Math.max(...values.map((v) => parseFloat(v[1]))); // Calculate the range (difference between max and min) const rangeIncrease = maxValue - minValue; @@ -27,27 +28,28 @@ const calculateDailyIncrease = (values) => { // Helper function to get week number function getWeekNumber(d) { d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())); - d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7)); - var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1)); - var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7); + d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7)); + var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1)); + var weekNo = Math.ceil(((d - yearStart) / 86400000 + 1) / 7); return weekNo; } const fetchData = async () => { - console.log('Starting data fetch...'); + console.log("Starting data fetch..."); - const user = process.env.LINEA_OBSERVABILITY_USER; - const password = process.env.LINEA_OBSERVABILITY_PASS; - const baseUrl = 'https://mimir.o11y.web3factory.consensys.net/prometheus/api/v1/query_range'; + const baseUrl = + "https://mimir.o11y.web3factory.consensys.net/prometheus/api/v1/query_range"; - const configFilePath = path.join(__dirname, '../linea-node-size/config.json'); + const configFilePath = path.join(__dirname, "../linea-node-size/config.json"); console.log(`Reading configuration from ${configFilePath}`); - const config = JSON.parse(fs.readFileSync(configFilePath, 'utf8')); + const config = JSON.parse(fs.readFileSync(configFilePath, "utf8")); const results = []; for (const { network, cluster, pvc } of config) { - console.log(`Fetching data for network: ${network}, cluster: ${cluster}, pvc: ${pvc}`); + console.log( + `Fetching data for network: ${network}, cluster: ${cluster}, pvc: ${pvc}`, + ); // Subtracts available bytes from capacity bytes to get the used bytes const query = ` @@ -71,24 +73,30 @@ const fetchData = async () => { }, }); - console.log(`Response received for network: ${network}, cluster: ${cluster}, pvc: ${pvc}`); + console.log( + `Response received for network: ${network}, cluster: ${cluster}, pvc: ${pvc}`, + ); const result = response.data.data.result[0]; let values = result.values; console.log(`Number of data points received: ${values.length}`); - + if (values.length >= 2) { const startTime = new Date(values[0][0] * 1000); const endTime = new Date(values[values.length - 1][0] * 1000); const timeDiffHours = (endTime - startTime) / (1000 * 60 * 60); - console.log(`Time range: ${startTime.toISOString()} to ${endTime.toISOString()}`); + console.log( + `Time range: ${startTime.toISOString()} to ${endTime.toISOString()}`, + ); console.log(`Time difference: ${timeDiffHours.toFixed(2)} hours`); } // Filter out invalid data points - values = values.filter(value => !isNaN(parseFloat(value[1]))); + values = values.filter((value) => !isNaN(parseFloat(value[1]))); if (values.length !== result.values.length) { - console.warn(`Filtered out ${result.values.length - values.length} invalid data points for ${pvc}`); + console.warn( + `Filtered out ${result.values.length - values.length} invalid data points for ${pvc}`, + ); } // Total size = last value in the series @@ -96,8 +104,12 @@ const fetchData = async () => { // Daily increase calculated using the "Range" method const dailyIncrease = calculateDailyIncrease(values); - console.log(`${pvc} - Total size: ${totalSize} bytes (${(totalSize / (1024 * 1024 * 1024)).toFixed(2)} GiB)`); - console.log(`${pvc} - Daily increase: ${dailyIncrease} bytes (${(dailyIncrease / (1024 * 1024 * 1024)).toFixed(2)} GiB)`); + console.log( + `${pvc} - Total size: ${totalSize} bytes (${(totalSize / (1024 * 1024 * 1024)).toFixed(2)} GiB)`, + ); + console.log( + `${pvc} - Daily increase: ${dailyIncrease} bytes (${(dailyIncrease / (1024 * 1024 * 1024)).toFixed(2)} GiB)`, + ); results.push({ network, @@ -108,16 +120,19 @@ const fetchData = async () => { timestamp: new Date().toISOString(), }); } catch (err) { - console.error(`Error fetching data for ${network}, ${cluster}, ${pvc}:`, err); + console.error( + `Error fetching data for ${network}, ${cluster}, ${pvc}:`, + err, + ); } } // Write data to /linea-node-size/data.json - const dataFilePath = path.join(__dirname, '../linea-node-size/data.json'); + const dataFilePath = path.join(__dirname, "../linea-node-size/data.json"); let existingData = {}; - + if (fs.existsSync(dataFilePath)) { - const fileContent = fs.readFileSync(dataFilePath, 'utf8'); + const fileContent = fs.readFileSync(dataFilePath, "utf8"); existingData = JSON.parse(fileContent); } @@ -128,12 +143,12 @@ const fetchData = async () => { if (!existingData[currentYear]) { existingData[currentYear] = {}; } - + existingData[currentYear][currentWeek] = results; console.log(`Writing results to ${dataFilePath}`); fs.writeFileSync(dataFilePath, JSON.stringify(existingData, null, 2)); - console.log('Node size data fetched and saved.'); + console.log("Node size data fetched and saved."); }; -fetchData(); \ No newline at end of file +fetchData(); diff --git a/src/components/HomepageCards/index.tsx b/src/components/HomepageCards/index.tsx index d1cdfaed6..04272df8d 100644 --- a/src/components/HomepageCards/index.tsx +++ b/src/components/HomepageCards/index.tsx @@ -102,8 +102,7 @@ function Card({
+ style={{ backgroundColor: backgroundColor }}>
@@ -125,8 +124,7 @@ function Card({ alignItems: "center", textAlign: "center", paddingBottom: "30px", - }} - > + }}> + style={{ width: "90%" }}> {buttonName}
diff --git a/src/components/LastUpdated.jsx b/src/components/LastUpdated.jsx index 465ce50ae..22f9999a9 100644 --- a/src/components/LastUpdated.jsx +++ b/src/components/LastUpdated.jsx @@ -1,14 +1,14 @@ // components/LastUpdated.js -import React from 'react'; -import nodeSizeData from '../../linea-node-size/data.json'; +import React from "react"; +import nodeSizeData from "../../linea-node-size/data.json"; const LastUpdated = () => { const formatDate = (timestamp) => { - return new Date(timestamp).toLocaleString('en-US', { - timeZone: 'UTC', - year: 'numeric', - month: 'short', - day: 'numeric', + return new Date(timestamp).toLocaleString("en-US", { + timeZone: "UTC", + year: "numeric", + month: "short", + day: "numeric", }); }; @@ -35,7 +35,11 @@ const LastUpdated = () => { const latestTimestamp = getLatestTimestamp(nodeSizeData); if (!latestTimestamp) { - return

No update data available

; + return ( +

+ No update data available +

+ ); } return ( @@ -45,4 +49,4 @@ const LastUpdated = () => { ); }; -export default LastUpdated; \ No newline at end of file +export default LastUpdated; diff --git a/src/components/NodeSize.jsx b/src/components/NodeSize.jsx index 5bb8f43e9..18ef4b32e 100644 --- a/src/components/NodeSize.jsx +++ b/src/components/NodeSize.jsx @@ -1,13 +1,13 @@ -import React from 'react'; -import nodeSizeData from '../../linea-node-size/data.json'; +import React from "react"; +import nodeSizeData from "../../linea-node-size/data.json"; const formatBytes = (bytes, decimals = 2) => { - if (bytes === 0) return '0 Bytes'; + if (bytes === 0) return "0 Bytes"; const k = 1000; // Use 1000 for KB/MB/GB const dm = decimals < 0 ? 0 : decimals; - const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; const i = Math.floor(Math.log(bytes) / Math.log(k)); - return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]; }; const getLatestData = (nodeSizeData, network, cluster, pvc) => { @@ -17,10 +17,11 @@ const getLatestData = (nodeSizeData, network, cluster, pvc) => { const weeks = Object.keys(nodeSizeData[year]).sort((a, b) => b - a); // Sort weeks descending for (const week of weeks) { - const data = nodeSizeData[year][week].find(item => - item.network === network && - item.cluster === cluster && - item.pvc === pvc + const data = nodeSizeData[year][week].find( + (item) => + item.network === network && + item.cluster === cluster && + item.pvc === pvc, ); if (data) { @@ -40,8 +41,11 @@ const NodeSize = ({ network, cluster, pvc }) => { } return ( - Total size {formatBytes(data.totalSize)}; increasing by {formatBytes(data.dailyIncrease)} daily + + Total size {formatBytes(data.totalSize)}; increasing by{" "} + {formatBytes(data.dailyIncrease)} daily + ); }; -export default NodeSize; \ No newline at end of file +export default NodeSize; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c5483c81f..57f043dcf 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -19,11 +19,7 @@ function HomepageHeader() { Docs -

+

{siteConfig.tagline}

@@ -54,7 +50,10 @@ export default function Home(): JSX.Element {
- +
); diff --git a/src/theme/DocItem/Layout/GetFeedback.jsx b/src/theme/DocItem/Layout/GetFeedback.jsx index 397d3e7d5..51b20f390 100644 --- a/src/theme/DocItem/Layout/GetFeedback.jsx +++ b/src/theme/DocItem/Layout/GetFeedback.jsx @@ -19,13 +19,13 @@ const GetFeedback = (props) => {
{/*Light*/}
{/*Dark*/}
diff --git a/src/theme/DocItem/Layout/index.js b/src/theme/DocItem/Layout/index.js index 92bd1353c..03ca5c766 100644 --- a/src/theme/DocItem/Layout/index.js +++ b/src/theme/DocItem/Layout/index.js @@ -1,30 +1,30 @@ -import React from 'react'; -import clsx from 'clsx'; -import {useWindowSize} from '@docusaurus/theme-common'; -import {useDoc} from '@docusaurus/plugin-content-docs/client'; -import DocItemPaginator from '@theme/DocItem/Paginator'; -import DocVersionBanner from '@theme/DocVersionBanner'; -import DocVersionBadge from '@theme/DocVersionBadge'; -import DocItemFooter from '@theme/DocItem/Footer'; -import DocItemTOCMobile from '@theme/DocItem/TOC/Mobile'; -import DocItemTOCDesktop from '@theme/DocItem/TOC/Desktop'; -import DocItemContent from '@theme/DocItem/Content'; -import DocBreadcrumbs from '@theme/DocBreadcrumbs'; -import ContentVisibility from '@theme/ContentVisibility'; -import styles from './styles.module.css'; -import GetFeedback from './GetFeedback'; +import React from "react"; +import clsx from "clsx"; +import { useWindowSize } from "@docusaurus/theme-common"; +import { useDoc } from "@docusaurus/plugin-content-docs/client"; +import DocItemPaginator from "@theme/DocItem/Paginator"; +import DocVersionBanner from "@theme/DocVersionBanner"; +import DocVersionBadge from "@theme/DocVersionBadge"; +import DocItemFooter from "@theme/DocItem/Footer"; +import DocItemTOCMobile from "@theme/DocItem/TOC/Mobile"; +import DocItemTOCDesktop from "@theme/DocItem/TOC/Desktop"; +import DocItemContent from "@theme/DocItem/Content"; +import DocBreadcrumbs from "@theme/DocBreadcrumbs"; +import ContentVisibility from "@theme/ContentVisibility"; +import styles from "./styles.module.css"; +import GetFeedback from "./GetFeedback"; /** * Decide if the toc should be rendered, on mobile or desktop viewports */ function useDocTOC() { - const {frontMatter, toc} = useDoc(); + const { frontMatter, toc } = useDoc(); const windowSize = useWindowSize(); const hidden = frontMatter.hide_table_of_contents; const canRender = !hidden && toc.length > 0; const mobile = canRender ? : undefined; const desktop = - canRender && (windowSize === 'desktop' || windowSize === 'ssr') ? ( + canRender && (windowSize === "desktop" || windowSize === "ssr") ? ( ) : undefined; return { @@ -33,12 +33,12 @@ function useDocTOC() { desktop, }; } -export default function DocItemLayout({children}) { +export default function DocItemLayout({ children }) { const docTOC = useDocTOC(); - const {metadata} = useDoc(); + const { metadata } = useDoc(); return (
-
+
diff --git a/static/files/besu/genesis-mainnet.json b/static/files/besu/genesis-mainnet.json index 28d228f80..22bc79450 100644 --- a/static/files/besu/genesis-mainnet.json +++ b/static/files/besu/genesis-mainnet.json @@ -1,807 +1,806 @@ { - "config": { - "chainId": 59144, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "blockperiodseconds":1, - "epochlength":30000 - } - }, - "nonce": "0x0", - "timestamp": "0x6391BFF3", - "extraData": "0x00000000000000000000000000000000000000000000000000000000000000008F81e2E3F8b46467523463835F965fFE476E1c9E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x3A2C940", - "baseFeePerGas": "0x8", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "F06B7BD371e46e96DF807d45ED1298BeeE8894BA": { - "balance": "0x8AC7230489E80000" - }, - "508Ca82Df566dCD1B0DE8296e70a96332cD644ec": { - "balance": "0x33B2E3C15095D385E180000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - + "config": { + "chainId": 59144, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "blockperiodseconds": 1, + "epochlength": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x6391BFF3", + "extraData": "0x00000000000000000000000000000000000000000000000000000000000000008F81e2E3F8b46467523463835F965fFE476E1c9E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x3A2C940", + "baseFeePerGas": "0x8", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "F06B7BD371e46e96DF807d45ED1298BeeE8894BA": { + "balance": "0x8AC7230489E80000" + }, + "508Ca82Df566dCD1B0DE8296e70a96332cD644ec": { + "balance": "0x33B2E3C15095D385E180000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/static/files/besu/genesis-sepolia-geth.json b/static/files/besu/genesis-sepolia-geth.json index b60e69409..657b73528 100644 --- a/static/files/besu/genesis-sepolia-geth.json +++ b/static/files/besu/genesis-sepolia-geth.json @@ -1,833 +1,833 @@ { - "config": { - "chainId": 59141, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "period": 1, - "epoch": 30000 - } - }, - "nonce": "0x0", - "timestamp": "0x6391BFF3", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x3A2C940", - "baseFeePerGas": "0x8", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { - "balance": "0x8AC7230489E80000" - }, - "971e727e956690b9957be6d51Ec16E73AcAC83A7": { - "balance": "0x33B2E3C9FD0803CE8000000" - }, - "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { - "balance": "0x8AC7230489E80000" - }, - "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { - "balance": "0x8AC7230489E80000" - }, - "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { - "balance": "0x8AC7230489E80000" - }, - "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { - "balance": "0x8AC7230489E80000" - }, - "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { - "balance": "0x8AC7230489E80000" - }, - "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { - "balance": "0x8AC7230489E80000" - }, - "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { - "balance": "0x8AC7230489E80000" - }, - "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { - "balance": "0x8AC7230489E80000" - }, - "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { - "balance": "0x8AC7230489E80000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + "config": { + "chainId": 59141, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 1, + "epoch": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x6391BFF3", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x3A2C940", + "baseFeePerGas": "0x8", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { + "balance": "0x8AC7230489E80000" + }, + "971e727e956690b9957be6d51Ec16E73AcAC83A7": { + "balance": "0x33B2E3C9FD0803CE8000000" + }, + "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { + "balance": "0x8AC7230489E80000" + }, + "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { + "balance": "0x8AC7230489E80000" + }, + "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { + "balance": "0x8AC7230489E80000" + }, + "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { + "balance": "0x8AC7230489E80000" + }, + "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { + "balance": "0x8AC7230489E80000" + }, + "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { + "balance": "0x8AC7230489E80000" + }, + "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { + "balance": "0x8AC7230489E80000" + }, + "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { + "balance": "0x8AC7230489E80000" + }, + "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { + "balance": "0x8AC7230489E80000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } diff --git a/static/files/besu/genesis-sepolia.json b/static/files/besu/genesis-sepolia.json index 671db288a..ef36a62e8 100644 --- a/static/files/besu/genesis-sepolia.json +++ b/static/files/besu/genesis-sepolia.json @@ -1,834 +1,834 @@ { - "config": { - "chainId": 59141, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "createemptyblocks": false, - "blockperiodseconds": 1, - "epochlength": 30000 - } - }, - "nonce": "0x0", - "timestamp": "0x6391BFF3", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x3A2C940", - "baseFeePerGas": "0x8", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { - "balance": "0x8AC7230489E80000" - }, - "971e727e956690b9957be6d51Ec16E73AcAC83A7": { - "balance": "0x33B2E3C9FD0803CE8000000" - }, - "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { - "balance": "0x8AC7230489E80000" - }, - "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { - "balance": "0x8AC7230489E80000" - }, - "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { - "balance": "0x8AC7230489E80000" - }, - "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { - "balance": "0x8AC7230489E80000" - }, - "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { - "balance": "0x8AC7230489E80000" - }, - "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { - "balance": "0x8AC7230489E80000" - }, - "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { - "balance": "0x8AC7230489E80000" - }, - "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { - "balance": "0x8AC7230489E80000" - }, - "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { - "balance": "0x8AC7230489E80000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + "config": { + "chainId": 59141, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "createemptyblocks": false, + "blockperiodseconds": 1, + "epochlength": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x6391BFF3", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x3A2C940", + "baseFeePerGas": "0x8", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { + "balance": "0x8AC7230489E80000" + }, + "971e727e956690b9957be6d51Ec16E73AcAC83A7": { + "balance": "0x33B2E3C9FD0803CE8000000" + }, + "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { + "balance": "0x8AC7230489E80000" + }, + "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { + "balance": "0x8AC7230489E80000" + }, + "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { + "balance": "0x8AC7230489E80000" + }, + "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { + "balance": "0x8AC7230489E80000" + }, + "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { + "balance": "0x8AC7230489E80000" + }, + "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { + "balance": "0x8AC7230489E80000" + }, + "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { + "balance": "0x8AC7230489E80000" + }, + "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { + "balance": "0x8AC7230489E80000" + }, + "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { + "balance": "0x8AC7230489E80000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } diff --git a/static/files/erigon/mainnet/genesis.json b/static/files/erigon/mainnet/genesis.json index b1b767c5e..c28d3014c 100644 --- a/static/files/erigon/mainnet/genesis.json +++ b/static/files/erigon/mainnet/genesis.json @@ -1,806 +1,806 @@ { - "config": { - "chainId": 59144, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "period": 1, - "epoch": 30000 - } - }, - "nonce": "0x0", - "timestamp": "0x6391BFF3", - "extraData": "0x00000000000000000000000000000000000000000000000000000000000000008F81e2E3F8b46467523463835F965fFE476E1c9E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x3A2C940", - "baseFeePerGas": "0x8", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "F06B7BD371e46e96DF807d45ED1298BeeE8894BA": { - "balance": "0x8AC7230489E80000" - }, - "508Ca82Df566dCD1B0DE8296e70a96332cD644ec": { - "balance": "0x33B2E3C15095D385E180000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" -} \ No newline at end of file + "config": { + "chainId": 59144, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 1, + "epoch": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x6391BFF3", + "extraData": "0x00000000000000000000000000000000000000000000000000000000000000008F81e2E3F8b46467523463835F965fFE476E1c9E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x3A2C940", + "baseFeePerGas": "0x8", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "F06B7BD371e46e96DF807d45ED1298BeeE8894BA": { + "balance": "0x8AC7230489E80000" + }, + "508Ca82Df566dCD1B0DE8296e70a96332cD644ec": { + "balance": "0x33B2E3C15095D385E180000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/static/files/erigon/sepolia/genesis.json b/static/files/erigon/sepolia/genesis.json index 6f1d56c3c..657b73528 100644 --- a/static/files/erigon/sepolia/genesis.json +++ b/static/files/erigon/sepolia/genesis.json @@ -1,20 +1,20 @@ { "config": { - "chainId": 59141, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "period": 1, - "epoch": 30000 - } + "chainId": 59141, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 1, + "epoch": 30000 + } }, "nonce": "0x0", "timestamp": "0x6391BFF3", @@ -25,809 +25,809 @@ "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { - "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { - "balance": "0x8AC7230489E80000" - }, - "971e727e956690b9957be6d51Ec16E73AcAC83A7": { - "balance": "0x33B2E3C9FD0803CE8000000" - }, - "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { - "balance": "0x8AC7230489E80000" - }, - "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { - "balance": "0x8AC7230489E80000" - }, - "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { - "balance": "0x8AC7230489E80000" - }, - "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { - "balance": "0x8AC7230489E80000" - }, - "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { - "balance": "0x8AC7230489E80000" - }, - "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { - "balance": "0x8AC7230489E80000" - }, - "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { - "balance": "0x8AC7230489E80000" - }, - "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { - "balance": "0x8AC7230489E80000" - }, - "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { - "balance": "0x8AC7230489E80000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } + "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { + "balance": "0x8AC7230489E80000" + }, + "971e727e956690b9957be6d51Ec16E73AcAC83A7": { + "balance": "0x33B2E3C9FD0803CE8000000" + }, + "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { + "balance": "0x8AC7230489E80000" + }, + "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { + "balance": "0x8AC7230489E80000" + }, + "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { + "balance": "0x8AC7230489E80000" + }, + "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { + "balance": "0x8AC7230489E80000" + }, + "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { + "balance": "0x8AC7230489E80000" + }, + "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { + "balance": "0x8AC7230489E80000" + }, + "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { + "balance": "0x8AC7230489E80000" + }, + "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { + "balance": "0x8AC7230489E80000" + }, + "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { + "balance": "0x8AC7230489E80000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" -} \ No newline at end of file +} diff --git a/static/files/geth/mainnet/genesis.json b/static/files/geth/mainnet/genesis.json index b1b767c5e..c28d3014c 100644 --- a/static/files/geth/mainnet/genesis.json +++ b/static/files/geth/mainnet/genesis.json @@ -1,806 +1,806 @@ { - "config": { - "chainId": 59144, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "period": 1, - "epoch": 30000 - } - }, - "nonce": "0x0", - "timestamp": "0x6391BFF3", - "extraData": "0x00000000000000000000000000000000000000000000000000000000000000008F81e2E3F8b46467523463835F965fFE476E1c9E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x3A2C940", - "baseFeePerGas": "0x8", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "F06B7BD371e46e96DF807d45ED1298BeeE8894BA": { - "balance": "0x8AC7230489E80000" - }, - "508Ca82Df566dCD1B0DE8296e70a96332cD644ec": { - "balance": "0x33B2E3C15095D385E180000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" -} \ No newline at end of file + "config": { + "chainId": 59144, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 1, + "epoch": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x6391BFF3", + "extraData": "0x00000000000000000000000000000000000000000000000000000000000000008F81e2E3F8b46467523463835F965fFE476E1c9E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x3A2C940", + "baseFeePerGas": "0x8", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "F06B7BD371e46e96DF807d45ED1298BeeE8894BA": { + "balance": "0x8AC7230489E80000" + }, + "508Ca82Df566dCD1B0DE8296e70a96332cD644ec": { + "balance": "0x33B2E3C15095D385E180000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/static/files/geth/sepolia/genesis.json b/static/files/geth/sepolia/genesis.json index 6f1d56c3c..657b73528 100644 --- a/static/files/geth/sepolia/genesis.json +++ b/static/files/geth/sepolia/genesis.json @@ -1,20 +1,20 @@ { "config": { - "chainId": 59141, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "period": 1, - "epoch": 30000 - } + "chainId": 59141, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 1, + "epoch": 30000 + } }, "nonce": "0x0", "timestamp": "0x6391BFF3", @@ -25,809 +25,809 @@ "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { - "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { - "balance": "0x8AC7230489E80000" - }, - "971e727e956690b9957be6d51Ec16E73AcAC83A7": { - "balance": "0x33B2E3C9FD0803CE8000000" - }, - "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { - "balance": "0x8AC7230489E80000" - }, - "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { - "balance": "0x8AC7230489E80000" - }, - "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { - "balance": "0x8AC7230489E80000" - }, - "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { - "balance": "0x8AC7230489E80000" - }, - "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { - "balance": "0x8AC7230489E80000" - }, - "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { - "balance": "0x8AC7230489E80000" - }, - "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { - "balance": "0x8AC7230489E80000" - }, - "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { - "balance": "0x8AC7230489E80000" - }, - "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { - "balance": "0x8AC7230489E80000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } + "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { + "balance": "0x8AC7230489E80000" + }, + "971e727e956690b9957be6d51Ec16E73AcAC83A7": { + "balance": "0x33B2E3C9FD0803CE8000000" + }, + "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { + "balance": "0x8AC7230489E80000" + }, + "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { + "balance": "0x8AC7230489E80000" + }, + "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { + "balance": "0x8AC7230489E80000" + }, + "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { + "balance": "0x8AC7230489E80000" + }, + "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { + "balance": "0x8AC7230489E80000" + }, + "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { + "balance": "0x8AC7230489E80000" + }, + "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { + "balance": "0x8AC7230489E80000" + }, + "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { + "balance": "0x8AC7230489E80000" + }, + "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { + "balance": "0x8AC7230489E80000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" -} \ No newline at end of file +} diff --git a/static/files/sepolia/genesis-sepolia-besu.json b/static/files/sepolia/genesis-sepolia-besu.json index 671db288a..ef36a62e8 100644 --- a/static/files/sepolia/genesis-sepolia-besu.json +++ b/static/files/sepolia/genesis-sepolia-besu.json @@ -1,834 +1,834 @@ { - "config": { - "chainId": 59141, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "createemptyblocks": false, - "blockperiodseconds": 1, - "epochlength": 30000 - } - }, - "nonce": "0x0", - "timestamp": "0x6391BFF3", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x3A2C940", - "baseFeePerGas": "0x8", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { - "balance": "0x8AC7230489E80000" - }, - "971e727e956690b9957be6d51Ec16E73AcAC83A7": { - "balance": "0x33B2E3C9FD0803CE8000000" - }, - "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { - "balance": "0x8AC7230489E80000" - }, - "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { - "balance": "0x8AC7230489E80000" - }, - "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { - "balance": "0x8AC7230489E80000" - }, - "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { - "balance": "0x8AC7230489E80000" - }, - "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { - "balance": "0x8AC7230489E80000" - }, - "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { - "balance": "0x8AC7230489E80000" - }, - "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { - "balance": "0x8AC7230489E80000" - }, - "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { - "balance": "0x8AC7230489E80000" - }, - "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { - "balance": "0x8AC7230489E80000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + "config": { + "chainId": 59141, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "createemptyblocks": false, + "blockperiodseconds": 1, + "epochlength": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x6391BFF3", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x3A2C940", + "baseFeePerGas": "0x8", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { + "balance": "0x8AC7230489E80000" + }, + "971e727e956690b9957be6d51Ec16E73AcAC83A7": { + "balance": "0x33B2E3C9FD0803CE8000000" + }, + "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { + "balance": "0x8AC7230489E80000" + }, + "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { + "balance": "0x8AC7230489E80000" + }, + "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { + "balance": "0x8AC7230489E80000" + }, + "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { + "balance": "0x8AC7230489E80000" + }, + "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { + "balance": "0x8AC7230489E80000" + }, + "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { + "balance": "0x8AC7230489E80000" + }, + "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { + "balance": "0x8AC7230489E80000" + }, + "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { + "balance": "0x8AC7230489E80000" + }, + "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { + "balance": "0x8AC7230489E80000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } diff --git a/static/files/sepolia/genesis-sepolia-geth.json b/static/files/sepolia/genesis-sepolia-geth.json index b60e69409..657b73528 100644 --- a/static/files/sepolia/genesis-sepolia-geth.json +++ b/static/files/sepolia/genesis-sepolia-geth.json @@ -1,833 +1,833 @@ { - "config": { - "chainId": 59141, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "clique": { - "period": 1, - "epoch": 30000 - } - }, - "nonce": "0x0", - "timestamp": "0x6391BFF3", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "0x3A2C940", - "baseFeePerGas": "0x8", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { - "balance": "0x8AC7230489E80000" - }, - "971e727e956690b9957be6d51Ec16E73AcAC83A7": { - "balance": "0x33B2E3C9FD0803CE8000000" - }, - "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { - "balance": "0x8AC7230489E80000" - }, - "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { - "balance": "0x8AC7230489E80000" - }, - "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { - "balance": "0x8AC7230489E80000" - }, - "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { - "balance": "0x8AC7230489E80000" - }, - "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { - "balance": "0x8AC7230489E80000" - }, - "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { - "balance": "0x8AC7230489E80000" - }, - "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { - "balance": "0x8AC7230489E80000" - }, - "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { - "balance": "0x8AC7230489E80000" - }, - "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { - "balance": "0x8AC7230489E80000" - }, - "0000000000000000000000000000000000000000": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000001": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000002": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000003": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000004": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000005": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000006": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000007": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000008": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000009": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000000f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000010": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000011": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000012": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000013": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000014": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000015": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000016": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000017": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000018": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000019": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000001f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000020": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000021": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000022": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000023": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000024": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000025": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000026": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000027": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000028": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000029": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000002f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000030": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000031": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000032": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000033": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000034": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000035": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000036": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000037": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000038": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000039": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000003f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000040": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000041": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000042": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000043": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000044": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000045": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000046": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000047": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000048": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000049": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000004f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000050": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000051": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000052": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000053": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000054": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000055": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000056": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000057": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000058": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000059": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000005f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000060": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000061": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000062": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000063": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000064": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000065": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000066": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000067": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000068": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000069": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000006f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000070": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000071": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000072": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000073": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000074": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000075": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000076": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000077": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000078": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000079": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000007f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000080": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000081": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000082": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000083": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000084": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000085": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000086": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000087": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000088": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000089": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000008f": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000090": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000091": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000092": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000093": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000094": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000095": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000096": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000097": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000098": { - "balance": "0x1" - }, - "0000000000000000000000000000000000000099": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009a": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009b": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009c": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009d": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009e": { - "balance": "0x1" - }, - "000000000000000000000000000000000000009f": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000a9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000aa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ab": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ac": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ad": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ae": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000af": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000b9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ba": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000be": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000bf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000c9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ca": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ce": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000cf": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000d9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000da": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000db": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000dd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000de": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000df": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000e9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ea": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000eb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ec": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ed": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ee": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ef": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f0": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f1": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f2": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f3": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f4": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f5": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f6": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f7": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f8": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000f9": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fa": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fb": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fc": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fd": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000fe": { - "balance": "0x1" - }, - "00000000000000000000000000000000000000ff": { - "balance": "0x1" - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + "config": { + "chainId": 59141, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "clique": { + "period": 1, + "epoch": 30000 + } + }, + "nonce": "0x0", + "timestamp": "0x6391BFF3", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000a27342f1b74c0cfb2cda74bac1628d0c1a9752f20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x3A2C940", + "baseFeePerGas": "0x8", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "Ed8587afbDBb2504EC31583B3377447d6fA322B2": { + "balance": "0x8AC7230489E80000" + }, + "971e727e956690b9957be6d51Ec16E73AcAC83A7": { + "balance": "0x33B2E3C9FD0803CE8000000" + }, + "47C63d1E391FcB3dCdC40C4d7fA58ADb172f8c38": { + "balance": "0x8AC7230489E80000" + }, + "5948ccC8A59B464c6DcC87db4004Cf0a8d600C93": { + "balance": "0x8AC7230489E80000" + }, + "73259D1d7534D1b68542e3240Cf76A03a5C2530F": { + "balance": "0x8AC7230489E80000" + }, + "857dBFEbD7D29a75FF06d1423c418Da3b6E07292": { + "balance": "0x8AC7230489E80000" + }, + "C702eAfe94b232ed50A7d4aC204306b97cdDAB0B": { + "balance": "0x8AC7230489E80000" + }, + "Cc791070a5aA20f7C77CFd02E1713AfA30A23021": { + "balance": "0x8AC7230489E80000" + }, + "Cd6366E24283D5D2fA10350Ac75d8a0B798E1FAe": { + "balance": "0x8AC7230489E80000" + }, + "d83C3dC7257Eb2E304CBEB50b0B98bc2dd2cdCd9": { + "balance": "0x8AC7230489E80000" + }, + "df5443dBe811fF9a121466dDa3C96292a3F6f43D": { + "balance": "0x8AC7230489E80000" + }, + "0000000000000000000000000000000000000000": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000002": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000003": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000004": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000005": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000006": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000007": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000008": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000009": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000000f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000010": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000011": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000012": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000013": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000014": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000015": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000016": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000017": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000018": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000019": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000001f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000020": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000021": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000022": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000023": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000024": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000025": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000026": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000027": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000028": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000029": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000002f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000030": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000031": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000032": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000033": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000034": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000035": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000036": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000037": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000038": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000039": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000003f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000040": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000041": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000042": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000043": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000044": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000045": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000046": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000047": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000048": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000049": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000004f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000050": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000051": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000052": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000053": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000054": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000055": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000056": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000057": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000058": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000059": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000005f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000060": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000061": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000062": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000063": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000064": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000065": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000066": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000067": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000068": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000069": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000006f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000070": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000071": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000072": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000073": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000074": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000075": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000076": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000077": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000078": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000079": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000007f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000080": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000081": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000082": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000083": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000084": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000085": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000086": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000087": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000088": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000089": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000008f": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000090": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000091": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000092": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000093": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000094": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000095": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000096": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000097": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000098": { + "balance": "0x1" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009a": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009b": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009c": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009d": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009e": { + "balance": "0x1" + }, + "000000000000000000000000000000000000009f": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000a9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000aa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ab": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ac": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ad": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ae": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000af": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000b9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ba": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000be": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000bf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000c9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ca": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ce": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000cf": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000d9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000da": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000db": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000dd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000de": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000df": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000e9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ea": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000eb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ec": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ed": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ee": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ef": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f0": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f1": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f2": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f3": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f4": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f5": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f6": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f7": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f8": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000f9": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fa": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fb": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fc": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fd": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000fe": { + "balance": "0x1" + }, + "00000000000000000000000000000000000000ff": { + "balance": "0x1" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" } diff --git a/static/js/getfeedback.js b/static/js/getfeedback.js index 4027bb1ef..5b0d6a984 100644 --- a/static/js/getfeedback.js +++ b/static/js/getfeedback.js @@ -46,7 +46,7 @@ window.usabilla || "", - ].join("") + ].join(""), ); l.close(); } catch (m) { @@ -61,4 +61,4 @@ window.usabilla || }, 0); } }; - })(); \ No newline at end of file + })(); diff --git a/static/js/navbarHighlight.js b/static/js/navbarHighlight.js index 70120577e..8eeeb5479 100644 --- a/static/js/navbarHighlight.js +++ b/static/js/navbarHighlight.js @@ -1,84 +1,87 @@ function highlightNavbar() { - console.log("Highlighting Navbar"); - - const currentPath = window.location.pathname; - console.log("Current Path:", currentPath); - - const navbarItems = [ - { - name: 'Quickstart', - url: '/developers/quickstart', - match: function (currentPath) { - return currentPath.startsWith('/developers/quickstart'); - } + console.log("Highlighting Navbar"); + + const currentPath = window.location.pathname; + console.log("Current Path:", currentPath); + + const navbarItems = [ + { + name: "Quickstart", + url: "/developers/quickstart", + match: function (currentPath) { + return currentPath.startsWith("/developers/quickstart"); }, - { - name: 'Guides', - url: '/developers/guides', - match: function (currentPath) { - return currentPath.startsWith('/developers/guides') && !currentPath.startsWith('/developers/guides/run-a-node'); - } + }, + { + name: "Guides", + url: "/developers/guides", + match: function (currentPath) { + return ( + currentPath.startsWith("/developers/guides") && + !currentPath.startsWith("/developers/guides/run-a-node") + ); }, - { - name: 'Run a Node', - url: '/developers/guides/run-a-node', - match: function (currentPath) { - // Match '/developers/guides/run-a-node' and any of its subdomains - return currentPath.startsWith('/developers/guides/run-a-node'); - } + }, + { + name: "Run a Node", + url: "/developers/guides/run-a-node", + match: function (currentPath) { + // Match '/developers/guides/run-a-node' and any of its subdomains + return currentPath.startsWith("/developers/guides/run-a-node"); }, - { - name: 'Architecture', - url: '/architecture', - match: function (currentPath) { - return currentPath.startsWith('/architecture'); - } - } - ]; - - const allLinks = document.querySelectorAll('.navbar__link'); - console.log("All Links Found:", allLinks); - - if (allLinks.length === 0) { - console.error("No navbar links found."); - return; - } - - // First, remove 'aria-current' from all navbar links - allLinks.forEach(link => { - link.removeAttribute('aria-current'); - console.log("Removed aria-current from:", link); - }); - - let matched = false; - - navbarItems.forEach(item => { - const link = document.querySelector(`a[href="${item.url}"]`); - console.log("Checking Link:", link); - - if (link && item.match(currentPath) && !matched) { - console.log("Matching Link Found:", link); - link.setAttribute('aria-current', 'page'); - matched = true; // Stop after the first match - } - }); - - if (!matched) { - console.log("No matching navbar link for the current path."); - } + }, + { + name: "Architecture", + url: "/architecture", + match: function (currentPath) { + return currentPath.startsWith("/architecture"); + }, + }, + ]; + + const allLinks = document.querySelectorAll(".navbar__link"); + console.log("All Links Found:", allLinks); + + if (allLinks.length === 0) { + console.error("No navbar links found."); + return; } - - // Listen to page load events - window.addEventListener("load", function () { - console.log("Navbar Highlight Script Loaded"); - highlightNavbar(); + + // First, remove 'aria-current' from all navbar links + allLinks.forEach((link) => { + link.removeAttribute("aria-current"); + console.log("Removed aria-current from:", link); }); - - // Mutation observer to detect changes in the document body (useful for client-side routing) - const observer = new MutationObserver(() => { - console.log("Page content changed, re-running highlightNavbar"); - highlightNavbar(); + + let matched = false; + + navbarItems.forEach((item) => { + const link = document.querySelector(`a[href="${item.url}"]`); + console.log("Checking Link:", link); + + if (link && item.match(currentPath) && !matched) { + console.log("Matching Link Found:", link); + link.setAttribute("aria-current", "page"); + matched = true; // Stop after the first match + } }); - - // Start observing the document for changes - observer.observe(document.body, { childList: true, subtree: true }); + + if (!matched) { + console.log("No matching navbar link for the current path."); + } +} + +// Listen to page load events +window.addEventListener("load", function () { + console.log("Navbar Highlight Script Loaded"); + highlightNavbar(); +}); + +// Mutation observer to detect changes in the document body (useful for client-side routing) +const observer = new MutationObserver(() => { + console.log("Page content changed, re-running highlightNavbar"); + highlightNavbar(); +}); + +// Start observing the document for changes +observer.observe(document.body, { childList: true, subtree: true }); diff --git a/stylelint.config.mjs b/stylelint.config.mjs index 72b359164..50901e562 100644 --- a/stylelint.config.mjs +++ b/stylelint.config.mjs @@ -1,17 +1,17 @@ export default { - extends: ["stylelint-config-standard"], - rules: { - "selector-pseudo-class-no-unknown": [ - true, - { - ignorePseudoClasses: ["global"], - }, - ], - "selector-class-pattern": null, - "custom-property-empty-line-before": null, - "selector-id-pattern": null, - "declaration-empty-line-before": null, - "comment-empty-line-before": null, - "value-keyword-case": ["lower", { camelCaseSvgKeywords: true }], - }, - }; \ No newline at end of file + extends: ["stylelint-config-standard"], + rules: { + "selector-pseudo-class-no-unknown": [ + true, + { + ignorePseudoClasses: ["global"], + }, + ], + "selector-class-pattern": null, + "custom-property-empty-line-before": null, + "selector-id-pattern": null, + "declaration-empty-line-before": null, + "comment-empty-line-before": null, + "value-keyword-case": ["lower", { camelCaseSvgKeywords: true }], + }, +}; From ec921f0e0167a5c53845cfcee88a535171666240 Mon Sep 17 00:00:00 2001 From: jlwllmr <95916148+jlwllmr@users.noreply.github.com> Date: Tue, 12 Nov 2024 11:14:45 +0000 Subject: [PATCH 2/5] Amend and run Prettier to rectify line lengths --- .prettierrc | 2 +- docs/architecture/index.mdx | 79 ++-- .../decentralization-roadmap/index.mdx | 139 +++++-- docs/architecture/overview/network-data.md | 46 ++- .../overview/transaction-lifecycle.mdx | 116 ++++-- .../stack/bridges/canonical-token-bridge.mdx | 26 +- docs/architecture/stack/bridges/index.mdx | 8 +- .../stack/canonical-msg-service/index.mdx | 70 +++- .../canonical-msg-service/message-service.mdx | 41 +- docs/architecture/stack/coordinator/index.mdx | 15 +- .../stack/evm-state-manager/index.mdx | 267 ++++++++++---- docs/architecture/stack/index.mdx | 39 +- .../stack/sequencer/conflation.mdx | 24 +- docs/architecture/stack/sequencer/index.mdx | 29 +- .../stack/sequencer/traces-generator.md | 20 +- .../stack/trace-expansion-proving/index.mdx | 11 +- .../trace-expansion-proving/prover-limits.mdx | 32 +- .../stack/trace-expansion-proving/proving.md | 24 +- .../trace-expansion.md | 44 ++- .../bridge/how-to-bridge-erc20-tokens.mdx | 53 ++- .../guides/bridge/how-to-bridge-eth.mdx | 101 +++-- docs/developers/guides/bridge/index.mdx | 66 +++- docs/developers/guides/community/index.mdx | 4 +- .../community/irys/irys-dynamic-nfts.mdx | 85 +++-- .../guides/community/irys/irys-nfts.mdx | 40 +- docs/developers/guides/deploy-subdomain.mdx | 93 +++-- docs/developers/guides/finalized-block.mdx | 29 +- docs/developers/guides/gas-fees.mdx | 90 +++-- docs/developers/guides/linea-api.mdx | 49 ++- docs/developers/guides/linea-inscriptions.mdx | 27 +- docs/developers/guides/linea-safe.mdx | 18 +- docs/developers/guides/linea-sdk/index.md | 44 ++- docs/developers/guides/run-a-node/besu.mdx | 77 ++-- .../guides/run-a-node/bootnodes.mdx | 7 +- docs/developers/guides/run-a-node/erigon.mdx | 59 ++- docs/developers/guides/run-a-node/geth.mdx | 61 ++- docs/developers/guides/run-a-node/index.mdx | 49 ++- .../guides/run-a-node/linea-besu.mdx | 61 ++- .../guides/run-a-node/volume-creation.mdx | 41 +- docs/developers/linea-version/index.mdx | 349 +++++++++++++----- .../deploy-smart-contract/atlas.mdx | 12 +- .../deploy-smart-contract/cookbook.mdx | 110 ++++-- .../deploy-smart-contract/foundry.mdx | 33 +- .../deploy-smart-contract/hardhat.mdx | 40 +- .../deploy-smart-contract/remix.mdx | 25 +- .../deploy-smart-contract/thirdweb.mdx | 77 ++-- .../quickstart/ethereum-differences.mdx | 35 +- docs/developers/quickstart/index.mdx | 12 +- docs/developers/quickstart/info-contracts.mdx | 45 ++- .../verify-smart-contract/foundry.mdx | 38 +- .../verify-smart-contract/hardhat.mdx | 37 +- .../reference/api/eth-sendrawtransaction.mdx | 39 +- docs/developers/reference/api/index.mdx | 3 +- .../reference/api/linea-estimategas.mdx | 69 +++- .../reference/api/linea-getproof.mdx | 44 ++- .../linea-gettransactionexclusionstatusv1.mdx | 31 +- .../account-abstraction.mdx | 20 +- .../tooling/account-abstraction/arcana.md | 10 +- .../tooling/account-abstraction/biconomy.md | 8 +- .../tooling/account-abstraction/etherspot.md | 25 +- .../tooling/account-abstraction/noves.md | 28 +- .../tooling/account-abstraction/oklink.md | 18 +- .../tooling/account-abstraction/openfort.md | 14 +- .../account-abstraction/particle-network.md | 27 +- .../tooling/account-abstraction/pimlico.md | 7 +- .../account-abstraction/smartwallets.md | 16 +- .../tooling/account-abstraction/station.md | 33 +- docs/developers/tooling/analytics/arkham.md | 5 +- docs/developers/tooling/analytics/cookie3.md | 30 +- docs/developers/tooling/analytics/dune.md | 41 +- docs/developers/tooling/analytics/mobula.md | 35 +- .../developers/tooling/attestations/index.mdx | 6 +- docs/developers/tooling/attestations/pado.md | 66 +++- docs/developers/tooling/attestations/verax.md | 47 ++- .../developers/tooling/cloud-infra/spheron.md | 11 +- .../tooling/contracts-templates/cookbook.mdx | 36 +- .../tooling/contracts-templates/thirdweb.md | 16 +- docs/developers/tooling/cross-chain/axelar.md | 78 +++- .../tooling/cross-chain/ccip-read-gateway.mdx | 72 +++- .../tooling/cross-chain/layerzero.md | 27 +- .../tooling/cross-chain/shortcuts.mdx | 98 +++-- .../tooling/data-indexers/alchemy.md | 30 +- .../tooling/data-indexers/arkham.md | 5 +- .../tooling/data-indexers/covalent.md | 84 +++-- .../tooling/data-indexers/dipdup/overview.md | 38 +- .../data-indexers/dipdup/quickstart.md | 55 ++- docs/developers/tooling/data-indexers/dune.md | 41 +- .../developers/tooling/data-indexers/envio.md | 50 ++- .../tooling/data-indexers/etherscan.mdx | 17 +- .../tooling/data-indexers/flair.mdx | 57 ++- .../data-indexers/goldsky/goldsky-index.md | 17 +- .../data-indexers/goldsky/goldsky-mirror.md | 17 +- .../tooling/data-indexers/goldsky/overview.md | 60 ++- .../tooling/data-indexers/mobula.md | 30 +- .../tooling/data-indexers/moralis.md | 66 +++- .../tooling/data-indexers/nftscan.mdx | 125 +++++-- .../developers/tooling/data-indexers/noves.md | 26 +- .../tooling/data-indexers/reservoir.md | 100 +++-- .../tooling/data-indexers/scopescan.mdx | 72 +++- .../tooling/data-indexers/sentio.mdx | 21 +- .../tooling/data-indexers/subquery.md | 57 ++- .../tooling/data-indexers/subsquid.md | 7 +- .../tooling/data-indexers/thegraph.md | 15 +- docs/developers/tooling/index.mdx | 21 +- docs/developers/tooling/libraries/ape.md | 8 +- .../tooling/libraries/ethereum-list.md | 10 +- .../developers/tooling/libraries/ethers-js.md | 9 +- .../tooling/libraries/multicall.mdx | 7 +- docs/developers/tooling/libraries/viem.md | 11 +- docs/developers/tooling/libraries/wagmi.md | 14 +- .../tooling/libraries/wallet-connect.md | 8 +- .../developers/tooling/node-providers/erpc.md | 16 +- .../tooling/node-providers/index.mdx | 9 +- docs/developers/tooling/oracles/api3.mdx | 160 ++++++-- docs/developers/tooling/oracles/chainlink.md | 35 +- docs/developers/tooling/oracles/dia.md | 69 +++- docs/developers/tooling/oracles/ora.md | 58 ++- docs/developers/tooling/oracles/pyth.md | 93 +++-- docs/developers/tooling/oracles/redstone.md | 8 +- docs/developers/tooling/oracles/supra.md | 16 +- docs/developers/tooling/oracles/tellor.md | 69 +++- docs/developers/tooling/oracles/umbrella.md | 49 ++- .../permanent-data/irys/irys-querying.mdx | 68 +++- .../permanent-data/irys/irys-quickstart.mdx | 53 ++- .../tooling/permanent-data/irys/overview.mdx | 50 ++- docs/developers/tooling/privacy/secret.md | 41 +- .../tooling/security/goplus-security-api.md | 8 +- docs/developers/tooling/security/hexagate.md | 7 +- .../tooling/security/hypernative.mdx | 10 +- docs/developers/tooling/security/scamfari.md | 14 +- docs/developers/tooling/security/spherex.mdx | 24 +- .../tooling/social-login/arcana.mdx | 58 ++- .../tooling/social-login/openfort.md | 12 +- docs/risk-disclosures/index.mdx | 80 +++- docs/zero-knowledge-glossary/index.mdx | 205 ++++++++-- 135 files changed, 4603 insertions(+), 1546 deletions(-) diff --git a/.prettierrc b/.prettierrc index d867b27bf..ef49d5f1a 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,7 +3,7 @@ "bracketSameLine": true, "bracketSpacing": true, "printWidth": 80, - "proseWrap": "never", + "proseWrap": "always", "singleQuote": false, "trailingComma": "all", "tabWidth": 2, diff --git a/docs/architecture/index.mdx b/docs/architecture/index.mdx index c7ed9a115..1d411f4ea 100644 --- a/docs/architecture/index.mdx +++ b/docs/architecture/index.mdx @@ -9,7 +9,8 @@ image: /img/socialCards/architecture-of-linea.jpg ## Linea's ideal state -Linea aims to be a fully decentralized, permissionless network. To support this goal, the Linea architecture is made up of three main elements: +Linea aims to be a fully decentralized, permissionless network. To support this +goal, the Linea architecture is made up of three main elements: - Sequencer - Prover @@ -17,7 +18,9 @@ Linea aims to be a fully decentralized, permissionless network. To support this ## Current state -Linea is in mainnet status, and the team is fervently working towards full decentralization. The following is a good representation of the main components of Linea, and how they interact: +Linea is in mainnet status, and the team is fervently working towards full +decentralization. The following is a good representation of the main components +of Linea, and how they interact:
@@ -30,27 +33,56 @@ Linea is in mainnet status, and the team is fervently working towards full decen ## First of all: what _is_ Linea, anyway? What's a zkEVM L2? -There are several different mental models that people use to explain the different networks and how they relate to one another. Some people prefer to call L2s "rollup networks", or "scaling solutions". The term "layer" is a popular mental model: where one network is "built on top of another". +There are several different mental models that people use to explain the +different networks and how they relate to one another. Some people prefer to +call L2s "rollup networks", or "scaling solutions". The term "layer" is a +popular mental model: where one network is "built on top of another". Let's set metaphor aside for a moment, and clarify: **The Ethereum network has several functional areas:** -- _Blockchain_: keeps track of addresses, and which tokens are allocated to which addresses -- _Consensus_ mechanism: wherein many many nodes communicate about the movement of tokens from one address to another, and each keeps their local copy of the ledger up to date -- _Execution environment_: the EVM (Ethereum Virtual Machine) wherein computer programs can be run. - -These three areas are heavily interconnected, and this is a simplification, but it's a helpful one to understand the tradeoffs all networks must make. - -Ethereum prioritizes security: that consensus mechanism is designed to ensure that no one can singlehandedly alter the state of the network. This is a very impressive feat of engineering, and it comes with a tradeoff: the execution environment is highly limited in the amount of work it can do, because the consensus mechanism intentionally runs slowly, to keep everything safe. - -Linea and other L2s are designed to participate in the security mechanism of Ethereum, while optimizing for execution. In other words, L2s enables users to make many transactions, run lots of programs, deploy contracts, mint NFTs, absolutely go to town—fast and cheap, and then compresses this data into a report back to Ethereum for inclusion in Ethereum's blockchain. By sending regular reports of activity on Linea to Ethereum, the network can optimize for execution without being as limited by security. - -This is the action known as "rolling up": we can say that Linea "rolls up its transactions to Ethereum". And the fact that it relies on Ethereum for its security leads people to say that it's "built on top of Ethereum": it's a "second-layer network", an L2. And before you ask, yes, Ethereum is an L1, and L3s exist, too: networks that roll up to Linea would roll up to Ethereum. - -The trick is in how that _rollup_ happens. Linea is special: it uses cutting-edge developments in a branch of mathematics and computer science often referred to as zero-knowledge, or _zero-knowledge cryptography_, to prove to the Ethereum network that everything that is happening on the Linea network is, in fact, happening, without having to submit a complete record of every last transaction and check each one. Instead, Linea submits a verifiable proof to Ethereum of each transaction: that's the 'zk' part. - -So, now that we've walked through some concepts, we can roll it all up: Linea is a zkEVM L2 network. +- _Blockchain_: keeps track of addresses, and which tokens are allocated to + which addresses +- _Consensus_ mechanism: wherein many many nodes communicate about the movement + of tokens from one address to another, and each keeps their local copy of the + ledger up to date +- _Execution environment_: the EVM (Ethereum Virtual Machine) wherein computer + programs can be run. + +These three areas are heavily interconnected, and this is a simplification, but +it's a helpful one to understand the tradeoffs all networks must make. + +Ethereum prioritizes security: that consensus mechanism is designed to ensure +that no one can singlehandedly alter the state of the network. This is a very +impressive feat of engineering, and it comes with a tradeoff: the execution +environment is highly limited in the amount of work it can do, because the +consensus mechanism intentionally runs slowly, to keep everything safe. + +Linea and other L2s are designed to participate in the security mechanism of +Ethereum, while optimizing for execution. In other words, L2s enables users to +make many transactions, run lots of programs, deploy contracts, mint NFTs, +absolutely go to town—fast and cheap, and then compresses this data into a +report back to Ethereum for inclusion in Ethereum's blockchain. By sending +regular reports of activity on Linea to Ethereum, the network can optimize for +execution without being as limited by security. + +This is the action known as "rolling up": we can say that Linea "rolls up its +transactions to Ethereum". And the fact that it relies on Ethereum for its +security leads people to say that it's "built on top of Ethereum": it's a +"second-layer network", an L2. And before you ask, yes, Ethereum is an L1, and +L3s exist, too: networks that roll up to Linea would roll up to Ethereum. + +The trick is in how that _rollup_ happens. Linea is special: it uses +cutting-edge developments in a branch of mathematics and computer science often +referred to as zero-knowledge, or _zero-knowledge cryptography_, to prove to the +Ethereum network that everything that is happening on the Linea network is, in +fact, happening, without having to submit a complete record of every last +transaction and check each one. Instead, Linea submits a verifiable proof to +Ethereum of each transaction: that's the 'zk' part. + +So, now that we've walked through some concepts, we can roll it all up: Linea is +a zkEVM L2 network.
@@ -63,7 +95,8 @@ So, now that we've walked through some concepts, we can roll it all up: Linea is ## OK... But what's a _sequencer_ and a _prover_? How does all this actually work? -At a high level, if you were to follow a flow from Ethereum, through Linea, and back to Ethereum, it would go like this: +At a high level, if you were to follow a flow from Ethereum, through Linea, and +back to Ethereum, it would go like this: 1. Ethereum bridge contract > 2. Linea bridge contract > @@ -92,5 +125,9 @@ _...in other words, there's a lot involved._ ## Next steps -- Learn more about the different components that comprise the [Linea architecture](./stack/index.mdx). -- Understand the first point of contact for many new L2 users, the bridge. Linea has more than one bridge; and that number is likely to continue to grow. The [Linea canonical message service](./stack/canonical-msg-service/index.mdx) is key to these bridges and how they function. +- Learn more about the different components that comprise the + [Linea architecture](./stack/index.mdx). +- Understand the first point of contact for many new L2 users, the bridge. Linea + has more than one bridge; and that number is likely to continue to grow. The + [Linea canonical message service](./stack/canonical-msg-service/index.mdx) is + key to these bridges and how they function. diff --git a/docs/architecture/overview/decentralization-roadmap/index.mdx b/docs/architecture/overview/decentralization-roadmap/index.mdx index 9631cf3eb..4ff0c3a4f 100644 --- a/docs/architecture/overview/decentralization-roadmap/index.mdx +++ b/docs/architecture/overview/decentralization-roadmap/index.mdx @@ -4,7 +4,9 @@ sidebar_position: 9 image: /img/socialCards/decentralization-roadmap.jpg --- -The Linea roadmap is currently scoped in five phases which the team intends to deliver sequentially in collaboration with the broader Linea ecosystem and community. +The Linea roadmap is currently scoped in five phases which the team intends to +deliver sequentially in collaboration with the broader Linea ecosystem and +community.
@@ -17,44 +19,125 @@ The Linea roadmap is currently scoped in five phases which the team intends to d ## Phase 0 — Complete -Phase 0 began with the launch of the Linea Mainnet Alpha. From day one, Linea's EVM-equivalent zkEVM offered default portability through its implementation of the EVM as specified by the Ethereum Foundation. A developer building on Linea can choose at any time to move their dapp to another EVM-supported chain, such as Ethereum, in the event they are unsatisfied with the Linea network, without re-writing their smart contracts, retooling, or paying for new audits. - -During this phase we convened the first iteration of the Linea Security Council, formed to monitor the network, protect users, and mitigate the risks associated with a new production system. The Security Council is managed through a multi-sig Safe (formerly Gnosis Safe) contract that requires certain thresholds of signatures to be submitted to carry out an action. Details can be found in our [risk disclosures](../../../risk-disclosures/index.mdx). - -Finally, the client software used to run a local node on the Linea network was made publicly available, giving any actor the option to verify the Linea state for themselves and minimize trust in the Linea operator. View our [node running guides](../../../developers/guides/run-a-node/index.mdx) to get started. +Phase 0 began with the launch of the Linea Mainnet Alpha. From day one, Linea's +EVM-equivalent zkEVM offered default portability through its implementation of +the EVM as specified by the Ethereum Foundation. A developer building on Linea +can choose at any time to move their dapp to another EVM-supported chain, such +as Ethereum, in the event they are unsatisfied with the Linea network, without +re-writing their smart contracts, retooling, or paying for new audits. + +During this phase we convened the first iteration of the Linea Security Council, +formed to monitor the network, protect users, and mitigate the risks associated +with a new production system. The Security Council is managed through a +multi-sig Safe (formerly Gnosis Safe) contract that requires certain thresholds +of signatures to be submitted to carry out an action. Details can be found in +our [risk disclosures](../../../risk-disclosures/index.mdx). + +Finally, the client software used to run a local node on the Linea network was +made publicly available, giving any actor the option to verify the Linea state +for themselves and minimize trust in the Linea operator. View our +[node running guides](../../../developers/guides/run-a-node/index.mdx) to get +started. ## Phase 1 — Current -There are two significant components in this phase: the **open-source stack** and ensuring **100% EVM coverage**. +There are two significant components in this phase: the **open-source stack** +and ensuring **100% EVM coverage**. -Open-sourcing Linea's software stack is an essential element of our roadmap, fostering transparency and aligning with web3 values. The Linea software stack is publicly available under the [AGPL-2.0](https://www.apache.org/licenses/LICENSE-2.0) license, which ensures that users have the freedom to view, fork, and modify the code. An overview of Linea's repositories is available in our [architecture section](../../../architecture/stack/index.mdx). +Open-sourcing Linea's software stack is an essential element of our roadmap, +fostering transparency and aligning with web3 values. The Linea software stack +is publicly available under the +[AGPL-2.0](https://www.apache.org/licenses/LICENSE-2.0) license, which ensures +that users have the freedom to view, fork, and modify the code. An overview of +Linea's repositories is available in our +[architecture section](../../../architecture/stack/index.mdx). -The second cornerstone of this phase is the implementation of **100% EVM coverage** in the zkEVM arithmetization. Linea will generate proofs of computation for all EVM opcodes and precompiles, unlocking trustless execution for all use cases. The specification for the arithmetization will be published, audited, and open to bug bounties to increase the security and reliability of the system. +The second cornerstone of this phase is the implementation of **100% EVM +coverage** in the zkEVM arithmetization. Linea will generate proofs of +computation for all EVM opcodes and precompiles, unlocking trustless execution +for all use cases. The specification for the arithmetization will be published, +audited, and open to bug bounties to increase the security and reliability of +the system. ## Phase 2 -There are two significant components in this phase: **diversifying the Security Council**, and enabling **censorship-resistant withdrawals**. - -**Diversifying the Security Council** forms the first part of this stage. The Security Council established during Linea's Mainnet Alpha launch plays a critical role in the oversight and control of the network. However, to prevent the concentration of power and potential bias, we plan to expand participation in the council, while also retaining a 6-of-8 multisig threshold (or stricter) for immediate upgrades. This modification ensures a balanced representation and fosters more robust collective decision-making, adding an additional layer of checks and balances to the system. - -Closely tied to our principle of user sovereignty, enabling **censorship-resistant withdrawals** is a fundamental element of our roadmap. The architecture will be refined to prevent rollup operators from preventing user withdrawals. We will ensure that users can independently initiate exits, which guarantees continuous access to, and control over their assets on Linea. This assurance amplifies user confidence and upholds our commitment to ensuring users have sovereignty over their assets. - -Through these initiatives, our Phase 2 aims to further decentralize power, enhance transparency, and boost the user experience, all while maintaining robust security and control measures. +There are two significant components in this phase: **diversifying the Security +Council**, and enabling **censorship-resistant withdrawals**. + +**Diversifying the Security Council** forms the first part of this stage. The +Security Council established during Linea's Mainnet Alpha launch plays a +critical role in the oversight and control of the network. However, to prevent +the concentration of power and potential bias, we plan to expand participation +in the council, while also retaining a 6-of-8 multisig threshold (or stricter) +for immediate upgrades. This modification ensures a balanced representation and +fosters more robust collective decision-making, adding an additional layer of +checks and balances to the system. + +Closely tied to our principle of user sovereignty, enabling +**censorship-resistant withdrawals** is a fundamental element of our roadmap. +The architecture will be refined to prevent rollup operators from preventing +user withdrawals. We will ensure that users can independently initiate exits, +which guarantees continuous access to, and control over their assets on Linea. +This assurance amplifies user confidence and upholds our commitment to ensuring +users have sovereignty over their assets. + +Through these initiatives, our Phase 2 aims to further decentralize power, +enhance transparency, and boost the user experience, all while maintaining +robust security and control measures. ## Phase 3 -In this phase, we turn our focus to decentralizing the roles crucial to the functioning of the Linea ecosystem, as well as our governance system itself, thereby further reinforcing our commitment to trust minimization and decentralization. - -The first part of this phase is **decentralizing operators**. At present, provers and sequencers, which generate zero-knowledge proofs and manage Layer 2 transactions respectively, are crucial roles within our ecosystem. By decentralizing these roles, we aim to significantly bolster the trust of our network participants and the overall integrity of our system. We acknowledge the technical complexities this may bring, such as potential latency, increased transaction costs, and potential MEV (maximum extractable value) issues. However, we are committed to navigating these challenges to shepherd forward a trustworthy, efficient platform for the community. - -The second component of this phase is **decentralizing governance**. We believe that democratizing Linea's governance is key to our continued evolution. This approach fosters an equitable, transparent system where all stakeholders can participate and the future of Linea is steered by its user community. This shared governance not only mitigates unilateral decisions and the risk of a single point of failure but also reinforces the resilience of the network. In turn, this promotes collective ownership and trust among network participants, thereby enhancing the ecosystem's sustainable growth. +In this phase, we turn our focus to decentralizing the roles crucial to the +functioning of the Linea ecosystem, as well as our governance system itself, +thereby further reinforcing our commitment to trust minimization and +decentralization. + +The first part of this phase is **decentralizing operators**. At present, +provers and sequencers, which generate zero-knowledge proofs and manage Layer 2 +transactions respectively, are crucial roles within our ecosystem. By +decentralizing these roles, we aim to significantly bolster the trust of our +network participants and the overall integrity of our system. We acknowledge the +technical complexities this may bring, such as potential latency, increased +transaction costs, and potential MEV (maximum extractable value) issues. +However, we are committed to navigating these challenges to shepherd forward a +trustworthy, efficient platform for the community. + +The second component of this phase is **decentralizing governance**. We believe +that democratizing Linea's governance is key to our continued evolution. This +approach fosters an equitable, transparent system where all stakeholders can +participate and the future of Linea is steered by its user community. This +shared governance not only mitigates unilateral decisions and the risk of a +single point of failure but also reinforces the resilience of the network. In +turn, this promotes collective ownership and trust among network participants, +thereby enhancing the ecosystem's sustainable growth. ## Phase 4 -The final phase of our roadmap, aims to further ensure the robustness of our ecosystem and mitigate trust-related risks through the implementation of a **multi-prover** and by **limiting governance powers**. - -The EVM will continue to evolve as described in the Ethereum roadmap and will be driven by the larger Ethereum community and Ethereum Foundation. Therefore, in order to make changes to the Linea network at a reasonable pace and safeguard against implementation risk, we plan to incorporate multiple diverse implementations of a zkEVM prover, known as a **multi-prover** rollup. With each transaction on Linea verified by multiple heterogeneous implementations of the zkEVM, we can ensure that even if one prover encounters a bug or becomes unavailable, which is not improbable given the complexity, the system continues to operate uninterrupted. This approach not only boosts confidence in the reliability of our platform during a period where the EVM specification is constantly evolving but also encourages the exploration of innovative advancements, all while maintaining exceptional levels of system uptime. - -Lastly, as part of our commitment to a robust and decentralized governance model limiting governance to where it is only necessary, we plan to **limit governance powers**. Upgrades to the rollup logic will be immutable, allowing upgrades only to be made to the verifier given a change in the EVM specification, of which users will be given reasonable notice to exit the rollup. - -The role of the Security Council will be delineated to step in only in case of discrepancies or potential system issues, such as when the prover system disagrees or appears to be stuck. By implementing these measures, we hope to strike a balance between governance where necessary and the principles of decentralization. +The final phase of our roadmap, aims to further ensure the robustness of our +ecosystem and mitigate trust-related risks through the implementation of a +**multi-prover** and by **limiting governance powers**. + +The EVM will continue to evolve as described in the Ethereum roadmap and will be +driven by the larger Ethereum community and Ethereum Foundation. Therefore, in +order to make changes to the Linea network at a reasonable pace and safeguard +against implementation risk, we plan to incorporate multiple diverse +implementations of a zkEVM prover, known as a **multi-prover** rollup. With each +transaction on Linea verified by multiple heterogeneous implementations of the +zkEVM, we can ensure that even if one prover encounters a bug or becomes +unavailable, which is not improbable given the complexity, the system continues +to operate uninterrupted. This approach not only boosts confidence in the +reliability of our platform during a period where the EVM specification is +constantly evolving but also encourages the exploration of innovative +advancements, all while maintaining exceptional levels of system uptime. + +Lastly, as part of our commitment to a robust and decentralized governance model +limiting governance to where it is only necessary, we plan to **limit governance +powers**. Upgrades to the rollup logic will be immutable, allowing upgrades only +to be made to the verifier given a change in the EVM specification, of which +users will be given reasonable notice to exit the rollup. + +The role of the Security Council will be delineated to step in only in case of +discrepancies or potential system issues, such as when the prover system +disagrees or appears to be stuck. By implementing these measures, we hope to +strike a balance between governance where necessary and the principles of +decentralization. diff --git a/docs/architecture/overview/network-data.md b/docs/architecture/overview/network-data.md index a9d0969e3..34d6572aa 100644 --- a/docs/architecture/overview/network-data.md +++ b/docs/architecture/overview/network-data.md @@ -8,24 +8,52 @@ image: /img/socialCards/network-data.jpg ### What is it? -One of the main value propositions of a public blockchain network is that it be, well, _public_. This means that the information about what’s going on the network needs to be readily available. Networks like Ethereum have this more or less built in and available as part of the software: each node has an API that will return any information you ask for; if you have a lot of requests, well, you just need more nodes. - -To be clear, that’s how Linea works too–it’s just that Ethereum is decentralized and open; anyone can run a node. Linea is still a testnet, and its nodes are only being run by teams at Consensys. Therefore, in order to provide for the massive interest that the network has generated, a lot of nodes have to be run. This allows dapps to ask for information about the state of the network without impeding the actual execution of transactions by overloading the client. +One of the main value propositions of a public blockchain network is that it be, +well, _public_. This means that the information about what’s going on the +network needs to be readily available. Networks like Ethereum have this more or +less built in and available as part of the software: each node has an API that +will return any information you ask for; if you have a lot of requests, well, +you just need more nodes. + +To be clear, that’s how Linea works too–it’s just that Ethereum is decentralized +and open; anyone can run a node. Linea is still a testnet, and its nodes are +only being run by teams at Consensys. Therefore, in order to provide for the +massive interest that the network has generated, a lot of nodes have to be run. +This allows dapps to ask for information about the state of the network without +impeding the actual execution of transactions by overloading the client. ### What does it do? -Receives and responds to requests from users and dapps according to the Ethereum JSON-RPC API standard. This includes providing information to MetaMask users about their accounts on Linea. +Receives and responds to requests from users and dapps according to the Ethereum +JSON-RPC API standard. This includes providing information to MetaMask users +about their accounts on Linea. ### How does it do it? -By leveraging the expertise and resources of Infura, Consensys, and the Ethereum ecosystem as a whole 😀 Infura is running a number of nodes to provide this service, in two main capacities: +By leveraging the expertise and resources of Infura, Consensys, and the Ethereum +ecosystem as a whole 😀 Infura is running a number of nodes to provide this +service, in two main capacities: #### Client-facing RPC-API nodes -- These nodes do the “traditional” work of EVM nodes: on the one hand, they are receiving updated network state information from the sequencer and state manager, and providing information about that state to users and dapps when they request it. On the other, they are receiving incoming transactions. -- All that traffic means that Infura is running them behind a load balancer, and bringing their expertise in scaling blockchain networks across the operation. Those transactions submitted by users are therefore balanced across the nodes, and are thereby routed into the memory pool, for subsequent ingestion and processing by the Coordinator and sequencer in linea-besu. +- These nodes do the “traditional” work of EVM nodes: on the one hand, they are + receiving updated network state information from the sequencer and state + manager, and providing information about that state to users and dapps when + they request it. On the other, they are receiving incoming transactions. +- All that traffic means that Infura is running them behind a load balancer, and + bringing their expertise in scaling blockchain networks across the operation. + Those transactions submitted by users are therefore balanced across the nodes, + and are thereby routed into the memory pool, for subsequent ingestion and + processing by the Coordinator and sequencer in linea-besu. #### Archive Nodes -- There are more and more dapps and research activities being performed not just on current transaction data, but historical data as well–whether from a day ago, last month, or three years ago (though not that long on Linea, yet!). -- This type of data request can be quite resource-intensive, and could put the live network nodes at risk of having their performance impacted, and thus threaten the overall health of the network. For this reason, Infura also has deployed archive nodes in a scalable architecture; these kinds of transactions aren’t being run _all_ the time, after all–but when they are, more nodes are spun up as needed to keep up with demand. +- There are more and more dapps and research activities being performed not just + on current transaction data, but historical data as well–whether from a day + ago, last month, or three years ago (though not that long on Linea, yet!). +- This type of data request can be quite resource-intensive, and could put the + live network nodes at risk of having their performance impacted, and thus + threaten the overall health of the network. For this reason, Infura also has + deployed archive nodes in a scalable architecture; these kinds of transactions + aren’t being run _all_ the time, after all–but when they are, more nodes are + spun up as needed to keep up with demand. diff --git a/docs/architecture/overview/transaction-lifecycle.mdx b/docs/architecture/overview/transaction-lifecycle.mdx index 5223467f0..18957f65c 100644 --- a/docs/architecture/overview/transaction-lifecycle.mdx +++ b/docs/architecture/overview/transaction-lifecycle.mdx @@ -1,8 +1,8 @@ --- title: Transaction lifecycle description: >- - An overview of what happens to transactions from the point of submission to finalization - + An overview of what happens to transactions from the point of submission to + finalization image: /img/socialCards/transaction-lifecycle.jpg --- @@ -11,8 +11,15 @@ image: /img/socialCards/transaction-lifecycle.jpg Finality has two definitions on Linea: -- Soft finality: The transaction is confirmed on Linea. This takes two seconds, i.e Linea's block time. See [step 3](#step-3-transaction-data-sent-to-the-state-manager). For simplicity, Linea is guaranteed to not reorg—remove competing versions of blockchain history in favor of a canonical one—when there are reorgs on L1. -- Hard finality: The proof submitted to L1 has been verified, and two epochs have elapsed. The typical time before hard finality is 8-32 hours, although the 8-hour minimum will be reduced to zero in a future release. See [step 6](#step-6-batch-finalization). +- Soft finality: The transaction is confirmed on Linea. This takes two seconds, + i.e Linea's block time. See + [step 3](#step-3-transaction-data-sent-to-the-state-manager). For simplicity, + Linea is guaranteed to not reorg—remove competing versions of blockchain + history in favor of a canonical one—when there are reorgs on L1. +- Hard finality: The proof submitted to L1 has been verified, and two epochs + have elapsed. The typical time before hard finality is 8-32 hours, although + the 8-hour minimum will be reduced to zero in a future release. See + [step 6](#step-6-batch-finalization). ::: @@ -20,61 +27,118 @@ Transactions on Linea proceed through the following steps: ## Step 1: Submission -This is where every transaction originates: at the wallet level, a user signs a transaction and broadcasts it to Linea. From here, transactions head straight to the **mempool**, similarly to Ethereum, where they become pending transactions. +This is where every transaction originates: at the wallet level, a user signs a +transaction and broadcasts it to Linea. From here, transactions head straight to +the **mempool**, similarly to Ethereum, where they become pending transactions. ## Step 2: Block building -The Linea [sequencer](../stack/sequencer/index.mdx) is responsible for ordering, building, and executing blocks. For each transaction added to the mempool, the sequencer checks its validity, rejecting transactions as necessary. Transaction validity conditions are specific to Linea, and differ slightly from those on other networks, including Ethereum. +The Linea [sequencer](../stack/sequencer/index.mdx) is responsible for ordering, +building, and executing blocks. For each transaction added to the mempool, the +sequencer checks its validity, rejecting transactions as necessary. Transaction +validity conditions are specific to Linea, and differ slightly from those on +other networks, including Ethereum. -The sequencer orders transactions according to the priority fee paid for each, a method known as a priority gas auction. So, having passed the above checks, valid transactions are placed into blocks in the correct sequence and executed. +The sequencer orders transactions according to the priority fee paid for each, a +method known as a priority gas auction. So, having passed the above checks, +valid transactions are placed into blocks in the correct sequence and executed. -At this point, the transaction's lifecycle is more or less complete — at least from a user perspective. The block containing the transaction has been added to the "head" of the Linea blockchain—the most recent block—and a transaction receipt is returned to the user's wallet as confirmation. +At this point, the transaction's lifecycle is more or less complete — at least +from a user perspective. The block containing the transaction has been added to +the "head" of the Linea blockchain—the most recent block—and a transaction +receipt is returned to the user's wallet as confirmation. -However, the transaction and its associated data will continue to be processed in order to generate ZK proofs. Let's press on. +However, the transaction and its associated data will continue to be processed +in order to generate ZK proofs. Let's press on. ## Step 3: Transaction data sent to the state manager -Data about the transaction and the state of the network at its time of execution are recorded in **traces**, an output of part of the sequencer called the [trace generator](../stack/sequencer/traces-generator.md). +Data about the transaction and the state of the network at its time of execution +are recorded in **traces**, an output of part of the sequencer called the +[trace generator](../stack/sequencer/traces-generator.md). -Traces are passed to the state manager block-by-block and then used to update the network state. Once state is up to date, you'll see the transaction reflected and confirmed in your wallet. +Traces are passed to the state manager block-by-block and then used to update +the network state. Once state is up to date, you'll see the transaction +reflected and confirmed in your wallet. -With the transaction executed and state updated, the transaction has reached **soft finality**: as far as the Linea chain is concerned—if considered in isolation—your transaction is complete. A L2 like Linea doesn't work in isolation, though, as we know; so there is more work to be done before true finality is reached. +With the transaction executed and state updated, the transaction has reached +**soft finality**: as far as the Linea chain is concerned—if considered in +isolation—your transaction is complete. A L2 like Linea doesn't work in +isolation, though, as we know; so there is more work to be done before true +finality is reached. ## Step 4: Conflation -The transaction's block will then be subject to [conflation](../stack/sequencer/conflation.mdx), which combines two or more blocks' transaction data into a single data set (batch) that forms part of the package of data passed on to Ethereum. Combining the transaction data of multiple blocks means that a single proof can be used to verify a large volume of transactions, minimizing the costs of submitting proofs to L1. +The transaction's block will then be subject to +[conflation](../stack/sequencer/conflation.mdx), which combines two or more +blocks' transaction data into a single data set (batch) that forms part of the +package of data passed on to Ethereum. Combining the transaction data of +multiple blocks means that a single proof can be used to verify a large volume +of transactions, minimizing the costs of submitting proofs to L1. -Occasionally, a batch may only consist of one block, with no conflation having taken place. This occurs when chain activity levels are particularly high, and the block size is larger than normal. +Occasionally, a batch may only consist of one block, with no conflation having +taken place. This occurs when chain activity levels are particularly high, and +the block size is larger than normal. -Amongst Ethereum's L2 networks, Linea is the only network that uses batch conflation. +Amongst Ethereum's L2 networks, Linea is the only network that uses batch +conflation. ## Step 5: Generating a ZK proof using transaction data -With the block that contains the transaction's trace data conflated into a batch with one or more others, the only remaining task on the checklist to achieve **_hard_ finality** is to use the transaction's data—as contained in its trace—to generate a proof. +With the block that contains the transaction's trace data conflated into a batch +with one or more others, the only remaining task on the checklist to achieve +**_hard_ finality** is to use the transaction's data—as contained in its +trace—to generate a proof. -When prompted by the [Coordinator](../stack/coordinator/index.mdx), Linea's [prover](../stack/trace-expansion-proving/index.mdx) will first **expand** the trace, preparing it for inclusion in the proof. Linea's prover employs a two-stage method for developing the proofs that eventually get passed to L1, first developing an **inner proof** and then an **outer proof**. +When prompted by the [Coordinator](../stack/coordinator/index.mdx), Linea's +[prover](../stack/trace-expansion-proving/index.mdx) will first **expand** the +trace, preparing it for inclusion in the proof. Linea's prover employs a +two-stage method for developing the proofs that eventually get passed to L1, +first developing an **inner proof** and then an **outer proof**. -The inner proof uses a combination of tools, including Arcane and Vortex, to recursively reduce the proof size. For a more in-depth look at Linea's inner proof system, see [this article](https://linea.mirror.xyz/B3b1lUK8--UKZ_Qehk7SfOyvdcGbcuoyvNsSukHgOY8). +The inner proof uses a combination of tools, including Arcane and Vortex, to +recursively reduce the proof size. For a more in-depth look at Linea's inner +proof system, see +[this article](https://linea.mirror.xyz/B3b1lUK8--UKZ_Qehk7SfOyvdcGbcuoyvNsSukHgOY8). -Next, the outer proof is generated using the Consensys-maintained library [`gnark`](https://docs.gnark.consensys.net/), compressing the proof size even further. The resulting proof is what's known as a zk-SNARK: the proofs that are eventually submitted to Ethereum. +Next, the outer proof is generated using the Consensys-maintained library +[`gnark`](https://docs.gnark.consensys.net/), compressing the proof size even +further. The resulting proof is what's known as a zk-SNARK: the proofs that are +eventually submitted to Ethereum. -Since the trace data of _every_ transaction in _every_ block feeds into producing the final proof, the single transaction we started with remains vital to Linea's function, well beyond the point at which it achieves soft finality in [step 3](#step-3-transaction-data-sent-to-the-state-manager). +Since the trace data of _every_ transaction in _every_ block feeds into +producing the final proof, the single transaction we started with remains vital +to Linea's function, well beyond the point at which it achieves soft finality in +[step 3](#step-3-transaction-data-sent-to-the-state-manager). ## Step 6: Batch finalization -The final step in the process is to finalize the batch by submitting it to Ethereum mainnet, proving its computational integrity. Since the batch of conflated blocks is comprised of transactions, our transaction is involved in this process as well. +The final step in the process is to finalize the batch by submitting it to +Ethereum mainnet, proving its computational integrity. Since the batch of +conflated blocks is comprised of transactions, our transaction is involved in +this process as well. Let's break down the two elements submitted to L1: -- The proof, as explained [above](#step-5-generating-a-zk-proof-using-transaction-data), and; -- Blob data, which contains L2 transaction and messaging data. Once shared to L1, blob data can be used to reconstruct Linea's state and verify the contents of the proof, before it disappears after 4,096 epochs (~18 days). The Linea rollup contract on L1 calls the Ethereum verifier contract using blob data, determining whether or not to accept the batch as valid. +- The proof, as explained + [above](#step-5-generating-a-zk-proof-using-transaction-data), and; +- Blob data, which contains L2 transaction and messaging data. Once shared to + L1, blob data can be used to reconstruct Linea's state and verify the contents + of the proof, before it disappears after 4,096 epochs (~18 days). The Linea + rollup contract on L1 calls the Ethereum verifier contract using blob data, + determining whether or not to accept the batch as valid. :::note[Calldata] -Up until Linea Alpha v3, L2 transaction data was transported to L1 via `calldata` embedded in transactions. Although effective, this method was costly, and has now been replaced by blob-carrying transactions made possible by EIP-4844, added in Ethereum's Dencun upgrade. +Up until Linea Alpha v3, L2 transaction data was transported to L1 via +`calldata` embedded in transactions. Although effective, this method was costly, +and has now been replaced by blob-carrying transactions made possible by +EIP-4844, added in Ethereum's Dencun upgrade. ::: -You can also view finalized batches on Lineascan, [here](https://lineascan.build/batches). +You can also view finalized batches on Lineascan, +[here](https://lineascan.build/batches). -Once the proof is verified and two epochs have passed, the transaction becomes immutable history, and reaches **hard finality**. Its lifecycle is complete. +Once the proof is verified and two epochs have passed, the transaction becomes +immutable history, and reaches **hard finality**. Its lifecycle is complete. diff --git a/docs/architecture/stack/bridges/canonical-token-bridge.mdx b/docs/architecture/stack/bridges/canonical-token-bridge.mdx index ba06c7d65..04c907062 100644 --- a/docs/architecture/stack/bridges/canonical-token-bridge.mdx +++ b/docs/architecture/stack/bridges/canonical-token-bridge.mdx @@ -18,15 +18,25 @@ import TabItem from "@theme/TabItem";
-The canonical token bridge is the pair of “lock & mint” contracts that allow bridging of any ERC-20 token. The bridge relies on the [message service](../canonical-msg-service/message-service.mdx) for cross-chain interactions. +The canonical token bridge is the pair of “lock & mint” contracts that allow +bridging of any ERC-20 token. The bridge relies on the +[message service](../canonical-msg-service/message-service.mdx) for cross-chain +interactions. -The Linea team operates a UI for the [official Linea bridge](https://bridge.linea.build/). +The Linea team operates a UI for the +[official Linea bridge](https://bridge.linea.build/). -The canonical token bridge is optimized for technical partners who are deploying on Linea. We recommend that everyday users of Linea seeking to bridge their personal tokens between networks leverage one of the many bridges deployed to the network. +The canonical token bridge is optimized for technical partners who are deploying +on Linea. We recommend that everyday users of Linea seeking to bridge their +personal tokens between networks leverage one of the many bridges deployed to +the network. -Linea seeks to foster a permissionless, resilient, decentralized environment — not to have our bridge be a centralized arbiter and point of failure. +Linea seeks to foster a permissionless, resilient, decentralized environment — +not to have our bridge be a centralized arbiter and point of failure. -To find out which bridges are currently operating on Linea, head to the [ecosystem portal](https://linea.build/apps) and click on the **Bridge** button to show all that are available. +To find out which bridges are currently operating on Linea, head to the +[ecosystem portal](https://linea.build/apps) and click on the **Bridge** button +to show all that are available. ## Contracts @@ -91,11 +101,13 @@ To find out which bridges are currently operating on Linea, head to the [ecosyst - This is done by calling `allowance()` on the TokenBridge. - Then, the user should call the `bridgeToken()` method. - **With Permit** - - User can call `bridgeTokenWithPermit()` to pass permit data in a single transaction + - User can call `bridgeTokenWithPermit()` to pass permit data in a single + transaction 2. Triggering the delivery -- See the [message service workflow](../canonical-msg-service/message-service.mdx#workflow). +- See the + [message service workflow](../canonical-msg-service/message-service.mdx#workflow). ## Interface TokenBridge.sol diff --git a/docs/architecture/stack/bridges/index.mdx b/docs/architecture/stack/bridges/index.mdx index 61b6d006b..0e0d82b15 100644 --- a/docs/architecture/stack/bridges/index.mdx +++ b/docs/architecture/stack/bridges/index.mdx @@ -7,6 +7,10 @@ image: /img/socialCards/bridges.jpg As such, there is a robust and growing set of bridges operating on Linea. -The Linea team operates the official Canonical Token Bridge, optimized for technical partners. Many of those partners are bridges themselves, and the Linea team encourage users to take advantage of these bridges, and not to rely on ours alone. +The Linea team operates the official Canonical Token Bridge, optimized for +technical partners. Many of those partners are bridges themselves, and the Linea +team encourage users to take advantage of these bridges, and not to rely on ours +alone. -More details on the Canonical Token Bridge and how it works can be found [here](./canonical-token-bridge.mdx). +More details on the Canonical Token Bridge and how it works can be found +[here](./canonical-token-bridge.mdx). diff --git a/docs/architecture/stack/canonical-msg-service/index.mdx b/docs/architecture/stack/canonical-msg-service/index.mdx index 894d67b1b..4625ea3c0 100644 --- a/docs/architecture/stack/canonical-msg-service/index.mdx +++ b/docs/architecture/stack/canonical-msg-service/index.mdx @@ -17,15 +17,30 @@ image: /img/socialCards/canonical-message-service-overview.jpg ### What is it? -The canonical message service is a combination of smart contracts and other protocols which work together to pass "arbitrary messages"--that is, user-specified data--between Linea and other networks. +The canonical message service is a combination of smart contracts and other +protocols which work together to pass "arbitrary messages"--that is, +user-specified data--between Linea and other networks. ### What does it do? -If you've ever used a bridge between two blockchains, you may be used to what feels like a fairly restrictive experience; you can only send certain tokens, for example. The canonical message service itself isn't like an end-user bridge interface. It's a system through which data and assets can be permissionlessly and reliably transferred from one blockchain to another. The Service, as a whole, receives requests to move something from one network to the other, and then carries that request out, delivering the message as submitted to an established smart contract on the destination network. - -One of the most important things that the Message Service transfers is information about the current state of the Ethereum network, from Ethereum to Linea, and in return, an updated Merkle tree and a zk-proof from Linea to Ethereum, every time Linea reports back about activity on the network. In other words, the canonical message service transmits the rollup data. - -However, the Service is not limited or restricted to use by Linea's core functionality. It is general-purpose, public infrastructure which can be used by developers, integrated into dapps, and triggered by end users. +If you've ever used a bridge between two blockchains, you may be used to what +feels like a fairly restrictive experience; you can only send certain tokens, +for example. The canonical message service itself isn't like an end-user bridge +interface. It's a system through which data and assets can be permissionlessly +and reliably transferred from one blockchain to another. The Service, as a +whole, receives requests to move something from one network to the other, and +then carries that request out, delivering the message as submitted to an +established smart contract on the destination network. + +One of the most important things that the Message Service transfers is +information about the current state of the Ethereum network, from Ethereum to +Linea, and in return, an updated Merkle tree and a zk-proof from Linea to +Ethereum, every time Linea reports back about activity on the network. In other +words, the canonical message service transmits the rollup data. + +However, the Service is not limited or restricted to use by Linea's core +functionality. It is general-purpose, public infrastructure which can be used by +developers, integrated into dapps, and triggered by end users.
@@ -38,15 +53,37 @@ However, the Service is not limited or restricted to use by Linea's core functio ### How does it do it? -The canonical message service consists of three main elements: two smart contracts, and the Postbots service in between. As you may have guessed already, the smart contracts are [on Linea and Ethereum](./message-service.mdx#message-service-contracts), and are almost exactly the same. They allow for ETH to be minted on the target network, for example, though they are not limited to that. - -A user initiates a network-to-network transfer by executing a call on one of the contract's methods--that is, invoking a function built into the smart contract. The user could do this on their own, if they have the knowledge of how to interact with a smart contract directly, or they could do so through a frontend. If properly formulated, the smart contract will accept the request from the user, and pass it off to the Postbots. - -The Postbots (sometimes referred to as postmen) are one part of Linea that are currently centralized, but will be decentralized. The Postbots are essentially actors that "listen" for calls being made to one of the contracts, either on Linea or Ethereum, and pass the information submitted to the other network. - -Once the information is delivered to the destination smart contract, the code contained in the request is executed. If the message being transferred carried orders to mint tokens, users can either choose to manually _pull_ the transferred assets out of the destination end of the bridge, or pay up-front and allow the assets to be _pushed_ directly to the destination address. - -There's an additional layer of logic, though, which serves to ensure that the message delivered to the L2 is valid. Essentially, a message is sent from Ethereum, relayed through the Message Service, and is delivered to the Linea smart contract. That smart contract checks the message received against the list of messages sent on the Ethereum side, verifies that it exists on the L1, and only then accepts it as a valid message: +The canonical message service consists of three main elements: two smart +contracts, and the Postbots service in between. As you may have guessed already, +the smart contracts are +[on Linea and Ethereum](./message-service.mdx#message-service-contracts), and +are almost exactly the same. They allow for ETH to be minted on the target +network, for example, though they are not limited to that. + +A user initiates a network-to-network transfer by executing a call on one of the +contract's methods--that is, invoking a function built into the smart contract. +The user could do this on their own, if they have the knowledge of how to +interact with a smart contract directly, or they could do so through a frontend. +If properly formulated, the smart contract will accept the request from the +user, and pass it off to the Postbots. + +The Postbots (sometimes referred to as postmen) are one part of Linea that are +currently centralized, but will be decentralized. The Postbots are essentially +actors that "listen" for calls being made to one of the contracts, either on +Linea or Ethereum, and pass the information submitted to the other network. + +Once the information is delivered to the destination smart contract, the code +contained in the request is executed. If the message being transferred carried +orders to mint tokens, users can either choose to manually _pull_ the +transferred assets out of the destination end of the bridge, or pay up-front and +allow the assets to be _pushed_ directly to the destination address. + +There's an additional layer of logic, though, which serves to ensure that the +message delivered to the L2 is valid. Essentially, a message is sent from +Ethereum, relayed through the Message Service, and is delivered to the Linea +smart contract. That smart contract checks the message received against the list +of messages sent on the Ethereum side, verifies that it exists on the L1, and +only then accepts it as a valid message:
@@ -57,7 +94,8 @@ There's an additional layer of logic, though, which serves to ensure that the me
-**For more technical details, including how to integrate with the Message Service, see our [Technical Reference](./message-service.mdx)**. +**For more technical details, including how to integrate with the Message +Service, see our [Technical Reference](./message-service.mdx)**. > ### OK, so we've transferred assets to Linea. What's going on up here? How do things work on Layer 2? diff --git a/docs/architecture/stack/canonical-msg-service/message-service.mdx b/docs/architecture/stack/canonical-msg-service/message-service.mdx index 742132253..3fb2e410e 100644 --- a/docs/architecture/stack/canonical-msg-service/message-service.mdx +++ b/docs/architecture/stack/canonical-msg-service/message-service.mdx @@ -12,9 +12,11 @@ import TabItem from "@theme/TabItem"; # Message service -The message service is responsible for cross-chain messages between Ethereum and Linea, which: +The message service is responsible for cross-chain messages between Ethereum and +Linea, which: -- Allows a contract on the source chain to safely interact with a contract on the target chain (e.g. L1TokenBridge triggering mint on the L2TokenBridge), +- Allows a contract on the source chain to safely interact with a contract on + the target chain (e.g. L1TokenBridge triggering mint on the L2TokenBridge), - Is responsible for bridging ETH (native currency on L1 and L2) - Supports: - **push**: auto-execution on target layer if a fee is paid @@ -73,25 +75,42 @@ The message service is responsible for cross-chain messages between Ethereum and ### Workflow -1. Dapp calls `sendMessage(...)` on the origin layer using the proxy contract at one of the testnet addresses above. +1. Dapp calls `sendMessage(...)` on the origin layer using the proxy contract at + one of the testnet addresses above. - Args: - `_to`: the destination address on the destination chain - `_fee`: the message service fee on the origin chain - - An optional field used to incentivize a Postman to perform `claimMessage(...)` automatically on the destination chain (not available when bridging from L2 to L1, or for non-ETH transfers) - - `_calldata`: a flexible field that is generally created using `abi.encode(...)` -1. Dapp uses the [Postman SDK](https://www.npmjs.com/package/@consensys/linea-sdk?activeTab=readme) to simplify the execution of messages on the destination layer by: + - An optional field used to incentivize a Postman to perform + `claimMessage(...)` automatically on the destination chain (not + available when bridging from L2 to L1, or for non-ETH transfers) + - `_calldata`: a flexible field that is generally created using + `abi.encode(...)` +1. Dapp uses the + [Postman SDK](https://www.npmjs.com/package/@consensys/linea-sdk?activeTab=readme) + to simplify the execution of messages on the destination layer by: - Triggering the delivery - - If messages don't get delivered by the postman, the message can be manually claimed by calling, with the parameters detailed in the [interface below](#interface-imessageservicesol), one of: + - If messages don't get delivered by the postman, the message can be + manually claimed by calling, with the parameters detailed in the + [interface below](#interface-imessageservicesol), one of: - L2: `claimMessage` - L1: `claimMessageWithProof` You can also use the SDK to claim messages. - Receiving the delivery in the dapp smart contract - - This triggers `claimMessage(...)` on the destination layer that will call `_to` with `_calldata` and a value equal to. + - This triggers `claimMessage(...)` on the destination layer that will call + `_to` with `_calldata` and a value equal to. - The dapp smart contract can inherit from `MessageServiceBase.sol` to: - - Verify that the call comes from the MessageService `onlyMessagingService` - - Verify that the sender on the origin chain comes from a trusted contract (usually the dapp sibling contract) using `onlyAuthorizedRemoteSender()` + - Verify that the call comes from the MessageService + `onlyMessagingService` + - Verify that the sender on the origin chain comes from a trusted + contract (usually the dapp sibling contract) using + `onlyAuthorizedRemoteSender()` -:::info[Proxy contract] A proxy contract is one that simply points towards the actual "implementation" contracts. This model is beneficial as it allows the implementation contracts to be upgraded independently of the proxy, allowing contract upgrades without having to start afresh and lose the proxy contract's history. When the implementation contracts are updated, the proxy contract is simply amended to point towards the new implementation contract addresses. ::: +:::info[Proxy contract] A proxy contract is one that simply points towards the actual +"implementation" contracts. This model is beneficial as it allows the implementation +contracts to be upgraded independently of the proxy, allowing contract upgrades without +having to start afresh and lose the proxy contract's history. When the implementation +contracts are updated, the proxy contract is simply amended to point towards the +new implementation contract addresses. ::: ## Interface IMessageService.sol diff --git a/docs/architecture/stack/coordinator/index.mdx b/docs/architecture/stack/coordinator/index.mdx index a34c9728c..1fb2574a9 100644 --- a/docs/architecture/stack/coordinator/index.mdx +++ b/docs/architecture/stack/coordinator/index.mdx @@ -8,12 +8,21 @@ image: /img/socialCards/coordinator.jpg ### What is it? -The Coordinator is Linea’s coordination module across a number of functions. It is also the channel through which information on the state of Ethereum comes into Linea, and through which information on the state of Linea returns to Ethereum. +The Coordinator is Linea’s coordination module across a number of functions. It +is also the channel through which information on the state of Ethereum comes +into Linea, and through which information on the state of Linea returns to +Ethereum. ### What does it do? -The Coordinator moves information internally, between different parts of Linea’s execution client, and externally, with other blockchains, Linea’s data availability stack, and the nodes syncing its own network state. In this way, **the Coordinator is Linea’s consensus client.** +The Coordinator moves information internally, between different parts of Linea’s +execution client, and externally, with other blockchains, Linea’s data +availability stack, and the nodes syncing its own network state. In this way, +**the Coordinator is Linea’s consensus client.** ### How does it do it? -It does these things through a highly modularized internal architecture. These various systems and requirements are broken out into their own environments, each one receiving input from the Coordinator, and returning the corresponding output back to it. +It does these things through a highly modularized internal architecture. These +various systems and requirements are broken out into their own environments, +each one receiving input from the Coordinator, and returning the corresponding +output back to it. diff --git a/docs/architecture/stack/evm-state-manager/index.mdx b/docs/architecture/stack/evm-state-manager/index.mdx index 811d3abb6..5e4639d03 100644 --- a/docs/architecture/stack/evm-state-manager/index.mdx +++ b/docs/architecture/stack/evm-state-manager/index.mdx @@ -5,140 +5,256 @@ sidebar_position: 4 image: /img/socialCards/evm-state-manager.jpg --- -The state manager is the part of the execution client responsible for updating the state of the network globally, and the state of every account individually. The state manager also audits the "read" access made in the EVM, meaning it monitors, verifies, and logs all operations where the EVM needs to read data from the blockchain state. +The state manager is the part of the execution client responsible for updating +the state of the network globally, and the state of every account individually. +The state manager also audits the "read" access made in the EVM, meaning it +monitors, verifies, and logs all operations where the EVM needs to read data +from the blockchain state. :::info -"State" refers to the data stored on the blockchain at any given point in time. To update state is to update the record of the contents of every account whose contents have changed. +"State" refers to the data stored on the blockchain at any given point in time. +To update state is to update the record of the contents of every account whose +contents have changed. ::: -The main task of the state manager is to receive blocks that have been executed by the [sequencer](../sequencer/index.mdx) and use the trace data from their execution to update the state of the network. Linea uses two data structure types to manage state: +The main task of the state manager is to receive blocks that have been executed +by the [sequencer](../sequencer/index.mdx) and use the trace data from their +execution to update the state of the network. Linea uses two data structure +types to manage state: -1. A Merkle-Patricia Trie to record the world state, maintain consensus, and process blocks. This mirrors how consensus and state are [managed on Ethereum Mainnet](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/). -2. A variant of regular Merkle trees called a sparse Merkle tree (SMT), which is used to more efficiently track, manage, and update storage slots representing accounts. +1. A Merkle-Patricia Trie to record the world state, maintain consensus, and + process blocks. This mirrors how consensus and state are + [managed on Ethereum Mainnet](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/). +2. A variant of regular Merkle trees called a sparse Merkle tree (SMT), which is + used to more efficiently track, manage, and update storage slots representing + accounts. -It then passes this updated network state information to the [prover](../trace-expansion-proving/index.mdx) in the form of Merkle proofs for submission to Ethereum Mainnet (L1). +It then passes this updated network state information to the +[prover](../trace-expansion-proving/index.mdx) in the form of Merkle proofs for +submission to Ethereum Mainnet (L1). -Below, we'll explain the element of Linea's state management in greater detail, focussing on the SMT configuration that sets Linea apart. +Below, we'll explain the element of Linea's state management in greater detail, +focussing on the SMT configuration that sets Linea apart. ## Merkle trees -The Merkle tree and its variations are commonly used across EVM chains to store and retrieve data about the state of every account on the blockchain. +The Merkle tree and its variations are commonly used across EVM chains to store +and retrieve data about the state of every account on the blockchain. -A Merkle tree is comprised of 'nodes' that branch off from each other. At the base is the 'root', or state root, from which branches stem, and leaves stem from the branches. +A Merkle tree is comprised of 'nodes' that branch off from each other. At the +base is the 'root', or state root, from which branches stem, and leaves stem +from the branches.
- ```mermaid - flowchart TD - A[root] --> B[node] & C[node] - B --> D[node] & E[node] - C --> F[node] & G[node] - ``` + ```mermaid flowchart TD A[root] --> B[node] & C[node] B --> D[node] & + E[node] C --> F[node] & G[node] ```
-Each node, regardless of type, is represented by a cryptographic hash which encodes data about its properties — for example, the contents of your account. Each hash encodes the hashes of its child nodes. Taken to its full extent, this cascading system means the root encodes data of the state of every single account on the blockchain. +Each node, regardless of type, is represented by a cryptographic hash which +encodes data about its properties — for example, the contents of your account. +Each hash encodes the hashes of its child nodes. Taken to its full extent, this +cascading system means the root encodes data of the state of every single +account on the blockchain. -Cryptographic hashes are deterministic, which means you can reverse the hash function to get the data which it encoded. If you have the hash of the root—the only node without a parent—you can theoretically derive from it the data of any node in the entire tree. +Cryptographic hashes are deterministic, which means you can reverse the hash +function to get the data which it encoded. If you have the hash of the root—the +only node without a parent—you can theoretically derive from it the data of any +node in the entire tree. -As a layer 2 (L2) network, Linea is in the business of making transacting faster and more efficient. Linea implements a sparse Merkle tree to track account state and generate and store proofs, and unlock greater efficiency when compared to standard Merkle trees, which require recomputation for every block, leading to excessive computational demands. +As a layer 2 (L2) network, Linea is in the business of making transacting faster +and more efficient. Linea implements a sparse Merkle tree to track account state +and generate and store proofs, and unlock greater efficiency when compared to +standard Merkle trees, which require recomputation for every block, leading to +excessive computational demands. ### Sparse Merkle trees -Linea's state management uses sparse Merkle trees to minimize computation and contribute to the blockchain's efficiency. +Linea's state management uses sparse Merkle trees to minimize computation and +contribute to the blockchain's efficiency. -A sparse Merkle tree is a variation of a standard Merkle tree where not all leaf nodes are filled with data; instead, data is only stored in nodes where it's needed. It is a complete tree of fixed depth, meaning that all branches of the tree have the same length—i.e. the same number of leaves. +A sparse Merkle tree is a variation of a standard Merkle tree where not all leaf +nodes are filled with data; instead, data is only stored in nodes where it's +needed. It is a complete tree of fixed depth, meaning that all branches of the +tree have the same length—i.e. the same number of leaves. -At initialization—the beginning of the chain's history—all leaf nodes are set to a default value, which is typically a hash of a specific value, such as zero. Because all leaf nodes have the same hash value, the parent nodes and higher-level nodes also have the same hash value. A node whose hash is the default value for its level is therefore considered to represent an _empty_ subtree. +At initialization—the beginning of the chain's history—all leaf nodes are set to +a default value, which is typically a hash of a specific value, such as zero. +Because all leaf nodes have the same hash value, the parent nodes and +higher-level nodes also have the same hash value. A node whose hash is the +default value for its level is therefore considered to represent an _empty_ +subtree.
- ```mermaid - flowchart TD - A[root] --> B["`**node A**`" null] & C["`**node B**`" contains data] - B --> D["`**node C**`": null] & E["`**node D:**`" null] - C --> F["`**node E**`": data] & G["`**node F**`": data] - ``` + ```mermaid flowchart TD A[root] --> B["`**node A**`" null] & C["`**node + B**`" contains data] B --> D["`**node C**`": null] & E["`**node D:**`" null] + C --> F["`**node E**`": data] & G["`**node F**`": data] ```
-In the example above, the children of node A (leaves) contain null values, which means node A does too. Node B, meanwhile, reflects that its children also contain values. +In the example above, the children of node A (leaves) contain null values, which +means node A does too. Node B, meanwhile, reflects that its children also +contain values. -With this construction, we do not need to keep track of every individual node's hash. Instead, we can assume hashes that reflect the default value are empty, and the subtree or node that lies further down the chain of nodes can be disregarded; we only need to pay attention to the ones that correspond to _non-empty_ subtrees. +With this construction, we do not need to keep track of every individual node's +hash. Instead, we can assume hashes that reflect the default value are empty, +and the subtree or node that lies further down the chain of nodes can be +disregarded; we only need to pay attention to the ones that correspond to +_non-empty_ subtrees. ## Cryptographic accumulator -In this context, we can consider Linea's sparse Merkle tree as a type of "cryptographic accumulator". A cryptographic accumulator is a type of cryptographic primitive encoding a collection of items into very short strings and allowing read/write operations to be proven. Merkle trees and sparse Merkle trees are elementary examples of accumulators but there are others with more powerful capabilities. - -Linea's state manager uses an extended version of a sparse Merkle tree that enables it to prove all CRUD (create, read, update, delete) operations for a key-addressed database. As an outline, the construction uses a sparse Merkle tree to store the nodes of a sorted doubly-linked list that encodes all the non-zero items of the state. - -Linea's state manager uses the accumulator to track the account trie of Linea but also the storage of every contract separately. - -The leaves of the tree have the following structure: `prev || next || hKey || hVal`. - -`hKey` and `hVal` are the hashes of the key and the value of the stored state entry, respectively. `prev` and `next` are pointers storing the position of the leaves whose `hKeys` are immediately lower and higher, respectively, following lexicographic order. The first two leaves of the SMT are called the head and the tail, and are special in that they do not encode a stored tuple. The head is the lowest possible `hKey`, while the tail is the highest possible `hKey`. They are therefore situated at the beginning and the end of the linked list, respectively. Starting from the head, we can access the SMT leaf stored at `head.next` to get the lowest "actually stored" item. Further incrementing the `next` value will give us the second-lowest stored item and so on. Repeating the process walks us through the entire set of stored items before we end up at the tail node, marking the final step. - -Leaves can also be referred to as storage slots, in that they contain data about the contents of the account in question. +In this context, we can consider Linea's sparse Merkle tree as a type of +"cryptographic accumulator". A cryptographic accumulator is a type of +cryptographic primitive encoding a collection of items into very short strings +and allowing read/write operations to be proven. Merkle trees and sparse Merkle +trees are elementary examples of accumulators but there are others with more +powerful capabilities. + +Linea's state manager uses an extended version of a sparse Merkle tree that +enables it to prove all CRUD (create, read, update, delete) operations for a +key-addressed database. As an outline, the construction uses a sparse Merkle +tree to store the nodes of a sorted doubly-linked list that encodes all the +non-zero items of the state. + +Linea's state manager uses the accumulator to track the account trie of Linea +but also the storage of every contract separately. + +The leaves of the tree have the following structure: +`prev || next || hKey || hVal`. + +`hKey` and `hVal` are the hashes of the key and the value of the stored state +entry, respectively. `prev` and `next` are pointers storing the position of the +leaves whose `hKeys` are immediately lower and higher, respectively, following +lexicographic order. The first two leaves of the SMT are called the head and the +tail, and are special in that they do not encode a stored tuple. The head is the +lowest possible `hKey`, while the tail is the highest possible `hKey`. They are +therefore situated at the beginning and the end of the linked list, +respectively. Starting from the head, we can access the SMT leaf stored at +`head.next` to get the lowest "actually stored" item. Further incrementing the +`next` value will give us the second-lowest stored item and so on. Repeating the +process walks us through the entire set of stored items before we end up at the +tail node, marking the final step. + +Leaves can also be referred to as storage slots, in that they contain data about +the contents of the account in question. ### Tracking empty leaves -All leaves in the tree are populated with default/zero values at initialization. Since a deterministic hashing function will ensure that these leaves are always represented by the same hash, empty leaves can be easily recognized by the accumulator. - -However, in order for the state manager to update a storage slot with data about a Linea account's contents, it must know which empty leaf to overwrite, and exactly where these empty leaves are. A further consideration is that we require the index of any 'new' leaf—an empty leaf being updated so that it stores data—to be overwritten in a deterministic way. This requirement means that anyone can theoretically reconstruct the tree simply by looking at transaction history. - -To ensure consistency in the leaves' position, the state manager only ever inserts 'new' leaves to the left of the previous leaf in the tree. If this wasn't the case, and the state manager was able to insert any node in any position, it would be impossible to reconstitute the tree in the exact same configuration, severely impacting the ability of L1 to verify the Merkle proof provided. +All leaves in the tree are populated with default/zero values at initialization. +Since a deterministic hashing function will ensure that these leaves are always +represented by the same hash, empty leaves can be easily recognized by the +accumulator. + +However, in order for the state manager to update a storage slot with data about +a Linea account's contents, it must know which empty leaf to overwrite, and +exactly where these empty leaves are. A further consideration is that we require +the index of any 'new' leaf—an empty leaf being updated so that it stores +data—to be overwritten in a deterministic way. This requirement means that +anyone can theoretically reconstruct the tree simply by looking at transaction +history. + +To ensure consistency in the leaves' position, the state manager only ever +inserts 'new' leaves to the left of the previous leaf in the tree. If this +wasn't the case, and the state manager was able to insert any node in any +position, it would be impossible to reconstitute the tree in the exact same +configuration, severely impacting the ability of L1 to verify the Merkle proof +provided. ## Applying the accumulator -The Ethereum Virtual Machine (EVM) uses a variant of a Merkle tree known as a [Merkle-Patricia Trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) to track: +The Ethereum Virtual Machine (EVM) uses a variant of a Merkle tree known as a +[Merkle-Patricia Trie](https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) +to track: - World state, which keeps track of accounts, and; -- Account storage state (or simply 'storage'), which keeps track of the contents of each account. +- Account storage state (or simply 'storage'), which keeps track of the contents + of each account. -On Linea, we adapt this structure. The Merkle-Patricia Trie is still used for world state, but the custom cryptographic accumulator described above is used for account storage state. +On Linea, we adapt this structure. The Merkle-Patricia Trie is still used for +world state, but the custom cryptographic accumulator described above is used +for account storage state. The accumulator can perform the following operations: -- **Insertion**: adding a new storage slot to the tree, triggered by storing a non-zero value in a previously zero-valued slot. -- **Update**: changing the value of an existing storage slot in the tree, triggered by storing a new non-zero value in a previously non-zero slot. -- **Deletion**: removing a storage slot from the tree, triggered by storing the zero value in a previously non-zero slot. -- **Read zero**: proving non-membership, triggered when a storage slot has been accessed, but not updated, and its value is zero. -- **Read non-zero**: proving membership, triggered when a storage slot has been accessed, but not updated and its value is non-zero. +- **Insertion**: adding a new storage slot to the tree, triggered by storing a + non-zero value in a previously zero-valued slot. +- **Update**: changing the value of an existing storage slot in the tree, + triggered by storing a new non-zero value in a previously non-zero slot. +- **Deletion**: removing a storage slot from the tree, triggered by storing the + zero value in a previously non-zero slot. +- **Read zero**: proving non-membership, triggered when a storage slot has been + accessed, but not updated, and its value is zero. +- **Read non-zero**: proving membership, triggered when a storage slot has been + accessed, but not updated and its value is non-zero. -These operations are applied to two trees; [world state](#world-state) and [account storage state](#account-storage-state). +These operations are applied to two trees; [world state](#world-state) and +[account storage state](#account-storage-state). ### World state -The world state tree maps all accounts that exist on the blockchain—contracts and externally-owned accounts (EOAs)—and points towards the account storage state for each. While on Ethereum Mainnet, this data is stored in a standard trie, Linea uses the accumulator to map accounts as key:value pairs. Otherwise, the implementation is similar to the EVM. +The world state tree maps all accounts that exist on the blockchain—contracts +and externally-owned accounts (EOAs)—and points towards the account storage +state for each. While on Ethereum Mainnet, this data is stored in a standard +trie, Linea uses the accumulator to map accounts as key:value pairs. Otherwise, +the implementation is similar to the EVM. Their structure is as follows: - `HKey`: Hash(`address`) -- `Val`: Hash(`nonce`, `balance`, `storageRoot`, `codeHash`, `keccakCodeHash`, `CodeSize`) - -Critically, every piece of data fed into the `Val` (value) hash function must have a finite field interpretation. The data must be formatted this way to enable the Linea prover to correctly access the world state when verifying proofs. Each element is formatted as follows (all elements require one field, other than `keccakCodeHash`): - -- `nonce`: The nonce is written in big-endian form into a `byte32`. For instance if the nonce is 10, then the nonce should be encoded as `0x000000000000000000000000000000000000000000000000000000000000000a`. +- `Val`: Hash(`nonce`, `balance`, `storageRoot`, `codeHash`, `keccakCodeHash`, + `CodeSize`) + +Critically, every piece of data fed into the `Val` (value) hash function must +have a finite field interpretation. The data must be formatted this way to +enable the Linea prover to correctly access the world state when verifying +proofs. Each element is formatted as follows (all elements require one field, +other than `keccakCodeHash`): + +- `nonce`: The nonce is written in big-endian form into a `byte32`. For instance + if the nonce is 10, then the nonce should be encoded as + `0x000000000000000000000000000000000000000000000000000000000000000a`. - `balance`: Formatted the same as the nonce; big-endian `byte32`. -- `storageRoot`: The storage root should _not_ be the Keccak of the Patricia trie root as in the EVM, but the “custom Merkle tree” root of the account storage state that we describe in the [following section](#account-storage-state). -- `codeHash`: The code hash should not be the Keccak of the code, it should instead be the one obtained as described in the following section. -- 2 field elements for `keccakCodeHash`: One for the 128 most significant bits and one for the 128 least significant bits. The Keccak code hash corresponds exactly to the Keccak hash as specified by the EVM (i.e. the output of [EXTCODEHASH](https://eips.ethereum.org/EIPS/eip-1052). We keep the Keccak and the “custom” version for practical reasons. -- `codeSize`: The code size should be the same value as that returned by the CODESIZE/EXTCODESIZE opcodes. +- `storageRoot`: The storage root should _not_ be the Keccak of the Patricia + trie root as in the EVM, but the “custom Merkle tree” root of the account + storage state that we describe in the + [following section](#account-storage-state). +- `codeHash`: The code hash should not be the Keccak of the code, it should + instead be the one obtained as described in the following section. +- 2 field elements for `keccakCodeHash`: One for the 128 most significant bits + and one for the 128 least significant bits. The Keccak code hash corresponds + exactly to the Keccak hash as specified by the EVM (i.e. the output of + [EXTCODEHASH](https://eips.ethereum.org/EIPS/eip-1052). We keep the Keccak and + the “custom” version for practical reasons. +- `codeSize`: The code size should be the same value as that returned by the + CODESIZE/EXTCODESIZE opcodes. ### Account storage state -Also referred to as the storage trie, the account storage state is the database the state manager accesses to retrieve data about the contents of accounts. Account storage is mainly relevant for contract accounts; for EOAs, the data about assets and transactions is stored in the [world state](#world-state) `Val`, and the `codeHash` and its variants are empty. +Also referred to as the storage trie, the account storage state is the database +the state manager accesses to retrieve data about the contents of accounts. +Account storage is mainly relevant for contract accounts; for EOAs, the data +about assets and transactions is stored in the [world state](#world-state) +`Val`, and the `codeHash` and its variants are empty. -Since the main function of account storage is to record contracts in such a way that they can be easily retrieved and processed, it must efficiently encode the contract. It does this using the following format: +Since the main function of account storage is to record contracts in such a way +that they can be easily retrieved and processed, it must efficiently encode the +contract. It does this using the following format: - `HKey`: Hash(`StorageKeyMSB`, `StorageKeyLSB`) - `Val`: Hash(`StorageValueMSB`, `StorageValueLSB`) -In both cases, the `MSB` refers to the first 16 bytes of a 'word', and `LSB` the last 16. 'Word' in this context refers to the natural unit of data used by the EVM, which is 256-bit (32 byte) chunks. +In both cases, the `MSB` refers to the first 16 bytes of a 'word', and `LSB` the +last 16. 'Word' in this context refers to the natural unit of data used by the +EVM, which is 256-bit (32 byte) chunks. -For example, if the data regarding a contract's code was encoded in a `byte32`, the standard data type for words on the EVM and equivalents like Linea, it might look like this: +For example, if the data regarding a contract's code was encoded in a `byte32`, +the standard data type for words on the EVM and equivalents like Linea, it might +look like this: ``` [a0, a1, a2, …., a15, b0, b1, …, b15] @@ -156,7 +272,14 @@ The `MSB` takes the first 16 bytes, and the `LSB` the second 16 bytes. The accumulator, built using a sparse Merkle tree, is simultaneously: - A data structure on which we can perform operations; -- A dataset that we can summarize using a short string at any time (i.e. the root hash); -- A tool that can be used by the Linea protocol to verify that a given operation triggered a transition from hash A to hash B. - -Once the accumulator has processed the trace information it receives about a new block and updated state accordingly, it can pass a new state root hash to the prover, via the coordinator. The state root hash can then be used by the prover as a "witness": a verifiable method of proving that the transactions in each block have taken place, without having to divulge the nature of those transactions. +- A dataset that we can summarize using a short string at any time (i.e. the + root hash); +- A tool that can be used by the Linea protocol to verify that a given operation + triggered a transition from hash A to hash B. + +Once the accumulator has processed the trace information it receives about a new +block and updated state accordingly, it can pass a new state root hash to the +prover, via the coordinator. The state root hash can then be used by the prover +as a "witness": a verifiable method of proving that the transactions in each +block have taken place, without having to divulge the nature of those +transactions. diff --git a/docs/architecture/stack/index.mdx b/docs/architecture/stack/index.mdx index cec5d6419..9d731e199 100644 --- a/docs/architecture/stack/index.mdx +++ b/docs/architecture/stack/index.mdx @@ -7,33 +7,47 @@ import DocCardList from "@theme/DocCardList"; Linea is open source, meaning you can inspect the code yourself. -Each repository that hosts the Linea software is listed below, together with a description of its purpose, with [further resources](#architecture-documentation) provided. +Each repository that hosts the Linea software is listed below, together with a +description of its purpose, with +[further resources](#architecture-documentation) provided. ## Linea repositories ### [`linea-monorepo`](https://github.com/Consensys/linea-monorepo) -The principal Linea repository. This mainly includes the smart contracts covering Linea's core functions, the prover in charge of generating ZK proofs, the coordinator responsible for multiple orchestrations, and the postman for executing bridge messages. +The principal Linea repository. This mainly includes the smart contracts +covering Linea's core functions, the prover in charge of generating ZK proofs, +the coordinator responsible for multiple orchestrations, and the postman for +executing bridge messages. ### [`linea-specification`](https://github.com/Consensys/linea-specification) Specification of the constraint system underlying Linea's zkEVM. -Constraints are mathematical equations and a constraint system is a collection of such equations. Linea's constraint system aims to capture the logic of valid EVM executions. +Constraints are mathematical equations and a constraint system is a collection +of such equations. Linea's constraint system aims to capture the logic of valid +EVM executions. The constraints specified here are implemented in the `linea-constraints` repo. ### [`linea-constraints`](https://github.com/Consensys/linea-constraints) -Implementation of the constraint system specified in the `linea-specification` repo. +Implementation of the constraint system specified in the `linea-specification` +repo. -Linea's constraint system applies to so-called "traces", which are large matrices of fixed width (i.e. fixed number of columns or "registries") and variable depth (correlating with the complexity of the EVM execution). The production of such traces is the job of the `linea-tracer` repo. +Linea's constraint system applies to so-called "traces", which are large +matrices of fixed width (i.e. fixed number of columns or "registries") and +variable depth (correlating with the complexity of the EVM execution). The +production of such traces is the job of the `linea-tracer` repo. Constraints and traces are two of the inputs to the prover. ### [`linea-tracer`](https://github.com/Consensys/linea-tracer) -Tracing refers to the process of extracting data from the execution of an EVM client in order to construct large matrices known as execution traces. Execution traces are subject to the constraint system specified in the `linea-specification` repo and implemented in the `linea-constraints` repo. +Tracing refers to the process of extracting data from the execution of an EVM +client in order to construct large matrices known as execution traces. Execution +traces are subject to the constraint system specified in the +`linea-specification` repo and implemented in the `linea-constraints` repo. The repository contains the elements of Linea responsible for this process. @@ -41,19 +55,24 @@ The repository contains the elements of Linea responsible for this process. The Linea implementation of Besu, an Ethereum client, extended with plugins. -As Linea is EVM-equivalent, it is compatible with standard Ethereum clients without plugins; for example, you can also [run a Linea node using Geth](../../developers/guides/run-a-node/index.mdx). +As Linea is EVM-equivalent, it is compatible with standard Ethereum clients +without plugins; for example, you can also +[run a Linea node using Geth](../../developers/guides/run-a-node/index.mdx). ### [`linea-sequencer`](https://github.com/Consensys/linea-sequencer) -The implementation of the sequencer, the component of Linea responsible for ordering and building blocks, as well as executing them. +The implementation of the sequencer, the component of Linea responsible for +ordering and building blocks, as well as executing them. ### [`gnark`](https://github.com/Consensys/gnark) -Linea's zk-SNARK with a high-level API to design circuits and efficient cryptographic primitives, +Linea's zk-SNARK with a high-level API to design circuits and efficient +cryptographic primitives, ### [`shomei`](https://github.com/Consensys/shomei) -A plugin that extends Besu functionality by maintaining and updating Linea's state. +A plugin that extends Besu functionality by maintaining and updating Linea's +state. ## Architecture documentation diff --git a/docs/architecture/stack/sequencer/conflation.mdx b/docs/architecture/stack/sequencer/conflation.mdx index fb8f1779c..870ac4db2 100644 --- a/docs/architecture/stack/sequencer/conflation.mdx +++ b/docs/architecture/stack/sequencer/conflation.mdx @@ -14,20 +14,34 @@ import ConflationGraphic from "/img/architecture/stack/sequencer/conflation/Line ### What is it? -Conflation is the process of combining two or more blocks’ worth of transactions into one data set. It can then be used to produce a ‘before and after’ map of the network state (a Merkle tree, in technical terms) as well as a zero-knowledge proof, which is published to Ethereum. +Conflation is the process of combining two or more blocks’ worth of transactions +into one data set. It can then be used to produce a ‘before and after’ map of +the network state (a Merkle tree, in technical terms) as well as a +zero-knowledge proof, which is published to Ethereum. ### What does it do? -Conflation is not normally seen in mainnet Ethereum environments, where transaction data must be published in discrete blocks, one by one in order, before the next block can be published. In a zkEVM environment, the ‘source of truth’ from Ethereum’s perspective is the data submitted to it: the ZK proof, the list of transactions proved by it, and the Merkle tree. That means that it’s not a question of “how many transactions fit in a block”, but “how many transactions fit in a proof”. By conflating multiple blocks into one, Linea's proving system becomes much more efficient. +Conflation is not normally seen in mainnet Ethereum environments, where +transaction data must be published in discrete blocks, one by one in order, +before the next block can be published. In a zkEVM environment, the ‘source of +truth’ from Ethereum’s perspective is the data submitted to it: the ZK proof, +the list of transactions proved by it, and the Merkle tree. That means that it’s +not a question of “how many transactions fit in a block”, but “how many +transactions fit in a proof”. By conflating multiple blocks into one, Linea's +proving system becomes much more efficient. ### How does it do it? -Conflation occurs within the execution client, but through a process of communication with the Coordinator: +Conflation occurs within the execution client, but through a process of +communication with the Coordinator: - The conflator waits for a traces file to appear - Marks that blocks' worth of traces as "merged" - Waits a certain amount of time in case more block data comes in - - If it does, it checks to see if the number of lines in the block and the length of the data would exceed the limit + - If it does, it checks to see if the number of lines in the block and the + length of the data would exceed the limit - If it's within the limit, the conflator marks it as merged as well -The conflator continues this cycle until the time limit is reached, at which point it passes the conflated trace data back to the Coordinator, for subsequent Merkle tree and proof generation. +The conflator continues this cycle until the time limit is reached, at which +point it passes the conflated trace data back to the Coordinator, for subsequent +Merkle tree and proof generation. diff --git a/docs/architecture/stack/sequencer/index.mdx b/docs/architecture/stack/sequencer/index.mdx index 13c1b4d0e..cdd8760e4 100644 --- a/docs/architecture/stack/sequencer/index.mdx +++ b/docs/architecture/stack/sequencer/index.mdx @@ -8,14 +8,33 @@ image: /img/socialCards/sequencer.jpg ### What is it? -The sequencer is the heart of Linea’s execution client, responsible for **ordering, building, and executing blocks** in a way that allows the subsequent zero-knowledge proof to be made. +The sequencer is the heart of Linea’s execution client, responsible for +**ordering, building, and executing blocks** in a way that allows the subsequent +zero-knowledge proof to be made. ### What does it do? -The sequencer does a number of things: - Determines the order–the _sequence_–in which transactions will be executed - Builds blocks from them - Executes those blocks - Prepares certain data relating to the _traces_ of that execution for the zero-knowledge prover. +The sequencer does a number of things: - Determines the order–the _sequence_–in +which transactions will be executed - Builds blocks from them - Executes those +blocks - Prepares certain data relating to the _traces_ of that execution for +the zero-knowledge prover. ### How does it do it? -Currently, Linea’s execution client is zkGeth, a version of geth that has been modified to work with zk-proving technology. However, Linea is building **linea-besu**: leveraging the full power of the Consensys stack by using the same Besu client software that is used to execute blocks on Ethereum coupled with a plugin system. Linea-besu will help the Linea stack with compatibility, reliability, ease of maintenance, and of course will help the Linea team ensure compatibility, stability, ease of maintenance in their client, and of course helps them get their network launched much faster than building from scratch. - -Linea's sequencer takes transactions from the Linea memory pool, and builds them into blocks, just like Besu does on mainnet Ethereum. However, on Linea, it also does a bit of extra work, and communication, with the Coordinator, to ensure that blocks are made in such a way that they can be proven by the zero-knowledge prover, and that they are as compact as possible–doubly important in a situation where all data has to be written in tiny, costly pieces on Ethereum Mainnet. This is done specifically by subsystems within the Sequencer: the Traces Generator and Conflator. +Currently, Linea’s execution client is zkGeth, a version of geth that has been +modified to work with zk-proving technology. However, Linea is building +**linea-besu**: leveraging the full power of the Consensys stack by using the +same Besu client software that is used to execute blocks on Ethereum coupled +with a plugin system. Linea-besu will help the Linea stack with compatibility, +reliability, ease of maintenance, and of course will help the Linea team ensure +compatibility, stability, ease of maintenance in their client, and of course +helps them get their network launched much faster than building from scratch. + +Linea's sequencer takes transactions from the Linea memory pool, and builds them +into blocks, just like Besu does on mainnet Ethereum. However, on Linea, it also +does a bit of extra work, and communication, with the Coordinator, to ensure +that blocks are made in such a way that they can be proven by the zero-knowledge +prover, and that they are as compact as possible–doubly important in a situation +where all data has to be written in tiny, costly pieces on Ethereum Mainnet. +This is done specifically by subsystems within the Sequencer: the Traces +Generator and Conflator. diff --git a/docs/architecture/stack/sequencer/traces-generator.md b/docs/architecture/stack/sequencer/traces-generator.md index 5b0ba828e..85b775b0f 100644 --- a/docs/architecture/stack/sequencer/traces-generator.md +++ b/docs/architecture/stack/sequencer/traces-generator.md @@ -8,14 +8,24 @@ image: /img/socialCards/traces-generation.jpg #### What is it? -The part of Linea’s sequencer responsible for generating the data used by the prover to create ZK proofs, and for making them as compact as possible. +The part of Linea’s sequencer responsible for generating the data used by the +prover to create ZK proofs, and for making them as compact as possible. #### What does it do? -The traces generator executes blocks that have been built by the sequencer, and preserves data relating to the traces of each transaction. +The traces generator executes blocks that have been built by the sequencer, and +preserves data relating to the traces of each transaction. #### How does it do it? -Once the sequencer has built its blocks, they are executed; and in the process, the EVM produces data known as _traces_. These traces specify the state of the network, and the state of the accounts involved in the transaction, at each granular step of each transaction’s execution. This is the Infinite Improbability Drive at the heart of Linea and its zero-knowledge technology: these traces are the very data that the prover will use to produce a proof. That proof allows Ethereum to know that everything that occurs on Linea truly did occur–without actually knowing any of it. - -Linea's sequencer puts these traces through an additional process: **trace conflation.** +Once the sequencer has built its blocks, they are executed; and in the process, +the EVM produces data known as _traces_. These traces specify the state of the +network, and the state of the accounts involved in the transaction, at each +granular step of each transaction’s execution. This is the Infinite +Improbability Drive at the heart of Linea and its zero-knowledge technology: +these traces are the very data that the prover will use to produce a proof. That +proof allows Ethereum to know that everything that occurs on Linea truly did +occur–without actually knowing any of it. + +Linea's sequencer puts these traces through an additional process: **trace +conflation.** diff --git a/docs/architecture/stack/trace-expansion-proving/index.mdx b/docs/architecture/stack/trace-expansion-proving/index.mdx index 0d23b8ba7..66724918b 100644 --- a/docs/architecture/stack/trace-expansion-proving/index.mdx +++ b/docs/architecture/stack/trace-expansion-proving/index.mdx @@ -8,12 +8,17 @@ image: /img/socialCards/trace-expansion-and-proving.jpg ### What is it? -The module responsible for generating the final set of data for a zero-knowledge proof, and producing that proof. +The module responsible for generating the final set of data for a zero-knowledge +proof, and producing that proof. ### What does it do? -It receives several sets of information from the Coordinator and linea-besu, and produces a succinct, non-interactive argument of knowledge, or **zkSNARK**. +It receives several sets of information from the Coordinator and linea-besu, and +produces a succinct, non-interactive argument of knowledge, or **zkSNARK**. ### How does it do it? -There are multiple operations involved; the first part of this module is Corset. Corset takes in conflated trace data from the Coordinator, and prepares it for the second part, gnark. gnark takes in that prepared, or "expanded", trace data, and uses it to produce a proof of the type that can be submitted to Ethereum. +There are multiple operations involved; the first part of this module is Corset. +Corset takes in conflated trace data from the Coordinator, and prepares it for +the second part, gnark. gnark takes in that prepared, or "expanded", trace data, +and uses it to produce a proof of the type that can be submitted to Ethereum. diff --git a/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx b/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx index 1a3dbd163..49bb1eb18 100644 --- a/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx +++ b/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx @@ -5,23 +5,41 @@ sidebar_position: 3 image: /img/socialCards/module-limits.jpg --- -Linea uses module limits to keep proof complexity manageable and ensure that the prover can generate proofs efficiently without overwhelming the infrastructure. +Linea uses module limits to keep proof complexity manageable and ensure that the +prover can generate proofs efficiently without overwhelming the infrastructure. -Linea's arithmetization specification is divided into modules, and each module represents a collection of EVM or Linea zkEVM operations (opcodes). Modules can: +Linea's arithmetization specification is divided into modules, and each module +represents a collection of EVM or Linea zkEVM operations (opcodes). Modules can: - Process transaction data. - Manage zkEVM memory. - Coordinate interactions between modules. -Each module has a specific limit on the number of lines of data its operations can generate, regardless of its purpose. You can view these limits in the [Linea source code](https://github.com/Consensys/linea-monorepo/blob/main/config/common/traces-limits-besu-v2.toml). Additional lines are generated each time unique instructions are provided to a module's operations, but repeat calls with the same arguments do not generate new lines. +Each module has a specific limit on the number of lines of data its operations +can generate, regardless of its purpose. You can view these limits in the +[Linea source code](https://github.com/Consensys/linea-monorepo/blob/main/config/common/traces-limits-besu-v2.toml). +Additional lines are generated each time unique instructions are provided to a +module's operations, but repeat calls with the same arguments do not generate +new lines. -High-complexity transactions that repeatedly use a large volume of operations may generate too many lines of data and exceed a module's limit. Transactions that reach this point are rejected by the [sequencer](../sequencer/index.mdx) to ensure that the trace data passed to the prover is of a manageable scope, and that a proof can be generated. +High-complexity transactions that repeatedly use a large volume of operations +may generate too many lines of data and exceed a module's limit. Transactions +that reach this point are rejected by the [sequencer](../sequencer/index.mdx) to +ensure that the trace data passed to the prover is of a manageable scope, and +that a proof can be generated. -Transactions rejected for exceeding module limits can be identified through the following methods, which return an error: +Transactions rejected for exceeding module limits can be identified through the +following methods, which return an error: - [`linea_estimateGas`](../../../developers/reference/api/linea-estimategas.mdx) - [`eth_sendRawTransaction`](../../../developers/reference/api/eth-sendrawtransaction.mdx) -Use [`linea_getTransactionExclusionStatusV1`](../../../developers/reference/api/linea-gettransactionexclusionstatusv1.mdx) to get the rejection status of a transaction hash, if it was sent and didn't get rejected directly, nor included in a block. +Use +[`linea_getTransactionExclusionStatusV1`](../../../developers/reference/api/linea-gettransactionexclusionstatusv1.mdx) +to get the rejection status of a transaction hash, if it was sent and didn't get +rejected directly, nor included in a block. -This API method can be used to query the reason for transaction rejection in edge cases where `linea_estimateGas` or `eth_sendRawTransaction` did not return an error. It's intended to be used only in cases the transaction execution differs between an RPC node and the sequencer. +This API method can be used to query the reason for transaction rejection in +edge cases where `linea_estimateGas` or `eth_sendRawTransaction` did not return +an error. It's intended to be used only in cases the transaction execution +differs between an RPC node and the sequencer. diff --git a/docs/architecture/stack/trace-expansion-proving/proving.md b/docs/architecture/stack/trace-expansion-proving/proving.md index b2c1627f8..8bc3e1430 100644 --- a/docs/architecture/stack/trace-expansion-proving/proving.md +++ b/docs/architecture/stack/trace-expansion-proving/proving.md @@ -8,12 +8,30 @@ image: /img/socialCards/proving-circuit-execution-and-runtime.jpg #### What is it? -In Linea, gnark is the final part of the prover. It is also standalone software which can be used in other projects to create cryptographic circuits. +In Linea, gnark is the final part of the prover. It is also standalone software +which can be used in other projects to create cryptographic circuits. #### What does it do? -Similarly to Corset, gnark has two functions: it prepares a set of “circuits”, another way of referring to a constraint system, of the kind that will create a zk-SNARK proof that can be verified in an L1 Ethereum environment. It also, in fact, _makes_ those proofs. +Similarly to Corset, gnark has two functions: it prepares a set of “circuits”, +another way of referring to a constraint system, of the kind that will create a +zk-SNARK proof that can be verified in an L1 Ethereum environment. It also, in +fact, _makes_ those proofs. #### How does it do it? -gnark’s codebase is divided into two separate APIs: a [frontend](https://pkg.go.dev/github.com/consensys/gnark/frontend) and a [backend](https://pkg.go.dev/github.com/consensys/gnark/backend). The methods in gnark’s frontend API allow developers to do the first part, creating cryptographic circuits. In other words, gnark translates Corset’s precompiled Go constraint system into a final set of “circuits”, or constraints, which will ultimately produce the SNARK proof that is submitted to the L1 network. The methods in the backend API are used at runtime to consume data through the proving system created previously in the frontend, producing as a result a proof. That is, gnark accepts the “expanded” trace data for each block or set of blocks from Corset, and processes it through its prepared circuits. At this point, we have what we’ve been out here amongst the stars searching for: a fresh set of transactions, executed in an EVM environment, provably real and correct, ready to dispatch to the L1. So, what does the prover do with it? Send it back to the Coordinator, that’s what. +gnark’s codebase is divided into two separate APIs: a +[frontend](https://pkg.go.dev/github.com/consensys/gnark/frontend) and a +[backend](https://pkg.go.dev/github.com/consensys/gnark/backend). The methods in +gnark’s frontend API allow developers to do the first part, creating +cryptographic circuits. In other words, gnark translates Corset’s precompiled Go +constraint system into a final set of “circuits”, or constraints, which will +ultimately produce the SNARK proof that is submitted to the L1 network. The +methods in the backend API are used at runtime to consume data through the +proving system created previously in the frontend, producing as a result a +proof. That is, gnark accepts the “expanded” trace data for each block or set of +blocks from Corset, and processes it through its prepared circuits. At this +point, we have what we’ve been out here amongst the stars searching for: a fresh +set of transactions, executed in an EVM environment, provably real and correct, +ready to dispatch to the L1. So, what does the prover do with it? Send it back +to the Coordinator, that’s what. diff --git a/docs/architecture/stack/trace-expansion-proving/trace-expansion.md b/docs/architecture/stack/trace-expansion-proving/trace-expansion.md index bce00e774..33e1756c1 100644 --- a/docs/architecture/stack/trace-expansion-proving/trace-expansion.md +++ b/docs/architecture/stack/trace-expansion-proving/trace-expansion.md @@ -8,7 +8,8 @@ image: /img/socialCards/proving-circuit-building.jpg #### What is it? -Corset is the first of two parts of the component of Linea’s architecture generally referred to as “the prover”. +Corset is the first of two parts of the component of Linea’s architecture +generally referred to as “the prover”. #### What does it do? @@ -18,10 +19,37 @@ Corset takes the traces, expands them, and prepares them for the prover. Corset performs its duties through two different paths: -First, every time Linea’s overall codebase and implementation of the zkEVM is updated, Corset creates a _constraint system_. This is a term you may hear often in zk-land. A constraint, in this context, refers to a kind of test you can run on something, to make sure it’s the way it’s supposed to be. An entire constraint system allows you to define a whole set of rules, or checks, which must be fulfilled. Since the goal of Zero Knowledge technology is to _prove_ something, you can probably see where this is going: a constraint system allows you to, using math, prove that underlying conditions are a certain way, without revealing those underlying conditions. - -Corset–which is written in Rust–uses a Domain-Specific Language, or DSL, written in Lisp, to create a constraint system specifically designed for Linea’s zkEVM environment. This system, once built, is compiled into the Go programming language. This constraint system, which is optimized for Linea’s architecture, becomes the input for gnark, which converts it to the type of constraint system that would produce **a zk-SNARK**–the kind you would, you know, send to a smart contract on Ethereum mainnet to prove that everything on your L2 is the way you say it is. - -**Second** (it’s OK to take a deep breath here), Corset helps process data with _every block that’s submitted_. The trace data, generated in every block, will have to go into gnark’s implementation of Corset’s compiled constraint system, in order to produce the final proof. And because of the way Corset, and the Lisp part of it specifically, processes trace data, Corset can prepare that trace data for gnark. This process is called “trace expansion”, because it refers to taking matrices of data, and deriving certain sets of them from others–so that they can be more accurately processed by gnark. - -In these two modes, then–once at build time, when Corset makes the constraint system and compiles it to Go, and at the runtime of every block, when Corset takes traces and expands them into a format that will work well with gnark’s implementation of Corset’s original constraint system, Corset is the bespoke data preparation system for gnark, which is the final executor of Linea’s proving system. +First, every time Linea’s overall codebase and implementation of the zkEVM is +updated, Corset creates a _constraint system_. This is a term you may hear often +in zk-land. A constraint, in this context, refers to a kind of test you can run +on something, to make sure it’s the way it’s supposed to be. An entire +constraint system allows you to define a whole set of rules, or checks, which +must be fulfilled. Since the goal of Zero Knowledge technology is to _prove_ +something, you can probably see where this is going: a constraint system allows +you to, using math, prove that underlying conditions are a certain way, without +revealing those underlying conditions. + +Corset–which is written in Rust–uses a Domain-Specific Language, or DSL, written +in Lisp, to create a constraint system specifically designed for Linea’s zkEVM +environment. This system, once built, is compiled into the Go programming +language. This constraint system, which is optimized for Linea’s architecture, +becomes the input for gnark, which converts it to the type of constraint system +that would produce **a zk-SNARK**–the kind you would, you know, send to a smart +contract on Ethereum mainnet to prove that everything on your L2 is the way you +say it is. + +**Second** (it’s OK to take a deep breath here), Corset helps process data with +_every block that’s submitted_. The trace data, generated in every block, will +have to go into gnark’s implementation of Corset’s compiled constraint system, +in order to produce the final proof. And because of the way Corset, and the Lisp +part of it specifically, processes trace data, Corset can prepare that trace +data for gnark. This process is called “trace expansion”, because it refers to +taking matrices of data, and deriving certain sets of them from others–so that +they can be more accurately processed by gnark. + +In these two modes, then–once at build time, when Corset makes the constraint +system and compiles it to Go, and at the runtime of every block, when Corset +takes traces and expands them into a format that will work well with gnark’s +implementation of Corset’s original constraint system, Corset is the bespoke +data preparation system for gnark, which is the final executor of Linea’s +proving system. diff --git a/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx b/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx index 493a4e4f9..eeaef6840 100644 --- a/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx +++ b/docs/developers/guides/bridge/how-to-bridge-erc20-tokens.mdx @@ -7,17 +7,29 @@ image: /img/socialCards/bridge-erc-20-tokens-between-ethereum-and-linea.jpg :::note -We recommend that only tech operators that are providing liquidity use Linea's native bridge to transfer ERC-20 tokens. +We recommend that only tech operators that are providing liquidity use Linea's +native bridge to transfer ERC-20 tokens. -For everyday bridge transfers, we recommend you use the [MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which aggregates bridging options across Linea and shows you the best rates. Alternatively, use one of the [third-party bridges](https://bridge.linea.build/) available to users. +For everyday bridge transfers, we recommend you use the +[MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which +aggregates bridging options across Linea and shows you the best rates. +Alternatively, use one of the [third-party bridges](https://bridge.linea.build/) +available to users. ::: -ERC-20 tokens can only be bridged using manual claiming, which requires you to cover the ETH fee on the destination layer. Ensure your wallet is properly funded before beginning this process. +ERC-20 tokens can only be bridged using manual claiming, which requires you to +cover the ETH fee on the destination layer. Ensure your wallet is properly +funded before beginning this process. -:::note If you're bridging a token to Linea that hasn't been deployed before and you see a difference in the transferred token amount, this could be a ["token bridge decimal mismatch"](#token-bridge-decimal-mismatch), which affects how the value is displayed. The chance of encountering this is quite low, but still good to know about. ::: +:::note If you're bridging a token to Linea that hasn't been deployed before and +you see a difference in the transferred token amount, this could be a +["token bridge decimal mismatch"](#token-bridge-decimal-mismatch), which affects +how the value is displayed. The chance of encountering this is quite low, but +still good to know about. ::: -The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our bridge and appropriately fund your wallet. +The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our +bridge and appropriately fund your wallet. 1. Go to the [Linea bridge](https://bridge.linea.build/). @@ -32,7 +44,8 @@ The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our b
-3. Enter the token selection menu by clicking on the current token symbol (ETH in this case). +3. Enter the token selection menu by clicking on the current token symbol (ETH + in this case).
@@ -43,7 +56,9 @@ The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our b
-4. Select one of the available tokens in the list. If the token is not in the list, use the search bar to find it by contract address, symbol, or its full name. Click on your preferred token to select it. +4. Select one of the available tokens in the list. If the token is not in the + list, use the search bar to find it by contract address, symbol, or its full + name. Click on your preferred token to select it.
@@ -54,7 +69,8 @@ The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our b
-5. You now can bridge this token, and it will be saved in your token list for future bridging. +5. You now can bridge this token, and it will be saved in your token list for + future bridging.
@@ -67,8 +83,19 @@ The guide on [how to bridge ETH](./how-to-bridge-eth.mdx) shows how to use our b ## Token bridge decimal mismatch -When an ERC-20 token is bridged from one chain to the other and the token has not been deployed on the destination chain, the Token Bridge Smart Contract will attempt to determine the “decimals” of the ERC-20 token. If the decimals cannot be determined by reading the origin ERC-20 token contract (e.g. a token contract doesn't adhere to the [ERC-20 standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), it will default to 18 decimals. - -This can result in the token quantities displaying incorrectly on the destination chain. For example, if a token has 16 decimals on L1 but doesn't specify the decimals in token contract, it will default to 18 decimals on Linea. Bridging 1 token from L1 will show up as 0.01 on L2. When you bridge back the 0.01 to L1, it'll become 1 token again. - -Decimal mismatches are rare, since most tokens with specified decimals usually adhere to the ERC-20 standards. +When an ERC-20 token is bridged from one chain to the other and the token has +not been deployed on the destination chain, the Token Bridge Smart Contract will +attempt to determine the “decimals” of the ERC-20 token. If the decimals cannot +be determined by reading the origin ERC-20 token contract (e.g. a token contract +doesn't adhere to the +[ERC-20 standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)), +it will default to 18 decimals. + +This can result in the token quantities displaying incorrectly on the +destination chain. For example, if a token has 16 decimals on L1 but doesn't +specify the decimals in token contract, it will default to 18 decimals on Linea. +Bridging 1 token from L1 will show up as 0.01 on L2. When you bridge back the +0.01 to L1, it'll become 1 token again. + +Decimal mismatches are rare, since most tokens with specified decimals usually +adhere to the ERC-20 standards. diff --git a/docs/developers/guides/bridge/how-to-bridge-eth.mdx b/docs/developers/guides/bridge/how-to-bridge-eth.mdx index 96ca81d22..d89913217 100644 --- a/docs/developers/guides/bridge/how-to-bridge-eth.mdx +++ b/docs/developers/guides/bridge/how-to-bridge-eth.mdx @@ -7,29 +7,47 @@ image: /img/socialCards/bridge-eth-between-ethereum-and-linea.jpg :::note -We recommend that only tech operators that are providing liquidity use Linea's native bridge to transfer ETH. +We recommend that only tech operators that are providing liquidity use Linea's +native bridge to transfer ETH. -For everyday bridge transfers, we recommend you use the [MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which aggregates bridging options across Linea and shows you the best rates. Alternatively, use one of the [third-party bridges](https://bridge.linea.build/) available to users. ::: +For everyday bridge transfers, we recommend you use the +[MetaMask Portfolio bridge](https://portfolio.metamask.io/bridge), which +aggregates bridging options across Linea and shows you the best rates. +Alternatively, use one of the [third-party bridges](https://bridge.linea.build/) +available to users. ::: -The native Linea bridge allows you to claim your bridged funds manually, or automatically: +The native Linea bridge allows you to claim your bridged funds manually, or +automatically: -- **Manual claiming** Requires two transactions to be approved. One on the source layer to initiate the bridging process and the other on the target layer by the recipient to receive the funds, which we call "claiming". This means, to receive the funds, the recipient has to pay a fee on the target layer. +- **Manual claiming** Requires two transactions to be approved. One on the + source layer to initiate the bridging process and the other on the target + layer by the recipient to receive the funds, which we call "claiming". This + means, to receive the funds, the recipient has to pay a fee on the target + layer. -- **Automatic claiming** Requires one transaction to be approved on the source layer. The recipient will automatically receive their funds because a "postman" will handle the claiming process for them. +- **Automatic claiming** Requires one transaction to be approved on the source + layer. The recipient will automatically receive their funds because a + "postman" will handle the claiming process for them. ## Transfer ETH using Linea's native bridge -This is a step by step guide to bridging ETH between Ethereum Mainnet (L1) to Linea (L2). +This is a step by step guide to bridging ETH between Ethereum Mainnet (L1) to +Linea (L2). -If you would like to bridge between Linea and other networks, we recommend you use one of the third-party bridges available via [MetaMask Portfolio](https://portfolio.metamask.io/bridge). +If you would like to bridge between Linea and other networks, we recommend you +use one of the third-party bridges available via +[MetaMask Portfolio](https://portfolio.metamask.io/bridge). ## Bridge ETH from Ethereum (L1) to Linea (L2) :::caution -Please use the automatic claiming option the first time you bridge ETH from L1 to L2. Manual claiming requires you to have L2 ETH available to pay for the fees. +Please use the automatic claiming option the first time you bridge ETH from L1 +to L2. Manual claiming requires you to have L2 ETH available to pay for the +fees. -If you don't have enough L2 ETH to cover the fees, your bridged funds will be stuck on the bridge until you can cover the fees. +If you don't have enough L2 ETH to cover the fees, your bridged funds will be +stuck on the bridge until you can cover the fees. ::: @@ -48,7 +66,8 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-3. Verify that the bridge is set to Ethereum → Linea Mainnet and that automatic claiming is enabled. +3. Verify that the bridge is set to Ethereum → Linea Mainnet and that automatic + claiming is enabled.
@@ -59,7 +78,8 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-4. Enter the amount of ETH you want to bridge over to Linea Mainnet, and click the “Bridge” button. +4. Enter the amount of ETH you want to bridge over to Linea Mainnet, and click + the “Bridge” button.
@@ -81,7 +101,9 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-6. After confirming the transaction, it should take around 20 minutes for the transaction to reach Linea Mainnet. You can see your pending transaction under the "Transactions" tab. +6. After confirming the transaction, it should take around 20 minutes for the + transaction to reach Linea Mainnet. You can see your pending transaction + under the "Transactions" tab.
@@ -92,7 +114,8 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-7. When your transaction is complete, it should say "Complete" and your ETH should be on Linea Mainnet. +7. When your transaction is complete, it should say "Complete" and your ETH + should be on Linea Mainnet.
@@ -103,7 +126,11 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-8. You can see your Linea account balance in MetaMask once you switch to the Linea network. You can also check it on [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). Just replace the account address in the URL with your account address and it should reflect your account's balance. +8. You can see your Linea account balance in MetaMask once you switch to the + Linea network. You can also check it on + [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). + Just replace the account address in the URL with your account address and it + should reflect your account's balance. ### Manual claiming @@ -120,7 +147,8 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-3. Verify that the bridge is set to Ethereum → Linea Mainnet, and that manual claiming is enabled. +3. Verify that the bridge is set to Ethereum → Linea Mainnet, and that manual + claiming is enabled.
@@ -131,7 +159,8 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-4. Enter the amount of ETH you want to bridge over to Linea Mainnet, and click the "Bridge" button. +4. Enter the amount of ETH you want to bridge over to Linea Mainnet, and click + the "Bridge" button.
@@ -153,7 +182,9 @@ If you don't have enough L2 ETH to cover the fees, your bridged funds will be st
-6. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll see your transaction labelled "Pending" until it is ready to claim. When it is ready, it will change to "Ready to claim". +6. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll + see your transaction labelled "Pending" until it is ready to claim. When it + is ready, it will change to "Ready to claim".
@@ -175,7 +206,8 @@ To claim, click on the transaction to open its details, then click "Claim".
-7. MetaMask will prompt you to switch networks and confirm the transaction from the previous step. +7. MetaMask will prompt you to switch networks and confirm the transaction from + the previous step.
@@ -186,7 +218,8 @@ To claim, click on the transaction to open its details, then click "Claim".
-8. Under the "Transactions" tab, your transaction should now be marked as "Complete" and your ETH should be on Linea Mainnet. +8. Under the "Transactions" tab, your transaction should now be marked as + "Complete" and your ETH should be on Linea Mainnet.
@@ -197,13 +230,18 @@ To claim, click on the transaction to open its details, then click "Claim".
-9. You can see your Linea account balance in MetaMask once you switch to the Linea network. You can also check it on [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). Just replace the account address in the URL with your account address and it should reflect your account's balance. +9. You can see your Linea account balance in MetaMask once you switch to the + Linea network. You can also check it on + [Lineascan](https://lineascan.build/address/0x331FB12C080F5b34F0E8812D44114D17398A016d). + Just replace the account address in the URL with your account address and it + should reflect your account's balance. ## Bridge ETH from Linea Mainnet (L2) to Ethereum Mainnet (L1) :::note -Automatic claiming is only available for bridging ETH from L1 to L2. You will not be able to select this option for L2 to L1 bridging. +Automatic claiming is only available for bridging ETH from L1 to L2. You will +not be able to select this option for L2 to L1 bridging. ::: @@ -220,7 +258,8 @@ Automatic claiming is only available for bridging ETH from L1 to L2. You will no
-3. Verify that the bridge is set to Linea Mainnet -> Ethereum. Manual claiming is the only available option for L2 to L1 bridging. +3. Verify that the bridge is set to Linea Mainnet -> Ethereum. Manual claiming + is the only available option for L2 to L1 bridging.
@@ -231,7 +270,8 @@ Automatic claiming is only available for bridging ETH from L1 to L2. You will no
-4. Enter the amount of ETH you want to bridge over to Ethereum Mainnet, and select the "Bridge" button. +4. Enter the amount of ETH you want to bridge over to Ethereum Mainnet, and + select the "Bridge" button.
@@ -253,7 +293,9 @@ Automatic claiming is only available for bridging ETH from L1 to L2. You will no
-6. The pending transaction will show up in the “Recent transactions” section of the bridge. It takes at least 8 hours for the transaction to go through from L2 to L1. +6. The pending transaction will show up in the “Recent transactions” section of + the bridge. It takes at least 8 hours for the transaction to go through from + L2 to L1.
@@ -264,7 +306,10 @@ Automatic claiming is only available for bridging ETH from L1 to L2. You will no
-7. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll see your transaction labelled "Pending" until it is ready to claim. When it is ready, it will change to "Ready to claim". To claim, click on the transaction to open its details, then click "Claim". +7. Once confirmed, head to the "Transactions" tab in the sidebar. Here you'll + see your transaction labelled "Pending" until it is ready to claim. When it + is ready, it will change to "Ready to claim". To claim, click on the + transaction to open its details, then click "Claim".
@@ -275,7 +320,8 @@ Automatic claiming is only available for bridging ETH from L1 to L2. You will no
-8. MetaMask will ask you to switch networks and to confirm the transaction from the previous step. +8. MetaMask will ask you to switch networks and to confirm the transaction from + the previous step.
@@ -286,4 +332,5 @@ Automatic claiming is only available for bridging ETH from L1 to L2. You will no
-9. You're done! You can check your Ethereum account balance in MetaMask, or on a block explorer such as [Etherscan](https://etherscan.io/). +9. You're done! You can check your Ethereum account balance in MetaMask, or on a + block explorer such as [Etherscan](https://etherscan.io/). diff --git a/docs/developers/guides/bridge/index.mdx b/docs/developers/guides/bridge/index.mdx index 8949bbf4e..aa0409ea6 100644 --- a/docs/developers/guides/bridge/index.mdx +++ b/docs/developers/guides/bridge/index.mdx @@ -6,13 +6,23 @@ image: /img/socialCards/bridge-your-tokens.jpg import DocCardList from "@theme/DocCardList"; -There are multiple options to bridge tokens (ETH or ERC-20) when you need to provide liquidity. Linea's default canonical token bridge allows you to bridge ETH or ERC-20 tokens using a UI. +There are multiple options to bridge tokens (ETH or ERC-20) when you need to +provide liquidity. Linea's default canonical token bridge allows you to bridge +ETH or ERC-20 tokens using a UI. -The default canonical token bridge is suited for protocols that need their tokens on L2 for DeFi and other uses without any special requirement for custom features (Vanilla ERC20). For protocols that require custom features or want to implement complex cross-chain logic, consider a custom implementation or building a dedicated token bridge. +The default canonical token bridge is suited for protocols that need their +tokens on L2 for DeFi and other uses without any special requirement for custom +features (Vanilla ERC20). For protocols that require custom features or want to +implement complex cross-chain logic, consider a custom implementation or +building a dedicated token bridge. -:::note We recommend that tech operators that want to provide liquidity use the [**Native Bridge for Tech Operators**](https://bridge.linea.build/) which provides the interface to the [canonical token bridge](../../../architecture/stack/bridges/index.mdx). ::: +:::note We recommend that tech operators that want to provide liquidity use the +[**Native Bridge for Tech Operators**](https://bridge.linea.build/) which +provides the interface to the +[canonical token bridge](../../../architecture/stack/bridges/index.mdx). ::: -Select one of the following cards for instructions to bridge using the default canonical token bridge. +Select one of the following cards for instructions to bridge using the default +canonical token bridge. @@ -20,38 +30,58 @@ Select one of the following cards for instructions to bridge using the default c ### Use the canonical token bridge with a custom `BridgedToken` implementation -This is suited for protocols that want to implement special features for the bridged ERC20 on L2. **This is only possible if the token has not yet been bridged from L1 to L2 in order to avoid unexpected changes for end-users.** +This is suited for protocols that want to implement special features for the +bridged ERC20 on L2. **This is only possible if the token has not yet been +bridged from L1 to L2 in order to avoid unexpected changes for end-users.** -Protocols that want to use a custom BridgedToken will be able to incorporate arbitrary logic on the L2 ERC20, while still relying on the Token Bridge lock and mint logic and cross-chain communication. **For this to work, protocols need to keep compatibility with the Token Bridge by enabling it to call the ERC20 mint and burn functions.** +Protocols that want to use a custom BridgedToken will be able to incorporate +arbitrary logic on the L2 ERC20, while still relying on the Token Bridge lock +and mint logic and cross-chain communication. **For this to work, protocols need +to keep compatibility with the Token Bridge by enabling it to call the ERC20 +mint and burn functions.** -If you are interested in this option, please contact the Linea team to get started. The process is as follows: +If you are interested in this option, please contact the Linea team to get +started. The process is as follows: -- The token issuer deploys a custom BridgedToken which should enable the Token Bridge to call mint and burn functions. -- Linea team will configure the bridge so that it will use your custom contract to mint and burn tokens on L2. +- The token issuer deploys a custom BridgedToken which should enable the Token + Bridge to call mint and burn functions. +- Linea team will configure the bridge so that it will use your custom contract + to mint and burn tokens on L2. :::note -If you are not yet ready with your own implementation, you can deploy the standard BridgedToken implementation behind a dedicated upgradable proxy that you will be able to upgrade later +If you are not yet ready with your own implementation, you can deploy the +standard BridgedToken implementation behind a dedicated upgradable proxy that +you will be able to upgrade later ::: ### Build a dedicated token bridge -This is intended for partners who need full control over the bridge and want to implement complex cross-chain logic. +This is intended for partners who need full control over the bridge and want to +implement complex cross-chain logic. -The partner will be in charge of building, auditing and operating their own token bridge. +The partner will be in charge of building, auditing and operating their own +token bridge. -If you are interested by this option, please get in touch with us so that we can: +If you are interested by this option, please get in touch with us so that we +can: -- Block your L1 token from being bridged on L1 in order to avoid having several copies on Linea +- Block your L1 token from being bridged on L1 in order to avoid having several + copies on Linea - Provide guidance if you want to rely on our cross-chain messaging system ## What are the execution fees? -There are two types of execution fees that can be applied when you are bridging your tokens, the postman fee and the anti-DDOS fee. +There are two types of execution fees that can be applied when you are bridging +your tokens, the postman fee and the anti-DDOS fee. -The postman fee is only applied during the automatic claiming process and is calculated by the following formula: +The postman fee is only applied during the automatic claiming process and is +calculated by the following formula: -`Postman Fee = target layer gas price * (gas estimated + gas limit surplus) * margin` where target layer gas price is `eth_gasPrice` on the target layer, `gas estimated = 100,000`, `gas limit surplus = 6000`, and `margin = 2`. +`Postman Fee = target layer gas price * (gas estimated + gas limit surplus) * margin` +where target layer gas price is `eth_gasPrice` on the target layer, +`gas estimated = 100,000`, `gas limit surplus = 6000`, and `margin = 2`. -The anti-DDOS fee is only applied when bridging from L2 to L1 and is set to `0.001 Eth` +The anti-DDOS fee is only applied when bridging from L2 to L1 and is set to +`0.001 Eth` diff --git a/docs/developers/guides/community/index.mdx b/docs/developers/guides/community/index.mdx index a21217edc..1e0782888 100644 --- a/docs/developers/guides/community/index.mdx +++ b/docs/developers/guides/community/index.mdx @@ -8,6 +8,8 @@ import DocCardList from "@theme/DocCardList"; Building on Linea is more than just deploying a smart contract! -Here you can find a list of tutorials and educational resources created by our community to help guide you through Solidity, web3 fundamentals, and full blown dapp tutorials. +Here you can find a list of tutorials and educational resources created by our +community to help guide you through Solidity, web3 fundamentals, and full blown +dapp tutorials. diff --git a/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx b/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx index 3ea9dd65b..3ea232dd1 100644 --- a/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx +++ b/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx @@ -4,9 +4,14 @@ image: /img/socialCards/create-a-dynamic-nft.jpg description: Create NFTs that evolve based on user actions. --- -Data on Irys is permanent and immutable, but you can use [Irys's mutability features](https://docs.irys.xyz/build/d/features/mutability) to simulate mutability and create dynamic NFTs that evolve based on onchain or offchain actions. +Data on Irys is permanent and immutable, but you can use +[Irys's mutability features](https://docs.irys.xyz/build/d/features/mutability) +to simulate mutability and create dynamic NFTs that evolve based on onchain or +offchain actions. -A mutable-style URL is a single, static URL that is linked to a series of transactions. You can add a new transaction to the series at any time, and the URL will always resolve to the most recent transaction. +A mutable-style URL is a single, static URL that is linked to a series of +transactions. You can add a new transaction to the series at any time, and the +URL will always resolve to the most recent transaction.
@@ -17,7 +22,9 @@ A mutable-style URL is a single, static URL that is linked to a series of transa
-In this guide, you will create a dynamic NFT using Irys's mutability features. Dynamic NFTs are NFTs whose metadata evolves over time. They are commonly used in: +In this guide, you will create a dynamic NFT using Irys's mutability features. +Dynamic NFTs are NFTs whose metadata evolves over time. They are commonly used +in: - Gaming projects where in-game assets evolve as players progress. - Loyalty programs where NFTs evolve as users accumulate points. @@ -31,11 +38,17 @@ In this guide, you will create a dynamic NFT using Irys's mutability features. D
-This tutorial focuses on creating a SuperMon NFT that can evolve during gameplay. The NFT starts with a basic appearance that can be upgraded twice. We will use the [Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to "mutate" the metadata, simulating the automatic changes that would occur through player interactions in an actual game. +This tutorial focuses on creating a SuperMon NFT that can evolve during +gameplay. The NFT starts with a basic appearance that can be upgraded twice. We +will use the +[Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to +"mutate" the metadata, simulating the automatic changes that would occur through +player interactions in an actual game. ## Prerequisites -[Install the Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to upload your images and metadata. +[Install the Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) +to upload your images and metadata. ## How to create a "mutable" URL @@ -49,7 +62,8 @@ This tutorial focuses on creating a SuperMon NFT that can evolve during gameplay ); ``` -1. Update the "chain" by posting a second transaction (from the same wallet) tagged with the original transaction's ID: +1. Update the "chain" by posting a second transaction (from the same wallet) + tagged with the original transaction's ID: ```js const tags = [{ name: "Root-TX", value: receiptOne.id }]; @@ -61,7 +75,8 @@ This tutorial focuses on creating a SuperMon NFT that can evolve during gameplay ## Deploy your smart contract -Deploy your NFT smart contract. The following is a simple example that you can use to mint the NFT that we'll create. +Deploy your NFT smart contract. The following is a simple example that you can +use to mint the NFT that we'll create. ```solidity filename="SuperMon.sol" // SPDX-License-Identifier: MIT @@ -92,7 +107,9 @@ contract SuperMon is ERC721URIStorage { ``` -[Deploy the smart contract using Remix](../../../quickstart/deploy-smart-contract/remix.mdx), or [any other environment](https://docs.linea.build/developers/quickstart/deploy-smart-contract). +[Deploy the smart contract using Remix](../../../quickstart/deploy-smart-contract/remix.mdx), +or +[any other environment](https://docs.linea.build/developers/quickstart/deploy-smart-contract). ## Upload the images @@ -107,9 +124,12 @@ contract SuperMon is ERC721URIStorage {
-1. Fund the Irys Devnet with 0.1 [Linea Sepolia ETH](https://www.infura.io/faucet/linea) to pay for your uploads. +1. Fund the Irys Devnet with 0.1 + [Linea Sepolia ETH](https://www.infura.io/faucet/linea) to pay for your + uploads. - :::info In all of these CLI examples, ensure you replace the value of the `-w` parameter with your own private key. ::: + :::info In all of these CLI examples, ensure you replace the value of the + `-w` parameter with your own private key. ::: ```bash irys fund 100000000000000000 \ @@ -119,7 +139,8 @@ contract SuperMon is ERC721URIStorage { --provider-url https://rpc.sepolia.linea.build ``` - :::note The `fund` command accepts a value in atomic units, 0.1 ETH is equal to 100000000000000000 in atomic units. ::: + :::note The `fund` command accepts a value in atomic units, 0.1 ETH is equal + to 100000000000000000 in atomic units. ::: 1. Use the Irys CLI to upload each of the images to the Irys Devnet. @@ -145,7 +166,9 @@ contract SuperMon is ERC721URIStorage { ## Upload the metadata -1. Create three metadata files similar to the ones below. Make sure to change the value of the image field to match the URLs generated in the previous step. +1. Create three metadata files similar to the ones below. Make sure to change + the value of the image field to match the URLs generated in the previous + step. ```json filename="metadata-level-1.json" { @@ -202,16 +225,24 @@ contract SuperMon is ERC721URIStorage { --provider-url https://rpc.sepolia.linea.build ``` -The CLI will return a URL similar to `https://gateway.irys.xyz/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`. To convert that to a mutable references URL, interpolate it by adding `/mutable/` after the domain and before the transaction ID. +The CLI will return a URL similar to +`https://gateway.irys.xyz/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`. To +convert that to a mutable references URL, interpolate it by adding `/mutable/` +after the domain and before the transaction ID. -Your final URL will be similar to `https://gateway.irys.xyz/mutable/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`. +Your final URL will be similar to +`https://gateway.irys.xyz/mutable/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`. ## Mint the NFT To mint your NFT in [Remix](https://remix.ethereum.org/): -1. Under **Deployed Contracts**, locate your contract and expand it to see its functions. -1. Under the `Mint` function, enter the wallet address you want to mint the NFT to and the metadata URL (e.g. `https://gateway.irys.xyz/mutable/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`) from the previous step. +1. Under **Deployed Contracts**, locate your contract and expand it to see its + functions. +1. Under the `Mint` function, enter the wallet address you want to mint the NFT + to and the metadata URL (e.g. + `https://gateway.irys.xyz/mutable/2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`) + from the previous step. 1. Select **Transact**.
@@ -223,11 +254,15 @@ To mint your NFT in [Remix](https://remix.ethereum.org/):
-You can now view the NFT on the [Opensea Testnet](https://testnets.opensea.io/account). +You can now view the NFT on the +[Opensea Testnet](https://testnets.opensea.io/account). ## Mutate the metadata -To "mutate" the NFT, upload a new version of the metadata tagging it as having a `Root-TX` equal to the transaction ID of your first transaction. In this example, we pass the value of `2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`, however make sure to change this to match your unique transaction ID. +To "mutate" the NFT, upload a new version of the metadata tagging it as having a +`Root-TX` equal to the transaction ID of your first transaction. In this +example, we pass the value of `2N9YPwW3KdWcDsCZr4EWzZryZVUxbDN4oKRiutLxKJrF`, +however make sure to change this to match your unique transaction ID. ```bash irys upload metadata-level-2.json \ @@ -253,10 +288,18 @@ Give it a few minutes and your updated NFT should be visible. ## Free metadata uploads -This tutorial uses the Irys Devnet where uploads are kept for ~60 days and are paid for with free faucet currencies. When deploying production projects, you'll use Irys's mainnet where uploads are permanent. +This tutorial uses the Irys Devnet where uploads are kept for ~60 days and are +paid for with free faucet currencies. When deploying production projects, you'll +use Irys's mainnet where uploads are permanent. -Uploads of less than 100 KiB are free on Irys, which is more than enough for most metadata files. This means projects can let users "evolve" their NFTs without having to pay gas fees. +Uploads of less than 100 KiB are free on Irys, which is more than enough for +most metadata files. This means projects can let users "evolve" their NFTs +without having to pay gas fees. ## Caching -Wallets and NFT websites typically cache metadata to optimize performance, this can affect the visibility of updates to dynamic NFTs. While OpenSea offers a feature for users to manually request metadata refreshes, not all platforms provide this level of control. When building dynamic NFT projects, make sure to thoroughly test and understand the implications of caching on your platform. +Wallets and NFT websites typically cache metadata to optimize performance, this +can affect the visibility of updates to dynamic NFTs. While OpenSea offers a +feature for users to manually request metadata refreshes, not all platforms +provide this level of control. When building dynamic NFT projects, make sure to +thoroughly test and understand the implications of caching on your platform. diff --git a/docs/developers/guides/community/irys/irys-nfts.mdx b/docs/developers/guides/community/irys/irys-nfts.mdx index 497dbdbc2..1ad41dc5b 100644 --- a/docs/developers/guides/community/irys/irys-nfts.mdx +++ b/docs/developers/guides/community/irys/irys-nfts.mdx @@ -4,21 +4,29 @@ image: /img/socialCards/create-an-nft.jpg description: Build permanent NFTs using Irys and Linea. --- -You can use [Irys](../../../tooling/permanent-data/irys/overview.mdx) to create an NFT on Linea in three steps: +You can use [Irys](../../../tooling/permanent-data/irys/overview.mdx) to create +an NFT on Linea in three steps: 1. Deploy your smart contract on Linea 2. Permanently store your NFT assets on Irys 3. Mint your NFTs using metadata stored on Irys -When you upload NFTs to Irys, you make a one-time payment for and your data is guaranteed to be retrievable forever. Creators and collectors benefit from the assurance that their NFTs are preserved indefinitely. NFT metadata and images stored are Irys are permanent and immutable. +When you upload NFTs to Irys, you make a one-time payment for and your data is +guaranteed to be retrievable forever. Creators and collectors benefit from the +assurance that their NFTs are preserved indefinitely. NFT metadata and images +stored are Irys are permanent and immutable. -:::note You can also use Irys to create [dynamic NFTs](./irys-dynamic-nfts.mdx) that evolve based on onchain or offchain actions. ::: +:::note You can also use Irys to create [dynamic NFTs](./irys-dynamic-nfts.mdx) +that evolve based on onchain or offchain actions. ::: ## Deploy your smart contract -If you're new to NFTs and smart contract development, consider deploying one of [the audited ThirdWeb contracts](../../../../developers/quickstart/deploy-smart-contract/thirdweb.mdx) to learn more. +If you're new to NFTs and smart contract development, consider deploying one of +[the audited ThirdWeb contracts](../../../../developers/quickstart/deploy-smart-contract/thirdweb.mdx) +to learn more. -You can also [deploy this minimal contract using Remix](../../../../developers/quickstart/deploy-smart-contract/remix.mdx). +You can also +[deploy this minimal contract using Remix](../../../../developers/quickstart/deploy-smart-contract/remix.mdx). ```solidity // SPDX-License-Identifier: MIT @@ -66,15 +74,20 @@ contract IrysLineaNFT is ERC721, ERC721URIStorage, Ownable { ## Store your assets on Irys -Uploads to Irys are fully unconstrained; you can upload files of any size and use Irys to make images, videos, music, or interactive NFTs. +Uploads to Irys are fully unconstrained; you can upload files of any size and +use Irys to make images, videos, music, or interactive NFTs. -This guide covers using the [Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to upload your assets to Irys. You can also do the same using the [Irys SDK](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-sdk). +This guide covers using the +[Irys CLI](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-cli) to +upload your assets to Irys. You can also do the same using the +[Irys SDK](../../../tooling/permanent-data/irys/irys-quickstart.mdx#irys-sdk). ### Store your visual assets #### Install the Irys CLI -Install the CLI globally using the `-g` flag. Depending on your setup, you may or may not need to use `sudo`. +Install the CLI globally using the `-g` flag. Depending on your setup, you may +or may not need to use `sudo`. ```bash npm i -g @irys/cli @@ -120,7 +133,8 @@ The CLI outputs a link to the manifest for the upload: https://gateway.irys.xyz/A7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiG8CM6Yv1f ``` -The CLI also produces a `.json` file containing the transaction IDs of each upload: +The CLI also produces a `.json` file containing the transaction IDs of each +upload: ```json { @@ -136,7 +150,9 @@ The CLI also produces a `.json` file containing the transaction IDs of each uplo } ``` -You can download files by using the transaction ID directly, or by creating a URL using the manifest ID combined with the original file name. For example, `nft1.png` can be downloaded with either of these URLs: +You can download files by using the transaction ID directly, or by creating a +URL using the manifest ID combined with the original file name. For example, +`nft1.png` can be downloaded with either of these URLs: - `https://gateway.irys.xyz/gF7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x` - `https://gateway.irys.xyz/F7CXNp4WqwkY73TRxKR2o3gfSCw3ghhZZXiP8CM6Yv1x/nft1.png` @@ -168,4 +184,6 @@ irys upload metadata.json \ ## Mint the NFTs -Now use your metadata URLs (in the format `https://gateway.irys.xyz/:txId`) to mint the NFTs using [the contract you deployed on Linea](../../../../developers/quickstart/deploy-smart-contract/index.mdx). +Now use your metadata URLs (in the format `https://gateway.irys.xyz/:txId`) to +mint the NFTs using +[the contract you deployed on Linea](../../../../developers/quickstart/deploy-smart-contract/index.mdx). diff --git a/docs/developers/guides/deploy-subdomain.mdx b/docs/developers/guides/deploy-subdomain.mdx index d153eb2fe..9fe7d42c9 100644 --- a/docs/developers/guides/deploy-subdomain.mdx +++ b/docs/developers/guides/deploy-subdomain.mdx @@ -4,17 +4,35 @@ description: Guide to deploy a subdomain for any L1 .eth domain on Linea image: /img/socialCards/deploy-a-linea-subdomain.jpg --- -This guide is for developers who want to manage subdomains on Linea for domains they own on [L1 ENS](https://app.ens.domains/). +This guide is for developers who want to manage subdomains on Linea for domains +they own on [L1 ENS](https://app.ens.domains/). -For example, if you own the domain `example.eth` on L1, you can create and manage subdomains like `sub.example.eth` on Linea that resolves to the L1 domain, ensuring seamless integration and resolution across both layers. +For example, if you own the domain `example.eth` on L1, you can create and +manage subdomains like `sub.example.eth` on Linea that resolves to the L1 +domain, ensuring seamless integration and resolution across both layers. ## Requirements -- [L2 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-contracts): These Linea contracts handle all operations on your subdomains, including registrations and setting records. -- [L1 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-resolver): These contracts enable subdomains created on Linea to resolve on L1. You can reuse the existing Linea contracts, unless you require customizations. -- User interface (UI): The UI for managing subdomains; you can adapt the [Linea ENS app](https://names.linea.build/) in the [Linea ENS GitHub repository](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app). If you decide to deploy this UI, you will also need to deploy the [Linea ENS Subgraph](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-subgraph), and include your own values into the [`env.ts`](https://github.com/Consensys/linea-ens/blob/main/packages/linea-ens-subgraph/src/env.ts) file. - - :::tip Follow the [quickstart guide](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app#quick-start-on-localhost) to test it locally. Replace the environment variables `BASE_DOMAIN`, `BASE_NODE`, `BASE_LABEL`, and `BASE_LABEL_HASH` in the `.env` files (`.env.example` and `env.ts`) with the values matching your ENS domain. ::: +- [L2 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-contracts): + These Linea contracts handle all operations on your subdomains, including + registrations and setting records. +- [L1 contracts](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-resolver): + These contracts enable subdomains created on Linea to resolve on L1. You can + reuse the existing Linea contracts, unless you require customizations. +- User interface (UI): The UI for managing subdomains; you can adapt the + [Linea ENS app](https://names.linea.build/) in the + [Linea ENS GitHub repository](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app). + If you decide to deploy this UI, you will also need to deploy the + [Linea ENS Subgraph](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-subgraph), + and include your own values into the + [`env.ts`](https://github.com/Consensys/linea-ens/blob/main/packages/linea-ens-subgraph/src/env.ts) + file. + + :::tip Follow the + [quickstart guide](https://github.com/Consensys/linea-ens/tree/main/packages/linea-ens-app#quick-start-on-localhost) + to test it locally. Replace the environment variables `BASE_DOMAIN`, + `BASE_NODE`, `BASE_LABEL`, and `BASE_LABEL_HASH` in the `.env` files + (`.env.example` and `env.ts`) with the values matching your ENS domain. ::: ## Available deployment methods @@ -22,33 +40,47 @@ Use one of the following deployment methods to deploy your subdomain. ### Use the same approach as `linea.eth` -Manage your subdomains the same way `linea.eth` subdomains are managed using the deployment [steps below](#steps). This includes using the Proof of Humanity (PoH) check for registering subdomains. +Manage your subdomains the same way `linea.eth` subdomains are managed using the +deployment [steps below](#steps). This includes using the Proof of Humanity +(PoH) check for registering subdomains. ### Deploy registrar contracts only -Deploy only your `Registrar` contracts while using the same `Registry` and `Resolver` contract addresses deployed for the `linea.eth` subdomain. Contact [Linea Support](https://support.linea.build/) to gain ownership of an L1 domain on Linea. This solution allows you to deploy only the registrar contracts. +Deploy only your `Registrar` contracts while using the same `Registry` and +`Resolver` contract addresses deployed for the `linea.eth` subdomain. Contact +[Linea Support](https://support.linea.build/) to gain ownership of an L1 domain +on Linea. This solution allows you to deploy only the registrar contracts. ### Use ENS contracts -Modify the [original ENS contracts deployed on Ethereum Mainnet](https://github.com/ensdomains/ens-contracts). You must modify the node managed by the Registrar contract to match your domain's node. +Modify the +[original ENS contracts deployed on Ethereum Mainnet](https://github.com/ensdomains/ens-contracts). +You must modify the node managed by the Registrar contract to match your +domain's node. -For example, for `linea.eth`, we set the node in the [contract's constructor](https://github.com/Consensys/linea-ens/blob/49c1bd707467daa3a77d06592e2523d74825bdfb/packages/linea-ens-contracts/contracts/ethregistrar/ETHRegistrarController.sol#L162). +For example, for `linea.eth`, we set the node in the +[contract's constructor](https://github.com/Consensys/linea-ens/blob/49c1bd707467daa3a77d06592e2523d74825bdfb/packages/linea-ens-contracts/contracts/ethregistrar/ETHRegistrarController.sol#L162). :::warning -If you modify the `PublicResolver` contract and it impacts storage, you must deploy your own `L1Resolver` contract on L1 to match those modifications, as the `L1Resolver` uses hard-coded storage slots (as seen [here](https://github.com/Consensys/linea-ens/blob/1b896c9f6f77c6258926957af370bb3d692f540a/packages/linea-ens-resolver/contracts/L1Resolver.sol#L36)). +If you modify the `PublicResolver` contract and it impacts storage, you must +deploy your own `L1Resolver` contract on L1 to match those modifications, as the +`L1Resolver` uses hard-coded storage slots (as seen +[here](https://github.com/Consensys/linea-ens/blob/1b896c9f6f77c6258926957af370bb3d692f540a/packages/linea-ens-resolver/contracts/L1Resolver.sol#L36)). ::: ## Steps -The following steps show how to deploy and configure subdomain contracts on Linea in the same way that they were used to create the `linea.eth` subdomain. +The following steps show how to deploy and configure subdomain contracts on +Linea in the same way that they were used to create the `linea.eth` subdomain. ### 1. Deploy subdomain contracts Deploy the subdomain contracts on the Linea network: -1. Clone the [Linea ENS repository](https://github.com/Consensys/linea-ens) and execute the following commands: +1. Clone the [Linea ENS repository](https://github.com/Consensys/linea-ens) and + execute the following commands: ```bash cd ./packages/linea-ens-contracts @@ -58,7 +90,9 @@ Deploy the subdomain contracts on the Linea network: 1. Replace the following keys in the `.env` file with your own information: - :::danger Do not commit the `.env` file to your repository if it contains sensitive data. You can create a `.gitignore` file to prevent accidentally committing the file. ::: + :::danger Do not commit the `.env` file to your repository if it contains + sensitive data. You can create a `.gitignore` file to prevent accidentally + committing the file. ::: ``` DEPLOYER_PRIVATE_KEY= @@ -67,7 +101,8 @@ Deploy the subdomain contracts on the Linea network: BASE_DOMAIN= ``` - :::note Replace `BASE_DOMAIN` environment variable with the L1 ENS domain you own. For example, for `linea.eth`, it's `linea`. ::: + :::note Replace `BASE_DOMAIN` environment variable with the L1 ENS domain + you own. For example, for `linea.eth`, it's `linea`. ::: 1. Deploy the contract: @@ -75,7 +110,8 @@ Deploy the subdomain contracts on the Linea network: yarn hardhat deploy --network lineaMainnet ``` -1. Copy the `PublicResolver` contract address from the `./deployments/lineaMainnet/PublicResolver.json` file: +1. Copy the `PublicResolver` contract address from the + `./deployments/lineaMainnet/PublicResolver.json` file: ``` "address": "0x86c5AED9F27837074612288610fB98ccC1733126", @@ -83,7 +119,9 @@ Deploy the subdomain contracts on the Linea network: Copy this address — you'll need it in the next step. -The contracts to manage your subdomains on Linea have now been deployed. The next step is to link these subdomains to your L1 domain on L1 for [CCIP resolution](../tooling/cross-chain/ccip-read-gateway.mdx) to work. +The contracts to manage your subdomains on Linea have now been deployed. The +next step is to link these subdomains to your L1 domain on L1 for +[CCIP resolution](../tooling/cross-chain/ccip-read-gateway.mdx) to work. ### 2. Set the Linea target resolution @@ -106,12 +144,17 @@ Set the Linea target resolution on the L1 ENS domain: Keep the DNS encoded name result, for example `0x056c696e65610365746800`. -1. Go to the [Linea Custom Resolver contract on Etherscan](https://etherscan.io/address/0xde16ee87B0C019499cEBDde29c9F7686560f679a#writeContract). +1. Go to the + [Linea Custom Resolver contract on Etherscan](https://etherscan.io/address/0xde16ee87B0C019499cEBDde29c9F7686560f679a#writeContract). -1. In the **Write Contract** tab, connect your wallet using the **Connect with web3** button. Make sure to connect with the wallet containing the account that owns your L1 ENS domain. In the `setTarget` function add the following parameters: +1. In the **Write Contract** tab, connect your wallet using the **Connect with + web3** button. Make sure to connect with the wallet containing the account + that owns your L1 ENS domain. In the `setTarget` function add the following + parameters: - `name`: The DNS encoded name you got from step 1. - - `target`: The Linea resolver target address you copied from the `PublicResolver.json` file in the previous step. + - `target`: The Linea resolver target address you copied from the + `PublicResolver.json` file in the previous step. Then select **Write** and approve the transaction. @@ -121,8 +164,12 @@ Set the Linea target resolution on the L1 ENS domain: 1. Select the **More** tab, and in the **Resolver** section select **Edit**. -1. Select **Custom Resolver** and add the address `0xde16ee87B0C019499cEBDde29c9F7686560f679a`. +1. Select **Custom Resolver** and add the address + `0xde16ee87B0C019499cEBDde29c9F7686560f679a`. 1. Select **Update** and approve the transaction. -The setup to manage subdomains on Linea for your ENS domain is now complete and configured similarly to `linea.eth`. This means anyone with an active PoH on Linea can now register a `subdomain.yourdomain.eth` that will be resolved on the L1 ENS. +The setup to manage subdomains on Linea for your ENS domain is now complete and +configured similarly to `linea.eth`. This means anyone with an active PoH on +Linea can now register a `subdomain.yourdomain.eth` that will be resolved on the +L1 ENS. diff --git a/docs/developers/guides/finalized-block.mdx b/docs/developers/guides/finalized-block.mdx index 8bf9e5623..ba5283c31 100644 --- a/docs/developers/guides/finalized-block.mdx +++ b/docs/developers/guides/finalized-block.mdx @@ -3,16 +3,21 @@ title: Retrieve finalized L2 blocks image: /img/socialCards/retrieve-finalized-l2-blocks.jpg --- -A finalized L2 block is a block on an L2 blockchain (Linea) that has been confirmed and validated by the L1 blockchain (Ethereum), ensuring its immutability and security. +A finalized L2 block is a block on an L2 blockchain (Linea) that has been +confirmed and validated by the L1 blockchain (Ethereum), ensuring its +immutability and security. There are two methods to obtain the current finalized block: -- [Use the `finalized` block parameter tag](#use-the-finalized-tag) in JSON-RPC API calls. +- [Use the `finalized` block parameter tag](#use-the-finalized-tag) in JSON-RPC + API calls. - [Query the Linea L1 rollup contract](#query-the-rollup-contract). ## Use the `finalized` tag -Use the `finalized` tag in API calls to specify a block that has been confirmed by the L1 network. For example, here the `eth_getBlockByNumber` method returns information about the current finalized block: +Use the `finalized` tag in API calls to specify a block that has been confirmed +by the L1 network. For example, here the `eth_getBlockByNumber` method returns +information about the current finalized block: ```bash curl https://rpc.linea.build \ @@ -23,11 +28,16 @@ curl https://rpc.linea.build \ ### Supported methods -The `finalized` tag is supported by all applicable JSON-RPC API methods on Linea Mainnet and Linea Sepolia with the exception of `eth_call`. +The `finalized` tag is supported by all applicable JSON-RPC API methods on Linea +Mainnet and Linea Sepolia with the exception of `eth_call`. ## Query the rollup contract -Using the `finalized` tag in JSON-RPC API calls is recommended. As an alternative, you can query the [Linea L1 rollup contract](https://etherscan.io/address/0xd19d4b5d358258f05d7b411e21a1460d11b0876f#readProxyContract) to retrieve the value of the current finalized L2 block number stored in the `currentL2BlockNumber` variable. +Using the `finalized` tag in JSON-RPC API calls is recommended. As an +alternative, you can query the +[Linea L1 rollup contract](https://etherscan.io/address/0xd19d4b5d358258f05d7b411e21a1460d11b0876f#readProxyContract) +to retrieve the value of the current finalized L2 block number stored in the +`currentL2BlockNumber` variable. ### Prerequisites @@ -35,7 +45,8 @@ Using the `finalized` tag in JSON-RPC API calls is recommended. As an alternativ ### Create the script -1. In your project folder, initialize the project and install the `web3` package: +1. In your project folder, initialize the project and install the `web3` + package: ```bash npm init -y @@ -45,9 +56,11 @@ Using the `finalized` tag in JSON-RPC API calls is recommended. As an alternativ npm install web3 ``` -1. Create a JavaScript file (for example `index.js`) and copy the following code: +1. Create a JavaScript file (for example `index.js`) and copy the following + code: - :::info Update the Infura endpoint with your API key, or add a different RPC provider. ::: + :::info Update the Infura endpoint with your API key, or add a different RPC + provider. ::: ```JavaScript title="index.js" const { Web3 } = require("web3") diff --git a/docs/developers/guides/gas-fees.mdx b/docs/developers/guides/gas-fees.mdx index 5338a946a..4a12040b8 100644 --- a/docs/developers/guides/gas-fees.mdx +++ b/docs/developers/guides/gas-fees.mdx @@ -11,24 +11,38 @@ import TabItem from "@theme/TabItem"; ## How gas works on Linea -Linea supports the [Ethereum EIP-1559 gas price model](https://ethereum.org/developers/docs/gas): +Linea supports the +[Ethereum EIP-1559 gas price model](https://ethereum.org/developers/docs/gas): ``` total fee = units of gas used * (base fee + priority fee) ``` -Linea fundamentally works exactly the same as Ethereum. The only difference is that **the base fee is constant at 7 wei.** Blocks created by Linea use up to 24 million gas (less than 50% of the maximum Linea block size of 61 million gas), and the fee decreases by 12.5% per block, keeping it at a stable 7 wei. +Linea fundamentally works exactly the same as Ethereum. The only difference is +that **the base fee is constant at 7 wei.** Blocks created by Linea use up to 24 +million gas (less than 50% of the maximum Linea block size of 61 million gas), +and the fee decreases by 12.5% per block, keeping it at a stable 7 wei. -The gas cost to submit your transaction and include it on Ethereum involves the following fee components: +The gas cost to submit your transaction and include it on Ethereum involves the +following fee components: -- **Layer 2 cost**: The execution fee; the cost of including your transaction on the Linea sequencer, and calculated using a similar formula to Ethereum (as described above). -- **Layer 1 cost**: The cost of publishing your L2 transaction on Ethereum, which varies based on the blob fee market. +- **Layer 2 cost**: The execution fee; the cost of including your transaction on + the Linea sequencer, and calculated using a similar formula to Ethereum (as + described above). +- **Layer 1 cost**: The cost of publishing your L2 transaction on Ethereum, + which varies based on the blob fee market. -These two resource costs are abstracted by the rollup and covered by the recommended L2 gas price and gas used. +These two resource costs are abstracted by the rollup and covered by the +recommended L2 gas price and gas used. -> Learn more about gas on Linea on our [support page](https://support.linea.build/getting-started/what-does-gas-pay-for/) and release notes for [Alpha v2](../linea-version/index.mdx#alpha-v2) and [Alpha v3](../linea-version/index.mdx#alpha-v3). +> Learn more about gas on Linea on our +> [support page](https://support.linea.build/getting-started/what-does-gas-pay-for/) +> and release notes for [Alpha v2](../linea-version/index.mdx#alpha-v2) and +> [Alpha v3](../linea-version/index.mdx#alpha-v3). -`linea_estimateGas` is the recommended method for estimating gas on Linea. See our [reference page](../reference/api/linea-estimategas.mdx) for more information. +`linea_estimateGas` is the recommended method for estimating gas on Linea. See +our [reference page](../reference/api/linea-estimategas.mdx) for more +information. Linea also supports: @@ -38,19 +52,25 @@ Linea also supports: ## Gas pricing -The gas price returned by `linea_estimateGas` is based on the variable data cost of the previous block with a multiplier applied as a buffer to ensure inclusion. +The gas price returned by `linea_estimateGas` is based on the variable data cost +of the previous block with a multiplier applied as a buffer to ensure inclusion. -Each Linea block's `extraData` field is populated with the following gas price values that are used by `linea_estimateGas` to calculate the cost of a transaction: +Each Linea block's `extraData` field is populated with the following gas price +values that are used by `linea_estimateGas` to calculate the cost of a +transaction: - A `FIXED_COST` of 0.03 Gwei, which reflects infrastructure costs; - `VARIABLE_COST`, which is the cost per byte of data submitted to L1, and; -- `ETH_GAS_PRICE`, used to set a more accurate return value for any `eth_gasPrice` calls. +- `ETH_GAS_PRICE`, used to set a more accurate return value for any + `eth_gasPrice` calls. :::note -The `extraData` field is a 32-byte space used to store arbitrary data, such as metadata or additional information relevant to the block. +The `extraData` field is a 32-byte space used to store arbitrary data, such as +metadata or additional information relevant to the block. -On Linea, it's used by the sequencer and Linea Besu nodes running the correct plugins to expose `linea_estimateGas`. +On Linea, it's used by the sequencer and Linea Besu nodes running the correct +plugins to expose `linea_estimateGas`. ::: @@ -67,11 +87,21 @@ VARIABLE_COST (4 bytes) = min(max( , min-bound), max-bound) ``` -The `profit-margin` is `3`, ensuring the network is sustainable. `min-bound` and `max-bound` are variable, and guarantee the gas price stays within a reasonable range. +The `profit-margin` is `3`, ensuring the network is sustainable. `min-bound` and +`max-bound` are variable, and guarantee the gas price stays within a reasonable +range. -The variable cost formula enables `linea_estimateGas` to price according to the variable costs of submitting blob data to L1, working out the per-byte cost of that data. The amount of the blob data in each block stays roughly consistent, though the amount _per transaction_ varies, so the `linea_estimateGas` API accounts for this, and ensures a gas price is returned for the transaction that reflects the amount of data it contains. In turn, it ensures that the network is sustainable, and that the cost to the protocol of L1 data availability is covered. +The variable cost formula enables `linea_estimateGas` to price according to the +variable costs of submitting blob data to L1, working out the per-byte cost of +that data. The amount of the blob data in each block stays roughly consistent, +though the amount _per transaction_ varies, so the `linea_estimateGas` API +accounts for this, and ensures a gas price is returned for the transaction that +reflects the amount of data it contains. In turn, it ensures that the network is +sustainable, and that the cost to the protocol of L1 data availability is +covered. -To determine the priority fee per gas, `linea_estimateGas` takes the previous block's `VARIABLE_COST` into account: +To determine the priority fee per gas, `linea_estimateGas` takes the previous +block's `VARIABLE_COST` into account: ```python min-gas-price = previousBlock.extraData.variable_cost @@ -81,23 +111,39 @@ priorityFeePerGas = MINIMUM_MARGIN * (min-gas-price * L2_compressed_tx_size_in_b Where: -- `extraData.variable_cost` is where the previous block's `VARIABLE_COST` is stored block +- `extraData.variable_cost` is where the previous block's `VARIABLE_COST` is + stored block - `MINIMUM_MARGIN` varies depending on the stage of the transaction: - RPC method, i.e. calling `linea_estimateGas`: `1.2` - In the transaction pool: `0.8` - At transaction selection stage: `1.0` -:::note The RPC method and transaction pool values are configurable by RPC providers or those running their own nodes according to preference; the transaction selection stage value is fixed. For example, it may be preferable to set a lower margin to facilitate lower gas prices, but this risks transactions not being included. ::: +:::note The RPC method and transaction pool values are configurable by RPC +providers or those running their own nodes according to preference; the +transaction selection stage value is fixed. For example, it may be preferable to +set a lower margin to facilitate lower gas prices, but this risks transactions +not being included. ::: -`linea_estimateGas` simulates the transaction ordering logic that the sequencer uses when building blocks, and then obtains a gas price that will ensure that the priority fee is high enough for inclusion. The sequencer's transaction ordering policy includes transactions in block in order of highest priority fee, a system known as a priority gas auction. It also checks that the priority fees offered by each transaction are high enough to support network sustainability, and cover L1 data costs. +`linea_estimateGas` simulates the transaction ordering logic that the sequencer +uses when building blocks, and then obtains a gas price that will ensure that +the priority fee is high enough for inclusion. The sequencer's transaction +ordering policy includes transactions in block in order of highest priority fee, +a system known as a priority gas auction. It also checks that the priority fees +offered by each transaction are high enough to support network sustainability, +and cover L1 data costs. -In some cases, transactions with lower priority fees are included ahead of others with higher priority fees. This is because the nonce order of transactions submitted from the same account takes precedence. +In some cases, transactions with lower priority fees are included ahead of +others with higher priority fees. This is because the nonce order of +transactions submitted from the same account takes precedence. ## [`linea_estimateGas`](../reference/api/linea-estimategas.mdx) -`linea_estimateGas` is the recommended method for estimating gas on Linea. It returns `gasLimit`, `baseFeePerGas`, and `priorityFeePerGas`, and therefore provides a more precise gas estimate than the alternatives. +`linea_estimateGas` is the recommended method for estimating gas on Linea. It +returns `gasLimit`, `baseFeePerGas`, and `priorityFeePerGas`, and therefore +provides a more precise gas estimate than the alternatives. -It can also help prevent transactions from being rejected due to exceeding [module limits](../../architecture/stack/trace-expansion-proving/prover-limits.mdx). +It can also help prevent transactions from being rejected due to exceeding +[module limits](../../architecture/stack/trace-expansion-proving/prover-limits.mdx). ### Example diff --git a/docs/developers/guides/linea-api.mdx b/docs/developers/guides/linea-api.mdx index 09a843ae7..a1647bedf 100644 --- a/docs/developers/guides/linea-api.mdx +++ b/docs/developers/guides/linea-api.mdx @@ -1,6 +1,7 @@ --- title: Use the Linea API -description: How to make calls to the Linea blockchain using the Linea JSON-RPC APIs +description: + How to make calls to the Linea blockchain using the Linea JSON-RPC APIs sidebar_position: 6 image: /img/socialCards/use-the-linea-api.jpg --- @@ -8,23 +9,40 @@ image: /img/socialCards/use-the-linea-api.jpg import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -Linea supports the standard Ethereum JSON-RPC API methods, meaning the developer experience is identical to building on Ethereum itself. However, some [Linea-specific methods, and method implementations](../reference/api/index.mdx) differ to Ethereum. - -:::info View the full list of Linea methods in the [MetaMask services documentation](https://docs.metamask.io/services/reference/linea/json-rpc-methods/). ::: - -You must connect to an RPC endpoint when making calls to the Linea blockchain. Use one or more of the following options: - -- **Run your own node**: Either [run your own node by setting it up yourself](./run-a-node/index.mdx), or [use a node provider](../tooling/node-providers/index.mdx#run-your-own-node). We recommend running [Linea Besu](./run-a-node/linea-besu.mdx) if you want to run a node yourself and interact with the blockchain. -- **Connect to a private RPC endpoint**: [Connect to a blockchain infrastructure provider](../tooling/node-providers/index.mdx#private-rpc-endpoints) such as Infura or Alchemy. Multiple providers offer free tier access. -- **Use a public endpoint**: [Public endpoints](../tooling/node-providers/index.mdx#public-rpc-endpoints) are free to use but are rate limited and not suitable for production environments. +Linea supports the standard Ethereum JSON-RPC API methods, meaning the developer +experience is identical to building on Ethereum itself. However, some +[Linea-specific methods, and method implementations](../reference/api/index.mdx) +differ to Ethereum. + +:::info View the full list of Linea methods in the +[MetaMask services documentation](https://docs.metamask.io/services/reference/linea/json-rpc-methods/). +::: + +You must connect to an RPC endpoint when making calls to the Linea blockchain. +Use one or more of the following options: + +- **Run your own node**: Either + [run your own node by setting it up yourself](./run-a-node/index.mdx), or + [use a node provider](../tooling/node-providers/index.mdx#run-your-own-node). + We recommend running [Linea Besu](./run-a-node/linea-besu.mdx) if you want to + run a node yourself and interact with the blockchain. +- **Connect to a private RPC endpoint**: + [Connect to a blockchain infrastructure provider](../tooling/node-providers/index.mdx#private-rpc-endpoints) + such as Infura or Alchemy. Multiple providers offer free tier access. +- **Use a public endpoint**: + [Public endpoints](../tooling/node-providers/index.mdx#public-rpc-endpoints) + are free to use but are rate limited and not suitable for production + environments. ## Make calls -The following examples call the Linea API methods using an Infura endpoint, however you can substitute the endpoint with whichever endpoint you prefer. +The following examples call the Linea API methods using an Infura endpoint, +however you can substitute the endpoint with whichever endpoint you prefer. In the examples, replace `` with your actual Infura API key. -:::info View the [list of node providers](../tooling/node-providers/index.mdx) if you require an endpoint. ::: +:::info View the [list of node providers](../tooling/node-providers/index.mdx) +if you require an endpoint. ::: ### cURL @@ -39,11 +57,14 @@ curl https://linea-mainnet.infura.io/v3/ \ ### Node (JavaScript) -The following examples use various JavaScript libraries to make calls to the Linea blockchain. +The following examples use various JavaScript libraries to make calls to the +Linea blockchain. #### Prerequisites -Install [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) or [yarn](https://yarnpkg.com/getting-started/install) as the package manager. Then, in your project folder, initialise your new project: +Install [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) +or [yarn](https://yarnpkg.com/getting-started/install) as the package manager. +Then, in your project folder, initialise your new project: diff --git a/docs/developers/guides/linea-inscriptions.mdx b/docs/developers/guides/linea-inscriptions.mdx index 232738d6a..c4a7aee9d 100644 --- a/docs/developers/guides/linea-inscriptions.mdx +++ b/docs/developers/guides/linea-inscriptions.mdx @@ -3,17 +3,33 @@ title: Create an inscription image: /img/socialCards/create-an-inscription.jpg --- -Bitcoin inscriptions are a method of adding metadata to the smallest unit of Bitcoin, a satoshi (sat). Various types of data, including images, videos, messages, etc., can be "inscribed" onto the Bitcoin blockchain to create NFTs. This concept has been adapted for the Ethereum blockchain, where it's known as ["Ethscriptions"](https://docs.ethscriptions.com/overview/introducing-ethscriptions). +Bitcoin inscriptions are a method of adding metadata to the smallest unit of +Bitcoin, a satoshi (sat). Various types of data, including images, videos, +messages, etc., can be "inscribed" onto the Bitcoin blockchain to create NFTs. +This concept has been adapted for the Ethereum blockchain, where it's known as +["Ethscriptions"](https://docs.ethscriptions.com/overview/introducing-ethscriptions). ## Implementation -Traditionally, calldata is the most straightforward method for implementing inscriptions. However, this approach can become expensive on L1 during finalization by the sequencer, which in turn can drive up the price on L2 for users to maintain profitability. +Traditionally, calldata is the most straightforward method for implementing +inscriptions. However, this approach can become expensive on L1 during +finalization by the sequencer, which in turn can drive up the price on L2 for +users to maintain profitability. -To avoid this increase in costs, Linea recommends following [ESIP-3](https://docs.ethscriptions.com/esips/accepted-esips/esip-3-smart-contract-ethscription-creations), for creating inscriptions. This is because events and subcalls do not involve any finalization costs on L1, making them a more cost-effective option for users. +To avoid this increase in costs, Linea recommends following +[ESIP-3](https://docs.ethscriptions.com/esips/accepted-esips/esip-3-smart-contract-ethscription-creations), +for creating inscriptions. This is because events and subcalls do not involve +any finalization costs on L1, making them a more cost-effective option for +users. :::info[attention] -**We want to emphasize that this is the best and only method for creating inscriptions on Linea that we will support.** Any team building tools for inscriptions or issuing inscriptions will receive our support, including marketing support, only if they use this pattern documented in ESIP-3. Special thanks to the Lins20 and Carpenter teams! Their collaboration and support were invaluable in creating this reference implementation. +**We want to emphasize that this is the best and only method for creating +inscriptions on Linea that we will support.** Any team building tools for +inscriptions or issuing inscriptions will receive our support, including +marketing support, only if they use this pattern documented in ESIP-3. Special +thanks to the Lins20 and Carpenter teams! Their collaboration and support were +invaluable in creating this reference implementation. ::: @@ -31,7 +47,8 @@ event ethscriptions_protocol_CreateEthscription( - `initialOwner`is usually the msg.sender. - `contentURI` should be crafted by minimizing the amount of calldata. -We recommend loading it from the contract code to reduce the amount of calldata that has to be passed to the contract. +We recommend loading it from the contract code to reduce the amount of calldata +that has to be passed to the contract. ::: diff --git a/docs/developers/guides/linea-safe.mdx b/docs/developers/guides/linea-safe.mdx index 56f924d2e..c56102e12 100644 --- a/docs/developers/guides/linea-safe.mdx +++ b/docs/developers/guides/linea-safe.mdx @@ -4,10 +4,20 @@ description: Use Safe to create a multi-signature smart contract wallet on Linea image: /img/socialCards/create-a-multi-signature-smart-contract-wallet.jpg --- -Safe is a multi-signature smart contract wallet, which means it requires a minimum number of signatures to approve a transaction before it can occur. For example, if your business has three main stakeholders, you can configure the wallet to require approval from either two out of three or all three individuals before a transaction can proceed. This security measure ensures that no single person can compromise the funds. +Safe is a multi-signature smart contract wallet, which means it requires a +minimum number of signatures to approve a transaction before it can occur. For +example, if your business has three main stakeholders, you can configure the +wallet to require approval from either two out of three or all three individuals +before a transaction can proceed. This security measure ensures that no single +person can compromise the funds. -On top of that, Linea Safe gives complete self-custody over funds. In other words, the smart contract deployed for the wallet has complete control over the wallet's contents, and doesn't rely on any trusted external party for execution. +On top of that, Linea Safe gives complete self-custody over funds. In other +words, the smart contract deployed for the wallet has complete control over the +wallet's contents, and doesn't rely on any trusted external party for execution. -To create your Safe wallet click [here](https://app.safe.global/), and select Linea as the network. To use the app on Linea Sepolia, click [here](https://safe.linea.build). +To create your Safe wallet click [here](https://app.safe.global/), and select +Linea as the network. To use the app on Linea Sepolia, click +[here](https://safe.linea.build). -If you need guidance on using the Safe app, check out their support page [here](https://help.safe.global/). +If you need guidance on using the Safe app, check out their support page +[here](https://help.safe.global/). diff --git a/docs/developers/guides/linea-sdk/index.md b/docs/developers/guides/linea-sdk/index.md index d2b184c18..3001b03d1 100644 --- a/docs/developers/guides/linea-sdk/index.md +++ b/docs/developers/guides/linea-sdk/index.md @@ -13,7 +13,9 @@ npm install @consensys/linea-sdk ## Features -The SDK focuses on interacting with smart contracts on both Ethereum and Linea networks and provides custom functions to obtain message information. Notable features of the Linea SDK include: +The SDK focuses on interacting with smart contracts on both Ethereum and Linea +networks and provides custom functions to obtain message information. Notable +features of the Linea SDK include: 1. Getting contract instances and addresses @@ -23,32 +25,47 @@ The SDK focuses on interacting with smart contracts on both Ethereum and Linea n 4. Getting a message status by message hash -5. Claiming messages (use one of the get message methods to grab all the parameters values) +5. Claiming messages (use one of the get message methods to grab all the + parameters values) :::info[New Features] -The updated Linea SDK package enhances the L1 contract interaction and adds support for the new L1 claiming system, which is based on a Merkle tree and requires a Merkle proof for claiming. +The updated Linea SDK package enhances the L1 contract interaction and adds +support for the new L1 claiming system, which is based on a Merkle tree and +requires a Merkle proof for claiming. There are three important things to note: - The previous L1 claiming and all functions associated are still supported. -- The L2 claiming remains unaltered, and all SDK features for interacting with L2 will remain unchanged. -- The previous L1 claiming function and code samples provided here cater to the transition period where pre-transition messages are claimed without the Merkle proof and post-transition with proof. If this SDK is being used after the transition, using the logic that switches between Merkle and non-Merkle proof claiming is sub-optimal. +- The L2 claiming remains unaltered, and all SDK features for interacting with + L2 will remain unchanged. +- The previous L1 claiming function and code samples provided here cater to the + transition period where pre-transition messages are claimed without the Merkle + proof and post-transition with proof. If this SDK is being used after the + transition, using the logic that switches between Merkle and non-Merkle proof + claiming is sub-optimal. The updated SDK introduces several new features for L1 interactions: A new L1ClaimingService class that includes the following functions: -- getMessageProof: This function retrieves the message Merkle tree proof required for new message claims on L1. -- isClaimingNeedingProof: This function determines whether a proof is needed to claim a message. -- getMessageStatus: This function retrieves a message's status, returning the status of both old and new messages. -- estimateClaimMessageGas: This function provides an estimate of the gas cost for both old and new claim transactions. -- claimMessage: This function enables a message to be claimed using either the old or new function. +- getMessageProof: This function retrieves the message Merkle tree proof + required for new message claims on L1. +- isClaimingNeedingProof: This function determines whether a proof is needed to + claim a message. +- getMessageStatus: This function retrieves a message's status, returning the + status of both old and new messages. +- estimateClaimMessageGas: This function provides an estimate of the gas cost + for both old and new claim transactions. +- claimMessage: This function enables a message to be claimed using either the + old or new function. Two new functions in the L1 contract: -- estimateClaimWithProofGas: This functions estimates the gas cost for new claim transactions. -- claimWithProof: This functions claims a message using the new claimMessageWithProof function. +- estimateClaimWithProofGas: This functions estimates the gas cost for new claim + transactions. +- claimWithProof: This functions claims a message using the new + claimMessageWithProof function. ::: @@ -56,7 +73,8 @@ Two new functions in the L1 contract: import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; - + ```typescript import * as dotenv from "dotenv"; diff --git a/docs/developers/guides/run-a-node/besu.mdx b/docs/developers/guides/run-a-node/besu.mdx index fb6c00e7f..6c2980d5c 100644 --- a/docs/developers/guides/run-a-node/besu.mdx +++ b/docs/developers/guides/run-a-node/besu.mdx @@ -11,17 +11,24 @@ import VolumeCreation from "./volume-creation.mdx"; import NodeSize from "../../../../src/components/NodeSize"; import LastUpdated from "../../../../src/components/LastUpdated"; -[Besu](https://besu.hyperledger.org/) is an open source Ethereum client developed under the Apache 2.0 license and written in Java. +[Besu](https://besu.hyperledger.org/) is an open source Ethereum client +developed under the Apache 2.0 license and written in Java. -:::info important Install and run a Besu node if you want to follow the Linea network by maintaining a local copy of the blockchain. However, if you want to interact with the network and use Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. ::: +:::info important Install and run a Besu node if you want to follow the Linea +network by maintaining a local copy of the blockchain. However, if you want to +interact with the network and use Linea-specific methods and features, you +should [install Linea Besu](./linea-besu.mdx) instead. ::: -You can run Besu from a [binary distribution](#run-using-the-binary-distribution) or [using Docker](#run-using-docker). +You can run Besu from a +[binary distribution](#run-using-the-binary-distribution) or +[using Docker](#run-using-docker). ## Run using the binary distribution ### Step 1. Install Besu -[Download and install Besu](https://besu.hyperledger.org/public-networks/get-started/install/binary-distribution) using the instructions in the official documentation. +[Download and install Besu](https://besu.hyperledger.org/public-networks/get-started/install/binary-distribution) +using the instructions in the official documentation. ### Step 2. Download the genesis file and Besu configuration file @@ -33,9 +40,11 @@ Download the genesis file and Besu configuration file. Mainnet [`genesis-mainnet.json`](pathname:///files/besu/genesis-mainnet.json) file and Besu [`config-mainnet.toml`](pathname:///files/besu/config-mainnet.toml) file. -:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above configuration file uses all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. +The above configuration file uses all bootnodes by default. -The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. +::: @@ -51,22 +60,29 @@ The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. Define a volume size appropriate to your expected usage. Besu nodes use: -- Full node: -- Archive node: +- Full node: + +- Archive node: + -Use these figures as a basis to determine the extent to which you want to future-proof your node. +Use these figures as a basis to determine the extent to which you want to +future-proof your node. -To limit disk space required, we recommend you configure Besu to use the [Bonsai](https://besu.hyperledger.org/public-networks/concepts/data-storage-formats#bonsai-tries) data storage format, which prunes orphaned nodes and old branches. +To limit disk space required, we recommend you configure Besu to use the +[Bonsai](https://besu.hyperledger.org/public-networks/concepts/data-storage-formats#bonsai-tries) +data storage format, which prunes orphaned nodes and old branches. -Ensure you mount the Besu `data-path` to the custom volume when you start the node. +Ensure you mount the Besu `data-path` to the custom volume when you start the +node. ### Step 4. Configure the Besu configuration file -In your Besu configuration file (`config-mainnet.toml` or `config-sepolia.toml`), configure the following options: +In your Besu configuration file (`config-mainnet.toml` or +`config-sepolia.toml`), configure the following options: - Set `data-path` to the location you want to store your data. - Set `genesis-file` to the path of your downloaded genesis file. @@ -84,7 +100,8 @@ Run the Besu client with the location of your configuration file. For example: -The Besu node will attempt to find peers to begin synchronizing and to download the world state. +The Besu node will attempt to find peers to begin synchronizing and to download +the world state. ## Run using Docker @@ -100,16 +117,21 @@ Download and install [Docker](https://www.docker.com/products/docker-desktop/). ### Step 1. Download configuration files -Download the configuration files for the relevant network (in ZIP format) and extract them. The configuration files include the network genesis file, Docker Compose file and Besu configuration file. +Download the configuration files for the relevant network (in ZIP format) and +extract them. The configuration files include the network genesis file, Docker +Compose file and Besu configuration file. Download the mainnet [`besu-mainnet` ZIP file](pathname:///files/besu/besu-mainnet.zip). -:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The Besu `.zip` includes a config file named `config-snap-mainnet.toml` where bootnodes are specified. The file uses all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. +The Besu `.zip` includes a config file named `config-snap-mainnet.toml` where +bootnodes are specified. The file uses all bootnodes by default. -The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. +::: @@ -121,7 +143,8 @@ The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ### Step 2. Update the Docker Compose file -In the `docker-compose.yaml` file, update the `--p2p-host` command to include your public IP address. For example: +In the `docker-compose.yaml` file, update the `--p2p-host` command to include +your public IP address. For example: ```yaml --p2p-host=103.10.10.10 @@ -129,25 +152,35 @@ In the `docker-compose.yaml` file, update the `--p2p-host` command to include yo :::tip -You can use [this page](https://www.whatismyip.com/) to find your public IP address. +You can use [this page](https://www.whatismyip.com/) to find your public IP +address. ::: ### Step 3. Start the Besu node -Open a terminal, in the directory containing the `docker-compose.yml` file, run `docker-compose up`. +Open a terminal, in the directory containing the `docker-compose.yml` file, run +`docker-compose up`. -It can take up to 20 minutes for the node to find peers. If it takes any longer than that, try restarting the node. +It can take up to 20 minutes for the node to find peers. If it takes any longer +than that, try restarting the node. :::tip Troubleshoot peering issues -Refer to the [Besu troubleshooting information](https://besu.hyperledger.org/public-networks/how-to/troubleshoot/peering) for help if you experience peering issues. +Refer to the +[Besu troubleshooting information](https://besu.hyperledger.org/public-networks/how-to/troubleshoot/peering) +for help if you experience peering issues. ::: ## Confirm the node is running -You can call the JSON-RPC API methods to confirm the node is running. For example, call [`eth_syncing`](https://besu.hyperledger.org/public-networks/reference/api#eth_syncing) to return the synchronization status. For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). +You can call the JSON-RPC API methods to confirm the node is running. For +example, call +[`eth_syncing`](https://besu.hyperledger.org/public-networks/reference/api#eth_syncing) +to return the synchronization status. For example the starting, current, and +highest block, or `false` if not synchronizing (or if the head of the chain has +been reached). ```bash diff --git a/docs/developers/guides/run-a-node/bootnodes.mdx b/docs/developers/guides/run-a-node/bootnodes.mdx index 66b0066f1..dd8707b21 100644 --- a/docs/developers/guides/run-a-node/bootnodes.mdx +++ b/docs/developers/guides/run-a-node/bootnodes.mdx @@ -4,13 +4,16 @@ description: Bootnodes available for Linea Mainnet image: /img/socialCards/bootnodes.jpg --- -The following bootnodes enable your node to find a peer node when initializing. To optimize performance, we recommend you select a location that corresponds to you: +The following bootnodes enable your node to find a peer node when initializing. +To optimize performance, we recommend you select a location that corresponds to +you: - `us-east-2`: United States - `ap-southeast-1`: Asia-Pacific - `eu-north-1`: Europe -Choosing a closer region will minimize latency, but any enode will work regardless of the location you choose. +Choosing a closer region will minimize latency, but any enode will work +regardless of the location you choose. ## `us-east-2` diff --git a/docs/developers/guides/run-a-node/erigon.mdx b/docs/developers/guides/run-a-node/erigon.mdx index c8492e641..cb82f185b 100644 --- a/docs/developers/guides/run-a-node/erigon.mdx +++ b/docs/developers/guides/run-a-node/erigon.mdx @@ -9,17 +9,26 @@ import TabItem from "@theme/TabItem"; import VolumeCreation from "./volume-creation.mdx"; -Erigon is a client implementation focused on performance and saving disk space, written in Go. +Erigon is a client implementation focused on performance and saving disk space, +written in Go. -:::info important Install and run an Erigon if you want to follow the Linea network by maintaining a local copy of the blockchain. However, if you want to interact with the network and use Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. ::: +:::info important Install and run an Erigon if you want to follow the Linea +network by maintaining a local copy of the blockchain. However, if you want to +interact with the network and use Linea-specific methods and features, you +should [install Linea Besu](./linea-besu.mdx) instead. ::: -You can run Erigon from a [binary distribution](#run-using-the-binary-distribution) or [using Docker](#run-using-docker). +You can run Erigon from a +[binary distribution](#run-using-the-binary-distribution) or +[using Docker](#run-using-docker). ## Run using the binary distribution -:::info Ensure you review [Erigon's software prerequisites](https://erigon.gitbook.io/erigon/basic-usage/getting-started#software-prerequisites) before installing the Erigon client. +:::info Ensure you review +[Erigon's software prerequisites](https://erigon.gitbook.io/erigon/basic-usage/getting-started#software-prerequisites) +before installing the Erigon client. -If you're not comfortable with installing the binary distribution, consider using [Docker](#run-using-docker) instead. ::: +If you're not comfortable with installing the binary distribution, consider +using [Docker](#run-using-docker) instead. ::: ### Step 1. Install Erigon @@ -27,7 +36,9 @@ If you're not comfortable with installing the binary distribution, consider usin ### Step 2. Download the genesis file -Download the genesis file for the relevant network. In the example, we'll download the file to the directory specified by [`datadir` in Step 4](#step-4-bootstrap-your-node). +Download the genesis file for the relevant network. In the example, we'll +download the file to the directory specified by +[`datadir` in Step 4](#step-4-bootstrap-your-node). @@ -42,16 +53,20 @@ Download the genesis file for the relevant network. In the example, we'll downlo ### Step 3. Define disk space volume (optional) -Define a volume size appropriate to your expected usage. As of October 8 2024, Erigon nodes use: +Define a volume size appropriate to your expected usage. As of October 8 2024, +Erigon nodes use: - Full nodes: 122GB. - Archive nodes: 472GB. -Use these figures as a basis to determine the extent to which you want to future-proof your node. +Use these figures as a basis to determine the extent to which you want to +future-proof your node. Ensure you mount the Erigon `datadir` to the custom volume. -If you run out of space, or need to actively maintain how much space is being used, consider [pruning](https://erigon.gitbook.io/erigon/advanced-usage/options). +If you run out of space, or need to actively maintain how much space is being +used, consider +[pruning](https://erigon.gitbook.io/erigon/advanced-usage/options). @@ -97,9 +112,11 @@ Start the node using the following command: --verbosity 3 ``` -:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above command uses all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. +The above command uses all bootnodes by default. -The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. +::: @@ -125,7 +142,8 @@ The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. -The Erigon node will attempt to find peers to begin synchronizing and to download the world state. +The Erigon node will attempt to find peers to begin synchronizing and to +download the world state. ## Run using Docker @@ -135,7 +153,8 @@ Download and install [Docker](https://www.docker.com/products/docker-desktop/). ### Step 1. Download configuration files -Download the configuration files for the relevant network. Ensure that you download the files to the same directory. +Download the configuration files for the relevant network. Ensure that you +download the files to the same directory. @@ -143,9 +162,11 @@ Download the configuration files for the relevant network. Ensure that you downl Download the mainnet [`docker-compose.yml`](pathname:///files/erigon/mainnet/docker-compose.yml) and [`genesis.json`](pathname:///files/erigon/mainnet/genesis.json) files. -:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above command uses all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. +The above command uses all bootnodes by default. -The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ::: +The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. +::: @@ -158,13 +179,17 @@ The [bootnodes page](bootnodes.mdx) contains a full list of available bootnodes. ### Step 2. Start the Erigon node -Open up a terminal where the both `docker-compose.yml` and `genesis.json` are located (they should be in the same directory) and run `docker compose up` +Open up a terminal where the both `docker-compose.yml` and `genesis.json` are +located (they should be in the same directory) and run `docker compose up` The node should now be running and looking for peers to sync. ## Confirm the node is running -You can call the JSON-RPC API methods to confirm the node is running. For example, call `eth_syncing` to return the synchronization status. For example the starting, current, and highest block, or `false` if not synchronizing (or if the head of the chain has been reached). +You can call the JSON-RPC API methods to confirm the node is running. For +example, call `eth_syncing` to return the synchronization status. For example +the starting, current, and highest block, or `false` if not synchronizing (or if +the head of the chain has been reached). ```bash diff --git a/docs/developers/guides/run-a-node/geth.mdx b/docs/developers/guides/run-a-node/geth.mdx index ba9dca646..d657c7826 100644 --- a/docs/developers/guides/run-a-node/geth.mdx +++ b/docs/developers/guides/run-a-node/geth.mdx @@ -11,21 +11,29 @@ import VolumeCreation from "./volume-creation.mdx"; import NodeSize from "../../../../src/components/NodeSize"; import LastUpdated from "../../../../src/components/LastUpdated"; -[Geth](https://geth.ethereum.org/) is an open-source Go implementation of Ethereum. +[Geth](https://geth.ethereum.org/) is an open-source Go implementation of +Ethereum. -:::info important Install and run a Geth node if you want to follow the Linea network by maintaining a local copy of the blockchain. However, if you want to interact with the network and use Linea-specific methods and features, you should [install Linea Besu](./linea-besu.mdx) instead. ::: +:::info important Install and run a Geth node if you want to follow the Linea +network by maintaining a local copy of the blockchain. However, if you want to +interact with the network and use Linea-specific methods and features, you +should [install Linea Besu](./linea-besu.mdx) instead. ::: -You can run Geth from a [binary distribution](#run-using-the-binary-distribution) or [using Docker](#run-using-docker). +You can run Geth from a +[binary distribution](#run-using-the-binary-distribution) or +[using Docker](#run-using-docker). ## Run using the binary distribution ### Step 1. Install Geth -[Download and install](https://geth.ethereum.org/docs/getting-started/installing-geth) the Geth client. +[Download and install](https://geth.ethereum.org/docs/getting-started/installing-geth) +the Geth client. :::warning -Linea only supports Geth _up to_ v1.13.15 or lower. v1.14.0 and subsequent versions aren't supported. +Linea only supports Geth _up to_ v1.13.15 or lower. v1.14.0 and subsequent +versions aren't supported. ::: @@ -46,16 +54,20 @@ Download the genesis file for the relevant network. Define a volume size appropriate to your expected usage. Geth nodes use: -- Full node: -- Archive node: +- Full node: + +- Archive node: + -Use these figures as a basis to determine the extent to which you want to future-proof your node. +Use these figures as a basis to determine the extent to which you want to +future-proof your node. Ensure you mount the Geth `datadir` to the custom volume. -If you run out of space, or need to actively maintain how much space is being used, consider [pruning](https://geth.ethereum.org/docs/fundamentals/pruning). +If you run out of space, or need to actively maintain how much space is being +used, consider [pruning](https://geth.ethereum.org/docs/fundamentals/pruning). @@ -99,9 +111,11 @@ Start the node using the following command: --verbosity 3 ``` -:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. The above command uses all bootnodes by default. +:::note[bootnodes] You can choose from a range of bootnodes for Linea Mainnet. +The above command uses all bootnodes by default. -See our [bootnodes page](bootnodes.mdx) for a full list of available bootnodes. ::: +See our [bootnodes page](bootnodes.mdx) for a full list of available bootnodes. +::: @@ -127,9 +141,13 @@ See our [bootnodes page](bootnodes.mdx) for a full list of available bootnodes. -The Linea network only produces blocks if there is currently at least 1 pending transaction. If you see no incoming blocks to your node, **that doesn't mean that the node is not syncing**. +The Linea network only produces blocks if there is currently at least 1 pending +transaction. If you see no incoming blocks to your node, **that doesn't mean +that the node is not syncing**. -**If you don't see any incoming blocks**, check and make sure that you have **at least one peer from the bootnodes**; otherwise, you might not be connected to the Linea network. +**If you don't see any incoming blocks**, check and make sure that you have **at +least one peer from the bootnodes**; otherwise, you might not be connected to +the Linea network.