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 998e0968d..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,8 +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:
@@ -31,48 +33,56 @@ 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.
@@ -85,7 +95,8 @@ network. ## 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 > @@ -114,6 +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 dd1cb9ea1..4ff0c3a4f 100644 --- a/docs/architecture/overview/decentralization-roadmap/index.mdx +++ b/docs/architecture/overview/decentralization-roadmap/index.mdx @@ -4,8 +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.
@@ -18,105 +19,125 @@ 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. - -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**. - -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 +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). + +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/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 ada206a81..ee1f1a25a 100644 --- a/docs/architecture/overview/transaction-lifecycle.mdx +++ b/docs/architecture/overview/transaction-lifecycle.mdx @@ -9,13 +9,16 @@ 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 +26,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 ad4892e90..04c907062 100644 --- a/docs/architecture/stack/bridges/canonical-token-bridge.mdx +++ b/docs/architecture/stack/bridges/canonical-token-bridge.mdx @@ -18,21 +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 @@ -97,11 +101,13 @@ and click on the **Bridge** button to show all that are available. - 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 4ef4ad46b..d0ba55c75 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 e96c22ed5..5ab5412dd 100644 --- a/docs/architecture/stack/canonical-msg-service/message-service.mdx +++ b/docs/architecture/stack/canonical-msg-service/message-service.mdx @@ -12,10 +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 @@ -46,7 +47,7 @@ The message service is responsible for cross-chain messages between Ethereum and - + @@ -56,12 +57,12 @@ The message service is responsible for cross-chain messages between Ethereum and @@ -74,38 +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: - - 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 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 7a43a05f2..ab56d67af 100644 --- a/docs/architecture/stack/evm-state-manager/index.mdx +++ b/docs/architecture/stack/evm-state-manager/index.mdx @@ -5,249 +5,285 @@ 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] + 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. - -These operations are applied to two trees; [world state](#world-state) and [account storage state](#account-storage-state). + +- **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`): - -- `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] ``` 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 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 97107b1fb..9d731e199 100644 --- a/docs/architecture/stack/index.mdx +++ b/docs/architecture/stack/index.mdx @@ -5,42 +5,49 @@ 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. ### [`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. @@ -48,21 +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 8093141fa..870ac4db2 100644 --- a/docs/architecture/stack/sequencer/conflation.mdx +++ b/docs/architecture/stack/sequencer/conflation.mdx @@ -4,30 +4,44 @@ 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? -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 b43d20ebd..49bb1eb18 100644 --- a/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx +++ b/docs/architecture/stack/trace-expansion-proving/prover-limits.mdx @@ -5,36 +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 ec58419a7..c318af9fb 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 4741c4df6..22dcc94cc 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 a808b02ca..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,29 +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. +[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/). @@ -44,7 +44,8 @@ and appropriately fund your wallet. -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).
@@ -55,9 +56,9 @@ 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.
@@ -68,7 +69,8 @@ select it.
-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.
@@ -81,16 +83,19 @@ 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/)), +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..d89913217 100644 --- a/docs/developers/guides/bridge/how-to-bridge-eth.mdx +++ b/docs/developers/guides/bridge/how-to-bridge-eth.mdx @@ -7,40 +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. -::: +[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. ::: @@ -59,7 +66,8 @@ until you can cover the fees.
-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.
@@ -70,7 +78,8 @@ until you can cover the fees.
-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.
@@ -92,8 +101,9 @@ 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 +114,8 @@ 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 +126,11 @@ 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 @@ -136,7 +147,8 @@ account's balance. -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.
@@ -147,8 +159,8 @@ 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 +182,9 @@ 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 +195,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".
@@ -193,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.
@@ -204,8 +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.
@@ -216,17 +230,18 @@ 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 +258,8 @@ 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 +270,8 @@ 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 +293,9 @@ 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 +306,10 @@ 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".
@@ -303,7 +320,8 @@ To claim, click on the transaction to open its details, then click "Claim".
-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.
@@ -314,4 +332,5 @@ To claim, click on the transaction to open its details, then click "Claim".
-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 a67e751fc..aa0409ea6 100644 --- a/docs/developers/guides/bridge/index.mdx +++ b/docs/developers/guides/bridge/index.mdx @@ -4,23 +4,25 @@ 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. +Select one of the following cards for instructions to bridge using the default +canonical token bridge. @@ -28,42 +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 fb6323c81..1e0782888 100644 --- a/docs/developers/guides/community/index.mdx +++ b/docs/developers/guides/community/index.mdx @@ -8,7 +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 c4475470b..3ea232dd1 100644 --- a/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx +++ b/docs/developers/guides/community/irys/irys-dynamic-nfts.mdx @@ -5,12 +5,13 @@ 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. +[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 +22,9 @@ 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 +38,45 @@ 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}`); - ``` - -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 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}`, + ); + ``` ## 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,7 +107,8 @@ contract SuperMon is ERC721URIStorage { ``` -[Deploy the smart contract using Remix](../../../quickstart/deploy-smart-contract/remix.mdx), or +[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,123 +124,125 @@ 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`. +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**.
@@ -242,14 +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 \ @@ -275,15 +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 f68a23c5f..1ad41dc5b 100644 --- a/docs/developers/guides/community/irys/irys-nfts.mdx +++ b/docs/developers/guides/community/irys/irys-nfts.mdx @@ -4,27 +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 @@ -72,10 +74,11 @@ 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 +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). @@ -83,11 +86,13 @@ upload your assets to Irys. You can also do the same using the #### 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 ``` + Depending on your setup, you may need to use the sudo command. ```bash @@ -128,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 { @@ -144,8 +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` @@ -177,5 +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 6babf7708..9fe7d42c9 100644 --- a/docs/developers/guides/deploy-subdomain.mdx +++ b/docs/developers/guides/deploy-subdomain.mdx @@ -4,32 +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/). - -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 +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 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 +88,11 @@ 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 +101,27 @@ 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 +129,34 @@ 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. 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. + - `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/). @@ -154,10 +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 68880f657..ba5283c31 100644 --- a/docs/developers/guides/finalized-block.mdx +++ b/docs/developers/guides/finalized-block.mdx @@ -3,19 +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 \ @@ -26,15 +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 @@ -42,76 +45,77 @@ variable. ### Create the script -1. In your project folder, initialize the project and install the `web3` package: - - ```bash - npm init -y - ``` - - ```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(); - ``` +1. In your project folder, initialize the project and install the `web3` + package: + + ```bash + npm init -y + ``` + + ```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(); + ``` 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..4a12040b8 100644 --- a/docs/developers/guides/gas-fees.mdx +++ b/docs/developers/guides/gas-fees.mdx @@ -4,62 +4,73 @@ 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): +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 +80,29 @@ 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,38 +110,40 @@ 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/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..fffe39023 100644 --- a/docs/developers/guides/linea-api.mdx +++ b/docs/developers/guides/linea-api.mdx @@ -5,41 +5,43 @@ sidebar_position: 6 image: /img/socialCards/use-the-linea-api.jpg --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +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. +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 +:::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. +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 @@ -54,13 +56,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: +or [yarn](https://yarnpkg.com/getting-started/install) as the package manager. +Then, in your project folder, initialise your new project: @@ -79,24 +82,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 +123,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 +138,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 +173,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 +188,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..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. ::: @@ -42,7 +59,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..c56102e12 100644 --- a/docs/developers/guides/linea-safe.mdx +++ b/docs/developers/guides/linea-safe.mdx @@ -4,17 +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.mdx similarity index 77% rename from docs/developers/guides/linea-sdk/index.md rename to docs/developers/guides/linea-sdk/index.mdx index d2b184c18..9ee604794 100644 --- a/docs/developers/guides/linea-sdk/index.md +++ b/docs/developers/guides/linea-sdk/index.mdx @@ -13,42 +13,59 @@ 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 +1. Getting contract instances and addresses -2. Getting message information by message hash +2. Getting message information by message hash -3. Getting messages by transaction hash +3. Getting messages by transaction hash -4. Getting a message status by message hash +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"; @@ -202,16 +220,28 @@ const sdk = new LineaSDK({ await l1Contract.claim(message); } else { const proofInfo = // Implement your own function to get a merkle proof - // The L1ClaimingService exposes some utility functions to assist you: getFinalizationMessagingInfo, getL2MessageHashesInBlockRange, getMessageSiblings + // The L1ClaimingService exposes some utility functions to assist you: + // getFinalizationMessagingInfo, getL2MessageHashesInBlockRange, + // getMessageSiblings // Follow these steps: // 1. Retrieve the MessageSent event on L2 by messageHash - // 2. Retrieve the L2MessagingBlockAnchored event on L1 using the MessageSent.blockNumber you acquired in step 1. This is used to get the finalization transaction hash where the L2 block number associated to your message has been finalized. - // 3. Invoke the getFinalizationMessagingInfo function using the L2MessagingBlockAnchored.transactionHash you obtained in step 2. - // This will return all merkle roots anchored during this finalization transaction, the depth of trees, the first and the last L2 block containing messages finalized on L1 in this transaction. - // 4. Invoke the getL2MessageHashesInBlockRange function using the first and last L2 block number that you obtained in step 3. This will return all l2 messages hashes in this L2 block range. - // 5. Invoke the getMessageSiblings function to obtain all message siblings - // 6. Construct a SparseMerkleTree, add all message siblings you obtained at step 5 to the tree and return a merkle proof + // 2. Retrieve the L2MessagingBlockAnchored event on L1 using the + // MessageSent.blockNumber you acquired in step 1. This is used to + // get the finalization transaction hash where the L2 block number + // associated to your message has been finalized. + // 3. Invoke the getFinalizationMessagingInfo function using the + // L2MessagingBlockAnchored.transactionHash you obtained in step 2. + // This will return all merkle roots anchored during this finalization + // transaction, the depth of trees, the first and the last L2 block + // containing messages finalized on L1 in this transaction. + // 4. Invoke the getL2MessageHashesInBlockRange function using the first + // and last L2 block number that you obtained in step 3. This will + // return all l2 messages hashes in this L2 block range. + // 5. Invoke the getMessageSiblings function to obtain all message + // siblings + // 6. Construct a SparseMerkleTree, add all message siblings you obtained + // at step 5 to the tree and return a merkle proof // NOTE: You can create your own functions that encompass all steps. Utility functions are merely provided as a helper. diff --git a/docs/developers/guides/run-a-node/besu.mdx b/docs/developers/guides/run-a-node/besu.mdx index 212e3d293..87cb740d5 100644 --- a/docs/developers/guides/run-a-node/besu.mdx +++ b/docs/developers/guides/run-a-node/besu.mdx @@ -11,25 +11,28 @@ 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. - -:::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. +[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. ::: -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 +### Step 2. Download the genesis file and Besu configuration file Download the genesis file and Besu configuration file. @@ -39,13 +42,13 @@ 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. ::: - + @@ -58,28 +61,33 @@ 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: +- 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) +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 `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 +96,15 @@ 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 +120,22 @@ 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. - ::: - @@ -145,7 +146,8 @@ files include the network genesis file, Docker Compose file and Besu configurati ### 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 @@ -153,28 +155,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 8c6edfbfd..dd8707b21 100644 --- a/docs/developers/guides/run-a-node/bootnodes.mdx +++ b/docs/developers/guides/run-a-node/bootnodes.mdx @@ -4,14 +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 15fee814a..23e7a0b4f 100644 --- a/docs/developers/guides/run-a-node/erigon.mdx +++ b/docs/developers/guides/run-a-node/erigon.mdx @@ -9,23 +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 +:::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,33 +37,36 @@ 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: +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 +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 +77,17 @@ 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 +117,12 @@ 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. - ::: - @@ -144,7 +147,8 @@ Start the node using the following command: -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 @@ -154,7 +158,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. @@ -162,13 +167,12 @@ 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 +184,17 @@ 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..d657c7826 100644 --- a/docs/developers/guides/run-a-node/geth.mdx +++ b/docs/developers/guides/run-a-node/geth.mdx @@ -11,26 +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. ::: @@ -40,14 +43,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. @@ -55,17 +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). @@ -75,19 +77,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 +111,12 @@ 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 +141,19 @@ 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.
@@ -170,7 +165,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. @@ -178,13 +174,12 @@ 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 +191,17 @@ 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..d534a00b0 100644 --- a/docs/developers/guides/run-a-node/index.mdx +++ b/docs/developers/guides/run-a-node/index.mdx @@ -7,35 +7,36 @@ import DocCardList from "@theme/DocCardList"; # Run a Linea node -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. - -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 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. - +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. + +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 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. diff --git a/docs/developers/guides/run-a-node/linea-besu.mdx b/docs/developers/guides/run-a-node/linea-besu.mdx index 6556a4188..89d4cdc40 100644 --- a/docs/developers/guides/run-a-node/linea-besu.mdx +++ b/docs/developers/guides/run-a-node/linea-besu.mdx @@ -11,23 +11,24 @@ 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 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 +36,16 @@ 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,14 +53,17 @@ 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: +- 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 `data-path` to the custom volume when you start the node. @@ -69,32 +71,35 @@ 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. @@ -109,7 +114,8 @@ on L1. -The node will attempt to find peers to begin synchronizing and to download the world state. +The node will attempt to find peers to begin synchronizing and to download the +world state. ## Run using Docker @@ -119,29 +125,33 @@ 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. ### Step 2. Update IP address -In the `.yaml` file you downloaded, adjust the `--p2p-host` command with your public IP address: +In the `.yaml` file you downloaded, adjust the `--p2p-host` command with your +public IP address: ```yaml --p2p-host=103.10.10.10 @@ -149,14 +159,15 @@ In the `.yaml` file you downloaded, adjust the `--p2p-host` command with your pu :::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. 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 +180,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..a831ea682 100644 --- a/docs/developers/guides/run-a-node/volume-creation.mdx +++ b/docs/developers/guides/run-a-node/volume-creation.mdx @@ -5,13 +5,15 @@ 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. ::: -Select the relevant operating system for the steps on how to create a custom volume. +Select the relevant operating system for the steps on how to create a custom +volume.
@@ -20,10 +22,13 @@ Select the relevant operating system for the steps on how to create a custom vol - Open Terminal - Use the `df -h` command to check the available disk space - Choose a maximum size for the volume. We'll use 100GB for this example. -- Use `fallocate` to create a file of the desired size, e.g. `fallocate -l 100G myfile.img` -- Use `mkfs.ext4` to format the file as an ext4 filesystem. e.g. `mkfs.ext4 myfile.img` +- Use `fallocate` to create a file of the desired size, e.g. + `fallocate -l 100G myfile.img` +- Use `mkfs.ext4` to format the file as an ext4 filesystem. e.g. + `mkfs.ext4 myfile.img` - Mount the file using `mount`, e.g. `mount -o loop myfile.img /mnt/myvolume` -- The contents will now be available in `/mnt/myvolume`, up to a maximum of 100GB +- The contents will now be available in `/mnt/myvolume`, up to a maximum of + 100GB
@@ -34,9 +39,11 @@ Select the relevant operating system for the steps on how to create a custom vol - Open Terminal - Use the `df -h` command to check the available disk space - Choose a maximum size for the volume. We'll use 100GB for this example. -- Use `hdiutil` to create a sparse image of the desired size, e.g. `hdiutil create -size 100g -type SPARSE -fs HFS+X myfile.dmg` +- Use `hdiutil` to create a sparse image of the desired size, e.g. + `hdiutil create -size 100g -type SPARSE -fs HFS+X myfile.dmg` - Mount the image using `hdiutil`, e.g. `hdiutil attach myfile.dmg` -- The contents will now be available mounted under `/Volumes`, up to a maximum of 100GB +- The contents will now be available mounted under `/Volumes`, up to a maximum + of 100GB @@ -49,9 +56,11 @@ Select the relevant operating system for the steps on how to create a custom vol Without Windows Subsystem Linux - Open Command Prompt as Administrator -- Use the `dir` command to check available disk space on the volume you want to create the disk image +- Use the `dir` command to check available disk space on the volume you want to + create the disk image - Choose a maximum size for the volume. We'll use 100GB for this example. -- Use the `fsutil` command to create a sparse file of the desired size, e.g. `fsutil file createnew myfile.img 107374182400` (for a 100GB file) +- Use the `fsutil` command to create a sparse file of the desired size, e.g. + `fsutil file createnew myfile.img 107374182400` (for a 100GB file) - Initialize the disk image using `diskpart`: - `diskpart` - `select vdisk file="myfile.img"` @@ -59,7 +68,8 @@ Select the relevant operating system for the steps on how to create a custom vol - `attach vdisk` - `exit` - Format the volume using `format`, e.g. `format F: /FS:NTFS /A:64K /Q` -- The new volume will now be available as drive letter F:, up to the maximum 100GB size +- The new volume will now be available as drive letter F:, up to the maximum + 100GB size To mount an existing disk image: @@ -78,10 +88,13 @@ To mount an existing disk image: - Open WSL - Use the `df -h` command to check the available disk space - Choose a maximum size for the volume. We'll use 100GB for this example. -- Use `fallocate` to create a file of the desired size, e.g. `fallocate -l 100G myfile.img` -- Use `mkfs.ext4` to format the file as an ext4 filesystem. e.g. `mkfs.ext4 myfile.img` +- Use `fallocate` to create a file of the desired size, e.g. + `fallocate -l 100G myfile.img` +- Use `mkfs.ext4` to format the file as an ext4 filesystem. e.g. + `mkfs.ext4 myfile.img` - Mount the file using `mount`, e.g. `mount -o loop myfile.img /mnt/myvolume` -- The contents will now be available in `/mnt/myvolume`, up to a maximum of 100GB +- The contents will now be available in `/mnt/myvolume`, up to a maximum of + 100GB diff --git a/docs/developers/linea-version/index.mdx b/docs/developers/linea-version/index.mdx index c02c8875d..4e4a447d9 100644 --- a/docs/developers/linea-version/index.mdx +++ b/docs/developers/linea-version/index.mdx @@ -20,16 +20,20 @@ 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. +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. -## Alpha v3.6 +- New arithmetization, with selected modules activated from the + [Linea specification](https://github.com/Consensys/linea-specification). +- The transition to generating traces with Besu. + +## Alpha v3.6 ### Block size changes @@ -37,8 +41,8 @@ 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 +52,18 @@ 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 +73,10 @@ 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 +86,8 @@ 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,28 +95,34 @@ 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). +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). +The Linea repository containing the relevant contracts is +[here](https://github.com/Consensys/linea-ens). -Consensys Diligence carried out an audit on Linea ENS, available [here](https://consensys.io/diligence/audits/2024/06/linea-ens/). +Consensys Diligence carried out an audit on Linea ENS, available +[here](https://consensys.io/diligence/audits/2024/06/linea-ens/). ### `linea_estimateGas` mainnet activation @@ -121,9 +132,11 @@ 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. +See our [reference page](../reference/api/linea-estimategas.mdx) for more +information and usage. ## Alpha v3.3 @@ -135,17 +148,18 @@ 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,15 +179,21 @@ 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) + +- 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). + +- 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). ### Bridge to a different recipient @@ -183,86 +203,100 @@ 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. +- 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. ## 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: +L1 and L2 smart contracts have been updated and deployed for Alpha v3. The +contract addresses are: - New verifier contract - - Sepolia (L1): [0x5ca5dBf7Cb8F3f3c92E04B16FF5fCA1cdf147f79](https://sepolia.etherscan.io/address/0x5ca5dBf7Cb8F3f3c92E04B16FF5fCA1cdf147f79) - - Ethereum Mainnet: [0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4](https://etherscan.io/address/0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4) + - Sepolia (L1): + [0x5ca5dBf7Cb8F3f3c92E04B16FF5fCA1cdf147f79](https://sepolia.etherscan.io/address/0x5ca5dBf7Cb8F3f3c92E04B16FF5fCA1cdf147f79) + - Ethereum Mainnet: + [0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4](https://etherscan.io/address/0x8AB455030E1Ea718e445f423Bb8D993dcAd24Cc4) - New L1 message service contract - - Sepolia (L1): [0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5](https://sepolia.etherscan.io/address/0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5) - - Ethereum Mainnet: [0xd19d4B5d358258f05D7B411E21A1460D11B0876F](https://etherscan.io/address/0xd19d4B5d358258f05D7B411E21A1460D11B0876F) + - Sepolia (L1): + [0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5](https://sepolia.etherscan.io/address/0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5) + - Ethereum Mainnet: + [0xd19d4B5d358258f05D7B411E21A1460D11B0876F](https://etherscan.io/address/0xd19d4B5d358258f05D7B411E21A1460D11B0876F) - New L2 message service contract - - Linea Sepolia: [0x971e727e956690b9957be6d51Ec16E73AcAC83A7](https://sepolia.lineascan.build/address/0x971e727e956690b9957be6d51Ec16E73AcAC83A7) - - Linea Mainnet: [0x508Ca82Df566dCD1B0DE8296e70a96332cD644ec](https://lineascan.build/address/0x508ca82df566dcd1b0de8296e70a96332cd644ec) + - 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). +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 +307,34 @@ None. ### February 19 **Testnet:** -- Released a higher priced version of `linea_estimateGas` (this will change once the endpoint is fully functional) + +- 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) + +- 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 @@ -319,82 +361,100 @@ This release focuses on reducing L1 costs, enabling lower prices for end users. L1 costs are primarily driven by the following: -- Proof verification, which is essentially a fixed cost for every batch submission. +- Proof verification, which is essentially a fixed cost for every batch + submission. -- Hashing the batch submission data to produce the public input of the Plonk verifier. +- 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: - - This reduces the call data cost on L1 by compressing L2 block data. (Post EIP-4844 this will be stored in blobs) + - This reduces the call data cost on L1 by compressing L2 block data. (Post + EIP-4844 this will be stored in blobs)
- 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,19 +464,23 @@ 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). +[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/ +- Diligence: + https://consensys.io/diligence/audits/2024/01/linea-contracts-update/ - Open Zeppelin: https://blog.openzeppelin.com/linea-v2-audit @@ -424,28 +488,32 @@ 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.mdx). ::: **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. - - The calldata will contain only the final block state root hash and final block number. +- 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,33 +552,43 @@ 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 + - 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 ### 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 + - 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,12 +596,15 @@ 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) +- Deployed the Linea Voyage XP (LXP) + [token contract](https://lineascan.build/address/0xd83af4fbD77f3AB65C3B1Dc4B38D7e67AEcf599A) - Lowered block time to 8 seconds - Updated default `gasPrice` to 3 Gwei @@ -532,57 +613,65 @@ 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. +- 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) ### Summary -This release focuses on optimizing the prover's hashing strategy to increase its computational efficiency. +This release focuses on optimizing the prover's hashing strategy to increase its +computational efficiency. ## Linea Alpha v0.2.2 (June 20, 2023) ### Summary -This release focuses on updating the Postman SDK configuration values and revising gas fee calculations. +This release focuses on updating the Postman SDK configuration values and +revising gas fee calculations. ### 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 -- Instead of sending the entire event MessageSent, we only send the \_messageHash field of the event. +- Instead of sending the entire event MessageSent, we only send the + \_messageHash field of the event. - **Old calldata for L2 originated event**: @@ -607,43 +696,54 @@ 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. +- 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. - 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: - - 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 + - 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. -- Update prover to integrate with the new architecture and support Batch Conflation + - 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 **Message bridge** -- Bridging partners will need to listen to different events. Modifications to the events are seen below: +- Bridging partners will need to listen to different events. Modifications to + the events are seen below:
- 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5 + 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5 - 0x971e727e956690b9957be6d51Ec16E73AcAC83A7 + 0x971e727e956690b9957be6d51Ec16E73AcAC83A7
@@ -718,18 +818,19 @@ to a push model. It also improves EVM prover coverage, and provides batch confla
-- The anchoring and execution (claim) process has been separated into 2 steps. The deadline concept has been completely removed. +- The anchoring and execution (claim) process has been separated into 2 steps. + The deadline concept has been completely removed. :::note - Contracts audit is in progress. This doesn't reflect final versions. ::: - **L1 (Goerli)**: - - Bridging partners, to send messages, will need to call the new contract address with a different ABI. + - Bridging partners, to send messages, will need to call the new contract + address with a different ABI.
zkEVM2.abi @@ -742,7 +843,8 @@ Contracts audit is in progress. This doesn't reflect final versions. - **L2 (Linea)**: - - Bridging partners, to send messages, will need to call the new contract address with a different ABI. + - Bridging partners, to send messages, will need to call the new contract + address with a different ABI.
L2MessageService.abi @@ -750,14 +852,16 @@ 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. +- Bridging partners, before sending messages on L2, need to retrieve the service + protection fee before sending messages and include it in the value sent. **Canonical Token Bridge** -Major changes are applied to the Canonical Token Bridge as described in our [documentation](../../architecture/stack/bridges/canonical-token-bridge.mdx). +Major changes are applied to the Canonical Token Bridge as described in our +[documentation](../../architecture/stack/bridges/canonical-token-bridge.mdx). - **L1 (Goerli)** @@ -781,4 +885,5 @@ Major changes are applied to the Canonical Token Bridge as described in our [doc - Transparent Proxy: `0xB191E3d98074f92584E5205B99c3F17fB2068927` - Implementation: `0x6081C1392793e22dA39871D4362c1e7045A5bace` -If you have any questions, please reach out in the **Developer Support** channel in our [community forum](https://community.linea.build/c/developer-support)! +If you have any questions, please reach out in the **Developer Support** channel +in our [community forum](https://community.linea.build/c/developer-support)! diff --git a/docs/developers/quickstart/deploy-smart-contract/atlas.mdx b/docs/developers/quickstart/deploy-smart-contract/atlas.mdx index eceebf420..21bd38711 100644 --- a/docs/developers/quickstart/deploy-smart-contract/atlas.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/atlas.mdx @@ -4,7 +4,8 @@ description: Deploy a smart contract using Atlas. image: /img/socialCards/atlas.jpg --- -Atlas is a browser-based IDE with an integrated AI assistant that allows you to write, test and deploy smart contracts directly from your browser. +Atlas is a browser-based IDE with an integrated AI assistant that allows you to +write, test and deploy smart contracts directly from your browser. ## Deploy a contract @@ -12,19 +13,22 @@ 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..6e3af7ad8 100644 --- a/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/cookbook.mdx @@ -4,18 +4,24 @@ 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 -Navigate to [cookbook.dev/chains/Linea](https://www.cookbook.dev/chains/Linea?utm=lineadocs) and explore **Protocols** on Linea, or search for specific smart contracts in the search bar. +Navigate to +[cookbook.dev/chains/Linea](https://www.cookbook.dev/chains/Linea?utm=lineadocs) +and explore **Protocols** on Linea, or search for specific smart contracts in +the search bar.
@@ -26,11 +32,13 @@ 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.
@@ -43,7 +51,9 @@ code you're looking at, or ask ChefGPT questions about Linea, solidity, or your ## Import smart contract code into Cookbook -Import verified smart contract code into Cookbook to fork, learn about, or build with by inputting any smart contract address that's verified on an EVM-based block explorer into the Cookbook.dev search bar. +Import verified smart contract code into Cookbook to fork, learn about, or build +with by inputting any smart contract address that's verified on an EVM-based +block explorer into the Cookbook.dev search bar.
@@ -56,7 +66,8 @@ Import verified smart contract code into Cookbook to fork, learn about, or build ## Deploy a smart contract without coding -Choose **No-Code Deploy** on select (usually simpler) smart contracts on [Cookbook](https://www.cookbook.dev/contracts/simple-token?utm=lineadocs). +Choose **No-Code Deploy** on select (usually simpler) smart contracts on +[Cookbook](https://www.cookbook.dev/contracts/simple-token?utm=lineadocs).
@@ -81,63 +92,70 @@ 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 1. Go to [Remix.Ethereum.org](https://remix.ethereum.org) website. -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 -
-
- -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 Remix Search -
-
- -1. Compile and deploy the smart contract as described in [the Remix instructions](./remix.mdx). +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 +
+
+ +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 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 +171,9 @@ 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 @@ -162,31 +181,32 @@ 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. +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 +214,40 @@ 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. +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 +255,21 @@ 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,63 +278,66 @@ 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 -The tests in the `contract.t.sol` file are only examples, please generate your own. +The tests in the `contract.t.sol` file are only examples, please generate your +own. ::: ## 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..67ea5e45e 100644 --- a/docs/developers/quickstart/deploy-smart-contract/foundry.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/foundry.mdx @@ -4,19 +4,21 @@ 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: +In this quickstart, we'll create a basic [Foundry](https://book.getfoundry.sh/) +project. Here's a video walkthrough:
-
- -
+
+ +
## Prerequisites @@ -37,7 +39,8 @@ To create a Foundry project, run: forge init linea-tutorial ``` -Running `forge init` sets up a sample contract, test, and script for `Counter.sol`. +Running `forge init` sets up a sample contract, test, and script for +`Counter.sol`. Now change into the directory: @@ -47,16 +50,18 @@ 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) ::: @@ -69,8 +74,8 @@ 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). + [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,9 +88,10 @@ 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 +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 @@ -99,7 +105,8 @@ Then, run: source .env ``` -Finally, modify the `foundry.toml` file to store the various RPC endpoints we might be working with. For example: +Finally, modify the `foundry.toml` file to store the various RPC endpoints we +might be working with. For example: ```bash [rpc_endpoints] @@ -127,4 +134,5 @@ forge create --rpc-url linea-sepolia src/Counter.sol:Counter --private-key $PRIV -Next, you can optionally [verify your contract on the network](../verify-smart-contract/foundry.mdx). +Next, you can optionally +[verify your contract on the network](../verify-smart-contract/foundry.mdx). diff --git a/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx b/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx index 776621053..09234103b 100644 --- a/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/hardhat.mdx @@ -7,11 +7,13 @@ image: /img/socialCards/hardhat.jpg import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -In this quickstart, we'll create a basic [Hardhat](https://hardhat.org/) project. +In this quickstart, we'll create a basic [Hardhat](https://hardhat.org/) +project. ## Prerequisites -Before you begin, ensure you set up your environment using Hardhat's recommended instructions](https://hardhat.org/tutorial/setting-up-the-environment#2.-setting-up-the-environment). +Before you begin, ensure you set up your environment using Hardhat's recommended +instructions](https://hardhat.org/tutorial/setting-up-the-environment#2.-setting-up-the-environment). ## Create a Hardhat project @@ -19,129 +21,135 @@ 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. +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 @@ -155,4 +163,5 @@ Deployed Addresses LockModule#Lock - 0x2c73d6f093A2032D3371bFB9a29f7cE666080c4A ``` -Next, you can optionally [verify your contract on the network](../verify-smart-contract/hardhat.mdx). +Next, you can optionally +[verify your contract on the network](../verify-smart-contract/hardhat.mdx). 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..3e1508e05 100644 --- a/docs/developers/quickstart/deploy-smart-contract/remix.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/remix.mdx @@ -4,14 +4,16 @@ 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. +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.
@@ -24,7 +26,8 @@ code sample with a configured smart contract. ## Compile a Remix contract -Navigate to the **Solidity compiler** tab on the left navigation and click **Compile contract**. +Navigate to the **Solidity compiler** tab on the left navigation and click +**Compile contract**.
@@ -37,20 +40,22 @@ 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**.
@@ -61,4 +66,5 @@ Switch to the Linea network (mainnet or testnets) in your MetaMask wallet, and f
-Then, select **Deploy** and confirm the transaction. This deploys the contract to the network selected in MetaMask. +Then, select **Deploy** and confirm the transaction. This deploys the contract +to the network selected in MetaMask. diff --git a/docs/developers/quickstart/deploy-smart-contract/thirdweb.mdx b/docs/developers/quickstart/deploy-smart-contract/thirdweb.mdx index a170a49eb..48dbce554 100644 --- a/docs/developers/quickstart/deploy-smart-contract/thirdweb.mdx +++ b/docs/developers/quickstart/deploy-smart-contract/thirdweb.mdx @@ -4,11 +4,13 @@ description: Deploy a smart contract using thirdweb. image: /img/socialCards/thirdweb.jpg --- -thirdweb is a complete web3 development framework that provides everything you need to connect your apps and games to decentralized networks. +thirdweb is a complete web3 development framework that provides everything you +need to connect your apps and games to decentralized networks. ## Create a smart contract -To create a new smart contract using thirdweb [CLI](https://portal.thirdweb.com/cli), follow these steps: +To create a new smart contract using thirdweb +[CLI](https://portal.thirdweb.com/cli), follow these steps: 1. In your CLI run the following command: @@ -20,12 +22,24 @@ To create a new smart contract using thirdweb [CLI](https://portal.thirdweb.com/ 1. Give your project a name 2. Choose your preferred framework: Hardhat or Foundry 3. Name your smart contract - 4. Choose the type of base contract: Empty, [ERC-20](https://portal.thirdweb.com/contracts/build/base-contracts/erc-20/base), [ERC-721](https://portal.thirdweb.com/solidity/base-contracts/erc721base), or [ERC-1155](https://portal.thirdweb.com/solidity/base-contracts/erc1155base) - 5. Add any desired [extensions](https://portal.thirdweb.com/solidity/extensions) -3. Once created, navigate to your project’s directory and open in your preferred code editor. -4. If you open the `contracts` folder, you will find your smart contract; this is your smart contract written in Solidity. - - The following is code for an `ERC721Base` contract without specified extensions. It implements all of the logic inside the [ERC721Base.sol](https://github.com/thirdweb-dev/contracts/blob/main/contracts/base/ERC721Base.sol) contract; which implements the [ERC-721A](https://github.com/thirdweb-dev/contracts/blob/main/contracts/eip/ERC721A.sol) standard. + 4. Choose the type of base contract: Empty, + [ERC-20](https://portal.thirdweb.com/contracts/build/base-contracts/erc-20/base), + [ERC-721](https://portal.thirdweb.com/solidity/base-contracts/erc721base), + or + [ERC-1155](https://portal.thirdweb.com/solidity/base-contracts/erc1155base) + 5. Add any desired + [extensions](https://portal.thirdweb.com/solidity/extensions) +3. Once created, navigate to your project’s directory and open in your preferred + code editor. +4. If you open the `contracts` folder, you will find your smart contract; this + is your smart contract written in Solidity. + + The following is code for an `ERC721Base` contract without specified + extensions. It implements all of the logic inside the + [ERC721Base.sol](https://github.com/thirdweb-dev/contracts/blob/main/contracts/base/ERC721Base.sol) + contract; which implements the + [ERC-721A](https://github.com/thirdweb-dev/contracts/blob/main/contracts/eip/ERC721A.sol) + standard. ```bash // SPDX-License-Identifier: MIT @@ -43,19 +57,25 @@ To create a new smart contract using thirdweb [CLI](https://portal.thirdweb.com/ } ``` - This contract inherits the functionality of `ERC721Base` through the following steps: + This contract inherits the functionality of `ERC721Base` through the + following steps: - Importing the `ERC721Base` contract - - Inheriting the contract by declaring that our contract is an `ERC721Base` contract + - Inheriting the contract by declaring that our contract is an `ERC721Base` + contract - Implementing any required methods, such as the constructor. -5. After modifying your contract with your desired custom logic, you may deploy it to the [Linea testnet](https://thirdweb.com/linea-sepolia) using [`deploy`](https://portal.thirdweb.com/deploy). +5. After modifying your contract with your desired custom logic, you may deploy + it to the [Linea testnet](https://thirdweb.com/linea-sepolia) using + [`deploy`](https://portal.thirdweb.com/deploy). --- -Alternatively, you can deploy a prebuilt contract for NFTs, tokens, or marketplace directly from the thirdweb Explore page: +Alternatively, you can deploy a prebuilt contract for NFTs, tokens, or +marketplace directly from the thirdweb Explore page: -1. Navigate to the thirdweb Explore page: [https://thirdweb.com/explore](https://thirdweb.com/explore) +1. Navigate to the thirdweb Explore page: + [https://thirdweb.com/explore](https://thirdweb.com/explore)
@@ -66,16 +86,21 @@ Alternatively, you can deploy a prebuilt contract for NFTs, tokens, or marketpla
-2. Choose the type of contract you want to deploy from the available options: NFTs, tokens, marketplace, and more. +2. Choose the type of contract you want to deploy from the available options: + NFTs, tokens, marketplace, and more. 3. Follow the on-screen prompts to configure and deploy your contract. -> For more information on different contracts available on Explore, check out [thirdweb’s documentation.](https://portal.thirdweb.com/pre-built-contracts) +> For more information on different contracts available on Explore, check out +> [thirdweb’s documentation.](https://portal.thirdweb.com/pre-built-contracts) ## Deploy a smart contract -Deploy allows you to deploy a smart contract to any EVM-compatible network without configuring RPC URLs, exposing your private keys, writing scripts, and other additional setup such as verifying your contract. +Deploy allows you to deploy a smart contract to any EVM-compatible network +without configuring RPC URLs, exposing your private keys, writing scripts, and +other additional setup such as verifying your contract. -1. To deploy your smart contract using `deploy`, navigate to the root directory of your project and execute the following command: +1. To deploy your smart contract using `deploy`, navigate to the root directory + of your project and execute the following command: ```bash npx thirdweb deploy @@ -87,14 +112,20 @@ Deploy allows you to deploy a smart contract to any EVM-compatible network witho - Providing the option to select which contract(s) you wish to deploy. - Uploading your contract source code (ABI) to IPFS. -2. When this process is completed, a dashboard interface will open, where you will need to finish filling out the parameters: +2. When this process is completed, a dashboard interface will open, where you + will need to finish filling out the parameters: - `_name`: contract name - `_symbol`: symbol or "ticker" - - `_royaltyRecipient`: wallet address to receive royalties from secondary sales - - `_royaltyBps`: basis points (bps) that will be given to the royalty recipient for each secondary sale, e.g. 500 = 5% + - `_royaltyRecipient`: wallet address to receive royalties from secondary + sales + - `_royaltyBps`: basis points (bps) that will be given to the royalty + recipient for each secondary sale, e.g. 500 = 5% 3. Select [Linea testnet](https://thirdweb.com/linea-sepolia) as the network -4. Manage additional settings on your contract’s dashboard as needed, such as uploading NFTs, configuring permissions, and more. +4. Manage additional settings on your contract’s dashboard as needed, such as + uploading NFTs, configuring permissions, and more. -> For additional information on `deploy`, please reference [thirdweb’s documentation](https://portal.thirdweb.com/deploy). +> For additional information on `deploy`, please reference +> [thirdweb’s documentation](https://portal.thirdweb.com/deploy). -If you have any further questions or encounter any issues during the process, please [reach out to thirdweb support](https://support.thirdweb.com). +If you have any further questions or encounter any issues during the process, +please [reach out to thirdweb support](https://support.thirdweb.com). diff --git a/docs/developers/quickstart/ethereum-differences.mdx b/docs/developers/quickstart/ethereum-differences.mdx index 7dc5637f5..fd88fefe4 100644 --- a/docs/developers/quickstart/ethereum-differences.mdx +++ b/docs/developers/quickstart/ethereum-differences.mdx @@ -8,100 +8,114 @@ 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. +> ⚠️ At the moment we do not support the `eth_newFilter` and +> `eth_newBlockFilter` RPC calls. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
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. +[Evmdiff](https://www.evmdiff.com) is also a useful resource for comparing Linea +with Ethereum. ## Precompiles ### 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..552d4a0c5 100644 --- a/docs/developers/quickstart/index.mdx +++ b/docs/developers/quickstart/index.mdx @@ -6,18 +6,23 @@ image: /img/socialCards/building-on-linea.jpg # Building on Linea -Linea is EVM equivalent, so you can use your favorite development tools out of the box. In this quickstart, we'll walk through deploying and verifying your smart contracts on Linea using Hardhat and Foundry. +Linea is EVM equivalent, so you can use your favorite development tools out of +the box. In this quickstart, we'll walk through deploying and verifying your +smart contracts on Linea using Hardhat and Foundry. -It's always best practice to work on a test network before deploying a contract to a live public blockchain network; that way you can make sure everything's working the way you mean it to, without spending "real" tokens. +It's always best practice to work on a test network before deploying a contract +to a live public blockchain network; that way you can make sure everything's +working the way you mean it to, without spending "real" tokens. 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..bf46c8520 100644 --- a/docs/developers/quickstart/info-contracts.mdx +++ b/docs/developers/quickstart/info-contracts.mdx @@ -12,63 +12,101 @@ 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). +We recommend connecting to Linea via +[private RPCs](../tooling/node-providers/index.mdx#private-rpc-endpoints). ## Deployed contracts @@ -97,7 +135,7 @@ We recommend connecting to Linea via [private RPCs](../tooling/node-providers/in - + @@ -107,7 +145,7 @@ We recommend connecting to Linea via [private RPCs](../tooling/node-providers/in @@ -115,7 +153,7 @@ We recommend connecting to Linea via [private RPCs](../tooling/node-providers/in @@ -129,23 +167,26 @@ 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). +[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. ::: -To **get your own token included**, please follow the instructions on this [repository](https://github.com/Consensys/linea-token-list). +To **get your own token included**, please follow the instructions on this +[repository](https://github.com/Consensys/linea-token-list). -To see **which third-party bridges are available**, consult our [Ecosystem Portal's list](https://linea.build/apps?types=bridge). +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. @@ -191,11 +232,17 @@ For both mainnet and testnet: ## Block explorers -If you're new to public blockchain networks, you might not be familiar with _block explorers_. It's helpful to remember that the network is keeping track of a _ledger_ of accounts, with tokens attributed to them, sent between them, created by them, etc. +If you're new to public blockchain networks, you might not be familiar with +_block explorers_. It's helpful to remember that the network is keeping track of +a _ledger_ of accounts, with tokens attributed to them, sent between them, +created by them, etc. -As users take actions on the network, there are changes to those accounts and tokens. A block explorer is an interface through which you can look at that information in all its raw, gritty detail. +As users take actions on the network, there are changes to those accounts and +tokens. A block explorer is an interface through which you can look at that +information in all its raw, gritty detail. -> If you want to learn more about explorers and how to use them, check out the [MetaMask help center](https://support.metamask.io/managing-my-wallet/how-to-check-my-wallet-activity-on-the-blockchain-explorer/) +> If you want to learn more about explorers and how to use them, check out the +> [MetaMask help center](https://support.metamask.io/managing-my-wallet/how-to-check-my-wallet-activity-on-the-blockchain-explorer/) @@ -293,12 +340,14 @@ 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) - [GetBlock](https://getblock.io/faucet/linea-sepolia/) -- [HackQuest](https://www.hackquest.io/en/faucets/59141) (and check out their [Linea Learning Track](https://www.hackquest.io/en/learning-track/9be129e7-575b-49bd-a64e-1bbe32427ace)) +- [HackQuest](https://www.hackquest.io/en/faucets/59141) (and check out their + [Linea Learning Track](https://www.hackquest.io/en/learning-track/9be129e7-575b-49bd-a64e-1bbe32427ace)) -Alternatively, [use the Linea native bridge to bridge tokens between Sepolia and Linea Sepolia](../../developers/guides/bridge/how-to-bridge-eth.mdx). +Alternatively, +[use the Linea native bridge to bridge tokens between Sepolia and Linea Sepolia](../../developers/guides/bridge/how-to-bridge-eth.mdx). diff --git a/docs/developers/quickstart/verify-smart-contract/foundry.mdx b/docs/developers/quickstart/verify-smart-contract/foundry.mdx index 8cd199f7a..79905a06d 100644 --- a/docs/developers/quickstart/verify-smart-contract/foundry.mdx +++ b/docs/developers/quickstart/verify-smart-contract/foundry.mdx @@ -3,28 +3,32 @@ 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 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 +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). ::: ### Verify a contract that has already been deployed -If you want to verify a contract that has already been deployed, you can use the following commands: +If you want to verify a contract that has already been deployed, you can use the +following commands: @@ -65,7 +69,8 @@ Contract successfully verified ### Verify a contract upon creation -If you want to verify a contract as it is being deployed for the first time, you can use the following commands: +If you want to verify a contract as it is being deployed for the first time, you +can use the following commands: @@ -84,14 +89,19 @@ forge create --rpc-url https://linea-sepolia.infura.io/v3/INFURA_API_KEY src/Cou -You can check that it was verified correctly by navigating to the [testnet block explorer](https://sepolia.lineascan.build/) or the [mainnet block explorer](https://lineascan.build/) and pasting in the deployed contract address. +You can check that it was verified correctly by navigating to the +[testnet block explorer](https://sepolia.lineascan.build/) or the +[mainnet block explorer](https://lineascan.build/) and pasting in the deployed +contract address. ## 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 +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 @@ -131,8 +141,8 @@ 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 +:::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). -::: +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..5fceb7596 100644 --- a/docs/developers/quickstart/verify-smart-contract/hardhat.mdx +++ b/docs/developers/quickstart/verify-smart-contract/hardhat.mdx @@ -3,7 +3,9 @@ title: Hardhat image: /img/socialCards/hardhat.jpg --- -To verify your Hardhat contracts, use [Hardhat's Etherscan plugin](https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-etherscan) to verify contracts on Lineascan. +To verify your Hardhat contracts, use +[Hardhat's Etherscan plugin](https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-etherscan) +to verify contracts on Lineascan. :::note @@ -11,17 +13,22 @@ 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 +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 -If you aren't already using `@nomicfoundation/hardhat-toolbox`, you can use `@nomicfoundation/hardhat-verify` instead. Find the instructions on how to add it to your project [here](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#installation). +If you aren't already using `@nomicfoundation/hardhat-toolbox`, you can use +`@nomicfoundation/hardhat-verify` instead. Find the instructions on how to add +it to your project +[here](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#installation). ## 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: +[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 +44,15 @@ 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,8 +113,8 @@ etherscan: { :::note - -The Etherscan `apiKey` and network name for your custom chain must match the network name under `networks` in your `hardhat.config.js`. +The Etherscan `apiKey` and network name for your custom chain must match the +network name under `networks` in your `hardhat.config.js`. ::: @@ -130,7 +139,8 @@ npx hardhat verify --network linea_sepolia -You should see something that looks a little like this if verifying on Linea Sepolia: +You should see something that looks a little like this if verifying on Linea +Sepolia: ```bash npx hardhat verify --network linea_sepolia 0x3Af089fee468eb7fcf750e929321b0D7f7845f5C "1893456000" @@ -154,16 +164,19 @@ 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. +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. ::: -You can check that it was verified correctly by navigating to the [testnet block explorer](https://sepolia.lineascan.build/) or the [mainnet block explorer](https://lineascan.build/) and pasting in the deployed contract address. +You can check that it was verified correctly by navigating to the +[testnet block explorer](https://sepolia.lineascan.build/) or the +[mainnet block explorer](https://lineascan.build/) and pasting in the deployed +contract address. :::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..fe1fe8a29 100644 --- a/docs/developers/reference/api/eth-sendrawtransaction.mdx +++ b/docs/developers/reference/api/eth-sendrawtransaction.mdx @@ -8,30 +8,34 @@ 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 @@ -39,7 +43,8 @@ block, a [line count check is performed to ensure it conforms to the requirement ## Returns -The 32-byte transaction hash, or the zero hash if the transaction is not yet available. +The 32-byte transaction hash, or the zero hash if the transaction is not yet +available. ## Example @@ -51,6 +56,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 +71,14 @@ 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]` -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..442ceb68f 100644 --- a/docs/developers/reference/api/index.mdx +++ b/docs/developers/reference/api/index.mdx @@ -2,11 +2,12 @@ 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..0c63e7dc1 100644 --- a/docs/developers/reference/api/linea-estimategas.mdx +++ b/docs/developers/reference/api/linea-estimategas.mdx @@ -4,60 +4,68 @@ 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. +[`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. - - `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`. - - :::note - A `finalized` block is a block on an L2 blockchain (Linea) that has been confirmed and validated by - the L1 blockchain (Ethereum). - ::: + - `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`. + + :::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 @@ -65,12 +73,12 @@ You can also call the API using [Infura's supported Linea endpoints](https://doc - ```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 +89,44 @@ You can also call the API using [Infura's supported Linea endpoints](https://doc gasLimit: string; }; - 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 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 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 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(), + }); + + 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 }); - - 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); - } + console.log('Gas Estimate:', gasEstimate); + } catch (error) { + console.error('Error estimating gas:', error); } +} + +EstimateGas(); +```` - EstimateGas(); - ``` @@ -138,17 +145,20 @@ 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 +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..d5fc7e3b4 100644 --- a/docs/developers/reference/api/linea-getproof.mdx +++ b/docs/developers/reference/api/linea-getproof.mdx @@ -6,46 +6,51 @@ 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. ## Parameters -- `address`: A string representing the address (20 bytes) for which the proof is requested. +- `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 - `accountProof`: Provides proof data for the account: - `key`: The address of the account for which the proof is generated. - - `leafIndex`: The index of the leaf node in the sparse Merkle tree that corresponds to the account. + - `leafIndex`: The index of the leaf node in the sparse Merkle tree that + corresponds to the account. - `proof`: Object containing the proof data for the account: - - `proofRelatedNodes`: Array of nodes in the sparse Merkle tree used to construct the proof. - - `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: + - `proofRelatedNodes`: Array of nodes in the sparse Merkle tree used to + construct the proof. + - `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..d9623f029 100644 --- a/docs/developers/reference/api/linea-gettransactionexclusionstatusv1.mdx +++ b/docs/developers/reference/api/linea-gettransactionexclusionstatusv1.mdx @@ -4,25 +4,26 @@ 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 +31,18 @@ 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. -- `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. +- `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. ## Example @@ -86,20 +88,22 @@ 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 } ``` -A similar `null` result is also returned if the transaction is older than seven days. +A similar `null` result is also returned if the transaction is older than seven +days. diff --git a/docs/developers/tooling/account-abstraction/account-abstraction.mdx b/docs/developers/tooling/account-abstraction/account-abstraction.mdx index bcb2b0329..fd0269d77 100644 --- a/docs/developers/tooling/account-abstraction/account-abstraction.mdx +++ b/docs/developers/tooling/account-abstraction/account-abstraction.mdx @@ -3,26 +3,34 @@ title: Account abstraction 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. +`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. +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..8eeb4b97e 100644 --- a/docs/developers/tooling/account-abstraction/arcana.md +++ b/docs/developers/tooling/account-abstraction/arcana.md @@ -5,10 +5,14 @@ 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/biconomy.md b/docs/developers/tooling/account-abstraction/biconomy.md index 1ca653876..2cc86402d 100644 --- a/docs/developers/tooling/account-abstraction/biconomy.md +++ b/docs/developers/tooling/account-abstraction/biconomy.md @@ -5,6 +5,12 @@ image: /img/socialCards/biconomy.jpg ## Superpowers for your Web3 stack -The Biconomy SDK provides solutions for decentralized applications (dapps) that streamline and simplify tasks from onboarding to user engagement while respecting self-custody. It is a one-stop solution to enable an effortless experience in your dapp: it eases onboarding for new users and abstracts away transaction complexities that your users face on a daily basis. This is enabled by using Smart Contract Wallets (SCW) built on top of our multi-chain Relayer Infrastructure. +The Biconomy SDK provides solutions for decentralized applications (dapps) that +streamline and simplify tasks from onboarding to user engagement while +respecting self-custody. It is a one-stop solution to enable an effortless +experience in your dapp: it eases onboarding for new users and abstracts away +transaction complexities that your users face on a daily basis. This is enabled +by using Smart Contract Wallets (SCW) built on top of our multi-chain Relayer +Infrastructure. Find out more about Biconomy [here](https://www.biconomy.io/). diff --git a/docs/developers/tooling/account-abstraction/etherspot.md b/docs/developers/tooling/account-abstraction/etherspot.md index 6bb2ad7e2..1ebef4ff5 100644 --- a/docs/developers/tooling/account-abstraction/etherspot.md +++ b/docs/developers/tooling/account-abstraction/etherspot.md @@ -5,18 +5,29 @@ image: /img/socialCards/etherspot.jpg ## Robust ERC4337 infrastructure for seamless web3 development -Build an unmatched web3 user experience by removing usability pain points with Etherspot’s Account abstraction (AA) infrastructure. +Build an unmatched web3 user experience by removing usability pain points with +Etherspot’s Account abstraction (AA) infrastructure. [**Etherspot**](https://etherspot.io) offers the following AA services: -- [**Account abstraction Prime SDK**](https://github.com/etherspot/etherspot-prime-sdk) — From social logins to transaction batching, using an Etherspot smart wallet can give your dapp a web2-like interface to ensure the user has a seamless experience. +- [**Account abstraction Prime SDK**](https://github.com/etherspot/etherspot-prime-sdk) + — From social logins to transaction batching, using an Etherspot smart wallet + can give your dapp a web2-like interface to ensure the user has a seamless + experience. -- [**Skandha Bundler**](https://github.com/etherspot/skandha) - Bundle userOperations together to ensure multiple transactions are included on chain at a lower cost. +- [**Skandha Bundler**](https://github.com/etherspot/skandha) - Bundle + userOperations together to ensure multiple transactions are included on chain + at a lower cost. -- [**Arka Paymaster**](https://etherspot.fyi/arka/intro) - An open-source Paymaster service for gasless and sponsored transactions. +- [**Arka Paymaster**](https://etherspot.fyi/arka/intro) - An open-source + Paymaster service for gasless and sponsored transactions. -- [**TransactionKit**](https://etherspot.io/transactionkit) - A smart account React library for fast and simple web3 development. +- [**TransactionKit**](https://etherspot.io/transactionkit) - A smart account + React library for fast and simple web3 development. -For more info and guidance on commencing your development journey with Etherspot, please refer to our documentation [here](https://etherspot.fyi/introduction). +For more info and guidance on commencing your development journey with +Etherspot, please refer to our documentation +[here](https://etherspot.fyi/introduction). -If you have any questions, do not hesitate to chat with the team on [Discord](https://discord.etherspot.io). +If you have any questions, do not hesitate to chat with the team on +[Discord](https://discord.etherspot.io). diff --git a/docs/developers/tooling/account-abstraction/noves.md b/docs/developers/tooling/account-abstraction/noves.md index 7f164976b..6d11994d4 100644 --- a/docs/developers/tooling/account-abstraction/noves.md +++ b/docs/developers/tooling/account-abstraction/noves.md @@ -5,17 +5,34 @@ image: /img/socialCards/noves.jpg ## Advanced data tooling for account abstraction -Noves provides advanced data capabilities for ERC-4337, both at the pre-sign level and for retrieval and interpretation of historical transactions. +Noves provides advanced data capabilities for ERC-4337, both at the pre-sign +level and for retrieval and interpretation of historical transactions. ## Human-readable transaction pre-sign -For pre-sign, Noves offers a `userOp` [preview tool](https://docs.noves.fi/reference/post_evm-chain-preview4337) as part of its Foresight product line. It is akin to a simulator, but includes interpretation of the real-world meaning of the unsigned transaction (for example, "This transaction will claim 50 USDC in rewards"). This output can be shown to the user prior to the userOp being signed and submitted to the bundler for execution. +For pre-sign, Noves offers a `userOp` +[preview tool](https://docs.noves.fi/reference/post_evm-chain-preview4337) as +part of its Foresight product line. It is akin to a simulator, but includes +interpretation of the real-world meaning of the unsigned transaction (for +example, "This transaction will claim 50 USDC in rewards"). This output can be +shown to the user prior to the userOp being signed and submitted to the bundler +for execution. ## Human-readable transaction history -For transactions that have already been executed, Noves offers the [Translate API](https://docs.noves.fi/reference/introduction), which allows developers to retrieve transactions in fully-enriched, human-readable form. For a sample of what this data looks like, you can check out [Linea for Humans](https://linea.forhumans.app), a human-readable block explorer built by Noves for Linea. +For transactions that have already been executed, Noves offers the +[Translate API](https://docs.noves.fi/reference/introduction), which allows +developers to retrieve transactions in fully-enriched, human-readable form. For +a sample of what this data looks like, you can check out +[Linea for Humans](https://linea.forhumans.app), a human-readable block explorer +built by Noves for Linea. -Translate API is [fully compatible](https://docs.noves.fi/reference/account-abstraction) with account abstraction, and will "look through" the multiple layers of smart contracts that are involved, removing unnecessary technical jargon from the picture and telling the user in plain English what each transaction was (a stake, a claim rewards, a liquidity add, etc). +Translate API is +[fully compatible](https://docs.noves.fi/reference/account-abstraction) with +account abstraction, and will "look through" the multiple layers of smart +contracts that are involved, removing unnecessary technical jargon from the +picture and telling the user in plain English what each transaction was (a +stake, a claim rewards, a liquidity add, etc). ## Learn more @@ -25,4 +42,5 @@ Product docs: [docs.noves.fi](https://docs.noves.fi) ## Start using for free -A free plan is available for Linea users, click [here](https://noves.fi/pricing) to sign up. +A free plan is available for Linea users, click [here](https://noves.fi/pricing) +to sign up. diff --git a/docs/developers/tooling/account-abstraction/oklink.md b/docs/developers/tooling/account-abstraction/oklink.md index b36701dc0..d9cc80db1 100644 --- a/docs/developers/tooling/account-abstraction/oklink.md +++ b/docs/developers/tooling/account-abstraction/oklink.md @@ -3,14 +3,22 @@ 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. +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. ## Account abstraction services available through OKLink: -1. [View UserOps details](https://www.oklink.com/linea/tx/uop/0x6c8f68613afffeb70ea31f145dc416d18540a32a0e00e04df4c94018d666fde2): including the AA address initiating the transaction, paymaster information, and details about using ERC-20 tokens for transaction fees. +1. [View UserOps details](https://www.oklink.com/linea/tx/uop/0x6c8f68613afffeb70ea31f145dc416d18540a32a0e00e04df4c94018d666fde2): + including the AA address initiating the transaction, paymaster information, + and details about using ERC-20 tokens for transaction fees. -2. [View the transaction list for ERC-4337](https://www.oklink.com/linea/address/0x7fb5aa2a66bd08c61956bd29df4da48cc63d66d9/aa): can view all ERC-4337 transactions related to the address. +2. [View the transaction list for ERC-4337](https://www.oklink.com/linea/address/0x7fb5aa2a66bd08c61956bd29df4da48cc63d66d9/aa): + can view all ERC-4337 transactions related to the address. -3. [View the details page of the Entry Point](https://www.oklink.com/linea/address/0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789/contract): supports viewing transactions, contract details, and performing contract read and write operations. +3. [View the details page of the Entry Point](https://www.oklink.com/linea/address/0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789/contract): + supports viewing transactions, contract details, and performing contract read + and write operations. diff --git a/docs/developers/tooling/account-abstraction/openfort.md b/docs/developers/tooling/account-abstraction/openfort.md index f8c35c3a0..332184693 100644 --- a/docs/developers/tooling/account-abstraction/openfort.md +++ b/docs/developers/tooling/account-abstraction/openfort.md @@ -5,8 +5,16 @@ image: /img/socialCards/openfort.jpg ## Account Abstraction Infrastructure Built 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. The platform vertically integrates the AA stack, so game developers can focus on game development without worrying about private key management, the account model or the onchain interactions. All through their network of paymasters and bundlers. +[Openfort](https://openfort.xyz) is an infrastructure provider designed to +simplify the development of games and gamified experiences across their suite of +API endpoints. The platform vertically integrates the AA stack, so game +developers can focus on game development without worrying about private key +management, the account model or the onchain interactions. All through their +network of paymasters and bundlers. -Powered by [ERC-6551](https://eips.ethereum.org/EIPS/eip-6551) and [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337). +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/account-abstraction/particle-network.md b/docs/developers/tooling/account-abstraction/particle-network.md index 6bbfcd067..f1e1f84fe 100644 --- a/docs/developers/tooling/account-abstraction/particle-network.md +++ b/docs/developers/tooling/account-abstraction/particle-network.md @@ -5,12 +5,31 @@ image: /img/socialCards/particle-network.jpg ## Smart Wallet-as-a-Service on Linea -[Particle Network](https://particle.network)'s Wallet Abstraction services enable universal, Web2-adjacent onboarding and interactions. Its core technology, [Smart Wallet-as-a-Service](https://blog.particle.network/announcing-our-smart-wallet-as-a-service-modular-stack-upgrading-waas-with-erc-4337) (WaaS) aims to onboard users into MPC-secured smart accounts supporting any chain. It also allows developers to offer an improved user experience through modular, fully customizable EOA/AA embedded wallets. Particle supports its Smart Wallet-as-a-Service through a Modular L1 powering chain abstraction, acting as a settlement layer across chains for a seamless multi-chain experience. +[Particle Network](https://particle.network)'s Wallet Abstraction services +enable universal, Web2-adjacent onboarding and interactions. Its core +technology, +[Smart Wallet-as-a-Service](https://blog.particle.network/announcing-our-smart-wallet-as-a-service-modular-stack-upgrading-waas-with-erc-4337) +(WaaS) aims to onboard users into MPC-secured smart accounts supporting any +chain. It also allows developers to offer an improved user experience through +modular, fully customizable EOA/AA embedded wallets. Particle supports its Smart +Wallet-as-a-Service through a Modular L1 powering chain abstraction, acting as a +settlement layer across chains for a seamless multi-chain experience. -Particle Network's Smart Wallet-as-a-Service is compatible with Linea through both usage of EOAs (traditional accounts) and AA (smart accounts). This AA support extends to Particle Network's [in-house Bundler](https://developers.particle.network/docs/bundler) and [Omnichain Paymaster](https://developers.particle.network/docs/paymaster) infrastructure, both of which are compatible with Linea. +Particle Network's Smart Wallet-as-a-Service is compatible with Linea through +both usage of EOAs (traditional accounts) and AA (smart accounts). This AA +support extends to Particle Network's +[in-house Bundler](https://developers.particle.network/docs/bundler) and +[Omnichain Paymaster](https://developers.particle.network/docs/paymaster) +infrastructure, both of which are compatible with Linea. -Thus, developers can leverage Particle Network to onboard users into smart accounts using social login, then facilitate full-stack ERC-4337 account abstraction through it's [native AA SDKs](https://developers.particle.network/docs/aa-web-quickstart), available across six platforms. +Thus, developers can leverage Particle Network to onboard users into smart +accounts using social login, then facilitate full-stack ERC-4337 account +abstraction through it's +[native AA SDKs](https://developers.particle.network/docs/aa-web-quickstart), +available across six platforms. ### Learn more -To give Particle Network's Smart Wallet-as-a-Service a try for yourself and learn more about implementation, check out the [Particle Web Demo](https://core-demo.particle.network/). +To give Particle Network's Smart Wallet-as-a-Service a try for yourself and +learn more about implementation, check out the +[Particle Web Demo](https://core-demo.particle.network/). diff --git a/docs/developers/tooling/account-abstraction/pimlico.md b/docs/developers/tooling/account-abstraction/pimlico.md index 192b1a3e5..31f8eda59 100644 --- a/docs/developers/tooling/account-abstraction/pimlico.md +++ b/docs/developers/tooling/account-abstraction/pimlico.md @@ -5,7 +5,8 @@ image: /img/socialCards/pimlico.jpg ## Powerful infrastructure for Smart Accounts -Pimlico provides smart account tools for ERC-4337 that streamline your path from vision to reality. +Pimlico provides smart account tools for ERC-4337 that streamline your path from +vision to reality. The core services provided by EIP-4337 at infrastructure level are: @@ -13,4 +14,6 @@ The core services provided by EIP-4337 at infrastructure level are: 1. A bundler (network) to bundle `UserOps` 1. An (optional) paymaster service -[This page](https://docs.pimlico.io/docs) will help you get started with Pimlico by deploying a wallet on Linea on top of Pimlico and submitting your first `UserOperation`! +[This page](https://docs.pimlico.io/docs) will help you get started with Pimlico +by deploying a wallet on Linea on top of Pimlico and submitting your first +`UserOperation`! diff --git a/docs/developers/tooling/account-abstraction/smartwallets.md b/docs/developers/tooling/account-abstraction/smartwallets.md index 91c9f6928..6c40d0599 100644 --- a/docs/developers/tooling/account-abstraction/smartwallets.md +++ b/docs/developers/tooling/account-abstraction/smartwallets.md @@ -7,11 +7,16 @@ image: /img/socialCards/thirdweb.jpg ### thirdweb SDK -thirdweb's Smart Wallet SDK allows you to implement EIP-4337-compliant smart contract-enabled accounts on Linea, and leverages Pimlico infrastructure for Bundler and Paymaster. +thirdweb's Smart Wallet SDK allows you to implement EIP-4337-compliant smart +contract-enabled accounts on Linea, and leverages Pimlico infrastructure for +Bundler and Paymaster. -A smart contract-enabled account, or _smart account_, is a type of web3 account that can be customized and managed by smart contracts. +A smart contract-enabled account, or _smart account_, is a type of web3 account +that can be customized and managed by smart contracts. -This smart account is unlocked by a private key. This key can be held in MetaMask, on your local machine, or elsewhere, and is used as a way to 'sign in' to the account. +This smart account is unlocked by a private key. This key can be held in +MetaMask, on your local machine, or elsewhere, and is used as a way to 'sign in' +to the account. ### Benefits of Smart Contract-Enabled Accounts: @@ -24,7 +29,10 @@ This smart account is unlocked by a private key. This key can be held in MetaMas ### Use cases for the thirdweb Smart Wallet SDK: -As a dapp developer, you may want to control the user experience from the onboarding phase and embed a smart wallet in your dapp by default. thirdweb's Smart Wallet SDK will help you to do this with low-code, with Node.js, and React templates. +As a dapp developer, you may want to control the user experience from the +onboarding phase and embed a smart wallet in your dapp by default. thirdweb's +Smart Wallet SDK will help you to do this with low-code, with Node.js, and React +templates. You can find the documentation on thirdweb's Smart Wallet here: diff --git a/docs/developers/tooling/account-abstraction/station.md b/docs/developers/tooling/account-abstraction/station.md index 909c8b39c..c4362b209 100644 --- a/docs/developers/tooling/account-abstraction/station.md +++ b/docs/developers/tooling/account-abstraction/station.md @@ -5,20 +5,37 @@ image: /img/socialCards/station.jpg ## Your toolkit for NFT Accounts on Linea -GroupOS by [Station](https://station.express) is a web3 toolkit designed to create and coordinate values-aligned networks in new ways. Accounts, the core module of GroupOS, is the easiest way for organizations to create programmatic NFT wallets, incentivize users, and measure growth. +GroupOS by [Station](https://station.express) is a web3 toolkit designed to +create and coordinate values-aligned networks in new ways. Accounts, the core +module of GroupOS, is the easiest way for organizations to create programmatic +NFT wallets, incentivize users, and measure growth. -Powered by [ERC-6551](https://eips.ethereum.org/EIPS/eip-6551) and [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337). +Powered by [ERC-6551](https://eips.ethereum.org/EIPS/eip-6551) and +[ERC-4337](https://eips.ethereum.org/EIPS/eip-4337). ## Use Cases -Accounts enables organizations to fully leverage the potential of NFTs for capturing members' identities in higher fidelity, unlocking brand new ways to engage and monetize. - -- **Membership loyalty and rewards:** Create flexible and robust gamification and rewards systems where users can earn and exchange points and collectibles. Reward your most loyal and early users with exclusive access to product features or experiences. -- **Interoperable profile (”Passport”):** Create a portable and expressive identity system that grants users control over their digital identity and reputation, enhancing user autonomy and reducing platform integration overhead and reliance on third-party entities. -- **Gasless onboarding:** GroupOS enables gasless and user-friendly onboarding through NFT-bound accounts (ERC-6551) and account abstraction (ERC-4337) standards. This allows organizations to bring in new members without gas fees while receiving a personalized and expressive experience with NFTs. +Accounts enables organizations to fully leverage the potential of NFTs for +capturing members' identities in higher fidelity, unlocking brand new ways to +engage and monetize. + +- **Membership loyalty and rewards:** Create flexible and robust gamification + and rewards systems where users can earn and exchange points and collectibles. + Reward your most loyal and early users with exclusive access to product + features or experiences. +- **Interoperable profile (”Passport”):** Create a portable and expressive + identity system that grants users control over their digital identity and + reputation, enhancing user autonomy and reducing platform integration overhead + and reliance on third-party entities. +- **Gasless onboarding:** GroupOS enables gasless and user-friendly onboarding + through NFT-bound accounts (ERC-6551) and account abstraction (ERC-4337) + standards. This allows organizations to bring in new members without gas fees + while receiving a personalized and expressive experience with NFTs. ## Quickstart -Follow this [quickstart tutorial](https://docs.groupos.xyz/api-reference/v1/getting-started/quickstart/) to create, distribute, and manage NFT accounts. +Follow this +[quickstart tutorial](https://docs.groupos.xyz/api-reference/v1/getting-started/quickstart/) +to create, distribute, and manage NFT accounts. Need help? Have questions? [Reach us on Discord](https://discord.gg/BR6CgxUe). diff --git a/docs/developers/tooling/analytics/arkham.md b/docs/developers/tooling/analytics/arkham.md index 48b1bfe4e..9170d3a2c 100644 --- a/docs/developers/tooling/analytics/arkham.md +++ b/docs/developers/tooling/analytics/arkham.md @@ -3,7 +3,10 @@ title: Arkham image: /img/socialCards/arkham.jpg --- -[Arkham](https://platform.arkhamintelligence.com/) is a crypto intelligence platform that systematically analyzes blockchain transactions, showing users the people and companies behind blockchain activity, with a suite of advanced tools for analyzing their activity. +[Arkham](https://platform.arkhamintelligence.com/) is a crypto intelligence +platform that systematically analyzes blockchain transactions, showing users the +people and companies behind blockchain activity, with a suite of advanced tools +for analyzing their activity. Access Arkham [here](https://platform.arkhamintelligence.com/) diff --git a/docs/developers/tooling/analytics/cookie3.md b/docs/developers/tooling/analytics/cookie3.md index 928c5fa8f..49c18086a 100644 --- a/docs/developers/tooling/analytics/cookie3.md +++ b/docs/developers/tooling/analytics/cookie3.md @@ -5,27 +5,39 @@ image: /img/socialCards/cookie3.jpg ## Attribution and user analytics for web3 marketers -[Cookie3](https://www.cookie3.co/) is like Google Analytics, but for Web3. It allows you to analyze every visitor and wallet on your website, including campaign full customer journey exploration features. +[Cookie3](https://www.cookie3.co/) is like Google Analytics, but for Web3. It +allows you to analyze every visitor and wallet on your website, including +campaign full customer journey exploration features. ## Benefits of using Cookie3 ### Understand Web3 user attribution -- Gain comprehensive insights into **the complete Web3 user journey**, from their initial interaction to their transactions in your dapp. -- **Understand on-chain activities**, including preferred dapps or NFT collections, portfolio value or favorite wallet. -- Leverage user segmentation for **highly targeted engagement and personalized experiences.** +- Gain comprehensive insights into **the complete Web3 user journey**, from + their initial interaction to their transactions in your dapp. +- **Understand on-chain activities**, including preferred dapps or NFT + collections, portfolio value or favorite wallet. +- Leverage user segmentation for **highly targeted engagement and personalized + experiences.** ### Boost Web3 marketing KPIs -- Streamline your marketing KPIs by leveraging a blend of off-chain and on-chain data. Gain insights into metrics like **Cost per NFT mint, token sales, website visits, and more.** +- Streamline your marketing KPIs by leveraging a blend of off-chain and on-chain + data. Gain insights into metrics like **Cost per NFT mint, token sales, + website visits, and more.** - Monitor your KPIs over time to see when you make progress. -- Sort UTM links tailored for each marketing campaign to assess their effectiveness. Utilize these insights to **strategically allocate your budget across the most impactful marketing channels.** +- Sort UTM links tailored for each marketing campaign to assess their + effectiveness. Utilize these insights to **strategically allocate your budget + across the most impactful marketing channels.** ### Grow your user base -- Enhance your understanding of user preferences and interests by **intersecting on-chain data with website traffic and demographics.** -- **Identify and engage with specific user segments** by understanding their interactions with dapps, tokens, and NFTs. -- Gain valuable insights into **user behavior within your Discord community**, enabling tailored live events, product launches, and giveaways. +- Enhance your understanding of user preferences and interests by **intersecting + on-chain data with website traffic and demographics.** +- **Identify and engage with specific user segments** by understanding their + interactions with dapps, tokens, and NFTs. +- Gain valuable insights into **user behavior within your Discord community**, + enabling tailored live events, product launches, and giveaways. ## Additional resources: diff --git a/docs/developers/tooling/analytics/dune.md b/docs/developers/tooling/analytics/dune.md index b28b8fce8..176e81f32 100644 --- a/docs/developers/tooling/analytics/dune.md +++ b/docs/developers/tooling/analytics/dune.md @@ -5,31 +5,49 @@ 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 -- **Data exploration**: Dune Analytics allows you to explore and analyze blockchain data using SQL queries. You can easily filter, aggregate, and visualize data to gain insights into blockchain activity. +- **Data exploration**: Dune Analytics allows you to explore and analyze + blockchain data using SQL queries. You can easily filter, aggregate, and + visualize data to gain insights into blockchain activity. -- **Dashboards**: Create interactive dashboards to monitor key metrics and visualize data trends. Dune Analytics provides a drag-and-drop interface for designing custom dashboards. +- **Dashboards**: Create interactive dashboards to monitor key metrics and + visualize data trends. Dune Analytics provides a drag-and-drop interface for + designing custom dashboards. -- **Collaboration**: Share your queries, dashboards, and insights with others. Dune Analytics supports collaboration features, allowing you to work together with your team or the wider community. +- **Collaboration**: Share your queries, dashboards, and insights with others. + Dune Analytics supports collaboration features, allowing you to work together + with your team or the wider community. -- **API access**: Access blockchain data programmatically using Dune's API. You can integrate blockchain data into your applications, tools, and services. +- **API access**: Access blockchain data programmatically using Dune's API. You + can integrate blockchain data into your applications, tools, and services. -- **Snowflake datashare**: Dune's Snowflake datashare allows you to access and analyze blockchain data directly in your Snowflake account. You can query and join blockchain data with your existing datasets in Snowflake. +- **Snowflake datashare**: Dune's Snowflake datashare allows you to access and + analyze blockchain data directly in your Snowflake account. You can query and + join blockchain data with your existing datasets in Snowflake. ### Resources Here are some resources to help you learn more about Dune Analytics: -- [Documentation](https://docs.dune.com/): The official documentation provides detailed guides and tutorials on using Dune Analytics. +- [Documentation](https://docs.dune.com/): The official documentation provides + detailed guides and tutorials on using Dune Analytics. -- [API Docs](https://docs.dune.com/api): The API documentation provides detailed information on how to access blockchain data programmatically using Dune's API. +- [API Docs](https://docs.dune.com/api): The API documentation provides detailed + information on how to access blockchain data programmatically using Dune's + API. -- [YouTube](https://www.youtube.com/@dunecom) : The Dune YouTube channel features video tutorials and demos of the platform. +- [YouTube](https://www.youtube.com/@dunecom) : The Dune YouTube channel + features video tutorials and demos of the platform. -- [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. +- [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/analytics/mobula.md b/docs/developers/tooling/analytics/mobula.md index 75ef8e327..320b04233 100644 --- a/docs/developers/tooling/analytics/mobula.md +++ b/docs/developers/tooling/analytics/mobula.md @@ -3,21 +3,34 @@ title: Mobula image: /img/socialCards/mobula.jpg --- -[Mobula](https://docs.mobula.io) serves as a specialized data layer, offering advanced analytics capabilities. It is designed to streamline and enhance data analysis processes, ensuring users have access to precise, actionable insights. It's aimed at enhancing data-driven decision-making for users seeking to optimize their strategies. +[Mobula](https://docs.mobula.io) serves as a specialized data layer, offering +advanced analytics capabilities. It is designed to streamline and enhance data +analysis processes, ensuring users have access to precise, actionable insights. +It's aimed at enhancing data-driven decision-making for users seeking to +optimize their strategies. ### Why Mobula? - **Data aggregation and analytics** -Aggregating vast datasets to provide a rich, unified view of information, the analytics engine of [Mobula](https://mobula.io) allows for in-depth analysis, unveiling critical patterns, trends, and insights. This supports informed decision-making by offering a comprehensive view of data. +Aggregating vast datasets to provide a rich, unified view of information, the +analytics engine of [Mobula](https://mobula.io) allows for in-depth analysis, +unveiling critical patterns, trends, and insights. This supports informed +decision-making by offering a comprehensive view of data. - **User experience and functionality** -The platform prioritizes user experience with an intuitive interface, simplifying data analysis. It caters to users at all levels, making advanced data processing accessible and reducing the learning curve for effective data utilization. +The platform prioritizes user experience with an intuitive interface, +simplifying data analysis. It caters to users at all levels, making advanced +data processing accessible and reducing the learning curve for effective data +utilization. - **Strategic insight generation** -By transforming complex datasets into clear, actionable insights, this platform aids in streamlining decision-making across various contexts. It empowers users to uncover opportunities and tackle challenges, steering operational improvements and driving innovation strategies. +By transforming complex datasets into clear, actionable insights, this platform +aids in streamlining decision-making across various contexts. It empowers users +to uncover opportunities and tackle challenges, steering operational +improvements and driving innovation strategies.   @@ -32,15 +45,21 @@ By transforming complex datasets into clear, actionable insights, this platform ### Get started -Transform data into actionable insights with [Mobula's](https://docs.mobula.io) analytics. +Transform data into actionable insights with [Mobula's](https://docs.mobula.io) +analytics. -Create a room with Mobula core team **[here](https://t.me/MobulaPartnerBot?start=Linea_Docs_Analytics)** +Create a room with Mobula core team +**[here](https://t.me/MobulaPartnerBot?start=Linea_Docs_Analytics)** **Additional resources:** -- **[Dive into the documentation](https://docs.mobula.io)** - Delve into the extensive resources of [Mobula’s](https://docs.mobula.io) documentation. From detailed API guidelines to all-encompassing tutorials. +- **[Dive into the documentation](https://docs.mobula.io)** - Delve into the + extensive resources of [Mobula’s](https://docs.mobula.io) documentation. From + detailed API guidelines to all-encompassing tutorials. -- **[Explore the Mobula app](https://mobula.io)** - Access the heart of cryptocurrency analytics with the [Mobula](https://mobula.io) app. Designed for ease of integration and enriched with powerful data insights. +- **[Explore the Mobula app](https://mobula.io)** - Access the heart of + cryptocurrency analytics with the [Mobula](https://mobula.io) app. Designed + for ease of integration and enriched with powerful data insights. **X:** https://x.com/MobulaIO diff --git a/docs/developers/tooling/attestations/index.mdx b/docs/developers/tooling/attestations/index.mdx index bfc72fe60..a9fc6578e 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,12 @@ 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. +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/attestations/pado.md b/docs/developers/tooling/attestations/pado.md index 88c23ba31..93f50b5f7 100644 --- a/docs/developers/tooling/attestations/pado.md +++ b/docs/developers/tooling/attestations/pado.md @@ -5,33 +5,61 @@ image: /img/socialCards/pado.jpg ## PADO -[PADO](https://padolabs.org) is a cryptography-based attestation protocol to bring all Internet data into smart contracts. PADO relies heavily on cryptography to minimize trust, and enables end users to prove the correctness of their personal web data in a privacy-preserving manner. - -The core techniques used in PADO include secure multi-party computation (MPC) and interactive zero-knowledge proofs (IZK). End users run PADO client apps to attest their personal web data, and create related data proofs with the help of PADO nodes. These data proofs are cryptographically verified attestations with security guarantees including: - -- Data authenticity: the user web data is honestly retrieved from the indicated data source, and the integrity is secured by MPC-TLS and IZK techniques. -- Privacy: When coupled with specific application logic, users' sensitive information is well protected under the zero-knowledge property. - -The MPC-TLS and IZK techniques are general enough for both data source integration and data computation. For instance, one can create his/her own attestations including but not limited to: - -- Proofs of CEX assets, e.g., Alice has more than 1000 USD for her total token values in Coinbase; -- Proofs of specific token holding, e.g., Alice holds more than 2 ETH in Binance; -- Proofs of nationality, e.g., Alice is a verified bank user with her nationality of British. -- Proofs of a heavy gamer, e.g., Bob plays more than 10 hours per day on Steam games. +[PADO](https://padolabs.org) is a cryptography-based attestation protocol to +bring all Internet data into smart contracts. PADO relies heavily on +cryptography to minimize trust, and enables end users to prove the correctness +of their personal web data in a privacy-preserving manner. + +The core techniques used in PADO include secure multi-party computation (MPC) +and interactive zero-knowledge proofs (IZK). End users run PADO client apps to +attest their personal web data, and create related data proofs with the help of +PADO nodes. These data proofs are cryptographically verified attestations with +security guarantees including: + +- Data authenticity: the user web data is honestly retrieved from the indicated + data source, and the integrity is secured by MPC-TLS and IZK techniques. +- Privacy: When coupled with specific application logic, users' sensitive + information is well protected under the zero-knowledge property. + +The MPC-TLS and IZK techniques are general enough for both data source +integration and data computation. For instance, one can create his/her own +attestations including but not limited to: + +- Proofs of CEX assets, e.g., Alice has more than 1000 USD for her total token + values in Coinbase; +- Proofs of specific token holding, e.g., Alice holds more than 2 ETH in + Binance; +- Proofs of nationality, e.g., Alice is a verified bank user with her + nationality of British. +- Proofs of a heavy gamer, e.g., Bob plays more than 10 hours per day on Steam + games. ## For Developers -PADO team creates a template-based SDK (in progress) for developers to build their own applications by using PADO's off-chain attestation capabilities. The SDK will encapsulate the details of underlying cryptographic algorithms and protocols, and provide high-level interfaces for application developers to manage the data retrieval and data computation. Developers can leverage the SDK in two aspects: +PADO team creates a template-based SDK (in progress) for developers to build +their own applications by using PADO's off-chain attestation capabilities. The +SDK will encapsulate the details of underlying cryptographic algorithms and +protocols, and provide high-level interfaces for application developers to +manage the data retrieval and data computation. Developers can leverage the SDK +in two aspects: -- Developers can use the data source templates to integrate with various Internet data sources of their own interest, and to attest the corresponding type of data. -- Developers can define and implement their own application logic by integrating with data consumption templates. +- Developers can use the data source templates to integrate with various + Internet data sources of their own interest, and to attest the corresponding + type of data. +- Developers can define and implement their own application logic by integrating + with data consumption templates. ## Networks -Note PADO is deployed on Linea, and integrated with [Verax](https://github.com/Consensys/verax-documentation), which is the public attestation registry to store and manage the attestation data which can be accessed by any party. PADO users can submit these data proofs to Linea via Verax, which can be further accessed by other dApps. The following contract address is the PADO portal contract. +Note PADO is deployed on Linea, and integrated with +[Verax](https://github.com/Consensys/verax-documentation), which is the public +attestation registry to store and manage the attestation data which can be +accessed by any party. PADO users can submit these data proofs to Linea via +Verax, which can be further accessed by other dApps. The following contract +address is the PADO portal contract. -| Network | Contract address | -| --- | --- | +| Network | Contract address | +| ------------- | -------------------------------------------------------------------------------------------------------------------------- | | Linea Mainnet | [`0x50bd377EB8D4236Bb587AB3FB1eeafd888AEeC58`](https://lineascan.build/address/0x50bd377EB8D4236Bb587AB3FB1eeafd888AEeC58) | ## Resources diff --git a/docs/developers/tooling/attestations/verax.md b/docs/developers/tooling/attestations/verax.md index b728a55f8..592a7ff09 100644 --- a/docs/developers/tooling/attestations/verax.md +++ b/docs/developers/tooling/attestations/verax.md @@ -3,35 +3,60 @@ title: Verax image: /img/socialCards/verax.jpg --- -Verax is a shared on-chain attestation registry. The teams that are actively involved in designing and building the project include Consensys (the team behind Linea), Clique, Karma3 Labs, Aspecta, PADO Labs, and Reclaim Protocol. A number of other teams including GitCoin are building integrations with the system. +Verax is a shared on-chain attestation registry. The teams that are actively +involved in designing and building the project include Consensys (the team +behind Linea), Clique, Karma3 Labs, Aspecta, PADO Labs, and Reclaim Protocol. A +number of other teams including GitCoin are building integrations with the +system. -**_It is not an EIP, a protocol, or a product, but a simple primitive that can be used by any dapps and protocols as a shared “data lake” of public data. In essence, it can be thought of as a backend or a database._** +**_It is not an EIP, a protocol, or a product, but a simple primitive that can +be used by any dapps and protocols as a shared “data lake” of public data. In +essence, it can be thought of as a backend or a database._** -Think of Verax as a distribution channel where issuers of attestations keep the attestations. Any protocol, dapp, or user that wants to use those attestations can easily use and compose attestations from the different sources that are available in that distribution channel. Examples of some of the integrations currently being built include Clique, GitCoin, PADO Labs and Reclaim Protocol. +Think of Verax as a distribution channel where issuers of attestations keep the +attestations. Any protocol, dapp, or user that wants to use those attestations +can easily use and compose attestations from the different sources that are +available in that distribution channel. Examples of some of the integrations +currently being built include Clique, GitCoin, PADO Labs and Reclaim Protocol. -To learn more about why we need Verax read this [blog post](https://linea.mirror.xyz/LlLx7IytwRYWQbLlxHr6zoUZjqNQdQ5P95zo3Dcilb0). +To learn more about why we need Verax read this +[blog post](https://linea.mirror.xyz/LlLx7IytwRYWQbLlxHr6zoUZjqNQdQ5P95zo3Dcilb0). ## Use Cases Verax can enable a wide range of use cases, including: -- Inclusive sybil resistance: dapps can have a high degree of confidence that their users are not bots without prescribing a narrow method of proving their humanity, which can impose a prerequisite on new users and introduce friction into the user experience. Imagine having a bot resistant Lens profile creation system without whitelists, based on sophisticated reputation protocols. +- Inclusive sybil resistance: dapps can have a high degree of confidence that + their users are not bots without prescribing a narrow method of proving their + humanity, which can impose a prerequisite on new users and introduce friction + into the user experience. Imagine having a bot resistant Lens profile creation + system without whitelists, based on sophisticated reputation protocols. -- Supporting a market for under-collateralized peer-to-peer lending based on robust, transparent and continually evolving reputation scores. +- Supporting a market for under-collateralized peer-to-peer lending based on + robust, transparent and continually evolving reputation scores. -- Permissionless fraud detection and scam prevention: smart contracts and dapps can prove they are audited and can have a reputation based on usage and reviews etc. +- Permissionless fraud detection and scam prevention: smart contracts and dapps + can prove they are audited and can have a reputation based on usage and + reviews etc. -- A powerful recommendation engine that allows people to discover new content and dapps that are relevant to them, without the need for a centralized curator. +- A powerful recommendation engine that allows people to discover new content + and dapps that are relevant to them, without the need for a centralized + curator. ## Contract Address -| Network | Contract address | -| --- | --- | +| Network | Contract address | +| ------------- | ------------------------------------------------------------------------------------------------------------------------ | | Linea Mainnet | [0x0A564cdD56E4916AA1C63e11652f27B50d970ba0](https://lineascan.build/address/0x0A564cdD56E4916AA1C63e11652f27B50d970ba0) | ## Proof of Humanity (POH) -Proof-of-Humanity systems ensure that participants in web3 are real humans and not bots. For example in the [Linea DeFi Voyage](https://linea.mirror.xyz/Y7Co9H1-oV0O51nKYW0eFPZSs2xn--YJ2wRJzEecN6o) these systems are run by our partners such as Gitcoin, Clique, and Aspecta, leveraging the Verax registry. End-users won’t directly interact with Verax at any point. +Proof-of-Humanity systems ensure that participants in web3 are real humans and +not bots. For example in the +[Linea DeFi Voyage](https://linea.mirror.xyz/Y7Co9H1-oV0O51nKYW0eFPZSs2xn--YJ2wRJzEecN6o) +these systems are run by our partners such as Gitcoin, Clique, and Aspecta, +leveraging the Verax registry. End-users won’t directly interact with Verax at +any point. ## Resources 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..265a2db96 100644 --- a/docs/developers/tooling/cloud-infra/spheron.md +++ b/docs/developers/tooling/cloud-infra/spheron.md @@ -5,11 +5,13 @@ 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 +[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..b0ce3a686 100644 --- a/docs/developers/tooling/contracts-templates/cookbook.mdx +++ b/docs/developers/tooling/contracts-templates/cookbook.mdx @@ -3,11 +3,16 @@ title: Cookbook.dev image: /img/socialCards/cookbookdev.jpg --- -[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. +[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. ## Search Cookbook's smart contract registry -Navigate to [cookbook.dev/chains/Linea](https://www.cookbook.dev/chains/Linea?utm=lineadocs) and explore **Protocols** on Linea, or search for specific smart contracts in the search bar. +Navigate to +[cookbook.dev/chains/Linea](https://www.cookbook.dev/chains/Linea?utm=lineadocs) +and explore **Protocols** on Linea, or search for specific smart contracts in +the search bar.
@@ -18,9 +23,13 @@ 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.
@@ -33,7 +42,8 @@ Highlight selections of the code and press **Analyze Snippet** to get more infor ## Import any smart contract code into Cookbook -Import verified smart contract code into Cookbook to fork, learn about, or build with by inputting any smart contract address into the Cookbook search bar. +Import verified smart contract code into Cookbook to fork, learn about, or build +with by inputting any smart contract address into the Cookbook search bar.
@@ -48,35 +58,40 @@ Import verified smart contract code into Cookbook to fork, learn about, or build Go to [Remix.Ethereum.org](https://remix.ethereum.org/#activate=cookbookdev) -Add The Cookbook Plugin to Remix by clicking the Chef Hat Logo under **Featured Plugins** on the Remix Homepage. +Add The Cookbook Plugin to Remix by clicking the Chef Hat Logo under **Featured +Plugins** on the Remix Homepage.
- Cookbook Remix Featured Plugin
-Alternatively, search Cookbook and select **Activate** in the Remix Plugin Manager. +Alternatively, search Cookbook and select **Activate** in the Remix Plugin +Manager.
- Cookbook Remix Add Plugin
-Search for any protocol or smart contract and click the search result to import the smart contract code into Remix. +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 @@ -85,7 +100,8 @@ Cookbook's AI solidity co-pilot, ChefGPT, is available within the Remix plugin t **Further guidance** -For more information on using Cookbook to find, learn about or build with smart contracts, check out the following resources: +For more information on using Cookbook to find, learn about or build with smart +contracts, check out the following resources: - [Documentation](https://docs.cookbook.dev) - [Blog](https://medium.com/@cookbookdev) 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/contracts-templates/thirdweb.md b/docs/developers/tooling/contracts-templates/thirdweb.md index e03fc2cf1..29dbd85a2 100644 --- a/docs/developers/tooling/contracts-templates/thirdweb.md +++ b/docs/developers/tooling/contracts-templates/thirdweb.md @@ -5,13 +5,19 @@ image: /img/socialCards/thirdweb.jpg # thirdweb -thirdweb is a developer tools platform to speed up and simplify dapp development. On the [thirdweb Linea website](https://thirdweb.com/linea), you will be able to find: +thirdweb is a developer tools platform to speed up and simplify dapp +development. On the [thirdweb Linea website](https://thirdweb.com/linea), you +will be able to find: -1. A collection of pre-audited Solidity smart contracts that will let you deploy on Linea with a one-click experience +1. A collection of pre-audited Solidity smart contracts that will let you deploy + on Linea with a one-click experience 1. Multiple use cases ranging from NFTs to tokens, DAOs, DEXs, and marketplaces. -1. A dashboard to manage deployed contracts (updates, interaction, monitoring, etc.) -1. An SDK that will help you to interact with deployed contracts and/or wallets that you can use in your dapp -1. Backend or frontend code, available in Javascript/Node.js, React, React Native, Python, Go and Unity. +1. A dashboard to manage deployed contracts (updates, interaction, monitoring, + etc.) +1. An SDK that will help you to interact with deployed contracts and/or wallets + that you can use in your dapp +1. Backend or frontend code, available in Javascript/Node.js, React, React + Native, Python, Go and Unity. Check it out on the [thirdweb Linea website](https://thirdweb.com/linea)! diff --git a/docs/developers/tooling/cross-chain/axelar.md b/docs/developers/tooling/cross-chain/axelar.md index 9e3d8a198..e7e33079e 100644 --- a/docs/developers/tooling/cross-chain/axelar.md +++ b/docs/developers/tooling/cross-chain/axelar.md @@ -3,79 +3,93 @@ 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 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 ## Linea integration -When integrating with Axelar there are two key contracts that need to be utilized. These are: +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. -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. + - 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. ### Contract addresses -| Contract | Network | Address | networkId | -| --- | --- | --- | --- | -| Gateway | Mainnet | [0xe432150cce91c13a887f7D836923d5597adD8E31](https://lineascan.build/address/0xe432150cce91c13a887f7D836923d5597adD8E31) | 59144 | -| Gateway | Testnet | [0xe432150cce91c13a887f7D836923d5597adD8E31](https://sepolia.lineascan.build/address/0xe432150cce91c13a887f7D836923d5597adD8E31) | 59141 | -| Gas Service | Mainnet | [0x2d5d7d31F671F86C782533cc367F14109a082712](https://lineascan.build/address/0x2d5d7d31F671F86C782533cc367F14109a082712) | 59144 | -| Gas Service | Testnet | [0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6](https://sepolia.lineascan.build/address/0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6) | 59141 | +| Contract | Network | Address | networkId | +| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------- | --------- | +| Gateway | Mainnet | [0xe432150cce91c13a887f7D836923d5597adD8E31](https://lineascan.build/address/0xe432150cce91c13a887f7D836923d5597adD8E31) | 59144 | +| Gateway | Testnet | [0xe432150cce91c13a887f7D836923d5597adD8E31](https://sepolia.lineascan.build/address/0xe432150cce91c13a887f7D836923d5597adD8E31) | 59141 | +| 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..131f277ca 100644 --- a/docs/developers/tooling/cross-chain/ccip-read-gateway.mdx +++ b/docs/developers/tooling/cross-chain/ccip-read-gateway.mdx @@ -4,83 +4,100 @@ 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). +Read more about sparse Merkle trees in our +[architecture documentation](../../../architecture/stack/evm-state-manager/index.mdx). ::: ### 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] -You can use the building blocks of Linea ENS to [deploy your own subdomain on Linea](../../guides/deploy-subdomain.mdx). +You can use the building blocks of Linea ENS to +[deploy your own subdomain on Linea](../../guides/deploy-subdomain.mdx). ::: ## 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. +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..f23d16c0e 100644 --- a/docs/developers/tooling/cross-chain/layerzero.md +++ b/docs/developers/tooling/cross-chain/layerzero.md @@ -5,28 +5,32 @@ 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/). +Learn how to integrate LayerZero into your contracts +[here](https://layerzero.gitbook.io/docs/).
ContractL1 Message Service - 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5 + 0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5
L2 Message Service - 0x971e727e956690b9957be6d51Ec16E73AcAC83A7 + 0x971e727e956690b9957be6d51Ec16E73AcAC83A7
diff --git a/docs/developers/tooling/cross-chain/shortcuts.mdx b/docs/developers/tooling/cross-chain/shortcuts.mdx index a78db27f8..4b6764a02 100644 --- a/docs/developers/tooling/cross-chain/shortcuts.mdx +++ b/docs/developers/tooling/cross-chain/shortcuts.mdx @@ -4,32 +4,37 @@ 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. +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). +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 +42,77 @@ 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,36 +120,41 @@ 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 -Refer to the official [onthis.xyz documentation](https://docs.onthis.xyz) for more information. +Refer to the official [onthis.xyz documentation](https://docs.onthis.xyz) for +more information. diff --git a/docs/developers/tooling/data-indexers/alchemy.md b/docs/developers/tooling/data-indexers/alchemy.md index 4a7755878..8a519ba3f 100644 --- a/docs/developers/tooling/data-indexers/alchemy.md +++ b/docs/developers/tooling/data-indexers/alchemy.md @@ -5,24 +5,36 @@ image: /img/socialCards/alchemy.jpg # Overview -Alchemy Subgraphs is a blockchain indexing platform with drop-in support for hosted subgraphs. +Alchemy Subgraphs is a blockchain indexing platform with drop-in support for +hosted subgraphs. -Subgraphs are an open-source tool for building custom GraphQL APIs from on-chain data. +Subgraphs are an open-source tool for building custom GraphQL APIs from on-chain +data. -Identify on-chain events you want to index, write AssemblyScript handlers to transform them into your preferred format, and let the subgraph automatically ingest new events for you immediately as they happen. +Identify on-chain events you want to index, write AssemblyScript handlers to +transform them into your preferred format, and let the subgraph automatically +ingest new events for you immediately as they happen. # Why subgraphs? -Developing an in-house indexing system is time-consuming, expensive, and requires ongoing expertise in data pipelines, devOps, and more. +Developing an in-house indexing system is time-consuming, expensive, and +requires ongoing expertise in data pipelines, devOps, and more. -Subgraphs handle the intricacies of data ingestion, decoding, and database management for you. Just define the data format you want and query live data through a GraphQL API. +Subgraphs handle the intricacies of data ingestion, decoding, and database +management for you. Just define the data format you want and query live data +through a GraphQL API. # Why Alchemy Subgraphs? -- **High-performance.** We’ve benchmarked 5x faster data indexing and 2x better block lag than competitors — that’s why we’re trusted by Eigenlayer, GMX, and more. -- **No decentralized headaches.** We make payment easy (just a credit card, no staking tokens) and have guaranteed uptime compared to decentralized options. -- **Developer tooling.** Access best in class developer tools like error logs, subgraph versioning, indexing performance metrics, and more. -- **Easy migration.** If you have existing subgraphs, it takes just 5 minutes to switch over using the same command line tools you’re familiar with. +- **High-performance.** We’ve benchmarked 5x faster data indexing and 2x better + block lag than competitors — that’s why we’re trusted by Eigenlayer, GMX, and + more. +- **No decentralized headaches.** We make payment easy (just a credit card, no + staking tokens) and have guaranteed uptime compared to decentralized options. +- **Developer tooling.** Access best in class developer tools like error logs, + subgraph versioning, indexing performance metrics, and more. +- **Easy migration.** If you have existing subgraphs, it takes just 5 minutes to + switch over using the same command line tools you’re familiar with. # Getting started diff --git a/docs/developers/tooling/data-indexers/arkham.md b/docs/developers/tooling/data-indexers/arkham.md index 48b1bfe4e..9170d3a2c 100644 --- a/docs/developers/tooling/data-indexers/arkham.md +++ b/docs/developers/tooling/data-indexers/arkham.md @@ -3,7 +3,10 @@ title: Arkham image: /img/socialCards/arkham.jpg --- -[Arkham](https://platform.arkhamintelligence.com/) is a crypto intelligence platform that systematically analyzes blockchain transactions, showing users the people and companies behind blockchain activity, with a suite of advanced tools for analyzing their activity. +[Arkham](https://platform.arkhamintelligence.com/) is a crypto intelligence +platform that systematically analyzes blockchain transactions, showing users the +people and companies behind blockchain activity, with a suite of advanced tools +for analyzing their activity. Access Arkham [here](https://platform.arkhamintelligence.com/) diff --git a/docs/developers/tooling/data-indexers/covalent.md b/docs/developers/tooling/data-indexers/covalent.md index 8c78841d5..8dcf50ee0 100644 --- a/docs/developers/tooling/data-indexers/covalent.md +++ b/docs/developers/tooling/data-indexers/covalent.md @@ -5,10 +5,18 @@ 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. - -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. +[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. With GoldRush, you have access to: @@ -19,282 +27,311 @@ With GoldRush, you have access to: **Use GoldRush if you need:** -- Wallet, Transactions, NFT, DEX, Staking or core blockchain data (i.e. log events, blocks, gas) -- Normalized, aggregated and enhanced multichain data, well beyond what you get from RPC providers +- Wallet, Transactions, NFT, DEX, Staking or core blockchain data (i.e. log + events, blocks, gas) +- Normalized, aggregated and enhanced multichain data, well beyond what you get + from RPC providers - Enterprise-grade performance > [Sign up to start building on Linea](https://goldrush.dev/platform/?utm_source=linea&utm_medium=partner-docs) ## APIs -The GoldRush APIs enables developers to quickly and easily access structured onchain data. This means consistent response schemas that are blockchain agnostic. Available APIs and corresponding use cases include: +The GoldRush APIs enables developers to quickly and easily access structured +onchain data. This means consistent response schemas that are blockchain +agnostic. Available APIs and corresponding use cases include: ### Wallet API -- **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. +- **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. -- **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). +- **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. -- **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. +- **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. -- **Use cases:** [App onboarding](https://goldrush-wallet-portfolio-ui.vercel.app/activity/0xfc43f5f9dd45258b3aff31bdbe6561d97e8b71de/?utm_source=linea&utm_medium=partner-docs). +- **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 - **Features:** NFT and ERC20 token allowances, including value-at-risk. -- **Use cases:** [Revoke features](https://goldrush-revokehub.vercel.app/?utm_source=linea&utm_medium=partner-docs) in wallets, security applications. +- **Use cases:** + [Revoke features](https://goldrush-revokehub.vercel.app/?utm_source=linea&utm_medium=partner-docs) + in wallets, security applications. ### Blockchain API -- **Features:** Block details, log events by contract address or topic hash, gas prices, token prices and holders. -- **Use cases:** [Custom block explorers](https://goldrush-block-explorer.vercel.app/?utm_source=linea>&utm_medium=partner-docs). +- **Features:** Block details, log events by contract address or topic hash, gas + prices, token prices and holders. +- **Use cases:** + [Custom block explorers](https://goldrush-block-explorer.vercel.app/?utm_source=linea>&utm_medium=partner-docs). ## Developer Tools 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: - ``` - -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); - } - })(); - ``` - -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) - -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" - } - ] - } - } - ``` +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: + ``` + +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); + } + })(); + ``` + +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) + +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" + } + ] + } + } + ``` ## Get started -- [API Key](https://goldrush.dev/platform/auth/register/?utm_source=linea&utm_medium=partner-docs) - sign up for free -- [Docs](https://goldrush.dev/docs/unified-api/?utm_source=linea&utm_medium=partner-docs) - comprehensive knowledge base for all things GoldRush -- [Guides](https://goldrush.dev/docs/unified-api/guides/?utm_source=linea&utm_medium=partner-docs) - learn how to build for various use cases and expand your onchain knowledge +- [API Key](https://goldrush.dev/platform/auth/register/?utm_source=linea&utm_medium=partner-docs) - + sign up for free +- [Docs](https://goldrush.dev/docs/unified-api/?utm_source=linea&utm_medium=partner-docs) - + comprehensive knowledge base for all things GoldRush +- [Guides](https://goldrush.dev/docs/unified-api/guides/?utm_source=linea&utm_medium=partner-docs) - + learn how to build for various use cases and expand your onchain knowledge diff --git a/docs/developers/tooling/data-indexers/dipdup/overview.md b/docs/developers/tooling/data-indexers/dipdup/overview.md index cd08cd85c..34f175d69 100644 --- a/docs/developers/tooling/data-indexers/dipdup/overview.md +++ b/docs/developers/tooling/data-indexers/dipdup/overview.md @@ -4,16 +4,40 @@ sidebar_position: 1 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. +[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. -- **Declarative Configuration**: A whole indexer is defined by a single configuration file and a bunch of Python data handlers. Code is completely separated from the configuration and environment variables, making it easy to maintain and deploy your project. -- **Lots of Integrations**: You can use SQLite, PostgreSQL, or TimescaleDB databases to store blockchain data, deploy to Compose or Swarm with a single command, monitor your indexer with Prometheus or Sentry, and more. -- **Magic GraphQL API**: DipDup automatically generates a GraphQL API for your data using Hasura, so you can easily query it from your frontend or other services. You can easily extend API with custom queries and metadata requests. -- **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. +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. +- **Declarative Configuration**: A whole indexer is defined by a single + configuration file and a bunch of Python data handlers. Code is completely + separated from the configuration and environment variables, making it easy to + maintain and deploy your project. +- **Lots of Integrations**: You can use SQLite, PostgreSQL, or TimescaleDB + databases to store blockchain data, deploy to Compose or Swarm with a single + command, monitor your indexer with Prometheus or Sentry, and more. +- **Magic GraphQL API**: DipDup automatically generates a GraphQL API for your + data using Hasura, so you can easily query it from your frontend or other + services. You can easily extend API with custom queries and metadata requests. +- **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. + +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..3d9728ce0 100644 --- a/docs/developers/tooling/data-indexers/dipdup/quickstart.md +++ b/docs/developers/tooling/data-indexers/dipdup/quickstart.md @@ -3,39 +3,58 @@ 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. +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. -- **Operating System**: You can use any Linux/macOS distribution on amd64/arm64 platforms with Python installed. -- **Python Version**: Python 3.11 is required for DipDup. You can check your Python version by running `python3 --version` in your terminal. +- **Operating System**: You can use any Linux/macOS distribution on amd64/arm64 + platforms with Python installed. +- **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: + +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 curl -Lsf https://dipdup.io/install.py | python3 ``` -See the [Installation](https://dipdup.io/docs/installation) page for other options. +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: + +DipDup CLI has a built-in project generator with lots of templates. To create a +new project interactively, run the following command: ```bash dipdup new ``` -For educational purposes, we'll create a project from scratch, so choose `[none]` network and `demo_blank` template. +For educational purposes, we'll create a project from scratch, so choose +`[none]` network and `demo_blank` template. 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: + +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 spec_version: 2.0 @@ -43,16 +62,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 @@ -77,18 +96,25 @@ database: path: data/linea.sqlite ``` -Now it's time to generate directories and files required for the project: callbacks stubs, types and other entities we defined in configuration, don't worry in this guide we will only need a small portion of those: +Now it's time to generate directories and files required for the project: +callbacks stubs, types and other entities we defined in configuration, don't +worry in this guide we will only need a small portion of those: ```bash dipdup init ``` -You can read more about the structure of the DipDup package [here](https://dipdup.io/docs/getting-started/package). +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: +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: ```bash from dipdup import fields @@ -104,8 +130,8 @@ 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: +Our single handler will be responsible for processing output transactions as +described in the index definition in config: ```bash from dipdup.context import HandlerContext @@ -128,13 +154,16 @@ 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: + +Time to run the indexer. Processed data will be written to the SQLite file +defined in the configuration: ```bash dipdup run ``` -DipDup will fetch all the historical data and switch to realtime mode. You can check the progress in the logs. +DipDup will fetch all the historical data and switch to realtime mode. You can +check the progress in the logs. Query database to see the results: diff --git a/docs/developers/tooling/data-indexers/dune.md b/docs/developers/tooling/data-indexers/dune.md index b28b8fce8..176e81f32 100644 --- a/docs/developers/tooling/data-indexers/dune.md +++ b/docs/developers/tooling/data-indexers/dune.md @@ -5,31 +5,49 @@ 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 -- **Data exploration**: Dune Analytics allows you to explore and analyze blockchain data using SQL queries. You can easily filter, aggregate, and visualize data to gain insights into blockchain activity. +- **Data exploration**: Dune Analytics allows you to explore and analyze + blockchain data using SQL queries. You can easily filter, aggregate, and + visualize data to gain insights into blockchain activity. -- **Dashboards**: Create interactive dashboards to monitor key metrics and visualize data trends. Dune Analytics provides a drag-and-drop interface for designing custom dashboards. +- **Dashboards**: Create interactive dashboards to monitor key metrics and + visualize data trends. Dune Analytics provides a drag-and-drop interface for + designing custom dashboards. -- **Collaboration**: Share your queries, dashboards, and insights with others. Dune Analytics supports collaboration features, allowing you to work together with your team or the wider community. +- **Collaboration**: Share your queries, dashboards, and insights with others. + Dune Analytics supports collaboration features, allowing you to work together + with your team or the wider community. -- **API access**: Access blockchain data programmatically using Dune's API. You can integrate blockchain data into your applications, tools, and services. +- **API access**: Access blockchain data programmatically using Dune's API. You + can integrate blockchain data into your applications, tools, and services. -- **Snowflake datashare**: Dune's Snowflake datashare allows you to access and analyze blockchain data directly in your Snowflake account. You can query and join blockchain data with your existing datasets in Snowflake. +- **Snowflake datashare**: Dune's Snowflake datashare allows you to access and + analyze blockchain data directly in your Snowflake account. You can query and + join blockchain data with your existing datasets in Snowflake. ### Resources Here are some resources to help you learn more about Dune Analytics: -- [Documentation](https://docs.dune.com/): The official documentation provides detailed guides and tutorials on using Dune Analytics. +- [Documentation](https://docs.dune.com/): The official documentation provides + detailed guides and tutorials on using Dune Analytics. -- [API Docs](https://docs.dune.com/api): The API documentation provides detailed information on how to access blockchain data programmatically using Dune's API. +- [API Docs](https://docs.dune.com/api): The API documentation provides detailed + information on how to access blockchain data programmatically using Dune's + API. -- [YouTube](https://www.youtube.com/@dunecom) : The Dune YouTube channel features video tutorials and demos of the platform. +- [YouTube](https://www.youtube.com/@dunecom) : The Dune YouTube channel + features video tutorials and demos of the platform. -- [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. +- [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/envio.md b/docs/developers/tooling/data-indexers/envio.md index 00b29d219..ca1049933 100644 --- a/docs/developers/tooling/data-indexers/envio.md +++ b/docs/developers/tooling/data-indexers/envio.md @@ -3,29 +3,45 @@ title: Envio image: /img/socialCards/envio.jpg --- -[Envio](https://envio.dev/) is a customizable, real-time indexing solution that provides developers with a seamless and efficient way to index and aggregate blockchain data. The indexed data is easily accessible through GraphQL queries, providing developers with the flexibility and power to retrieve specific information. +[Envio](https://envio.dev/) is a customizable, real-time indexing solution that +provides developers with a seamless and efficient way to index and aggregate +blockchain data. The indexed data is easily accessible through GraphQL queries, +providing developers with the flexibility and power to retrieve specific +information. -Envio offers native support for Linea (both testnet and mainnet) and has been designed to support high-throughput blockchain applications that rely on real-time data for their business requirements. +Envio offers native support for Linea (both testnet and mainnet) and has been +designed to support high-throughput blockchain applications that rely on +real-time data for their business requirements. -Designed to optimize the user experience, Envio offers automatic code generation, flexible language support, quickstart templates, and a reliable cost-effective hosted service. +Designed to optimize the user experience, Envio offers automatic code +generation, flexible language support, quickstart templates, and a reliable +cost-effective hosted service. Indexers on Envio can be written in JavaScript, TypeScript, or ReScript. ## Envio HyperSync -Envio offers support for [HyperSync](https://docs.envio.dev/docs/hypersync) on Linea mainnet. +Envio offers support for [HyperSync](https://docs.envio.dev/docs/hypersync) on +Linea mainnet. -HyperSync is an indexed layer of the Linea blockchain, providing accelerated APIs (JSON-RPC bypass) for the hyper-speed syncing of historic data. Developers do not need to worry about RPC URLs, rate-limited APIs, or managing infrastructure, and can easily sync large datasets in a few minutes, something that would usually take 20x longer via JSON-RPC. +HyperSync is an indexed layer of the Linea blockchain, providing accelerated +APIs (JSON-RPC bypass) for the hyper-speed syncing of historic data. Developers +do not need to worry about RPC URLs, rate-limited APIs, or managing +infrastructure, and can easily sync large datasets in a few minutes, something +that would usually take 20x longer via JSON-RPC. ## Other features - Fully customizable to meet your unique data needs. -- Aggregate data from multi-chain / cross-chain deployments into a unified GraphQL API (or REST API). +- Aggregate data from multi-chain / cross-chain deployments into a unified + GraphQL API (or REST API). -- Detailed logging and error messaging are provided for effective troubleshooting and debugging. +- Detailed logging and error messaging are provided for effective + troubleshooting and debugging. -- Quickstart templates with pre-defined indexing logic for popular OpenZeppelin contracts (ERC-20, ERC-721, ERC-1155, etc.) +- Quickstart templates with pre-defined indexing logic for popular OpenZeppelin + contracts (ERC-20, ERC-721, ERC-1155, etc.) ## Getting started @@ -33,9 +49,11 @@ The following files are required from the user to run the Envio indexer: - Configuration (defaults to `config.yaml`) - GraphQL Schema (defaults to `schema.graphql`) -- Event Handlers (defaults to `src/EventHandlers.*` depending on the language chosen) +- Event Handlers (defaults to `src/EventHandlers.*` depending on the language + chosen) -These files are auto-generated according to the template and language chosen by running the `envio init` command. +These files are auto-generated according to the template and language chosen by +running the `envio init` command. [**Quickstart guide**](https://docs.envio.dev/docs/quickstart) @@ -57,7 +75,8 @@ Then choose a template out of the possible options [↑↓ to move, enter to select, type to filter] ``` -Then choose a language from **Javascript**, **Typescript**, or **Rescript** to write the event handlers file. +Then choose a language from **Javascript**, **Typescript**, or **Rescript** to +write the event handlers file. ```bash ? Which language would you like to use? @@ -67,13 +86,16 @@ Then choose a language from **Javascript**, **Typescript**, or **Rescript** to w [↑↓ to move, enter to select, type to filter] ``` -This will create the config, schema and event handlers files according to the template and language chosen. +This will create the config, schema and event handlers files according to the +template and language chosen. ## Getting help -Indexing can be a rollercoaster, especially for more complex use cases. Our engineers are available to help you with your data availability needs. +Indexing can be a rollercoaster, especially for more complex use cases. Our +engineers are available to help you with your data availability needs. -You can schedule an [intro call](https://calendly.com/sven-float-shipping/envio) to talk about your use case and where Envio can provide value. +You can schedule an [intro call](https://calendly.com/sven-float-shipping/envio) +to talk about your use case and where Envio can provide value. Join our growing community of elite builders, and find peace of mind with Envio. diff --git a/docs/developers/tooling/data-indexers/etherscan.mdx b/docs/developers/tooling/data-indexers/etherscan.mdx index d440b1b94..351b8f134 100644 --- a/docs/developers/tooling/data-indexers/etherscan.mdx +++ b/docs/developers/tooling/data-indexers/etherscan.mdx @@ -1,48 +1,50 @@ --- title: Etherscan description: Use one API key across multiple chains with the Etherscan API v2 +image: /img/socialCards/etherscan.jpg --- -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. ::: -From here, you can use the API key in any request, defining the chains you want to use it with: +From here, you can use the API key in any request, defining the chains you want +to use it with: ```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). +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..9fb6b83dd 100644 --- a/docs/developers/tooling/data-indexers/flair.mdx +++ b/docs/developers/tooling/data-indexers/flair.mdx @@ -5,7 +5,10 @@ image: /img/socialCards/flair.jpg Real-time and historical custom data indexing for any evm chain. -[Flair](https://flair.dev) offers reusable **indexing primitives** (such as fault-tolerant RPC ingestors, custom processors, re-org aware database integrations) to make it easy to receive, transform, store and access your on-chain data. +[Flair](https://flair.dev) offers reusable **indexing primitives** (such as +fault-tolerant RPC ingestors, custom processors, re-org aware database +integrations) to make it easy to receive, transform, store and access your +on-chain data.
@@ -22,11 +25,19 @@ Real-time and historical custom data indexing for any evm chain. Compared to other alternatives the main reasons are: -- 🚀 Adopting **parallel and distributed processing** paradigm means high scalability and resiliency for your indexing stack. Instead of constrained sequential processing (e.g Subgraph). -- 🧩 Focused on **primitives**, which means on the left you plug-in an RPC and on the right you output the data to any destination database. -- 🚄 Native **real-time stream processing** for certain data workload (such as aggregations, rollups) for things like total volume per pool, or total portfolio per user wallet. -- ☁️ **Managed** cloud services avoid DevOps and irrelevant engineering costs for dApp developers. -- 🧑‍💻 Avoid decentralization **overhead** (consensus, network hops, etc) since we believe to enable best UX for dApps reading data must be as close to the developers as possible. +- 🚀 Adopting **parallel and distributed processing** paradigm means high + scalability and resiliency for your indexing stack. Instead of constrained + sequential processing (e.g Subgraph). +- 🧩 Focused on **primitives**, which means on the left you plug-in an RPC and + on the right you output the data to any destination database. +- 🚄 Native **real-time stream processing** for certain data workload (such as + aggregations, rollups) for things like total volume per pool, or total + portfolio per user wallet. +- ☁️ **Managed** cloud services avoid DevOps and irrelevant engineering costs + for dApp developers. +- 🧑‍💻 Avoid decentralization **overhead** (consensus, network hops, etc) since we + believe to enable best UX for dApps reading data must be as close to the + developers as possible. ### Features @@ -35,15 +46,20 @@ Compared to other alternatives the main reasons are: - Works with both websocket and https-only RPCs. - ✅ Track and ingest **any contract** for **any event topic.** - Auto-track new contracts deployed from factory contracts. -- ✅ **Custom processor scripts** with Javascript runtime (with **Typescript** support) +- ✅ **Custom processor scripts** with Javascript runtime (with **Typescript** + support) - Make external API or Webhook calls to third-party or your backend. - - Get current or historical USD value of any ERC-20 token amount of any contract address on any chain. + - Get current or historical USD value of any ERC-20 token amount of any + contract address on any chain. - Use any external NPM library. -- ✅ **Stream** any stored data to your destination database (Postgres, MongoDB, MySQL, Kafka, Elasticsearch, Timescale, etc). +- ✅ **Stream** any stored data to your destination database (Postgres, MongoDB, + MySQL, Kafka, Elasticsearch, Timescale, etc). ## Getting started -1️⃣ Clone the [starter boilerplate](https://github.com/flair-sdk/starter-boilerplate) template and follow the instructions +1️⃣ Clone the +[starter boilerplate](https://github.com/flair-sdk/starter-boilerplate) template +and follow the instructions ```bash git clone https://github.com/flair-sdk/starter-boilerplate.git @@ -52,16 +68,19 @@ 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. -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). +Learn more about the +[structure of manifest.yml](https://docs.flair.dev/reference/manifest.yml). ::: 2️⃣ Configure Linea RPC nodes -Set a unique namespace, Linea chainId and RPC endpoint in your `config`. Remember that you can add up to 10 RPC endpoints for resiliency. +Set a unique namespace, Linea chainId and RPC endpoint in your `config`. +Remember that you can add up to 10 RPC endpoints for resiliency. ```yaml { @@ -86,7 +105,10 @@ Set a unique namespace, Linea chainId and RPC endpoint in your `config`. Remembe } ``` -3️⃣ Sync some historical data using [backfill command](https://docs.flair.dev/reference/backfilling). Remember that `enabled: true` flag in your `config` enabled your indexer to capture data in real-time already. +3️⃣ Sync some historical data using +[backfill command](https://docs.flair.dev/reference/backfilling). Remember that +`enabled: true` flag in your `config` enabled your indexer to capture data in +real-time already. ```bash # backfill certain contracts or block ranges @@ -99,7 +121,8 @@ pnpm flair backfill --chain 59140 --min-timestamp="30 mins ago" -d backward 4️⃣ [Query](https://docs.flair.dev/#getting-started) your custom indexed data. -5️⃣ Stream the data to your [own database](https://docs.flair.dev/reference/database#your-own-database). +5️⃣ Stream the data to your +[own database](https://docs.flair.dev/reference/database#your-own-database). ## Examples @@ -117,4 +140,5 @@ Explore real-world usage of Flair indexing primitives for various use-cases. ## Need help? -[Our engineers](https://docs.flair.dev/talk-to-an-engineer) are available to help you at any stage. +[Our engineers](https://docs.flair.dev/talk-to-an-engineer) are available to +help you at any stage. diff --git a/docs/developers/tooling/data-indexers/goldsky/goldsky-index.md b/docs/developers/tooling/data-indexers/goldsky/goldsky-index.md index 9f5d59067..4c4e6e061 100644 --- a/docs/developers/tooling/data-indexers/goldsky/goldsky-index.md +++ b/docs/developers/tooling/data-indexers/goldsky/goldsky-index.md @@ -8,7 +8,8 @@ To get started with Goldsky Index: 1. Create an account at **[app.goldsky.com](https://app.goldsky.com/)**. 2. Choose a plan that best fits your needs. -3. Create an API key on the **[Settings page](https://app.goldsky.com/dashboard/settings)**. +3. Create an API key on + the **[Settings page](https://app.goldsky.com/dashboard/settings)**. 4. Install the Goldsky CLI: ```bash @@ -29,13 +30,16 @@ To get started with Goldsky Index: goldsky subgraph deploy my-subgraph/1.0.0 ``` -7. Alternative, subgraphs can be deployed using Goldsky’s instant subgraph functionality +7. Alternative, subgraphs can be deployed using Goldsky’s instant subgraph + functionality ```bash goldsky subgraph deploy / --from-abi ``` - Config files for instant subgraphs are written in JSON and outline key information such as the chain, contract address, and path to ABI file. Example of a basic configuration file below. + Config files for instant subgraphs are written in JSON and outline key + information such as the chain, contract address, and path to ABI file. + Example of a basic configuration file below. ```bash { @@ -58,8 +62,11 @@ To get started with Goldsky Index: } ``` -8. Once deployed, you can access data using the GraphQL API link provided, and review all deployed subgraphs with `goldsky subgraph list` or at app.goldsky.com. +8. Once deployed, you can access data using the GraphQL API link provided, and + review all deployed subgraphs with `goldsky subgraph list` or at + app.goldsky.com. --- -For more detail & context, and the full CLI reference, visit [Goldsky’s docs](https://docs.goldsky.com/indexing). +For more detail & context, and the full CLI reference, visit +[Goldsky’s docs](https://docs.goldsky.com/indexing). diff --git a/docs/developers/tooling/data-indexers/goldsky/goldsky-mirror.md b/docs/developers/tooling/data-indexers/goldsky/goldsky-mirror.md index 940adc5bd..b4e2fb342 100644 --- a/docs/developers/tooling/data-indexers/goldsky/goldsky-mirror.md +++ b/docs/developers/tooling/data-indexers/goldsky/goldsky-mirror.md @@ -8,7 +8,8 @@ To get started with Goldsky Mirror: 1. Create an account at **[app.goldsky.com](https://app.goldsky.com/)**. 2. Choose a plan that best fits your needs. -3. Create an API key on the **[Settings page](https://app.goldsky.com/dashboard/settings)**. +3. Create an API key on + the **[Settings page](https://app.goldsky.com/dashboard/settings)**. 4. Install the Goldsky CLI: ```bash @@ -21,16 +22,24 @@ To get started with Goldsky Mirror: goldsky login ``` -6. Use the following command to walk through a guided experience to create pipelines. Based on the input you provide, the CLI will generate a pipeline definition for you behind the scenes. +6. Use the following command to walk through a guided experience to create + pipelines. Based on the input you provide, the CLI will generate a pipeline + definition for you behind the scenes. ```bash goldsky pipeline create ``` -7. Upon successfully walking through the CLI, an active pipeline will be created and data should appear in the destination sink shortly. A monitoring table will automatically be displayed, or can be activated using the following command: +7. Upon successfully walking through the CLI, an active pipeline will be created + and data should appear in the destination sink shortly. A monitoring table + will automatically be displayed, or can be activated using the following + command: ```bash goldsky pipeline monitor ``` -8. For greater flexibility, Mirror pipelines can be defined via JSON configuration files. For more detail and full reference information on how to define pipelines, data sources, transformations, and sinks via JSON - visit [Goldsky’s docs](https://docs.goldsky.com/mirror/references/pipeline-configuration). +8. For greater flexibility, Mirror pipelines can be defined via JSON + configuration files. For more detail and full reference information on how to + define pipelines, data sources, transformations, and sinks via JSON - visit + [Goldsky’s docs](https://docs.goldsky.com/mirror/references/pipeline-configuration). diff --git a/docs/developers/tooling/data-indexers/goldsky/overview.md b/docs/developers/tooling/data-indexers/goldsky/overview.md index 61e8c86d0..6f516aeae 100644 --- a/docs/developers/tooling/data-indexers/goldsky/overview.md +++ b/docs/developers/tooling/data-indexers/goldsky/overview.md @@ -4,26 +4,58 @@ sidebar_position: 1 image: /img/socialCards/overview.jpg --- -[Goldsky](https://goldsky.com) is a high-performance data indexing provider for Linea that makes it easy to extract, transform, and load on-chain data to power both application and analytics use cases. Goldsky offers two primary approaches to indexing and accessing blockchain data: Index (high-performance subgraphs) and Mirror (real-time data replication pipelines). +[Goldsky](https://goldsky.com) is a high-performance data indexing provider for +Linea that makes it easy to extract, transform, and load on-chain data to power +both application and analytics use cases. Goldsky offers two primary approaches +to indexing and accessing blockchain data: Index (high-performance subgraphs) +and Mirror (real-time data replication pipelines). ## Index (high-performance subgraphs) -[Index](./goldsky-index.md) is a high-performance hosted subgraph solution with native support for Linea (both testnet and mainnet). Subgraphs allow you to define a data schema and how blockchain data should be indexed for querying, and can be deployed to Goldsky directly from the command line. If you’ve built with subgraphs in the past, you can work with Goldsky’s hosted service with no change to your development flow, and take advantage of several key benefits: - -- **Cross-chain**: Native cross-chain and multi-chain support to query data from multiple blockchains from a single endpoint, automatically managing event order, re-orgs, and other complexities. -- **RPC proxy**: [Goldsky](https://goldsky.com) intelligently balances load and manages RPC provider failures across 20+ endpoints, maximizing indexing speed and querying reliability. -- **Robust dev tooling**: Webhooks, version control, data source tags, instant subgraphs without writing a line of code, and other goodies to make indexing data easier. -- **White-glove support**: With custom SLAs and support scopes, Goldsky’s support team is available 24/7 to customize your indexing and query server for your specific use case, and to help if things go wrong. +[Index](./goldsky-index.md) is a high-performance hosted subgraph solution with +native support for Linea (both testnet and mainnet). Subgraphs allow you to +define a data schema and how blockchain data should be indexed for querying, and +can be deployed to Goldsky directly from the command line. If you’ve built with +subgraphs in the past, you can work with Goldsky’s hosted service with no change +to your development flow, and take advantage of several key benefits: + +- **Cross-chain**: Native cross-chain and multi-chain support to query data from + multiple blockchains from a single endpoint, automatically managing event + order, re-orgs, and other complexities. +- **RPC proxy**: [Goldsky](https://goldsky.com) intelligently balances load and + manages RPC provider failures across 20+ endpoints, maximizing indexing speed + and querying reliability. +- **Robust dev tooling**: Webhooks, version control, data source tags, instant + subgraphs without writing a line of code, and other goodies to make indexing + data easier. +- **White-glove support**: With custom SLAs and support scopes, Goldsky’s + support team is available 24/7 to customize your indexing and query server for + your specific use case, and to help if things go wrong. ## Mirror (data replication pipelines) -[Mirror](./goldsky-mirror.md) is a real-time data replication system that allows you to keep blockchain data where your app is. Mirror pipelines instruct [Goldsky](https://goldsky.com) on where to take data from, how to (optionally) process it, and where to persist the results. Compared to subgraphs, Mirror pipelines differ in a few key ways: - -- **Self-hosted**: Results are persisted in a database or as flat files rather than being served only via a remotely-hosted API. This allows for seamless colocation of indexed data alongside your app and (private) user data. -- **Self-healing**: Mirror pipelines benefit from the wisdom of the crowd - quality checks, fixes, and improvements to the data are applied automatically through upserts and deletes directly in your database. -- **Scalable**: You can index data from multiple sources (and push it to multiple sinks, and with transformations) in parallel, and with infinite horizontal scaling, allowing you to complete historical backfills in record speed. -- **Simple**: Mirror pipelines can be defined and executed entirely through a 5-step interactive CLI, or with simple JSON configuration files and some SQL for more flexibility. +[Mirror](./goldsky-mirror.md) is a real-time data replication system that allows +you to keep blockchain data where your app is. Mirror pipelines instruct +[Goldsky](https://goldsky.com) on where to take data from, how to (optionally) +process it, and where to persist the results. Compared to subgraphs, Mirror +pipelines differ in a few key ways: + +- **Self-hosted**: Results are persisted in a database or as flat files rather + than being served only via a remotely-hosted API. This allows for seamless + colocation of indexed data alongside your app and (private) user data. +- **Self-healing**: Mirror pipelines benefit from the wisdom of the crowd - + quality checks, fixes, and improvements to the data are applied automatically + through upserts and deletes directly in your database. +- **Scalable**: You can index data from multiple sources (and push it to + multiple sinks, and with transformations) in parallel, and with infinite + horizontal scaling, allowing you to complete historical backfills in record + speed. +- **Simple**: Mirror pipelines can be defined and executed entirely through a + 5-step interactive CLI, or with simple JSON configuration files and some SQL + for more flexibility. ## Getting started -To get started, visit the quickstart pages for [Index](./goldsky-index.md) and [Mirror](./goldsky-mirror.md) on Linea, or visit the complete Goldsky documentation [here](https://docs.goldsky.com). +To get started, visit the quickstart pages for [Index](./goldsky-index.md) and +[Mirror](./goldsky-mirror.md) on Linea, or visit the complete Goldsky +documentation [here](https://docs.goldsky.com). 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/mobula.md b/docs/developers/tooling/data-indexers/mobula.md index c7a552f48..c45608471 100644 --- a/docs/developers/tooling/data-indexers/mobula.md +++ b/docs/developers/tooling/data-indexers/mobula.md @@ -3,23 +3,41 @@ title: Mobula image: /img/socialCards/mobula.jpg --- -[Mobula](https://docs.mobula.io) serves as a specialized data layer that offers Octoflow, a powerful system designed to stream any on-chain action, including events, traces, transactions, and blocks. This provision enables unparalleled access and analytics, equipping users with precise insights for informed decision-making. +[Mobula](https://docs.mobula.io) serves as a specialized data layer that offers +Octoflow, a powerful system designed to stream any on-chain action, including +events, traces, transactions, and blocks. This provision enables unparalleled +access and analytics, equipping users with precise insights for informed +decision-making. ## Octoflow -At the heart of [Mobula's](https://mobula.io) innovative offerings, Octoflow stands as a groundbreaking system designed to capture and stream a wide array of on-chain activities, from transactions and blocks to events and traces. This cutting-edge technology enables users to access real-time blockchain data, ensuring comprehensive analytics and the extraction of actionable insights. Octoflow’s advanced capabilities democratize the analysis of blockchain events, making it accessible for users to conduct detailed investigations and derive strategic advantages. Octoflow equips users with the tools needed to navigate the complexities of the blockchain with confidence and precision. +At the heart of [Mobula's](https://mobula.io) innovative offerings, Octoflow +stands as a groundbreaking system designed to capture and stream a wide array of +on-chain activities, from transactions and blocks to events and traces. This +cutting-edge technology enables users to access real-time blockchain data, +ensuring comprehensive analytics and the extraction of actionable insights. +Octoflow’s advanced capabilities democratize the analysis of blockchain events, +making it accessible for users to conduct detailed investigations and derive +strategic advantages. Octoflow equips users with the tools needed to navigate +the complexities of the blockchain with confidence and precision. ### Get started -To leverage on-chain insights through advanced data indexing technology, consider using [Mobula's](https://docs.mobula.io) Octoflow. +To leverage on-chain insights through advanced data indexing technology, +consider using [Mobula's](https://docs.mobula.io) Octoflow. -Create a room with Mobula core team **[here](https://t.me/MobulaPartnerBot?start=Linea_Docs_Octoflow)** +Create a room with Mobula core team +**[here](https://t.me/MobulaPartnerBot?start=Linea_Docs_Octoflow)** **Additional resources:** -- **[Dive into the documentation](https://docs.mobula.io)** - Delve into the extensive resources of [Mobula’s](https://docs.mobula.io) documentation. From detailed API guidelines to all-encompassing tutorials. +- **[Dive into the documentation](https://docs.mobula.io)** - Delve into the + extensive resources of [Mobula’s](https://docs.mobula.io) documentation. From + detailed API guidelines to all-encompassing tutorials. -- **[Explore the Mobula app](https://mobula.io)** - Access the heart of cryptocurrency analytics with the [Mobula](https://mobula.io) app. Designed for ease of integration and enriched with powerful data insights. +- **[Explore the Mobula app](https://mobula.io)** - Access the heart of + cryptocurrency analytics with the [Mobula](https://mobula.io) app. Designed + for ease of integration and enriched with powerful data insights. **X:** https://x.com/MobulaIO diff --git a/docs/developers/tooling/data-indexers/moralis.md b/docs/developers/tooling/data-indexers/moralis.md index ed2fd304c..d0b1840ba 100644 --- a/docs/developers/tooling/data-indexers/moralis.md +++ b/docs/developers/tooling/data-indexers/moralis.md @@ -3,23 +3,39 @@ title: Moralis image: /img/socialCards/moralis.jpg --- -[Moralis](https://moralis.io/?utm_source=linea-docs&utm_medium=partner-docs) offers comprehensive data APIs for crypto, offering both indexed and real-time data across [30+ chains](https://docs.moralis.io/supported-chains?utm_source=linea-docs&utm_medium=partner-docs). Moralis' APIs include portfolio and wallet balances, NFT data, token data, price data, candlestick data, net worth data, and a lot more. Additionally, all data is enhanced with metadata, parsed events, address labels and wider off-chain data for comprehensive insights. +[Moralis](https://moralis.io/?utm_source=linea-docs&utm_medium=partner-docs) offers +comprehensive data APIs for crypto, offering both indexed and real-time data +across +[30+ chains](https://docs.moralis.io/supported-chains?utm_source=linea-docs&utm_medium=partner-docs). +Moralis' APIs include portfolio and wallet balances, NFT data, token data, price +data, candlestick data, net worth data, and a lot more. Additionally, all data +is enhanced with metadata, parsed events, address labels and wider off-chain +data for comprehensive insights. [Start building with Moralis](https://moralis.io/chains/linea/?utm_source=linea-docs&utm_medium=partner-docs) ## 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. -- **[Price API](https://moralis.io/api/price/?utm_source=linea-docs&utm_medium=partner-docs)**: NFT prices, token prices, candlestick data, and more. -- **[DeFi API](https://moralis.io/api/defi/?utm_source=linea-docs&utm_medium=partner-docs)**: DeFi balances, rewards, transactions, and more. -- **[Blockchain API](https://moralis.io/api/blockchain/?utm_source=linea-docs&utm_medium=partner-docs)**: Raw data such as blocks, transactions, and logs. + +- **[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. +- **[Price API](https://moralis.io/api/price/?utm_source=linea-docs&utm_medium=partner-docs)**: + NFT prices, token prices, candlestick data, and more. +- **[DeFi API](https://moralis.io/api/defi/?utm_source=linea-docs&utm_medium=partner-docs)**: + DeFi balances, rewards, transactions, and more. +- **[Blockchain API](https://moralis.io/api/blockchain/?utm_source=linea-docs&utm_medium=partner-docs)**: + Raw data such as blocks, transactions, and logs. ### 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,19 +46,29 @@ 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. -- **DeFi platforms:** Integrating token and blockchain data to facilitate decentralized finance activities such as lending, borrowing, and trading. + +- **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. +- **DeFi platforms:** Integrating token and blockchain data to facilitate + decentralized finance activities such as lending, borrowing, and trading. ## 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. + +- **[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,11 +79,23 @@ 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. -- **Build a database:** Track real-time events for specific events and store them in your database, ensuring that you maintain a comprehensive historical record of blockchain activities for a given wallet or contract. + +- **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. +- **Build a database:** Track real-time events for specific events and store + them in your database, ensuring that you maintain a comprehensive historical + record of blockchain activities for a given wallet or contract. ## Get started -To get started with Moralis you can [sign up for a free account](https://moralis.io/?utm_source=linea-docs&utm_medium=partner-docs), visit the [Moralis documentation](https://docs.moralis.io/?utm_source=linea-docs&utm_medium=partner-docs), or check out their [tutorials on Youtube](https://www.youtube.com/@MoralisWeb3). +To get started with Moralis you +can [sign up for a free account](https://moralis.io/?utm_source=linea-docs&utm_medium=partner-docs), +visit the +[Moralis documentation](https://docs.moralis.io/?utm_source=linea-docs&utm_medium=partner-docs), +or check out their [tutorials on Youtube](https://www.youtube.com/@MoralisWeb3). diff --git a/docs/developers/tooling/data-indexers/nftscan.mdx b/docs/developers/tooling/data-indexers/nftscan.mdx index 37f675b7e..9153b1e6a 100644 --- a/docs/developers/tooling/data-indexers/nftscan.mdx +++ b/docs/developers/tooling/data-indexers/nftscan.mdx @@ -3,17 +3,29 @@ title: NFTScan image: /img/socialCards/nftscan.jpg --- -The increasing demand for NFTs has brought attention to the importance of having efficient tools to keep track of their creation, movement, and trading activities. For companies and developers involved in NFTs, it is crucial to have the capability to monitor the minting events, especially with the growth of NFT-based applications that will be facilitated by Linea's scalability. +The increasing demand for NFTs has brought attention to the importance of having +efficient tools to keep track of their creation, movement, and trading +activities. For companies and developers involved in NFTs, it is crucial to have +the capability to monitor the minting events, especially with the growth of +NFT-based applications that will be facilitated by Linea's scalability. -This article provides information on how you can utilize the NFTScan API to monitor the full NFT data on Linea. +This article provides information on how you can utilize the NFTScan API to +monitor the full NFT data on Linea. ## Understanding NFTScan -NFTScan provides Web3 developers with the most professional, comprehensive and authoritative NFT data services and solutions. Through establishing the full NFT data information of multiple blockchain networks with standardized indexing methods, the NFTScan APIs help developers build new experiences retrieving NFTs. We provide a set of endpoints that enable you to fetch ERC-721 and ERC-1155 NFT assets as well as transactions, collections, marketplace statistics and more. +NFTScan provides Web3 developers with the most professional, comprehensive and +authoritative NFT data services and solutions. Through establishing the full NFT +data information of multiple blockchain networks with standardized indexing +methods, the NFTScan APIs help developers build new experiences retrieving NFTs. +We provide a set of endpoints that enable you to fetch ERC-721 and ERC-1155 NFT +assets as well as transactions, collections, marketplace statistics and more. ## What can the NFTScan API provide? -NFTScan API indexes all core aspects of NFTs on multiple blockchains and provides quick access to this through a suite of data-focused API endpoints. No matter what you are building, NFTScan API will support the data you will need. +NFTScan API indexes all core aspects of NFTs on multiple blockchains and +provides quick access to this through a suite of data-focused API endpoints. No +matter what you are building, NFTScan API will support the data you will need. - **Retrieving NFTs** - **Retrieving owners of NFTs** @@ -26,105 +38,172 @@ NFTScan API indexes all core aspects of NFTs on multiple blockchains and provide ### 1. Create a NFTScan developer account -Before using the NFTScan API, you need to visit the developer website and create an account. Go to the NFTScan official website and click the “Sign Up” button for NFTScan API registration. +Before using the NFTScan API, you need to visit the developer website and create +an account. Go to the NFTScan official website and click the “Sign Up” button +for NFTScan API registration. -> _NFTScan Developer Platform: [https://developer.nftscan.com/user/signup](https://developer.nftscan.com/user/signup)_ +> _NFTScan Developer +> Platform: [https://developer.nftscan.com/user/signup](https://developer.nftscan.com/user/signup)_
- NFTScan sign up page + NFTScan sign up page
-After logging in, find your unique API KEY on the Dashboard and copy it. Visit the API documentation and input your API KEY as guided. You can then start using the API service. In the API documentation, developers can find various interface modes to choose from based on their needs. +After logging in, find your unique API KEY on the Dashboard and copy it. Visit +the API documentation and input your API KEY as guided. You can then start using +the API service. In the API documentation, developers can find various interface +modes to choose from based on their needs.
- NFTScan API key + NFTScan API key
-In the Dashboard, developers can also view statistics on their API usage, helping to track historical usage data. Moreover, NFTScan provides each registered developer with 1M CU (Call Units) of API calls, allowing access to all NFT API interfaces, and CU never expires. +In the Dashboard, developers can also view statistics on their API usage, +helping to track historical usage data. Moreover, NFTScan provides each +registered developer with 1M CU (Call Units) of API calls, allowing access to +all NFT API interfaces, and CU never expires.
- NFTScan dashboard + NFTScan dashboard
### 2. View the NFTScan API documentation -After successfully registering as a developer and obtaining your API Key, you need to review the NFTScan API documentation. The API documentation includes all available API endpoints and parameters, along with detailed instructions on how to build requests and handle responses. Carefully read the API documentation and ensure you understand how to use the API to retrieve the data you need. +After successfully registering as a developer and obtaining your API Key, you +need to review the NFTScan API documentation. The API documentation includes all +available API endpoints and parameters, along with detailed instructions on how +to build requests and handle responses. Carefully read the API documentation and +ensure you understand how to use the API to retrieve the data you need. -> _NFTScan API Documentation: [https://docs.nftscan.com](https://docs.nftscan.com)_ +> _NFTScan API +> Documentation: [https://docs.nftscan.com](https://docs.nftscan.com)_ -NFTScan API services aim to enhance developers’ experience in obtaining NFT data analysis. NFTScan currently boasts the largest and most comprehensive NFT Collection library, supporting full NFT data for Ethereum, Solana, BNBChain, Bitcoin, Polygon, zkSync, Aptos, Linea, Avalanche, Arbitrum, Optimism, Fantom, Moonbeam, PlatON, Cronos, and Gnosis on 16 blockchains. +NFTScan API services aim to enhance developers’ experience in obtaining NFT data +analysis. NFTScan currently boasts the largest and most comprehensive NFT +Collection library, supporting full NFT data for Ethereum, Solana, BNBChain, +Bitcoin, Polygon, zkSync, Aptos, Linea, Avalanche, Arbitrum, Optimism, Fantom, +Moonbeam, PlatON, Cronos, and Gnosis on 16 blockchains. -The covered NFT data is diverse, providing a complete set of interfaces for accessing ERC721 and ERC1155 assets, transactions, projects, market statistics, and more. It supports over 50 public interfaces for EVM-compatible chains and a set of similar interfaces for Solana, Aptos, and Bitcoin, satisfying developers’ needs to index various types of NFT data. +The covered NFT data is diverse, providing a complete set of interfaces for +accessing ERC721 and ERC1155 assets, transactions, projects, market statistics, +and more. It supports over 50 public interfaces for EVM-compatible chains and a +set of similar interfaces for Solana, Aptos, and Bitcoin, satisfying developers’ +needs to index various types of NFT data.
- NFTScan API documentation + NFTScan API documentation
### 3. Set the chain to Linea -In the API documentation, you'll notice a section for selecting the blockchain. Make sure to set it to Linea to ensure you're retrieving NFT data specifically from the Linea blockchain. +In the API documentation, you'll notice a section for selecting the blockchain. +Make sure to set it to Linea to ensure you're retrieving NFT data specifically +from the Linea blockchain.
- NFTScan set chain to Linea + NFTScan set chain to Linea
### 4. Querying relevant API requests -Now that you've configured the blockchain to Linea, you can start using the API endpoints tailored to your specific needs. NFTScan offers a wide range of API endpoints, each designed for various purposes. +Now that you've configured the blockchain to Linea, you can start using the API +endpoints tailored to your specific needs. NFTScan offers a wide range of API +endpoints, each designed for various purposes.
- NFTScan querying API requests + NFTScan querying API requests
-- **[Retrieve Assets](https://docs.nftscan.com/reference/evm/get-nfts-by-account):** A core API for retrieving NFT asset data. The core data model in NFTScan API is Assets, representing unique digital items. It includes contract addresses, contract names, token IDs, ERC protocol standards, metadata JSON, image URIs, holders, rarity rankings, and comprehensive data about NFT projects, asset lists, and details. -- **[Retrieve Transactions](https://docs.nftscan.com/reference/evm/get-transactions-by-account):** This API retrieves NFT transaction records, comprehensively recording NFT trade markets and transaction contract information on various blockchain networks. It offers in-depth analysis based on contract source codes and transaction logs, contributing to data parsing logic. -- **[Retrieve Collections](https://docs.nftscan.com/reference/evm/get-an-nft-collection):** This API retrieves NFT Collection asset data, providing essential information about NFT Collections and the data held by wallet addresses. Descriptions, social media, and other basic information about NFT Collections can be obtained through APIs offered by leading NFT markets on various blockchain networks. Additionally, floor price information is centralized data obtained through APIs based on market orders. -- **[Collection Statistics](https://docs.nftscan.com/reference/evm/collection-statistics):** This API provides comprehensive statistics for NFT Collections, offering key statistical indicators such as holder distribution, circulation rate, trading volume, and price trends. These statistics play a vital role in product design, market research, and asset evaluation. -- **[Account Statistics](https://docs.nftscan.com/reference/evm/account-overview-statistics):** This API offers comprehensive statistics for NFT user accounts, providing core statistical indicators such as the number of NFTs held, total value held, and historical transaction data. This data is essential for product design, user research, customer profiling, and more. -- **[Analytic Statistics](https://docs.nftscan.com/reference/evm/trade-ranking):** This API offers in-depth analysis of NFT data, providing insights such as NFT ranking, trend forecasts, and more. These analytical data help data-driven decision-making and strategic planning. +- **[Retrieve Assets](https://docs.nftscan.com/reference/evm/get-nfts-by-account):** A + core API for retrieving NFT asset data. The core data model in NFTScan API is + Assets, representing unique digital items. It includes contract addresses, + contract names, token IDs, ERC protocol standards, metadata JSON, image URIs, + holders, rarity rankings, and comprehensive data about NFT projects, asset + lists, and details. +- **[Retrieve Transactions](https://docs.nftscan.com/reference/evm/get-transactions-by-account):** This + API retrieves NFT transaction records, comprehensively recording NFT trade + markets and transaction contract information on various blockchain networks. + It offers in-depth analysis based on contract source codes and transaction + logs, contributing to data parsing logic. +- **[Retrieve Collections](https://docs.nftscan.com/reference/evm/get-an-nft-collection):** This + API retrieves NFT Collection asset data, providing essential information about + NFT Collections and the data held by wallet addresses. Descriptions, social + media, and other basic information about NFT Collections can be obtained + through APIs offered by leading NFT markets on various blockchain networks. + Additionally, floor price information is centralized data obtained through + APIs based on market orders. +- **[Collection Statistics](https://docs.nftscan.com/reference/evm/collection-statistics):** This + API provides comprehensive statistics for NFT Collections, offering key + statistical indicators such as holder distribution, circulation rate, trading + volume, and price trends. These statistics play a vital role in product + design, market research, and asset evaluation. +- **[Account Statistics](https://docs.nftscan.com/reference/evm/account-overview-statistics):** This + API offers comprehensive statistics for NFT user accounts, providing core + statistical indicators such as the number of NFTs held, total value held, and + historical transaction data. This data is essential for product design, user + research, customer profiling, and more. +- **[Analytic Statistics](https://docs.nftscan.com/reference/evm/trade-ranking):** This + API offers in-depth analysis of NFT data, providing insights such as NFT + ranking, trend forecasts, and more. These analytical data help data-driven + decision-making and strategic planning. ### 5. Building relevant NFT requests -Constructing NFT-related requests with NFTScan is straightforward. Developers only need to find the desired interfaces in the API documentation, review interface addresses, request methods, and parameters. Based on their programming language of choice, such as JavaScript, Python, Java, etc., developers can use the respective HTTP request libraries to send well-constructed requests to the interface addresses, including necessary headers and parameters. The calling process is quick and convenient, allowing developers to implement it based on the documentation. +Constructing NFT-related requests with NFTScan is straightforward. Developers +only need to find the desired interfaces in the API documentation, review +interface addresses, request methods, and parameters. Based on their programming +language of choice, such as JavaScript, Python, Java, etc., developers can use +the respective HTTP request libraries to send well-constructed requests to the +interface addresses, including necessary headers and parameters. The calling +process is quick and convenient, allowing developers to implement it based on +the documentation. ## Conclusion -NFTScan provides a customized NFT data retrieval experience that is different from traditional blockchain data platforms. This not only enriches the functionality settings of applications, but also greatly reduces the cost of developers obtaining and processing NFT data. Developers can flexibly access the rich NFT data resources provided by NFTScan based on their application requirements. Developers can freely combine these APIs according to their business scenarios, building NFT applications or solutions that meet their specific needs. +NFTScan provides a customized NFT data retrieval experience that is different +from traditional blockchain data platforms. This not only enriches the +functionality settings of applications, but also greatly reduces the cost of +developers obtaining and processing NFT data. Developers can flexibly access the +rich NFT data resources provided by NFTScan based on their application +requirements. Developers can freely combine these APIs according to their +business scenarios, building NFT applications or solutions that meet their +specific needs. **References:** NFTScan: [https://nftscan.com](https://nftscan.com/) -NFTScan Developer Platform: [https://developer.nftscan.com](https://developer.nftscan.com/) +NFTScan Developer +Platform: [https://developer.nftscan.com](https://developer.nftscan.com/) NFTScan API Doc: _[https://docs.nftscan.com](https://docs.nftscan.com)_ diff --git a/docs/developers/tooling/data-indexers/noves.md b/docs/developers/tooling/data-indexers/noves.md index fdada83e7..765f6d52f 100644 --- a/docs/developers/tooling/data-indexers/noves.md +++ b/docs/developers/tooling/data-indexers/noves.md @@ -3,17 +3,30 @@ title: Noves image: /img/socialCards/noves.jpg --- -Noves is the leading provider of interpreted, human-readable data in the EVM space. Its flagship product, [Translate API](https://docs.noves.fi/reference/introduction), allows developers to retrieve transactions in fully-enriched, human-readable form. +Noves is the leading provider of interpreted, human-readable data in the EVM +space. Its flagship product, +[Translate API](https://docs.noves.fi/reference/introduction), allows developers +to retrieve transactions in fully-enriched, human-readable form. -For a sample of what this data looks like, you can check out [Linea for Humans](https://linea.forhumans.app), a human-readable block explorer built by Noves for Linea. +For a sample of what this data looks like, you can check out +[Linea for Humans](https://linea.forhumans.app), a human-readable block explorer +built by Noves for Linea. -Translate covers more than 50 transaction types in its interpretation schema, including common transactions such as claiming rewards or staking (across thousands of protocols), but also more niche types such as governance delegation, MEV, NFT transformations, and [more](https://docs.noves.fi/reference/token). +Translate covers more than 50 transaction types in its interpretation schema, +including common transactions such as claiming rewards or staking (across +thousands of protocols), but also more niche types such as governance +delegation, MEV, NFT transformations, and +[more](https://docs.noves.fi/reference/token). ## Cross-DEX pricing data -Noves Pricing API supports many DEX protocols on Linea, allowing developers to price a variety of tokens and LP tokens on the chain. +Noves Pricing API supports many DEX protocols on Linea, allowing developers to +price a variety of tokens and LP tokens on the chain. -The API also offers historical pricing with block-level granularity. The price of any token / LP token can be requested as of a specific block. This is particularly useful for financial applications / reporting where establishing a precise cost-basis is necessary. +The API also offers historical pricing with block-level granularity. The price +of any token / LP token can be requested as of a specific block. This is +particularly useful for financial applications / reporting where establishing a +precise cost-basis is necessary. ## Learn more @@ -23,4 +36,5 @@ Product docs: [docs.noves.fi](https://docs.noves.fi) ## Start using for free -A free plan is available for Linea users, click [here](https://noves.fi/pricing) to sign up. +A free plan is available for Linea users, click [here](https://noves.fi/pricing) +to sign up. diff --git a/docs/developers/tooling/data-indexers/reservoir.md b/docs/developers/tooling/data-indexers/reservoir.md index 046071b22..b695404d2 100644 --- a/docs/developers/tooling/data-indexers/reservoir.md +++ b/docs/developers/tooling/data-indexers/reservoir.md @@ -1,53 +1,109 @@ # Reservoir -[Reservoir](https://reservoir.tools/) is a developer platform that lets you interact with the NFT market using a single toolkit. With the tools, you can build [custom marketplaces](https://docs.reservoir.tools/docs/custom-marketplaces), [embed buying, selling](https://docs.reservoir.tools/docs/embedded-buying-selling) & [minting](https://docs.reservoir.tools/docs/minting) into your app, and get [distribution for your protocol's liquidity](https://docs.reservoir.tools/docs/how-to-get-distribution-for-your-protocol-using-reservoir), among many other [use cases](https://docs.reservoir.tools/docs/custom-marketplaces). We run a hosted version of our API, but all the tools are open-source. - -The platform is built on **The Reservoir Standard**, an open framework for understanding the NFT market across marketplaces and chains. Together, these pieces function as an interface that makes NFT markets composable, easy to participate in, and aligned with the ethos of web3. Check out our tools: +[Reservoir](https://reservoir.tools/) is a developer platform that lets you +interact with the NFT market using a single toolkit. With the tools, you can +build +[custom marketplaces](https://docs.reservoir.tools/docs/custom-marketplaces), +[embed buying, selling](https://docs.reservoir.tools/docs/embedded-buying-selling) +& [minting](https://docs.reservoir.tools/docs/minting) into your app, and get +[distribution for your protocol's liquidity](https://docs.reservoir.tools/docs/how-to-get-distribution-for-your-protocol-using-reservoir), +among many other +[use cases](https://docs.reservoir.tools/docs/custom-marketplaces). We run a +hosted version of our API, but all the tools are open-source. + +The platform is built on **The Reservoir Standard**, an open framework for +understanding the NFT market across marketplaces and chains. Together, these +pieces function as an interface that makes NFT markets composable, easy to +participate in, and aligned with the ethos of web3. Check out our tools: # [NFT trading and data APIs](https://docs.reservoir.tools/reference/overview) -Reservoir APIs provide all-in-one endpoints for building NFT applications. The NFT trading APIs allow you to trade NFTs across major NFT marketplaces and create your own orders with advanced order types and custom fees. The NFT data APIs provide granular token price data, real-time collection floor price and top bid events, token and collection metadata, and more. The API is wrapped in an easy-to-use [TS/JS SDK](ref:reservoir-sdk-jstsnode) with performant methods. +Reservoir APIs provide all-in-one endpoints for building NFT applications. The +NFT trading APIs allow you to trade NFTs across major NFT marketplaces and +create your own orders with advanced order types and custom fees. The NFT data +APIs provide granular token price data, real-time collection floor price and top +bid events, token and collection metadata, and more. The API is wrapped in an +easy-to-use [TS/JS SDK](ref:reservoir-sdk-jstsnode) with performant methods. -Learn more about our NFT Trading & Data APIs [here](https://docs.reservoir.tools/reference/overview). +Learn more about our NFT Trading & Data APIs +[here](https://docs.reservoir.tools/reference/overview). # [ReservoirKit](doc:reservoirkit-ui) -ReservoirKit is a React library that makes it easy to add marketplace functionality into your project. The kit has out of the box and customizable (headless) modals for major market actions, as well as a series of useful hooks to simplify development. +ReservoirKit is a React library that makes it easy to add marketplace +functionality into your project. The kit has out of the box and customizable +(headless) modals for major market actions, as well as a series of useful hooks +to simplify development. -Learn more about ReservoirKit [here](https://docs.reservoir.tools/reference/reservoirkit). +Learn more about ReservoirKit +[here](https://docs.reservoir.tools/reference/reservoirkit). # [Open-source marketplace](https://docs.reservoir.tools/reference/open-source-marketplace) -Reservoir's open-source marketplace is a NextJS app that you can fork and use freely as a stand alone marketplace or a base for building something more custom and unique. You can checkout our fully-functional reference deployment [here](https://marketplace.reservoir.tools/). +Reservoir's open-source marketplace is a NextJS app that you can fork and use +freely as a stand alone marketplace or a base for building something more custom +and unique. You can checkout our fully-functional reference deployment +[here](https://marketplace.reservoir.tools/). -Learn more about our Open-source Marketplace [here](https://docs.reservoir.tools/reference/open-source-marketplace). +Learn more about our Open-source Marketplace +[here](https://docs.reservoir.tools/reference/open-source-marketplace). # Why use Reservoir? -Interacting with the NFT market can be challenging. Reservoir simplifies the process so you can spend your time focusing on your product's unique value add to the market. +Interacting with the NFT market can be challenging. Reservoir simplifies the +process so you can spend your time focusing on your product's unique value add +to the market. ## Developer-focused tooling -Reservoir allows you to build at your desired level of the stack. We provide a modular set of tools that let you interact with the NFT market at the appropriate level of abstraction for your application. Whether you wish to use our router contracts directly, use our APIs for trade execution, or use ReservoirKit to build a React app, we have you covered. +Reservoir allows you to build at your desired level of the stack. We provide a +modular set of tools that let you interact with the NFT market at the +appropriate level of abstraction for your application. Whether you wish to use +our router contracts directly, use our APIs for trade execution, or use +ReservoirKit to build a React app, we have you covered. -Learn more about our tools [here](https://docs.reservoir.tools/docs/marketplace-toolkit). +Learn more about our tools +[here](https://docs.reservoir.tools/docs/marketplace-toolkit). ## Abstracted orderbook and exchange -Reservoir treats the NFT market as one cohesive whole and abstracts the process of interacting with individual orderbooks and exchanges. This means you get: - -- **Upgrade protection** - Since Reservoir abstracts the orderbook and exchange, you get exchange and orderbook upgrades free and with no additional work. By default we use the Seaport exchange, as new features roll out, you will get them without any changes to your code. -- **Out of the box aggregation** - We aggregate all major marketplaces and normalize the liquidity so all orders are treated equally in our system. See a full list of aggregated marketplaces [here](https://docs.reservoir.tools/reference/supported-marketplaces). We don’t just aggregate listings, we also aggregate all bid liquidity from across the NFT ecosystem so your users can sell instantly into the best available offer. -- **Order distribution** - Reservoir allows you to post your own orders with your desired fee structure. These orders are distributed to all Reservoir partner marketplaces and marketplaces that aggregate the Reservoir orderbook. Additionally, Reservoir allows you to cross post orders to other major marketplace orderbooks. +Reservoir treats the NFT market as one cohesive whole and abstracts the process +of interacting with individual orderbooks and exchanges. This means you get: + +- **Upgrade protection** - Since Reservoir abstracts the orderbook and exchange, + you get exchange and orderbook upgrades free and with no additional work. By + default we use the Seaport exchange, as new features roll out, you will get + them without any changes to your code. +- **Out of the box aggregation** - We aggregate all major marketplaces and + normalize the liquidity so all orders are treated equally in our system. See a + full list of aggregated marketplaces + [here](https://docs.reservoir.tools/reference/supported-marketplaces). We + don’t just aggregate listings, we also aggregate all bid liquidity from across + the NFT ecosystem so your users can sell instantly into the best available + offer. +- **Order distribution** - Reservoir allows you to post your own orders with + your desired fee structure. These orders are distributed to all Reservoir + partner marketplaces and marketplaces that aggregate the Reservoir orderbook. + Additionally, Reservoir allows you to cross post orders to other major + marketplace orderbooks. ## Marketplace innovation -Reservoir is pushing the boundaries of NFT markets. We strive to build best in class NFT market solutions. Here are just a few of the important features we have released recently that you won’t find anywhere else. +Reservoir is pushing the boundaries of NFT markets. We strive to build best in +class NFT market solutions. Here are just a few of the important features we +have released recently that you won’t find anywhere else. -- [Royalty Compliance](https://docs.reservoir.tools/docs/royalties) - Leverage aggregated liquidity with normalized royalties, so you get all the NFT market liquidity while still respecting creator royalties. +- [Royalty Compliance](https://docs.reservoir.tools/docs/royalties) - Leverage + aggregated liquidity with normalized royalties, so you get all the NFT market + liquidity while still respecting creator royalties. -- [Custom Fees](https://docs.reservoir.tools/docs/custom-fees) - Distribute orders across the NFT ecosystem with your own custom fee structure. +- [Custom Fees](https://docs.reservoir.tools/docs/custom-fees) - Distribute + orders across the NFT ecosystem with your own custom fee structure. -- [Cross-chain support](https://docs.reservoir.tools/reference/supported-chains) - Reservoir is currently live on Ethereum, Polygon and Optimism - with more chains on the way. +- [Cross-chain support](https://docs.reservoir.tools/reference/supported-chains) - + Reservoir is currently live on Ethereum, Polygon and Optimism - with more + chains on the way. -- [Instant Sell](https://docs.reservoir.tools/docs/add-instant-sell) - Aggregated bid liquidity allows your users to sell instantly into the best offer on the market. +- [Instant Sell](https://docs.reservoir.tools/docs/add-instant-sell) - + Aggregated bid liquidity allows your users to sell instantly into the best + offer on the market. diff --git a/docs/developers/tooling/data-indexers/scopescan.mdx b/docs/developers/tooling/data-indexers/scopescan.mdx index 532644b4d..0e84830e7 100644 --- a/docs/developers/tooling/data-indexers/scopescan.mdx +++ b/docs/developers/tooling/data-indexers/scopescan.mdx @@ -3,84 +3,113 @@ 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. +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. - -When Scopescan processed Linea as the latest addition to its lineup of supported blockchains, it looked into all the addresses of this chain and the relationships between these addresses. This way, Scopescan users will be able to see the behavior of any user on the Linea chain, and then discover connections between these users. When Linea ecosystem projects leverage this entity-related information, they can understand their users better and fine-tune their strategies to grow their user base. +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. + +When Scopescan processed Linea as the latest addition to its lineup of supported +blockchains, it looked into all the addresses of this chain and the +relationships between these addresses. This way, Scopescan users will be able to +see the behavior of any user on the Linea chain, and then discover connections +between these users. When Linea ecosystem projects leverage this entity-related +information, they can understand their users better and fine-tune their +strategies to grow their user base. ## Scopescan’s analytical tools -Scopescan is equipped with a variety of tools that help the Linea community better understand users, projects, and their interconnections. Here are the three categories through which Scopescan’s lineup of tools are categorized: +Scopescan is equipped with a variety of tools that help the Linea community +better understand users, projects, and their interconnections. Here are the +three categories through which Scopescan’s lineup of tools are categorized: **1. Discovery Mode** -In this mode, Scopescan users can find profiles of the top addresses, tokens, and projects on the Linea network. These profile pages serve as comprehensive dashboards containing relevant information about any entity on the Linea network. Below, you can see a sample dashboard for Linea’s projects and addresses. +In this mode, Scopescan users can find profiles of the top addresses, tokens, +and projects on the Linea network. These profile pages serve as comprehensive +dashboards containing relevant information about any entity on the Linea +network. Below, you can see a sample dashboard for Linea’s projects and +addresses.
- +
- +
**2. Alpha Hunting** -This segment of Scopechat contains dashboards focused on identifying potential alpha opportunities related to tokens and projects in the Linea ecosystem. The Live Statistics dashboard (shown in the first picture below) displays statistics such as active users, top gas spenders and consumers, and CEX activity on Linea-supported tokens. There are other dashboards dedicated to whales, VCs, and institutions affiliated with the Linea ecosystem. The second picture below is an example of the Whale Watch dashboard. +This segment of Scopechat contains dashboards focused on identifying potential +alpha opportunities related to tokens and projects in the Linea ecosystem. The +Live Statistics dashboard (shown in the first picture below) displays statistics +such as active users, top gas spenders and consumers, and CEX activity on +Linea-supported tokens. There are other dashboards dedicated to whales, VCs, and +institutions affiliated with the Linea ecosystem. The second picture below is an +example of the Whale Watch dashboard. -In addition, you can create your own dashboard that can track specific addresses on your radar, giving you a key advantage in tracking changes in user behaviors and acting upon them. +In addition, you can create your own dashboard that can track specific addresses +on your radar, giving you a key advantage in tracking changes in user behaviors +and acting upon them.
- +
- +
**3. Investigation Mode** -Under Investigation Mode, there are several tools focused on transactions and token analytics. For instance, the Address Clustering tool (first picture below) allows you to generate an address graph that visualizes likely connected addresses, based on a search for a single address. Meanwhile, the Money Flow tool (second picture below) allows users to investigate, track and share relevant information on blockchain transactions. +Under Investigation Mode, there are several tools focused on transactions and +token analytics. For instance, the Address Clustering tool (first picture below) +allows you to generate an address graph that visualizes likely connected +addresses, based on a search for a single address. Meanwhile, the Money Flow +tool (second picture below) allows users to investigate, track and share +relevant information on blockchain transactions.
- +
- +
-There are more tools that you can discover, aside from the ones featured above. For more information about the complete suite of Scopescan’s Web3 analytical tools, go to https://docs.scopescan.ai/ +There are more tools that you can discover, aside from the ones featured above. +For more information about the complete suite of Scopescan’s Web3 analytical +tools, go to https://docs.scopescan.ai/ ## Conclusion @@ -90,9 +119,11 @@ Scopescan allows the Linea community to do the following: - Query complex on-chain data points - Explore real-world entities using our intuitive dashboards - Analyze entity behavior across multiple chains, including Linea -- Get access to all kinds of on-chain data including entities, behavior, Web2 social connections, and more +- Get access to all kinds of on-chain data including entities, behavior, Web2 + social connections, and more - Recognize real-time signals -- Leverage address tracking and monitoring for investigative and product enhancement purposes +- Leverage address tracking and monitoring for investigative and product + enhancement purposes - Get new insights into the companies behind Web3 products ## Reference links: diff --git a/docs/developers/tooling/data-indexers/sentio.mdx b/docs/developers/tooling/data-indexers/sentio.mdx index 1527f20fe..8361f21de 100644 --- a/docs/developers/tooling/data-indexers/sentio.mdx +++ b/docs/developers/tooling/data-indexers/sentio.mdx @@ -5,22 +5,35 @@ image: /img/socialCards/sentio.jpg # Sentio -Sentio provides modern **analytics**, **monitoring**, **alerting and debugging** for decentralized applications as an **integrated** and **hosted** experience. - -Users can use Sentio’s SDK to **collect** and **transform** [Metrics](https://docs.sentio.xyz/docs/metrics) and [event-logs](https://docs.sentio.xyz/docs/event-logs) generated based on their smart contracts’ events, transactions, traces and states. Sentio fully manages the indexing process, and users can visualize data in the [dashboard](https://docs.sentio.xyz/docs/dashboard), set up [alerts](https://docs.sentio.xyz/docs/alerts), perform advanced search on the logs, and dig into a transaction via [Sentio debugger](https://docs.sentio.xyz/docs/debugger-overview), all via Sentio’s web interface. +Sentio provides modern **analytics**, **monitoring**, **alerting and debugging** +for decentralized applications as an **integrated** and **hosted** experience. + +Users can use Sentio’s SDK to **collect** and **transform** +[Metrics](https://docs.sentio.xyz/docs/metrics) and +[event-logs](https://docs.sentio.xyz/docs/event-logs) generated based on their +smart contracts’ events, transactions, traces and states. Sentio fully manages +the indexing process, and users can visualize data in the +[dashboard](https://docs.sentio.xyz/docs/dashboard), set up +[alerts](https://docs.sentio.xyz/docs/alerts), perform advanced search on the +logs, and dig into a transaction via +[Sentio debugger](https://docs.sentio.xyz/docs/debugger-overview), all via +Sentio’s web interface.
- Sentio dashboard + Sentio dashboard
## Get started -We've put together some helpful guides for you to get set up with our product quickly and easily. Sentio supports [multi-chain](https://docs.sentio.xyz/docs/multi-chain-support). Simply use the network option below inside Sentio processor for Linea Network. +We've put together some helpful guides for you to get set up with our product +quickly and easily. Sentio supports +[multi-chain](https://docs.sentio.xyz/docs/multi-chain-support). Simply use the +network option below inside Sentio processor for Linea Network. ``` EthChainId.LINEA diff --git a/docs/developers/tooling/data-indexers/subquery.md b/docs/developers/tooling/data-indexers/subquery.md index 420be415d..1a54e378d 100644 --- a/docs/developers/tooling/data-indexers/subquery.md +++ b/docs/developers/tooling/data-indexers/subquery.md @@ -4,26 +4,54 @@ description: 'Fast, flexible, universal, open source and decentralised APIs' image: /img/socialCards/subquery.jpg --- -SubQuery is a leading blockchain data indexer that provides developers with fast, flexible, universal, open source and decentralised APIs for web3 projects. SubQuery SDK allows developers to get rich indexed data and build intuitive and immersive decentralised applications in a faster and more efficient way. SubQuery supports 100+ ecosystems including Linea, Ethereum, Polygon, Polkadot, Algorand, NEAR, and Avalanche. - -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**: -- 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) +SubQuery is a leading blockchain data indexer that provides developers with +fast, flexible, universal, open source and decentralised APIs for web3 projects. +SubQuery SDK allows developers to get rich indexed data and build intuitive and +immersive decentralised applications in a faster and more efficient way. +SubQuery supports 100+ ecosystems including Linea, Ethereum, Polygon, Polkadot, +Algorand, NEAR, and Avalanche. + +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**: + +- 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) - For technical questions and support reach out to us start@subquery.network # Getting started -Take a look at this SubQuery Starter Project that introduces SubQuery's Linea support by indexing [Linea](https://github.com/subquery/ethereum-subql-starter/tree/main/Linea/linea-starter). +Take a look at this SubQuery Starter Project that introduces SubQuery's Linea +support by indexing +[Linea](https://github.com/subquery/ethereum-subql-starter/tree/main/Linea/linea-starter). -You can also follow along this [step by step guide](https://academy.subquery.network/quickstart/quickstart.html) to get familiar with SubQuery. +You can also follow along this +[step by step guide](https://academy.subquery.network/quickstart/quickstart.html) +to get familiar with SubQuery. # 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. +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..51e5bf733 100644 --- a/docs/developers/tooling/data-indexers/subsquid.md +++ b/docs/developers/tooling/data-indexers/subsquid.md @@ -3,7 +3,9 @@ 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..9105f7e9f 100644 --- a/docs/developers/tooling/data-indexers/thegraph.md +++ b/docs/developers/tooling/data-indexers/thegraph.md @@ -3,21 +3,23 @@ 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. +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. +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/index.mdx b/docs/developers/tooling/index.mdx index 85c775886..c0c118c81 100644 --- a/docs/developers/tooling/index.mdx +++ b/docs/developers/tooling/index.mdx @@ -6,17 +6,30 @@ image: /img/socialCards/tooling-and-infrastructure.jpg :::caution -_Just as Ethereum, Linea also operates on a permissionless framework, meaning that any individual is free to launch any smart contract code they choose. When engaging with contracts on Linea, users should adhere to the same precautions as with Ethereum - that is, they should only interact with an application if they are confident in its security and trustworthiness. No products listed on this page are official endorsements, and are provided for informational purposes only. Their descriptions and any associated documents or links have been provided by the projects themselves._ +_Just as Ethereum, Linea also operates on a permissionless framework, meaning +that any individual is free to launch any smart contract code they choose. When +engaging with contracts on Linea, users should adhere to the same precautions as +with Ethereum - that is, they should only interact with an application if they +are confident in its security and trustworthiness. No products listed on this +page are official endorsements, and are provided for informational purposes +only. Their descriptions and any associated documents or links have been +provided by the projects themselves._ ::: ## Explore developer tooling and infrastructure -Building a dapp can be a complex task, but luckily we have great tools and developer infrastructure that can unlock new use cases and speed up the development of your dapp. +Building a dapp can be a complex task, but luckily we have great tools and +developer infrastructure that can unlock new use cases and speed up the +development of your dapp. -Building on top of existing protocols, tooling, and infrastructure will ensure a faster go-to-market, as the existing library, dapp, or service has already gone through intense testing and adoption. +Building on top of existing protocols, tooling, and infrastructure will ensure a +faster go-to-market, as the existing library, dapp, or service has already gone +through intense testing and adoption. -Please read our [Terms of Service](https://linea.build/terms-of-service) and [Privacy Policy](https://consensys.io/privacy-policy/) if you have any additional questions about the disclaimer. +Please read our [Terms of Service](https://linea.build/terms-of-service) and +[Privacy Policy](https://consensys.io/privacy-policy/) if you have any +additional questions about the disclaimer. import DocCardList from "@theme/DocCardList"; diff --git a/docs/developers/tooling/libraries/ape.md b/docs/developers/tooling/libraries/ape.md index 6c3a72d6b..a67057fcb 100644 --- a/docs/developers/tooling/libraries/ape.md +++ b/docs/developers/tooling/libraries/ape.md @@ -3,10 +3,14 @@ title: Ape Framework image: /img/socialCards/ape-framework.jpg --- -Ape Framework is an easy-to-use Web3 development tool. Users can compile, test, and interact with smart contracts all in one command line session. With a modular plugin system, Ape supports multiple contract languages and chains, including Linea. +Ape Framework is an easy-to-use Web3 development tool. Users can compile, test, +and interact with smart contracts all in one command line session. With a +modular plugin system, Ape supports multiple contract languages and chains, +including Linea. Ape is built by [ApeWorX LTD](https://www.apeworx.io/). -Linea team developed the [plugin to add Linea support to Ape](https://github.com/Consensys/ape-linea). +Linea team developed the +[plugin to add Linea support to Ape](https://github.com/Consensys/ape-linea). See [Ape docs](https://docs.apeworx.io/ape/stable/index.html) for more info diff --git a/docs/developers/tooling/libraries/ethereum-list.md b/docs/developers/tooling/libraries/ethereum-list.md index a85ff8725..89322d549 100644 --- a/docs/developers/tooling/libraries/ethereum-list.md +++ b/docs/developers/tooling/libraries/ethereum-list.md @@ -5,9 +5,12 @@ image: /img/socialCards/ethereum-listschains.jpg # Chainlist.org -Linea Sepolia Testnet is listed on the official ethereum-lists/chains repository that is pulled by many cross-chain projects like chainlist.org, thirdweb, and Cookbook.dev. +Linea Sepolia Testnet is listed on the official ethereum-lists/chains repository +that is pulled by many cross-chain projects like chainlist.org, thirdweb, and +Cookbook.dev. -You can get access to different key parameters for the Linea Testnet chains like: +You can get access to different key parameters for the Linea Testnet chains +like: 1. chainId 1. RPC Endpoints @@ -16,4 +19,5 @@ You can get access to different key parameters for the Linea Testnet chains like 1. ENS info 1. Linea Network Icon -See the official repo [here](https://github.com/ethereum-lists/chains/blob/master/_data/chains/eip155-59141.json) +See the official repo +[here](https://github.com/ethereum-lists/chains/blob/master/_data/chains/eip155-59141.json) diff --git a/docs/developers/tooling/libraries/ethers-js.md b/docs/developers/tooling/libraries/ethers-js.md index 7c501b28a..ae4a891d6 100644 --- a/docs/developers/tooling/libraries/ethers-js.md +++ b/docs/developers/tooling/libraries/ethers-js.md @@ -3,6 +3,11 @@ title: Ethers.js image: /img/socialCards/ethersjs.jpg --- -The ethers.js library aims to be a complete and compact library for interacting with the Ethereum Blockchain and its ecosystem. It is a powerful and well-designed library that simplifies Ethereum development, enhances code quality, and provides a modern and efficient alternative to older Ethereum development libraries. +The ethers.js library aims to be a complete and compact library for interacting +with the Ethereum Blockchain and its ecosystem. It is a powerful and +well-designed library that simplifies Ethereum development, enhances code +quality, and provides a modern and efficient alternative to older Ethereum +development libraries. -To learn more about ethers.js take a look at their official [documentation](https://docs.ethers.org/v6/). +To learn more about ethers.js take a look at their official +[documentation](https://docs.ethers.org/v6/). 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..9e6904922 100644 --- a/docs/developers/tooling/libraries/multicall.mdx +++ b/docs/developers/tooling/libraries/multicall.mdx @@ -7,10 +7,11 @@ 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 +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"; diff --git a/docs/developers/tooling/libraries/viem.md b/docs/developers/tooling/libraries/viem.md index 4f4d14de6..4648e9f67 100644 --- a/docs/developers/tooling/libraries/viem.md +++ b/docs/developers/tooling/libraries/viem.md @@ -3,10 +3,15 @@ title: Viem 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. +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..dda5a9008 100644 --- a/docs/developers/tooling/libraries/wagmi.md +++ b/docs/developers/tooling/libraries/wagmi.md @@ -3,15 +3,18 @@ title: Wagmi image: /img/socialCards/wagmi.jpg --- -Wagmi is a collection of React Hooks containing everything you need to start working with Linea. +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). +For more specifics, see here: +[https://wagmi.sh/core/chains#supported-chains](https://wagmi.sh/core/chains#supported-chains). See [Wagmi docs](https://wagmi.sh/) for more information. diff --git a/docs/developers/tooling/libraries/wallet-connect.md b/docs/developers/tooling/libraries/wallet-connect.md index cec0fd1bd..abc8e46aa 100644 --- a/docs/developers/tooling/libraries/wallet-connect.md +++ b/docs/developers/tooling/libraries/wallet-connect.md @@ -3,6 +3,10 @@ title: WalletConnect image: /img/socialCards/walletconnect.jpg --- -Developers can use the WalletConnect protocol to enable users from a multitude of wallets to log into decentralized applications. Linea is now listed inside chain list for any project configuration on [WalletConnect Cloud](https://cloud.walletconnect.com). +Developers can use the WalletConnect protocol to enable users from a multitude +of wallets to log into decentralized applications. Linea is now listed inside +chain list for any project configuration on +[WalletConnect Cloud](https://cloud.walletconnect.com). -To learn more about WalletConnect take a look at their official [page](https://walletconnect.com/) +To learn more about WalletConnect take a look at their official +[page](https://walletconnect.com/) 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/erpc.md b/docs/developers/tooling/node-providers/erpc.md index f880cff5b..91fe79a10 100644 --- a/docs/developers/tooling/node-providers/erpc.md +++ b/docs/developers/tooling/node-providers/erpc.md @@ -5,7 +5,9 @@ image: /img/socialCards/erpc.jpg # Linea RPC Proxy and Caching -[eRPC](https://erpc.cloud/) is a fault-tolerant EVM RPC proxy and re-org aware permanent caching solution. It is built with read-heavy use-cases in mind such as data indexing and high-load frontend usage. +[eRPC](https://erpc.cloud/) is a fault-tolerant EVM RPC proxy and re-org aware +permanent caching solution. It is built with read-heavy use-cases in mind such +as data indexing and high-load frontend usage. - [Github](https://github.com/erpc/erpc) - [Docs](https://docs.erpc.cloud/) @@ -17,7 +19,8 @@ image: /img/socialCards/erpc.jpg # Quickstart -1. Create your [`erpc.yaml`](https://docs.erpc.cloud/config/example) configuration file: +1. Create your [`erpc.yaml`](https://docs.erpc.cloud/config/example) + configuration file: ```yaml filename="erpc.yaml" logLevel: debug @@ -30,7 +33,8 @@ projects: - endpoint: evm+alchemy://xxxx-my-alchemy-api-key-xxxx ``` -View [the complete config example](https://docs.erpc.cloud/config/example) for inspiration. +View [the complete config example](https://docs.erpc.cloud/config/example) for +inspiration. 2. Use the Docker image: @@ -65,9 +69,11 @@ cd erpc docker-compose up -d ``` -5. Open Grafana at [http://localhost:3000](http://localhost:3000) and login with the following credentials: +5. Open Grafana at [http://localhost:3000](http://localhost:3000) and login with + the following credentials: - username: `admin` - password: `admin` -6. Send more requests and watch the metrics being collected and visualized in Grafana. +6. Send more requests and watch the metrics being collected and visualized in + Grafana. diff --git a/docs/developers/tooling/node-providers/index.mdx b/docs/developers/tooling/node-providers/index.mdx index 944692d66..9979dc4c2 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,73 @@ Public endpoints are rate limited, and not meant for production systems.
- - + + - - + + - - + + - - + + - + - - + + - - + +
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..76fa18444 100644 --- a/docs/developers/tooling/oracles/api3.mdx +++ b/docs/developers/tooling/oracles/api3.mdx @@ -3,32 +3,49 @@ title: API3 image: /img/socialCards/api3.jpg --- -[API3](https://api3.org/) is a collaborative project to deliver traditional API services to smart contract platforms in a decentralized and trust-minimized way. It is governed by a decentralized autonomous organization (DAO), namely the [API3 DAO](https://api3.org/dao). +[API3](https://api3.org/) is a collaborative project to deliver traditional API +services to smart contract platforms in a decentralized and trust-minimized way. +It is governed by a decentralized autonomous organization (DAO), namely the +[API3 DAO](https://api3.org/dao). :::info -Read more about how The API3 DAO works. [Click here](https://docs.api3.org/explore/dao-members/) +Read more about how The API3 DAO works. +[Click here](https://docs.api3.org/explore/dao-members/) ::: ## Airnode -Developers can use [Airnode](https://docs.api3.org/explore/airnode/what-is-airnode.html) to request off-chain data inside their Smart Contracts on Linea. An Airnode is a first-party oracle that pushes off-chain API data to your on-chain contract. Airnode lets API providers easily run their own first-party oracle nodes. That way, they can provide data to any on-chain dApp that's interested in their services, all without an intermediary. +Developers can use +[Airnode](https://docs.api3.org/explore/airnode/what-is-airnode.html) to request +off-chain data inside their Smart Contracts on Linea. An Airnode is a +first-party oracle that pushes off-chain API data to your on-chain contract. +Airnode lets API providers easily run their own first-party oracle nodes. That +way, they can provide data to any on-chain dApp that's interested in their +services, all without an intermediary. -An on-chain smart contract makes a request in the [RRP (Request Response Protocol)](https://docs.api3.org/reference/airnode/latest/concepts/) contract (`AirnodeRrpV0.sol`) that adds the request to the event logs. The Airnode then accesses the event logs, fetches the API data and performs a callback to the requester with the requested data. +An on-chain smart contract makes a request in the +[RRP (Request Response Protocol)](https://docs.api3.org/reference/airnode/latest/concepts/) +contract (`AirnodeRrpV0.sol`) that adds the request to the event logs. The +Airnode then accesses the event logs, fetches the API data and performs a +callback to the requester with the requested data.
- Airnode + Airnode
## Requesting off-chain data by calling an Airnode -Requesting off-chain data essentially involves triggering an Airnode and getting its response through your smart contract. The smart contract in this case would be the requester contract which will make a request to the desired off-chain Airnode and then capture its response. +Requesting off-chain data essentially involves triggering an Airnode and getting +its response through your smart contract. The smart contract in this case would +be the requester contract which will make a request to the desired off-chain +Airnode and then capture its response. The requester calling an Airnode primarily focuses on two tasks: @@ -37,14 +54,15 @@ The requester calling an Airnode primarily focuses on two tasks:
- Airnode + Airnode
-**Here is an example of a basic requester contract to request data from an Airnode:** +**Here is an example of a basic requester contract to request data from an +Airnode:** ```solidity // SPDX-License-Identifier: MIT @@ -107,7 +125,9 @@ contract Requester is RrpRequesterV0, Ownable { } ``` -The `_rrpAddress` is the main `airnodeRrpAddress`. The RRP Contracts have already been deployed on-chain. You can also try [deploying it on Remix](https://remix.ethereum.org/#url=https://github.com/api3-ecosystem/remix-contracts/blob/master/contracts/RequesterWithWithdrawal.sol&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.9+commit.e5eed63a.js) +The `_rrpAddress` is the main `airnodeRrpAddress`. The RRP Contracts have +already been deployed on-chain. You can also try +[deploying it on Remix](https://remix.ethereum.org/#url=https://github.com/api3-ecosystem/remix-contracts/blob/master/contracts/RequesterWithWithdrawal.sol&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.9+commit.e5eed63a.js) | Contract | Addresses | | :----------: | :------------------------------------------: | @@ -115,23 +135,41 @@ The `_rrpAddress` is the main `airnodeRrpAddress`. The RRP Contracts have alread ### Request parameters -The `makeRequest()` function expects the following parameters to make a valid request. - -- [**`airnode`**](https://docs.api3.org/reference/airnode/latest/concepts/airnode.html): Specifies the Airnode Address. -- [**`endpointId`**](https://docs.api3.org/reference/airnode/latest/concepts/endpoint.html): Specifies which endpoint to be used. -- [**`sponsor`**](https://docs.api3.org/reference/airnode/latest/concepts/sponsor.html) and [**`sponsorWallet`**](https://docs.api3.org/reference/airnode/latest/concepts/sponsor.html#sponsorwallet): Specifies which wallet will be used to fulfill the request. -- [**`parameters`**](https://docs.api3.org/reference/ois/latest/reserved-parameters.html): Specifies the API and Reserved Parameters (see [Airnode ABI specifications](https://docs.api3.org/reference/ois/latest/) for how these are encoded). Parameters can be encoded off-chain using `@airnode-abi` library. +The `makeRequest()` function expects the following parameters to make a valid +request. + +- [**`airnode`**](https://docs.api3.org/reference/airnode/latest/concepts/airnode.html): + Specifies the Airnode Address. +- [**`endpointId`**](https://docs.api3.org/reference/airnode/latest/concepts/endpoint.html): + Specifies which endpoint to be used. +- [**`sponsor`**](https://docs.api3.org/reference/airnode/latest/concepts/sponsor.html) + and + [**`sponsorWallet`**](https://docs.api3.org/reference/airnode/latest/concepts/sponsor.html#sponsorwallet): + Specifies which wallet will be used to fulfill the request. +- [**`parameters`**](https://docs.api3.org/reference/ois/latest/reserved-parameters.html): + Specifies the API and Reserved Parameters (see + [Airnode ABI specifications](https://docs.api3.org/reference/ois/latest/) for + how these are encoded). Parameters can be encoded off-chain using + `@airnode-abi` library. ### Response parameters The callback to the Requester contains two parameters: -- [**`requestId`**](https://docs.api3.org/reference/airnode/latest/concepts/request.html#requestid): First acquired when making the request and passed here as a reference to identify the request for which the response is intended. -- **`data`**: In case of a successful response, this is the requested data which has been encoded and contains a timestamp in addition to other response data. Decode it using the `decode()` function from the `abi` object. +- [**`requestId`**](https://docs.api3.org/reference/airnode/latest/concepts/request.html#requestid): + First acquired when making the request and passed here as a reference to + identify the request for which the response is intended. +- **`data`**: In case of a successful response, this is the requested data which + has been encoded and contains a timestamp in addition to other response data. + Decode it using the `decode()` function from the `abi` object. :::note -Sponsors should not fund a `sponsorWallet` with more than they can trust the Airnode with, as the Airnode controls the private key to the `sponsorWallet`. The deployer of such Airnode undertakes no custody obligations, and the risk of loss or misuse of any excess funds sent to the `sponsorWallet` remains with the sponsor. +Sponsors should not fund a `sponsorWallet` with more than they can trust the +Airnode with, as the Airnode controls the private key to the `sponsorWallet`. +The deployer of such Airnode undertakes no custody obligations, and the risk of +loss or misuse of any excess funds sent to the `sponsorWallet` remains with the +sponsor. ::: @@ -139,22 +177,35 @@ Sponsors should not fund a `sponsorWallet` with more than they can trust the Air ## Using dAPIs - API3 datafeeds -[dAPIs](https://docs.api3.org/reference/dapis/understand/) are continuously updated streams of off-chain data, such as the latest cryptocurrency, stock and commodity prices. They can power various decentralized applications such as DeFi lending, synthetic assets, stablecoins, derivatives, NFTs and more. +[dAPIs](https://docs.api3.org/reference/dapis/understand/) are continuously +updated streams of off-chain data, such as the latest cryptocurrency, stock and +commodity prices. They can power various decentralized applications such as DeFi +lending, synthetic assets, stablecoins, derivatives, NFTs and more. -The data feeds are continuously updated by [first-party oracles](https://docs.api3.org/explore/introduction/first-party.html) using signed data. dApp owners can read the on-chain value of any dAPI in real-time. +The data feeds are continuously updated by +[first-party oracles](https://docs.api3.org/explore/introduction/first-party.html) +using signed data. dApp owners can read the on-chain value of any dAPI in +real-time. -Due to being composed of first-party data feeds, dAPIs offer security, transparency, cost-efficiency and scalability in a turn-key package. +Due to being composed of first-party data feeds, dAPIs offer security, +transparency, cost-efficiency and scalability in a turn-key package. -Apart from relying on deviation threshold and heartbeat configuration updates, unlike traditional data feeds, [OEV Network](https://docs.api3.org/explore/introduction/oracle-extractable-value.html) enables dApps using dAPIs to auction off the right to update the data feeds to searcher bots. Searcher bots can bid for price updates through the OEV Network to update the data feeds. All the OEV proceeds go back to the dApp. +Apart from relying on deviation threshold and heartbeat configuration updates, +unlike traditional data feeds, +[OEV Network](https://docs.api3.org/explore/introduction/oracle-extractable-value.html) +enables dApps using dAPIs to auction off the right to update the data feeds to +searcher bots. Searcher bots can bid for price updates through the OEV Network +to update the data feeds. All the OEV proceeds go back to the dApp. -The [API3 Market](https://market.api3.org/linea) enables users to connect to a dAPI and access the associated data feed services. +The [API3 Market](https://market.api3.org/linea) enables users to connect to a +dAPI and access the associated data feed services.
- dapi-main + dapi-main
@@ -162,11 +213,18 @@ The [API3 Market](https://market.api3.org/linea) enables users to connect to a d ### Subscribing to dAPIs -The [API3 Market](https://market.api3.org/linea) lets users access dAPIs on both [Linea Mainnet](https://market.api3.org/linea) and [Testnet](https://market.api3.org/linea-sepolia-testnet). +The [API3 Market](https://market.api3.org/linea) lets users access dAPIs on both +[Linea Mainnet](https://market.api3.org/linea) and +[Testnet](https://market.api3.org/linea-sepolia-testnet). #### Exploring, selecting and configuring your dAPI -The [API3 Market](https://market.api3.org/linea) provides a list of all the dAPIs available across multiple chains including testnets. You can filter the list by mainnet or testnet chains. After selecting the chain, you can now search for a specific dAPI by name. Once selected, you will land on the details page (eg ETH/USD on Linea Testnet) where you can find more information about the dAPI. +The [API3 Market](https://market.api3.org/linea) provides a list of all the +dAPIs available across multiple chains including testnets. You can filter the +list by mainnet or testnet chains. After selecting the chain, you can now search +for a specific dAPI by name. Once selected, you will land on the details page +(eg ETH/USD on Linea Testnet) where you can find more information about the +dAPI. The current supported configurations for dAPIs are: @@ -179,10 +237,7 @@ The current supported configurations for dAPIs are:
- dapi-1 + dapi-1
@@ -190,37 +245,38 @@ The current supported configurations for dAPIs are: :::note -If a dAPI is already activated, make sure to check the expiration date and update parameters. You can update the parameters and extend the subscription by purchasing a new configuration. +If a dAPI is already activated, make sure to check the expiration date and +update parameters. You can update the parameters and extend the subscription by +purchasing a new configuration. ::: -After selecting the dAPI and the configuration, you will be presented with an option to purchase the dAPI and activate it. Make sure to check the time and amount of the subscription. If everything looks good, click on Purchase. +After selecting the dAPI and the configuration, you will be presented with an +option to purchase the dAPI and activate it. Make sure to check the time and +amount of the subscription. If everything looks good, click on Purchase.
- dapi-2 + dapi-2
-You can then connect your wallet and confirm the transaction. Once it's confirmed, you will be able to see the updated configuration for the dAPI. +You can then connect your wallet and confirm the transaction. Once it's +confirmed, you will be able to see the updated configuration for the dAPI. #### Getting the proxy address -Once you are done configuring and activating the dAPI, you can now integrate it. To do so, click on the **Integrate** button on the dAPI details page. +Once you are done configuring and activating the dAPI, you can now integrate it. +To do so, click on the **Integrate** button on the dAPI details page.
- dapi-5 + dapi-5
-You can now see the deployed proxy contract address. You can now use this to read from the configured dAPI. +You can now see the deployed proxy contract address. You can now use this to +read from the configured dAPI. ### Reading from a dAPI @@ -260,19 +316,33 @@ contract DataFeedReaderExample is Ownable { - `setProxyAddress()` is used to set the address of the dAPI Proxy Contract. -- `readDataFeed()` is a view function that returns the latest price of the set dAPI. +- `readDataFeed()` is a view function that returns the latest price of the set + dAPI. -You can read more about dAPIs [here](https://docs.api3.org/guides/dapis/subscribing-to-dapis/). +You can read more about dAPIs +[here](https://docs.api3.org/guides/dapis/subscribing-to-dapis/). ### [Try deploying it on Remix!](https://remix.ethereum.org/#url=https://github.com/api3-ecosystem/remix-contracts/blob/master/contracts/DapiReader.sol&lang=en&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.18+commit.87f61d96.js) ## API3 QRNG -[API3 QRNG](https://docs.api3.org/explore/qrng/) is a public utility provided with the courtesy of Australian National University (ANU), Quintessence Labs and Quantum Blockchains. It is powered by an Airnode deployed by the QRNG Providers, meaning that it is a first-party service. It is served as a public good and is free of charge (apart from the gas costs), and it provides ‘true’ quantum randomness via an easy-to-use solution when requiring RNG on-chain. +[API3 QRNG](https://docs.api3.org/explore/qrng/) is a public utility provided +with the courtesy of Australian National University (ANU), Quintessence Labs and +Quantum Blockchains. It is powered by an Airnode deployed by the QRNG Providers, +meaning that it is a first-party service. It is served as a public good and is +free of charge (apart from the gas costs), and it provides ‘true’ quantum +randomness via an easy-to-use solution when requiring RNG on-chain. -To request randomness on-chain, the requester submits a request for a random number to `AirnodeRrpV0`. The QRNG Airnode gathers the request from the `AirnodeRrpV0` protocol contract, retrieves the random number off-chain, and sends it back to `AirnodeRrpV0`. Once received, it performs a callback to the requester with the random number. +To request randomness on-chain, the requester submits a request for a random +number to `AirnodeRrpV0`. The QRNG Airnode gathers the request from the +`AirnodeRrpV0` protocol contract, retrieves the random number off-chain, and +sends it back to `AirnodeRrpV0`. Once received, it performs a callback to the +requester with the random number. -Click here to check out the [`AirnodeRrpV0`](https://docs.api3.org/reference/qrng/chains.html) and available [QRNG Providers' addresses](https://docs.api3.org/reference/qrng/providers.html) on Linea. +Click here to check out the +[`AirnodeRrpV0`](https://docs.api3.org/reference/qrng/chains.html) and available +[QRNG Providers' addresses](https://docs.api3.org/reference/qrng/providers.html) +on Linea. Here is an example of a basic `QrngRequester` that requests a random number: @@ -408,15 +478,22 @@ contract QrngExample is RrpRequesterV0, Ownable { } ``` -- The `setRequestParameters()` takes in `airnode` (The Quantum Blockchains/Quintessence Airnode address) , `endpointIdUint256`, `sponsorWallet` and sets these parameters. You can get Airnode address and the endpoint ID [here](https://docs.api3.org/reference/qrng/providers.html). +- The `setRequestParameters()` takes in `airnode` (The Quantum + Blockchains/Quintessence Airnode address) , `endpointIdUint256`, + `sponsorWallet` and sets these parameters. You can get Airnode address and the + endpoint ID [here](https://docs.api3.org/reference/qrng/providers.html). -- The `makeRequestUint256()` function calls the `airnodeRrp.makeFullRequest()` function of the `AirnodeRrpV0.sol` protocol contract which adds the request to its storage and returns a `requestId`. +- The `makeRequestUint256()` function calls the `airnodeRrp.makeFullRequest()` + function of the `AirnodeRrpV0.sol` protocol contract which adds the request to + its storage and returns a `requestId`. -- The targeted off-chain Airnode gathers the request and performs a callback to the requester with the random number. +- The targeted off-chain Airnode gathers the request and performs a callback to + the requester with the random number. [Try deploying it on Remix!](https://remix.ethereum.org/#url=https://github.com/api3-ecosystem/remix-contracts/blob/master/contracts/QrngRequesterUpdated.sol&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.9+commit.e5eed63a.js&lang=en) -You can try QRNG on Linea for free. Check out all the QRNG Providers for Linea [here](https://docs.api3.org/reference/qrng/providers.html). +You can try QRNG on Linea for free. Check out all the QRNG Providers for Linea +[here](https://docs.api3.org/reference/qrng/providers.html). [Click here to read more about API3 QRNG](https://docs.api3.org/explore/qrng/) diff --git a/docs/developers/tooling/oracles/chainlink.md b/docs/developers/tooling/oracles/chainlink.md index 43c5c55d2..f2428c6e9 100644 --- a/docs/developers/tooling/oracles/chainlink.md +++ b/docs/developers/tooling/oracles/chainlink.md @@ -3,20 +3,32 @@ title: Chainlink image: /img/socialCards/chainlink.jpg --- -Chainlink is the industry standard for building, accessing, and selling oracle services needed to power hybrid smart contracts on any blockchain. Chainlink oracle networks provide smart contracts with a way to reliably connect to any external API and leverage secure offchain computations for enabling feature-rich applications. Chainlink currently secures tens of billions of dollars across DeFi, insurance, gaming, and other major industries, and offers global enterprises and leading data providers a universal gateway to all blockchains. +Chainlink is the industry standard for building, accessing, and selling oracle +services needed to power hybrid smart contracts on any blockchain. Chainlink +oracle networks provide smart contracts with a way to reliably connect to any +external API and leverage secure offchain computations for enabling feature-rich +applications. Chainlink currently secures tens of billions of dollars across +DeFi, insurance, gaming, and other major industries, and offers global +enterprises and leading data providers a universal gateway to all blockchains. ## Chainlink products -1. [Data Streams](https://docs.chain.link/data-streams): Provides high-frequency market data and enables automated trades. -2. [VRF](https://docs.chain.link/vrf) (Verifiable Random Function): Ensures secure and tamper-proof random numbers for smart contracts. -3. [Automation](https://docs.chain.link/chainlink-automation): Decentralized network automating smart contracts, ensuring safety and efficiency. -4. [CCIP](https://docs.chain.link/ccip) (Cross-Chain Interoperability Protocol): Facilitates secure cross-chain data and token transfers. -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! -::: +1. [Data Streams](https://docs.chain.link/data-streams): Provides high-frequency + market data and enables automated trades. +2. [VRF](https://docs.chain.link/vrf) (Verifiable Random Function): Ensures + secure and tamper-proof random numbers for smart contracts. +3. [Automation](https://docs.chain.link/chainlink-automation): Decentralized + network automating smart contracts, ensuring safety and efficiency. +4. [CCIP](https://docs.chain.link/ccip) (Cross-Chain Interoperability Protocol): + Facilitates secure cross-chain data and token transfers. +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! ::: ## Use cases @@ -30,7 +42,8 @@ Popular use cases with Chainlink have been implemented in the following areas: - Enterprise - Insurance -To learn more details about the use cases of Chainlink check out their case studies [here](https://chain.link/use-cases). +To learn more details about the use cases of Chainlink check out their case +studies [here](https://chain.link/use-cases). ## Official links diff --git a/docs/developers/tooling/oracles/dia.md b/docs/developers/tooling/oracles/dia.md index 51e38884f..dfe31a6e9 100644 --- a/docs/developers/tooling/oracles/dia.md +++ b/docs/developers/tooling/oracles/dia.md @@ -5,62 +5,96 @@ image: /img/socialCards/dia.jpg ## Requesting a custom oracle -[DIA](https://www.diadata.org/) offers **customizable oracles that are tailored to each dApp’s needs**. Each oracle can be customized in several ways, including data sources, data cleansing filters, pricing and computational methodologies, update mechanisms and more. This ensures that the data and oracle remain robust and resilient to the market conditions and provide a global market price as well as specific individual or cross-chain market prices. - -By collecting billions of raw trades directly from over **90 sources, including CEXs, DEXs, and NFT marketplaces**, DIA enables full transparency, customization, and control throughout the entire value stack. DIA's data and oracle suite comprise **price feeds for 20,000+ assets** including cryptocurrencies, NFT collections, and liquid-staked tokens, as well as random number generation and other data feed types. - -→ [Request a Custom Oracle | DIA Documentation](https://docs.diadata.org/introduction/intro-to-dia-oracles/request-an-oracle) +[DIA](https://www.diadata.org/) offers **customizable oracles that are tailored +to each dApp’s needs**. Each oracle can be customized in several ways, including +data sources, data cleansing filters, pricing and computational methodologies, +update mechanisms and more. This ensures that the data and oracle remain robust +and resilient to the market conditions and provide a global market price as well +as specific individual or cross-chain market prices. + +By collecting billions of raw trades directly from over **90 sources, including +CEXs, DEXs, and NFT marketplaces**, DIA enables full transparency, +customization, and control throughout the entire value stack. DIA's data and +oracle suite comprise **price feeds for 20,000+ assets** including +cryptocurrencies, NFT collections, and liquid-staked tokens, as well as random +number generation and other data feed types. + +→ +[Request a Custom Oracle | DIA Documentation](https://docs.diadata.org/introduction/intro-to-dia-oracles/request-an-oracle) ## Token price feeds -DIA token price feeds provide smart contracts with real-time price information for [3,000+ cryptocurrencies](https://diadata.org/app/price), sourced transparently from [90+ trusted, high-volume DEXs and CEXs](https://diadata.org/app/source/defi). +DIA token price feeds provide smart contracts with real-time price information +for [3,000+ cryptocurrencies](https://diadata.org/app/price), sourced +transparently from +[90+ trusted, high-volume DEXs and CEXs](https://diadata.org/app/source/defi). ## How to access DIA oracles? Here is an example of how to access a price value on DIA oracles: 1. Access your custom oracle smart contract on Linea. -2. Call `getValue(pair_name)` with `pair_name` being the full pair name such as `BTC/USD`. You can use the "Read" section on the explorer to execute this call. +2. Call `getValue(pair_name)` with `pair_name` being the full pair name such as + `BTC/USD`. You can use the "Read" section on the explorer to execute this + call. 3. The response of the call contains two values: - The current asset price in USD with a fix-comma notation of 8 decimals. - The UNIX timestamp of the last oracle update. -You can find DIA's oracle integration samples in Solidity and Vyper languages by visiting: +You can find DIA's oracle integration samples in Solidity and Vyper languages by +visiting: -→ [Access the Oracle | DIA Documentation](https://docs.diadata.org/products/token-price-feeds/access-the-oracle) +→ +[Access the Oracle | DIA Documentation](https://docs.diadata.org/products/token-price-feeds/access-the-oracle) ## Linea demo price oracles -DIA has deployed the following demo oracles for the Linea community. It provides a limited selection of cryptocurrency price feeds with predefined configuration settings. +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 -| Network | Contract address | -| --- | --- | +| Network | Contract address | +| ------------- | -------------------------------------------------------------------------------------------------------------------------- | | Linea Mainnet | [`0xbb5a4708302ee9d959abc417ca1280abb106ba6a`](https://lineascan.build/address/0xbb5a4708302ee9d959abc417ca1280abb106ba6a) | ### Included price feeds -[DIA/USD](https://diadata.org/app/price/asset/Ethereum/0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419/), [BTC/USD](https://diadata.org/app/price/asset/Bitcoin/0x0000000000000000000000000000000000000000/), [USDC/USD](https://diadata.org/app/price/asset/Ethereum/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/) +[DIA/USD](https://diadata.org/app/price/asset/Ethereum/0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419/), +[BTC/USD](https://diadata.org/app/price/asset/Bitcoin/0x0000000000000000000000000000000000000000/), +[USDC/USD](https://diadata.org/app/price/asset/Ethereum/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/) ## Supported token API endpoints -DIA also supports API and GraphQL endpoints to return cryptocurrency price data. You can [visit the DIA Documentation](https://docs.diadata.org/products/token-price-feeds/access-api-endpoints) to see all API endpoints. +DIA also supports API and GraphQL endpoints to return cryptocurrency price data. +You can +[visit the DIA Documentation](https://docs.diadata.org/products/token-price-feeds/access-api-endpoints) +to see all API endpoints. # 🎨 NFT floor price feeds -DIA NFT floor price feeds provide smart contracts with real-time price information of [18,000+ NFT collections](https://diadata.org/app/floor-price), sourced on-chain with 100% transparency from [multiple, cross-chain NFT marketplaces](https://diadata.org/app/source/nft). +DIA NFT floor price feeds provide smart contracts with real-time price +information of [18,000+ NFT collections](https://diadata.org/app/floor-price), +sourced on-chain with 100% transparency from +[multiple, cross-chain NFT marketplaces](https://diadata.org/app/source/nft). ## Supported NFT API endpoints -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. +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..1ab1d8b33 100644 --- a/docs/developers/tooling/oracles/ora.md +++ b/docs/developers/tooling/oracles/ora.md @@ -3,26 +3,35 @@ 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. +ORA breaks down the limitations of smart contracts by offering verifiable AI +inference, so developers can innovate freely. ## OAO Quickstart -This quickstart is designed to help you to build a smart contract on Linea able to interact with OAO. You can find more details in [our docs Quickstart](https://docs.ora.io/doc/oao-onchain-ai-oracle/develop-guide). +This quickstart is designed to help you to build a smart contract on Linea able +to interact with OAO. You can find more details in +[our docs Quickstart](https://docs.ora.io/doc/oao-onchain-ai-oracle/develop-guide). ### Workflow -1. The user contract sends the AI request to OAO on Linea, by calling `requestCallback` function on the OAO contract. +1. The user contract sends the AI request to OAO on Linea, by calling + `requestCallback` function on the OAO contract. 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. -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. +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. +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 @@ -30,17 +39,20 @@ This quickstart is designed to help you to build a smart contract on Linea able To integrate with OAO, you will need to write your own contract. -To build with AI models of OAO, we provided an example of contract using OAO: [Prompt](https://lineascan.build/address/0xC20DeDbE8642b77EfDb4372915947c87b7a526bD). +To build with AI models of OAO, we provided an example of contract using OAO: +[Prompt](https://lineascan.build/address/0xC20DeDbE8642b77EfDb4372915947c87b7a526bD). ### Smart Contract Integration -1. Inherit `AIOracleCallbackReceiver` in your contract and bind with a specific OAO address: +1. Inherit `AIOracleCallbackReceiver` in your contract and bind with a specific + OAO address: ```solidity constructor(IAIOracle _aiOracle) AIOracleCallbackReceiver(_aiOracle) {} ``` -2. Write your callback function to handle the AI result from OAO. Note that only OAO can call this function: +2. Write your callback function to handle the AI result from OAO. Note that only + OAO can call this function: ```solidity function aiOracleCallback(uint256 requestId, bytes calldata output, bytes calldata callbackData) external override onlyAIOracleCallback() @@ -54,19 +66,27 @@ aiOracle.requestCallback(modelId, input, address(this), gas_limit, callbackData) ## Reference -**Two models** are available on Linea: Stable Diffusion (ID: 50) and Llama3 8B Instruct (ID: 11). +**Two models** are available on Linea: Stable Diffusion (ID: 50) and Llama3 8B +Instruct (ID: 11). -[Prompt](https://docs.ora.io/doc/oao-onchain-ai-oracle/reference) and [SimplePrompt](https://docs.ora.io/doc/oao-onchain-ai-oracle/reference) are both example smart contracts interacted with OAO. +[Prompt](https://docs.ora.io/doc/oao-onchain-ai-oracle/reference) and +[SimplePrompt](https://docs.ora.io/doc/oao-onchain-ai-oracle/reference) are both +example smart contracts interacted with OAO. -For simpler application scenarios (eg. Prompt Engineering-based AI like GPTs), you can directly use Prompt or SimplePrompt. +For simpler application scenarios (eg. Prompt Engineering-based AI like GPTs), +you can directly use Prompt or SimplePrompt. -SimplePrompt saves gas by only emitting the event without storing historical data. +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) -- SimplePrompt: [0xC3287BDEF03b925A7C7f54791EDADCD88e632CcD](https://lineascan.build/address/0xb880D47D3894D99157B52A7F869aB3B1E2D4349d) +- OAO Proxy: + [0x0A0f4321214BB6C7811dD8a71cF587bdaF03f0A0](https://lineascan.build/address/0x0A0f4321214BB6C7811dD8a71cF587bdaF03f0A0) +- Prompt: + [0xC20DeDbE8642b77EfDb4372915947c87b7a526bD](https://lineascan.build/address/0xC20DeDbE8642b77EfDb4372915947c87b7a526bD) +- SimplePrompt: + [0xC3287BDEF03b925A7C7f54791EDADCD88e632CcD](https://lineascan.build/address/0xb880D47D3894D99157B52A7F869aB3B1E2D4349d) ## Useful links: diff --git a/docs/developers/tooling/oracles/pyth.md b/docs/developers/tooling/oracles/pyth.md index d53bdd20d..302a0e275 100644 --- a/docs/developers/tooling/oracles/pyth.md +++ b/docs/developers/tooling/oracles/pyth.md @@ -3,90 +3,107 @@ 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) +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 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. +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. + +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) -Read more about on-demand updates [here](https://docs.pyth.network/documentation/pythnet-price-feeds/on-demand). +Read more about on-demand updates +[here](https://docs.pyth.network/documentation/pythnet-price-feeds/on-demand). ## Using price feeds ### 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) +View +[the example applications](https://github.com/pyth-network/pyth-examples/tree/main/price_feeds) in the Pyth repository. ### Networks Pyth is currently available on the following Linea networks: -| Network | Contract address | -| --- | --- | -| Linea Mainnet | [`0xA2aa501b19aff244D90cc15a4Cf739D2725B5729`](https://explorer.linea.build/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729) | +| Network | Contract address | +| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| Linea Mainnet | [`0xA2aa501b19aff244D90cc15a4Cf739D2725B5729`](https://explorer.linea.build/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729) | | Linea Sepolia | [`0xA2aa501b19aff244D90cc15a4Cf739D2725B5729`](https://sepolia.lineascan.build/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729) | ### 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..eb44e2577 100644 --- a/docs/developers/tooling/oracles/redstone.md +++ b/docs/developers/tooling/oracles/redstone.md @@ -5,13 +5,13 @@ 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/supra.md b/docs/developers/tooling/oracles/supra.md index 904ceaa19..c27eec427 100644 --- a/docs/developers/tooling/oracles/supra.md +++ b/docs/developers/tooling/oracles/supra.md @@ -5,8 +5,20 @@ image: /img/socialCards/supra.jpg ## Supra -[Supra](https://supraoracles.com/) is a novel, high-throughput Oracle & IntraLayer: A vertically integrated toolkit of cross-chain solutions (data oracles, asset bridges, automation network, and more) that interlink all blockchains, public (L1s and L2s) or private (enterprises). +[Supra](https://supraoracles.com/) is a novel, high-throughput Oracle & +IntraLayer: A vertically integrated toolkit of cross-chain solutions (data +oracles, asset bridges, automation network, and more) that interlink all +blockchains, public (L1s and L2s) or private (enterprises). -Supra provides decentralized oracle price feeds that can be used for on-chain and off-chain use-cases such as spot and perpetual DEXes, lending protocols, and payments protocols. Supra’s oracle chain and consensus algorithm makes it the fastest-to-finality oracle provider, with layer-1 security guarantees. The pull oracle has a sub-second response time. Aside from speed and security, Supra’s rotating node architecture gathers data from 40+ data sources and applies a robust calculation methodology to get the most accurate value. The node provenance on the data dashboard also provides a fully transparent historical audit trail. Supra’s Distributed Oracle Agreement (DORA) paper was accepted into ICDCS 2023, oldest distributed systems conference. +Supra provides decentralized oracle price feeds that can be used for on-chain +and off-chain use-cases such as spot and perpetual DEXes, lending protocols, and +payments protocols. Supra’s oracle chain and consensus algorithm makes it the +fastest-to-finality oracle provider, with layer-1 security guarantees. The pull +oracle has a sub-second response time. Aside from speed and security, Supra’s +rotating node architecture gathers data from 40+ data sources and applies a +robust calculation methodology to get the most accurate value. The node +provenance on the data dashboard also provides a fully transparent historical +audit trail. Supra’s Distributed Oracle Agreement (DORA) paper was accepted into +ICDCS 2023, oldest distributed systems conference. Check out our developer docs [here](https://docs.supra.com/oracles/overview). diff --git a/docs/developers/tooling/oracles/tellor.md b/docs/developers/tooling/oracles/tellor.md index b88982d13..64faada7b 100644 --- a/docs/developers/tooling/oracles/tellor.md +++ b/docs/developers/tooling/oracles/tellor.md @@ -8,28 +8,50 @@ 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. - -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. +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. ## 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 +63,22 @@ 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/oracles/umbrella.md b/docs/developers/tooling/oracles/umbrella.md index 288b9aa1d..bcc5c6ec1 100644 --- a/docs/developers/tooling/oracles/umbrella.md +++ b/docs/developers/tooling/oracles/umbrella.md @@ -5,19 +5,30 @@ image: /img/socialCards/umbrella-network.jpg # Umbrella Network -Umbrella Network, is a decentralized oracle service that provides blockchain projects with secure, scalable, and customizable data solutions. +Umbrella Network, is a decentralized oracle service that provides blockchain +projects with secure, scalable, and customizable data solutions. -Umbrella offers smart contracts a broad suite of solutions, whether it is any type of price feed for specific/custom needs, high frequency pricing updates, or aggregating large volumes of data at scale. Secured by a network of decentralized community validators, Umbrella can provide any data that you need when you need it. +Umbrella offers smart contracts a broad suite of solutions, whether it is any +type of price feed for specific/custom needs, high frequency pricing updates, or +aggregating large volumes of data at scale. Secured by a network of +decentralized community validators, Umbrella can provide any data that you need +when you need it. -Umbrella can create any custom price feed for your project. Contact us [here](https://www.umb.network/contact#form). +Umbrella can create any custom price feed for your project. Contact us +[here](https://www.umb.network/contact#form). ## Solutions -At Umbrella, we are committed to providing easy-to-use solutions for using off-chain data on-chain. We understand that different projects have unique requirements. That's why we offer several ways to consume data: +At Umbrella, we are committed to providing easy-to-use solutions for using +off-chain data on-chain. We understand that different projects have unique +requirements. That's why we offer several ways to consume data: ### On-chain data -For projects needing their custom data feeds on-chain with defined parameters such as deviation triggers and heartbeat. This solution is perfect for vault tokens, volatility monitoring, TWAPs, and more. Real-time, customizable data at your fingertips. +For projects needing their custom data feeds on-chain with defined parameters +such as deviation triggers and heartbeat. This solution is perfect for vault +tokens, volatility monitoring, TWAPs, and more. Real-time, customizable data at +your fingertips. These are the price feeds available on Linea Mainnet and their configuration: @@ -31,24 +42,38 @@ These are the price feeds available on Linea Mainnet and their configuration: - Deviation threshold: 1% - Heartbeat: 6 hours -> You can expect some delays on the update of the price feeds on chain as validators on the umbrella network are completing their upgrades. +> You can expect some delays on the update of the price feeds on chain as +> validators on the umbrella network are completing their upgrades. -Should you need another price feed available, contact us [here](https://www.umb.network/contact#form). +Should you need another price feed available, contact us +[here](https://www.umb.network/contact#form). -Check our technical documentation at the bottom of this page to get the Umbrella's Registry contract address on Linea. +Check our technical documentation at the bottom of this page to get the +Umbrella's Registry contract address on Linea. ### Layer 2 data -For projects needing data secured on-chain at scale, our Layer-2 Data solution is the answer. Whether you're in the DeFi space, prediction markets, or building data-heavy Web3 solutions, we ensure your data is secure and readily available to support your applications. +For projects needing data secured on-chain at scale, our Layer-2 Data solution +is the answer. Whether you're in the DeFi space, prediction markets, or building +data-heavy Web3 solutions, we ensure your data is secure and readily available +to support your applications. ### On demand data -For projects requiring high-frequency data. Signed off-chain data written into any smart contract on demand. This feature is ideal for high-frequency perpetual futures or spot trading platforms where timing is crucial. Access the data you need, precisely when you need it. Planned for Q3 2023 +For projects requiring high-frequency data. Signed off-chain data written into +any smart contract on demand. This feature is ideal for high-frequency perpetual +futures or spot trading platforms where timing is crucial. Access the data you +need, precisely when you need it. Planned for Q3 2023 ## Technical documentation -Find our technical documentation [here](https://umbrella-network.readme.io/docs). +Find our technical documentation +[here](https://umbrella-network.readme.io/docs). ## Follow Umbrella Network -[Discord](https://discord.com/invite/AHHSM7Bks2) | [Twitter](https://twitter.com/UmbNetwork) | [Announcements](https://t.me/umbnetannouncement) | [Website](https://www.umb.network/) | [Governance](https://umb.network/community) +[Discord](https://discord.com/invite/AHHSM7Bks2) | +[Twitter](https://twitter.com/UmbNetwork) | +[Announcements](https://t.me/umbnetannouncement) | +[Website](https://www.umb.network/) | +[Governance](https://umb.network/community) diff --git a/docs/developers/tooling/permanent-data/irys/irys-querying.mdx b/docs/developers/tooling/permanent-data/irys/irys-querying.mdx index 83b80cafc..53fbac624 100644 --- a/docs/developers/tooling/permanent-data/irys/irys-querying.mdx +++ b/docs/developers/tooling/permanent-data/irys/irys-querying.mdx @@ -6,7 +6,8 @@ description: Querying data on Irys. # Querying Irys Transactions -Irys transaction metadata can be queried using GraphQL. You can use it to search for transactions by: +Irys transaction metadata can be queried using GraphQL. You can use it to search +for transactions by: - Signer's address - Payment token @@ -15,7 +16,9 @@ Irys transaction metadata can be queried using GraphQL. You can use it to search ## GraphQL Clients -You can query using an HTTP library like fetch or axios, or use specialized clients like [Apollo Client](https://www.apollographql.com/) or [urql](https://formidable.com/open-source/urql/). +You can query using an HTTP library like fetch or axios, or use specialized +clients like [Apollo Client](https://www.apollographql.com/) or +[urql](https://formidable.com/open-source/urql/). ## Endpoint @@ -25,29 +28,34 @@ 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. | +| `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. | - +| 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 -> Queries return transaction metadata. To then retrieve data, use the returned transaction ID and download the data from the Irys gateway using a URL formed as follows: `https://gateway.irys.xyz/:transactionId`. +> Queries return transaction metadata. To then retrieve data, use the returned +> transaction ID and download the data from the Irys gateway using a URL formed +> as follows: `https://gateway.irys.xyz/:transactionId`. ### Transaction IDs @@ -55,17 +63,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,88 +88,103 @@ 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 -Search for transactions matching the wallet address used when posting the transaction: +Search for transactions matching the wallet address used when posting the +transaction: ```graphql query getByOwner { - transactions(owners: ["0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE", "0xaC568a981B1370B2e1bAA8cE30BD5AC9E28C572D"]) { - edges { - node { - id - address - } - } - } + transactions( + owners: [ + "0xBcb812C6e26F4F0F78Bd7B6222461FF24F2942AE" + "0xaC568a981B1370B2e1bAA8cE30BD5AC9E28C572D" + ] + ) { + edges { + node { + id + address + } + } + } } ``` ### Tags -Search for transactions matching [tag](https://docs.irys.xyz/build/d/features/tags) name / value pairs: +Search for transactions matching +[tag](https://docs.irys.xyz/build/d/features/tags) name / value pairs: ```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 + } + } + } } ``` -Search for transactions matching the tag with name **Content-Type** and the values of **image/png** OR **image/jpg**: +Search for transactions matching the tag with name **Content-Type** and the +values of **image/png** OR **image/jpg**: ```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 + } + } + } + } } ``` -Search for transactions matching the tag with name **Content-Type** and the values of **image/png** AND **image/jpg**: +Search for transactions matching the tag with name **Content-Type** and the +values of **image/png** AND **image/jpg**: ```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,71 +194,87 @@ 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 + } + } + } } ``` ### Pagination -You can request a maximum of 100 results returned from each query, to obtain additional results use pagination. +You can request a maximum of 100 results returned from each query, to obtain +additional results use pagination. When using pagination you: -1. Retrieve the `cursor` field, this acts like a bookmark in the search results you can then return to. +1. Retrieve the `cursor` field, this acts like a bookmark in the search results + you can then return to. 2. Use saved `cursor` value to obtain subsequent search results. -The following query returns 10 transactions tagged `image/png` occurring after the cursor with value: `LS02d1NsM3R6aUprd3dKUzVjN1FXaWg5aUxsbXh5dVJJbGlydHJtNlpPbw`. To then obtain the next 10 transactions, use the final `cursor` value returned from this query as the value of the `after` parameter in the following query. +The following query returns 10 transactions tagged `image/png` occurring after +the cursor with value: +`LS02d1NsM3R6aUprd3dKUzVjN1FXaWg5aUxsbXh5dVJJbGlydHJtNlpPbw`. To then obtain the +next 10 transactions, use the final `cursor` value returned from this query as +the value of the `after` parameter in the following query. ```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 + } + } } ``` ### Sorting -You can sort results by timestamp in either ascending or descending order using the `order` field. +You can sort results by timestamp in either ascending or descending order using +the `order` field. ```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..67ca141b4 100644 --- a/docs/developers/tooling/permanent-data/irys/irys-quickstart.mdx +++ b/docs/developers/tooling/permanent-data/irys/irys-quickstart.mdx @@ -4,7 +4,10 @@ image: /img/socialCards/irys-quickstart.jpg description: Creating permanent data using Irys SDK. --- -Irys makes it easy to store your data onchain by supporting payments with ETH on Linea. With a single upfront payment, you can upload data, with guaranteed retrieval for a duration you set at the upload time — from a few days to forever. +Irys makes it easy to store your data onchain by supporting payments with ETH on +Linea. With a single upfront payment, you can upload data, with guaranteed +retrieval for a duration you set at the upload time — from a few days to +forever. - To upload data, use the Irys [SDK](#irys-sdk) or [CLI](#irys-cli). - To [download data](#download-data), use the Irys gateway. @@ -25,7 +28,7 @@ or yarn: yarn add @irys/upload @irys/upload-ethereum ``` -### Import +### Import ```ts import { Uploader } from "@irys/upload"; @@ -36,13 +39,17 @@ import { LineaEth } from "@irys/upload-ethereum"; #### On the server -When connecting to Irys on the server, provide a private key linked to a wallet funded with `linea-eth`. This wallet will be used to pay for uploads and to sign transactions. +When connecting to Irys on the server, provide a private key linked to a wallet +funded with `linea-eth`. This wallet will be used to pay for uploads and to sign +transactions. 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,14 +65,15 @@ const getIrysUploader = async () => { .withWallet(process.env.PRIVATE_KEY) .withRpc(rpcURL) .devnet(); - + return irysUploader; }; ``` #### In the browser -When using Irys in the browser, the wallet browser extension injects a signer into the browser. This signer is used to pay for uploads and sign transactions. +When using Irys in the browser, the wallet browser extension injects a signer +into the browser. This signer is used to pay for uploads and sign transactions. Irys supports: @@ -74,31 +82,37 @@ Irys supports: - Viem v2 - Privy -> The following code example is for Ethers v6. For other providers, [see Irys's docs](https://docs.irys.xyz/build/d/irys-in-the-browser). +> The following code example is for Ethers v6. For other providers, +> [see Irys's docs](https://docs.irys.xyz/build/d/irys-in-the-browser). ```js 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. +You can fund up-front, allowing you send over enough tokens to cover all of a +project’s uploads. ```js try { @@ -170,7 +184,8 @@ const uploadFile = async () => { ### Upload a folder -You can upload a group of files as a single transaction from both the server and the browser. +You can upload a group of files as a single transaction from both the server and +the browser. #### On the server @@ -229,9 +244,11 @@ sudo npm i -g @irys/cli ### Use private keys -When executing CLI commands involving funding nodes or signing transactions, you must provide a private key. +When executing CLI commands involving funding nodes or signing transactions, you +must provide a private key. -Use the `-w` flag to specify a private key along with the -t flag to indicate the token you'll use. +Use the `-w` flag to specify a private key along with the -t flag to indicate +the token you'll use. ```console irys -w -t linea-eth @@ -239,7 +256,8 @@ irys -w -t linea-eth ### Devnet -To use Irys's devnet where uploads are kept for ~60 and you pay with Linea Sepolia ETH, append `-n devnet` to any of the commands below. +To use Irys's devnet where uploads are kept for ~60 and you pay with Linea +Sepolia ETH, append `-n devnet` to any of the commands below. ### Fund a node @@ -248,7 +266,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 +276,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 +287,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 +297,30 @@ 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. +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 \ @@ -312,6 +332,7 @@ 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: +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..545a18800 100644 --- a/docs/developers/tooling/permanent-data/irys/overview.mdx +++ b/docs/developers/tooling/permanent-data/irys/overview.mdx @@ -4,12 +4,17 @@ image: /img/socialCards/overview.jpg description: Using Irys's onchain data with Linea. --- -[Irys](https://docs.irys.xyz/) is a datachain, a blockchain optimized for data storage. Irys is built to store, retrieve, and process datasets of any size with minimal latency. +[Irys](https://docs.irys.xyz/) is a datachain, a blockchain optimized for data +storage. Irys is built to store, retrieve, and process datasets of any size with +minimal latency. -Irys makes it easy to store your data onchain by supporting payments with ETH on Linea. With a single upfront payment, you can upload data, with guaranteed retrieval for a duration you set at the upload time — from a few days to forever - -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. +Irys makes it easy to store your data onchain by supporting payments with ETH on +Linea. With a single upfront payment, you can upload data, with guaranteed +retrieval for a duration you set at the upload time — from a few days to forever +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 @@ -17,16 +22,20 @@ Irys is **chain agnostic**, smart contracts on Linea can link to data on Irys. You can: -- Deploy NFT contracts on Linea and [have images and metadata on Irys](../../../guides/community/irys/irys-nfts.mdx) +- Deploy NFT contracts on Linea and + [have images and metadata on Irys](../../../guides/community/irys/irys-nfts.mdx) - Build games with state on Linea and visual assets on Irys - Build an onchain identity protocol with user metadata on Irys - Build a cross-chain bridge and use Irys to store messages -You can use [ETH on Linea](https://arweave-tools.irys.xyz/overview/supported-tokens) to pay for permanent storage on Irys. +You can use +[ETH on Linea](https://arweave-tools.irys.xyz/overview/supported-tokens) to pay +for permanent storage on Irys. ## 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 +43,8 @@ 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: @@ -50,7 +60,7 @@ 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 | @@ -60,8 +70,10 @@ Receipts are a JSON object with the following format: ## 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: @@ -88,7 +100,8 @@ const receipt = await irysUploader.upload("GM World", { ## Tagging -Irys supports attaching up to 20 metadata tags to each transaction. Tags are indexed and can be queried. +Irys supports attaching up to 20 metadata tags to each transaction. Tags are +indexed and can be queried. ```js // Your file @@ -106,4 +119,5 @@ try { ## Querying -Transaction metadata can be queried using the [Irys's GraphQL](../../../tooling/permanent-data/irys/irys-querying.mdx). +Transaction metadata can be queried using the +[Irys's GraphQL](../../../tooling/permanent-data/irys/irys-querying.mdx). 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..5ec010f20 100644 --- a/docs/developers/tooling/privacy/secret.md +++ b/docs/developers/tooling/privacy/secret.md @@ -5,18 +5,41 @@ image: /img/socialCards/secret-network.jpg ## Decentralized Confidential Computing​ -On most blockchains, all data must be public. But using Secret’s [Confidential Computing Layer](https://scrt.network/confidential-computing-layer), dApps can communicate with Secret to store and compute over encrypted data. This unlocks powerful new use-cases for Linea applications. Some examples of what this can enable are private voting for DAOs, encrypted storage, secure random number generation, confidential data access via NFTs, sealed-bid auctions, and encrypted order books for DeFi applications. +On most blockchains, all data must be public. But using Secret’s +[Confidential Computing Layer](https://scrt.network/confidential-computing-layer), +dApps can communicate with Secret to store and compute over encrypted data. This +unlocks powerful new use-cases for Linea applications. Some examples of what +this can enable are private voting for DAOs, encrypted storage, secure random +number generation, confidential data access via NFTs, sealed-bid auctions, and +encrypted order books for DeFi applications. ## How to integrate Secret's CCL​ -You can integrate Secret's CCL into an existing Linea application, or design a new application from the ground up to take advantage of the unique use-cases it enables. - -To start, check out Secret Network’s [Confidential Computing Layer](https://scrt.network/confidential-computing-layer) landing page to get an overview of how it works, and example use-cases for inspiration. From there you’ll find multiple links to Secret's CCL documentation: - -- [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. +You can integrate Secret's CCL into an existing Linea application, or design a +new application from the ground up to take advantage of the unique use-cases it +enables. + +To start, check out Secret Network’s +[Confidential Computing Layer](https://scrt.network/confidential-computing-layer) +landing page to get an overview of how it works, and example use-cases for +inspiration. From there you’ll find multiple links to Secret's CCL +documentation: + +- [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. ## Get Support -To get CCL development help, you can join the Secret Network [Discord](https://scrt.network/discord) or [Telegram](https://t.me/SCRTCommunity). If you want to get in touch with the Secret Network developer relations team directly, you can use [this form](https://forms.monday.com/forms/43125a4be6281ed487b0ef2a7c76a251). +To get CCL development help, you can join the Secret Network +[Discord](https://scrt.network/discord) or +[Telegram](https://t.me/SCRTCommunity). If you want to get in touch with the +Secret Network developer relations team directly, you can use +[this form](https://forms.monday.com/forms/43125a4be6281ed487b0ef2a7c76a251). diff --git a/docs/developers/tooling/security/goplus-security-api.md b/docs/developers/tooling/security/goplus-security-api.md index 4ca87d0b3..512086727 100644 --- a/docs/developers/tooling/security/goplus-security-api.md +++ b/docs/developers/tooling/security/goplus-security-api.md @@ -3,6 +3,10 @@ title: GoPlus Security API image: /img/socialCards/goplus-security-api.jpg --- -[GoPlus Security](https://gopluslabs.io/) works as the security infrastructure for web3, by providing open, permission-less, user-driven security services. GoPlus security engine covers multi-chain with multidimensional risk detection for both crypto projects and ordinary users, making a safer chain ecosystem. +[GoPlus Security](https://gopluslabs.io/) works as the security infrastructure +for web3, by providing open, permission-less, user-driven security services. +GoPlus security engine covers multi-chain with multidimensional risk detection +for both crypto projects and ordinary users, making a safer chain ecosystem. -You can find out more about how to use their APIs and SDK in their [developer documentation](https://docs.gopluslabs.io/). +You can find out more about how to use their APIs and SDK in their +[developer documentation](https://docs.gopluslabs.io/). diff --git a/docs/developers/tooling/security/hexagate.md b/docs/developers/tooling/security/hexagate.md index 5f0b20131..84443a404 100644 --- a/docs/developers/tooling/security/hexagate.md +++ b/docs/developers/tooling/security/hexagate.md @@ -3,6 +3,9 @@ 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..c8ec279b1 100644 --- a/docs/developers/tooling/security/hypernative.mdx +++ b/docs/developers/tooling/security/hypernative.mdx @@ -3,11 +3,12 @@ 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/security/scamfari.md b/docs/developers/tooling/security/scamfari.md index 64d4f3575..7cbf8fb2e 100644 --- a/docs/developers/tooling/security/scamfari.md +++ b/docs/developers/tooling/security/scamfari.md @@ -3,6 +3,16 @@ title: Scamfari image: /img/socialCards/scamfari.jpg --- -[Scamfari](https://scamfari.com) is a cybersecurity tool developed on the Linea blockchain, enabling users to report suspicious activities linked to malicious actors within the blockchain space. These malicious entities – including scammers and phishers – pose ongoing challenges in the blockchain community. Scamfari's approach involves having each user-submitted report undergo a thorough review by cybersecurity professionals to ensure the data's accuracy. Verified reports are subsequently integrated into various databases, notably the [HAPI Protocol](https://hapi.one), fortifying the collective defense against such threats. +[Scamfari](https://scamfari.com) is a cybersecurity tool developed on the Linea +blockchain, enabling users to report suspicious activities linked to malicious +actors within the blockchain space. These malicious entities – including +scammers and phishers – pose ongoing challenges in the blockchain community. +Scamfari's approach involves having each user-submitted report undergo a +thorough review by cybersecurity professionals to ensure the data's accuracy. +Verified reports are subsequently integrated into various databases, notably the +[HAPI Protocol](https://hapi.one), fortifying the collective defense against +such threats. -By using Linea as its foundation, Scamfari exemplifies the practical application possibilities, especially those focusing on enhancing security within the blockchain ecosystem. +By using Linea as its foundation, Scamfari exemplifies the practical application +possibilities, especially those focusing on enhancing security within the +blockchain ecosystem. diff --git a/docs/developers/tooling/security/spherex.mdx b/docs/developers/tooling/security/spherex.mdx index b0c8322b1..de7197730 100644 --- a/docs/developers/tooling/security/spherex.mdx +++ b/docs/developers/tooling/security/spherex.mdx @@ -3,7 +3,10 @@ title: SphereX image: /img/socialCards/spherex.jpg --- -[SphereX](https://www.spherex.xyz/) eliminates unexpected manipulations and malicious attacks, setting the new standard with _embedded security_ for neutralizing attack surfaces. Stay leaps ahead - remove the element of surprise and ensure the unwavering control in every conceivable situation. +[SphereX](https://www.spherex.xyz/) eliminates unexpected manipulations and +malicious attacks, setting the new standard with _embedded security_ for +neutralizing attack surfaces. Stay leaps ahead - remove the element of surprise +and ensure the unwavering control in every conceivable situation.
@@ -14,6 +17,21 @@ image: /img/socialCards/spherex.jpg
-Web3 has lost trust and faith due to frequent hacks, resulting in billions of dollars lost, while existing security solutions continue to fall short. Auditing is not scalable, and monitoring is often too late. Both fail to provide the comprehensive, continuous protection needed to defend your protocol and instill trust. Protocol owners find themselves having to independently construct security measures and components, making it nearly impossible to guarantee certainty and eliminate edge cases and malicious activity in their protocol despite substantial efforts and budget. +Web3 has lost trust and faith due to frequent hacks, resulting in billions of +dollars lost, while existing security solutions continue to fall short. Auditing +is not scalable, and monitoring is often too late. Both fail to provide the +comprehensive, continuous protection needed to defend your protocol and instill +trust. Protocol owners find themselves having to independently construct +security measures and components, making it nearly impossible to guarantee +certainty and eliminate edge cases and malicious activity in their protocol +despite substantial efforts and budget. -SphereX's embedded security safeguards your protocol and fortifies your code during execution, proactively blocking any exploitative or unexpected behavior. SphereX's solution is designed as a modular platform, facilitating the seamless onboarding of diverse capabilities. Features like compliance, circuit breakers, virtual patching, investigations, and more can be seamlessly added at any stage during your protocol's lifecycle. The modular nature allows the protocol to evolve in tandem with tasks and requirements. SphereX's platform guarantees that any attempt to interact with the protocol beyond the intended boundaries will be promptly intercepted and reversed. +SphereX's embedded security safeguards your protocol and fortifies your code +during execution, proactively blocking any exploitative or unexpected behavior. +SphereX's solution is designed as a modular platform, facilitating the seamless +onboarding of diverse capabilities. Features like compliance, circuit breakers, +virtual patching, investigations, and more can be seamlessly added at any stage +during your protocol's lifecycle. The modular nature allows the protocol to +evolve in tandem with tasks and requirements. SphereX's platform guarantees that +any attempt to interact with the protocol beyond the intended boundaries will be +promptly intercepted and reversed. diff --git a/docs/developers/tooling/social-login/arcana.mdx b/docs/developers/tooling/social-login/arcana.mdx index dba4df384..616e4df5b 100644 --- a/docs/developers/tooling/social-login/arcana.mdx +++ b/docs/developers/tooling/social-login/arcana.mdx @@ -3,55 +3,87 @@ 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. +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. +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). +To enable gasless transactions in third-party wallets, see +[Arcana Gasless Quick Start Guide](https://docs.arcana.network/quick-start/gasless-standalone-quick-start). ## Arcana Wallet -Linea chain is available out of the box as part of the pre-configured blockchain network list in the [Arcana wallet](https://docs.arcana.network/concepts/anwallet/). Users don't need to install a browser extension to use the Arcana wallet. Authenticated users of apps integrated with the [Arcana Auth SDK](https://docs.arcana.network/concepts/authsdk) can instantly access the Arcana wallet from within the app context. It is a built-in, non-custodial, embedded wallet available via the Arcana Auth SDK. +Linea chain is available out of the box as part of the pre-configured blockchain +network list in the +[Arcana wallet](https://docs.arcana.network/concepts/anwallet/). Users don't +need to install a browser extension to use the Arcana wallet. Authenticated +users of apps integrated with the +[Arcana Auth SDK](https://docs.arcana.network/concepts/authsdk) can instantly +access the Arcana wallet from within the app context. It is a built-in, +non-custodial, embedded wallet available via the Arcana Auth SDK.
- Arcana wallet Linea default + Arcana wallet Linea default
-Developers can tailor the user experience of signing blockchain transactions. Besides the look and feel of the wallet, developers can also control the Arcana wallet UI display to sign blockchain transactions. +Developers can tailor the user experience of signing blockchain transactions. +Besides the look and feel of the wallet, developers can also control the Arcana +wallet UI display to sign blockchain transactions. -Arcana Wallet is available for [desktop, mobile, and gaming apps (coming soon!)](https://docs.arcana.network/sdk-installation). App developers can configure [gasless transactions](https://docs.arcana.network/concepts/gasless-ops) through the Arcana Wallet where users pay zero gas fees. +Arcana Wallet is available for +[desktop, mobile, and gaming apps (coming soon!)](https://docs.arcana.network/sdk-installation). +App developers can configure +[gasless transactions](https://docs.arcana.network/concepts/gasless-ops) through +the Arcana Wallet where users pay zero gas fees. [Learn more...](https://docs.arcana.network/user-guides/wallet-ui/). ## Enable Arcana Wallet -Users cannot directly access the Arcana wallet as a standalone application. App developers must integrate the app with the Arcana Auth SDK and enable users to access the Arcana Wallet within the app. +Users cannot directly access the Arcana wallet as a standalone application. App +developers must integrate the app with the Arcana Auth SDK and enable users to +access the Arcana Wallet within the app. 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. +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. :::note -Arcana wallet supports [JSON/RPC calls and Web3 wallet operations](https://docs.arcana.network/web-sdk/auth-usage-guide#arcana-wallet-operations). +Arcana wallet supports +[JSON/RPC calls and Web3 wallet operations](https://docs.arcana.network/web-sdk/auth-usage-guide#arcana-wallet-operations). ::: ## 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..057dbdb67 100644 --- a/docs/developers/tooling/social-login/openfort.md +++ b/docs/developers/tooling/social-login/openfort.md @@ -5,12 +5,14 @@ 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. +[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/docs/risk-disclosures/index.mdx b/docs/risk-disclosures/index.mdx index 57639caae..262caf1a0 100644 --- a/docs/risk-disclosures/index.mdx +++ b/docs/risk-disclosures/index.mdx @@ -6,42 +6,90 @@ image: /img/socialCards/risk-disclosures.jpg ## Risk disclosures -The Linea Mainnet will be upgraded on a continuous basis. Security is a top priority and we will seek to improve the guarantees that users have when using the system. This page reflects the current threats and security measures users should be aware of prior to using the Linea network. +The Linea Mainnet will be upgraded on a continuous basis. Security is a top +priority and we will seek to improve the guarantees that users have when using +the system. This page reflects the current threats and security measures users +should be aware of prior to using the Linea network. ### Potential threats and security measures -Given that the current network is an Alpha version of the Linea Mainnet, rather than a full release, we are currently in the process of ongoing security audits and assessments. As such, your data and crypto-assets might face certain risks, potentially originating from software bugs or similar issues. +Given that the current network is an Alpha version of the Linea Mainnet, rather +than a full release, we are currently in the process of ongoing security audits +and assessments. As such, your data and crypto-assets might face certain risks, +potentially originating from software bugs or similar issues. -Linea employs novel, cutting-edge technology which could potentially harbor unanticipated risks and issues. Possible consequences could include data loss or the disappearance of crypto-assets. +Linea employs novel, cutting-edge technology which could potentially harbor +unanticipated risks and issues. Possible consequences could include data loss or +the disappearance of crypto-assets. -Processes involving cross-blockchain bridging could potentially become targets for cyber threats and attacks, including but not limited to exploits that target vulnerabilities in the software, hardware, infrastructure, or equipment associated with bridge components, smart contracts, and other related systems. +Processes involving cross-blockchain bridging could potentially become targets +for cyber threats and attacks, including but not limited to exploits that target +vulnerabilities in the software, hardware, infrastructure, or equipment +associated with bridge components, smart contracts, and other related systems. ### Network accessibility and efficiency -Given the Alpha status of the Mainnet, there may be occasional periods where Linea's performance slows down or becomes temporarily unavailable without advance warning. These instances could potentially result in the unforeseen loss of access, data, or crypto-assets. Users engaging in high-value transactions should be aware that transaction completion might be delayed. +Given the Alpha status of the Mainnet, there may be occasional periods where +Linea's performance slows down or becomes temporarily unavailable without +advance warning. These instances could potentially result in the unforeseen loss +of access, data, or crypto-assets. Users engaging in high-value transactions +should be aware that transaction completion might be delayed. ### The journey towards decentralization -The team behind Linea is actively pursuing further decentralization of the system. This implies a progressive enhancement of the system's decentralization and trust minimization over time. +The team behind Linea is actively pursuing further decentralization of the +system. This implies a progressive enhancement of the system's decentralization +and trust minimization over time. -The Mainnet Alpha will integrate some centralized components like the Sequencer, Prover and Security Council, maintained by the Linea team to help bootstrap the network. The Sequencer possesses the capability to postpone transaction inclusion and rearrange transactions. +The Mainnet Alpha will integrate some centralized components like the Sequencer, +Prover and Security Council, maintained by the Linea team to help bootstrap the +network. The Sequencer possesses the capability to postpone transaction +inclusion and rearrange transactions. -Additionally, the validity proofs used to verify the computation of Linea batches do not prove 100% of EVM opcodes and precompiles. This means that the proof doesn't have full completeness and a level of trust is placed on the Linea operator to not maliciously alter the state of the system. +Additionally, the validity proofs used to verify the computation of Linea +batches do not prove 100% of EVM opcodes and precompiles. This means that the +proof doesn't have full completeness and a level of trust is placed on the Linea +operator to not maliciously alter the state of the system. -Ensuring the Linea Mainnet Alpha’s security is an ongoing endeavor. This involves addressing security issues, a task that falls under the jurisdiction of our Security Council. The Council, consisting of eight members, holds the authority to pause the rollup and upgrade the Linea Mainnet Alpha immediately without submitting a validity proof, given the threshold of 75% signatories, in order to respond to urgent security problems. If council members were to act with malice or collude, it could compromise system integrity, potentially leading to network upgrades that may result in the loss of crypto-assets. +Ensuring the Linea Mainnet Alpha’s security is an ongoing endeavor. This +involves addressing security issues, a task that falls under the jurisdiction of +our Security Council. The Council, consisting of eight members, holds the +authority to pause the rollup and upgrade the Linea Mainnet Alpha immediately +without submitting a validity proof, given the threshold of 75% signatories, in +order to respond to urgent security problems. If council members were to act +with malice or collude, it could compromise system integrity, potentially +leading to network upgrades that may result in the loss of crypto-assets. -Given the centralized nature of the Sequencer and Prover during the Mainnet Alpha phase, there exist potential risks related to network downtime and outages, some of which may be outside of the control of the Linea team. +Given the centralized nature of the Sequencer and Prover during the Mainnet +Alpha phase, there exist potential risks related to network downtime and +outages, some of which may be outside of the control of the Linea team. -During the initial launch of the Mainnet Beta, users won't be able to force transactions on Layer 1 and withdrawal limits are placed on the bridge to minimize the impact of any potential malicious actors. +During the initial launch of the Mainnet Beta, users won't be able to force +transactions on Layer 1 and withdrawal limits are placed on the bridge to +minimize the impact of any potential malicious actors. -For more details on the Linea Decentralization and Trust Minimization Roadmap, see [here](https://docs.linea.build/decentralization-roadmap). +For more details on the Linea Decentralization and Trust Minimization Roadmap, +see [here](https://docs.linea.build/decentralization-roadmap). ### Third-party dapps -Just as Ethereum, Linea also operates on a permissionless framework, meaning that any individual is free to launch any smart contract code they choose. When engaging with contracts on Linea, users should adhere to the same precautions as with Ethereum - that is, they should only interact with an application if they are confident in its security and trustworthiness. +Just as Ethereum, Linea also operates on a permissionless framework, meaning +that any individual is free to launch any smart contract code they choose. When +engaging with contracts on Linea, users should adhere to the same precautions as +with Ethereum - that is, they should only interact with an application if they +are confident in its security and trustworthiness. ### Audits and security checks -Linea's implementation has undergone careful construction, with continuous internal and external audits from leading web3 security companies, including Consensys Diligence, as well as reviews and testing in alignment with engineering best practices. Despite this, it's improbable that all potential bugs or vulnerabilities have been identified, implying that undiscovered vulnerabilities might put user funds at risk. Users should keep this risk in mind when deciding the amount of value to put onto the Linea Mainnet Alpha. - -To ensure thorough security checks, we have initiated an extensive bug bounty program for Linea. This is to motivate the community to identify critical bugs in the system. More details can be found on the Linea Bug Bounty page on [Immunefi](https://immunefi.com/bounty/linea/). +Linea's implementation has undergone careful construction, with continuous +internal and external audits from leading web3 security companies, including +Consensys Diligence, as well as reviews and testing in alignment with +engineering best practices. Despite this, it's improbable that all potential +bugs or vulnerabilities have been identified, implying that undiscovered +vulnerabilities might put user funds at risk. Users should keep this risk in +mind when deciding the amount of value to put onto the Linea Mainnet Alpha. + +To ensure thorough security checks, we have initiated an extensive bug bounty +program for Linea. This is to motivate the community to identify critical bugs +in the system. More details can be found on the Linea Bug Bounty page on +[Immunefi](https://immunefi.com/bounty/linea/). diff --git a/docs/zero-knowledge-glossary/index.mdx b/docs/zero-knowledge-glossary/index.mdx index add427c49..16c427eae 100644 --- a/docs/zero-knowledge-glossary/index.mdx +++ b/docs/zero-knowledge-glossary/index.mdx @@ -5,19 +5,28 @@ sidebar_position: 7 image: /img/socialCards/zero-knowledge-glossary.jpg --- -This glossary is open source and consistently being updated. If you'd like a term to be added, please [create an issue](https://github.com/Consensys/doc.linea/issues) or create a pull request and define one yourself! +This glossary is open source and consistently being updated. If you'd like a +term to be added, please +[create an issue](https://github.com/Consensys/doc.linea/issues) or create a +pull request and define one yourself! ## A ### arithmetization -Arithmetization is the process of turning computational problems into equations. It can be summarized as turning computer programs into "math," so that they can be analyzed using cryptographic algebraic techniques. +Arithmetization is the process of turning computational problems into equations. +It can be summarized as turning computer programs into "math," so that they can +be analyzed using cryptographic algebraic techniques. ### appchain -A blockchain network custom-made and optimized for a specific application's needs. An appchain is generally not a full-blown blockchain, but offers an optimized execution environment for the application, while still relying on an underlying blockchain for consensus. +A blockchain network custom-made and optimized for a specific application's +needs. An appchain is generally not a full-blown blockchain, but offers an +optimized execution environment for the application, while still relying on an +underlying blockchain for consensus. -Deploying appchains on top of L2 networks like Linea offers significant cost and customization capabilities. +Deploying appchains on top of L2 networks like Linea offers significant cost and +customization capabilities. See also: "blockchain trilemma", "modular blockchain", "Layer 2", "Layer 3". @@ -25,11 +34,16 @@ See also: "blockchain trilemma", "modular blockchain", "Layer 2", "Layer 3". ### blockchain trilemma -Blockchain network builders face a tradeoff between three factors: decentralization, security, and scalability (or speed). Often, designing a system that optimizes for one compromises another. +Blockchain network builders face a tradeoff between three factors: +decentralization, security, and scalability (or speed). Often, designing a +system that optimizes for one compromises another. ### Brakedown -The first built system that provides linear-time SNARKs for NP, meaning the prover incurs O(N) finite field operations to prove the satisfiability of an N-sized R1CS instance. Brakedown’s prover is faster, both concretely and asymptotically, than prior SNARK implementations. +The first built system that provides linear-time SNARKs for NP, meaning the +prover incurs O(N) finite field operations to prove the satisfiability of an +N-sized R1CS instance. Brakedown’s prover is faster, both concretely and +asymptotically, than prior SNARK implementations. Brakedown doesn't require a trusted setup and is plausibly post-quantum secure. @@ -37,35 +51,53 @@ Brakedown doesn't require a trusted setup and is plausibly post-quantum secure. ### circuit -A circuit uses logic gates to depict the flow of data and the sequence of operations performed on that data in a given computational task. Circuits are used at many levels to create processing capability, including virtual machines like the Ethereum Virtual Machine, and Linea's implementation of a zkEVM. +A circuit uses logic gates to depict the flow of data and the sequence of +operations performed on that data in a given computational task. Circuits are +used at many levels to create processing capability, including virtual machines +like the Ethereum Virtual Machine, and Linea's implementation of a zkEVM. ### constraint -A constraint refers to a condition imposed on mathematical operations or computation to ensure the correctness, efficiency, or security of an algorithm. +A constraint refers to a condition imposed on mathematical operations or +computation to ensure the correctness, efficiency, or security of an algorithm. ## D ### data availability -Data availability is the guarantee that the block proposers are required to publish the data for each block, which nodes participating in Ethereum's consensus store locally. Rather than having to trust that block producers are honest, all nodes on the Ethereum network execute the transactions to verify that the new information is valid. +Data availability is the guarantee that the block proposers are required to +publish the data for each block, which nodes participating in Ethereum's +consensus store locally. Rather than having to trust that block producers are +honest, all nodes on the Ethereum network execute the transactions to verify +that the new information is valid. -Data availability is one of the ways in which a [L2](#layer-2) differs from a [sidechain](#sidechain). +Data availability is one of the ways in which a [L2](#layer-2) differs from a +[sidechain](#sidechain). ## E ### elliptic curve cryptography -A method of encrypting information used in many applications, including in public blockchain networks. It is commonly used to create "public-private key pairs": a pair of cryptographic elements. The public key can be used to encrypt things which can then only be decrypted by the private key. +A method of encrypting information used in many applications, including in +public blockchain networks. It is commonly used to create "public-private key +pairs": a pair of cryptographic elements. The public key can be used to encrypt +things which can then only be decrypted by the private key. -ECC uses mathematical theories surrounding elliptic curves to render the encryption extremely difficult to decipher without the correct private key. +ECC uses mathematical theories surrounding elliptic curves to render the +encryption extremely difficult to decipher without the correct private key. ### Ethereum Virtual Machine (EVM) -A stack-based virtual machine that executes bytecode. In Ethereum, the execution model specifies how the system state is altered given a series of bytecode instructions and a small tuple of environmental data. This is specified through a formal model of a virtual state machine. +A stack-based virtual machine that executes bytecode. In Ethereum, the execution +model specifies how the system state is altered given a series of bytecode +instructions and a small tuple of environmental data. This is specified through +a formal model of a virtual state machine. ### execution trace -This is a record of what happened during the execution of a transaction. This is usually represented as a list, in which each item is the state of the machine at a specific clock time, which includes information such as: +This is a record of what happened during the execution of a transaction. This is +usually represented as a list, in which each item is the state of the machine at +a specific clock time, which includes information such as: - Who was the caller - Block number @@ -73,33 +105,45 @@ This is a record of what happened during the execution of a transaction. This is - What data was changed - And more! -This is relevant to zk-rollups because execution traces are used to construct the [validity proof](#validity-proof) verified by the verifier contract on Ethereum. +This is relevant to zk-rollups because execution traces are used to construct +the [validity proof](#validity-proof) verified by the verifier contract on +Ethereum. ## F ### Fraud proof -In optimistic rollups, fraud proofs (fault proofs) are the evidence a verifier provides to question the validity of a batch of transactions. Depending on how they are executed, these proofs scrutinize a section of transactions and endeavor to confirm their validity. +In optimistic rollups, fraud proofs (fault proofs) are the evidence a verifier +provides to question the validity of a batch of transactions. Depending on how +they are executed, these proofs scrutinize a section of transactions and +endeavor to confirm their validity. ## G ### gnark -gnark is a software library that offers users the ability to design and run computational circuits in zk-SNARKs through a high-level API. +gnark is a software library that offers users the ability to design and run +computational circuits in zk-SNARKs through a high-level API. The library is open source and developed under the Apache 2.0 license. ### Groth16 -Groth16 is a circuit-specific preprocessing general-purpose zk-SNARK construction. It has become a de-facto standard used in several blockchain projects due to the constant size of its proof, and its appealing verifier time. +Groth16 is a circuit-specific preprocessing general-purpose zk-SNARK +construction. It has become a de-facto standard used in several blockchain +projects due to the constant size of its proof, and its appealing verifier time. -On the downside, Groth16 needs a circuit-specific trusted setup for its preprocessing phase. +On the downside, Groth16 needs a circuit-specific trusted setup for its +preprocessing phase. ## H ### hash function -A mathematical function that converts a data input of any chosen length and size into an output that is encrypted and has a fixed length and size. Once converted, the hash cannot be reverse-engineered to reveal the original input of data. This makes the data input more secure against decryption. +A mathematical function that converts a data input of any chosen length and size +into an output that is encrypted and has a fixed length and size. Once +converted, the hash cannot be reverse-engineered to reveal the original input of +data. This makes the data input more secure against decryption. ## I @@ -109,7 +153,9 @@ A mathematical function that converts a data input of any chosen length and size ### keccak -Keccak (pronounced “ketchak”) is a versatile cryptographic function best known for its uses in hashing. It provides increased levels of security when compared to older hash algorithms. +Keccak (pronounced “ketchak”) is a versatile cryptographic function best known +for its uses in hashing. It provides increased levels of security when compared +to older hash algorithms. See also: SHA, hash function. @@ -117,11 +163,20 @@ See also: SHA, hash function. ### Layer 1 -Layer 1 (L1) is the underlying foundation and base blockchain that various layer 2 (L2) networks build on top of. For example, Ethereum is an L1 that is comprised of node operators to secure and validate the network, block producers, the history of transaction data, and the consensus mechanism of the blockchain itself. +Layer 1 (L1) is the underlying foundation and base blockchain that various layer +2 (L2) networks build on top of. For example, Ethereum is an L1 that is +comprised of node operators to secure and validate the network, block producers, +the history of transaction data, and the consensus mechanism of the blockchain +itself. ### Layer 2 -Layer 2 (L2) is a separate blockchain that increases transaction speed and throughput, while fully or partially deriving its security from Ethereum. Additionally, L2 projects must rely on Ethereum for data availability by posting their transaction data onto Ethereum. L2s decrease L1 congestion by bundling transactions to be submitted to Ethereum, thus increasing scalability while inheriting Ethereum’s data availability, security, and decentralization. +Layer 2 (L2) is a separate blockchain that increases transaction speed and +throughput, while fully or partially deriving its security from Ethereum. +Additionally, L2 projects must rely on Ethereum for data availability by posting +their transaction data onto Ethereum. L2s decrease L1 congestion by bundling +transactions to be submitted to Ethereum, thus increasing scalability while +inheriting Ethereum’s data availability, security, and decentralization. ## M @@ -131,21 +186,40 @@ Layer 2 (L2) is a separate blockchain that increases transaction speed and throu ### Oracle -This is a computational entity or service that provides information or answers to specific queries. +This is a computational entity or service that provides information or answers +to specific queries. ### Optimistic rollup -A rollup of transactions that use [fraud proofs](#fraud-proof) to offer increased [L2](#layer-2) transaction throughput while using the security provided by Mainnet ([L1](#layer-1)). Unlike Plasma, a similar [L2](#layer-2) solution, optimistic rollups can handle more complex transaction types – anything possible in the EVM. However, in order to release assets back on the L1, users must wait for a 7 day challenge period. Liquidity providers can help alleviate distributing L1 ETH immediately, but this relies on trust in the security of the provider, and doesn't provide a mechanism for transferring NFTs. +A rollup of transactions that use [fraud proofs](#fraud-proof) to offer +increased [L2](#layer-2) transaction throughput while using the security +provided by Mainnet ([L1](#layer-1)). Unlike Plasma, a similar [L2](#layer-2) +solution, optimistic rollups can handle more complex transaction types – +anything possible in the EVM. However, in order to release assets back on the +L1, users must wait for a 7 day challenge period. Liquidity providers can help +alleviate distributing L1 ETH immediately, but this relies on trust in the +security of the provider, and doesn't provide a mechanism for transferring NFTs. ## P ### Polynomial commitment -A polynomial commitment scheme is a cryptographic primitive that allows a party to publicly commit to a value or a piece of information without ever revealing the actual value itself. This allows us to prove that a polynomial satisfies some properties without ever revealing what the polynomial is. Additionally, this is useful for zk-rollups because the commitment is smaller than the polynomial itself. +A polynomial commitment scheme is a cryptographic primitive that allows a party +to publicly commit to a value or a piece of information without ever revealing +the actual value itself. This allows us to prove that a polynomial satisfies +some properties without ever revealing what the polynomial is. Additionally, +this is useful for zk-rollups because the commitment is smaller than the +polynomial itself. ### Polynomial IOP (Interactive Oracle Proof) -An Interactive Oracle Proof (IOP) is a protocol in which the verifier is not required to fully read the prover's messages (the [traces](#execution-trace) and [constraints](#constraint) generated from [arithmetization](#arithmetization)). Instead, the verifier has [oracle](#oracle) access to the prover’s messages. This oracle is repeatedly queried to create the concrete proof system, or [polynomial commitment](#polynomial-commitment) for the [validity proof](#validity-proof). +An Interactive Oracle Proof (IOP) is a protocol in which the verifier is not +required to fully read the prover's messages (the [traces](#execution-trace) and +[constraints](#constraint) generated from [arithmetization](#arithmetization)). +Instead, the verifier has [oracle](#oracle) access to the prover’s messages. +This oracle is repeatedly queried to create the concrete proof system, or +[polynomial commitment](#polynomial-commitment) for the +[validity proof](#validity-proof). ## Q @@ -153,30 +227,50 @@ An Interactive Oracle Proof (IOP) is a protocol in which the verifier is not req ### Rollup -A type of [L2](#layer-2) scaling solution that batches multiple transactions and submits them to the Ethereum main chain in a single transaction. This allows for reductions in gas costs and increases in transaction throughput. There are optimistic and zero-knowledge rollups, which use different security methods to offer these scalability gains. +A type of [L2](#layer-2) scaling solution that batches multiple transactions and +submits them to the Ethereum main chain in a single transaction. This allows for +reductions in gas costs and increases in transaction throughput. There are +optimistic and zero-knowledge rollups, which use different security methods to +offer these scalability gains. Rollup architecture is made up of the following components: -- **Rollup contract**: contract on the L1 stores rollup blocks, monitors state updates on the rollup, and tracks user deposits -- **Off-chain VM**: computation and state storage on another virtual machine separate from the Ethereum Virtual Machine -- **Aggregators/sequencers/operators/validators**: nodes that aggregate transactions, compress the underlying data, and publish the block on Ethereum -- **Verifier contract**: contract on the L1 that verifies the [validity proof](#validity-proof) +- **Rollup contract**: contract on the L1 stores rollup blocks, monitors state + updates on the rollup, and tracks user deposits +- **Off-chain VM**: computation and state storage on another virtual machine + separate from the Ethereum Virtual Machine +- **Aggregators/sequencers/operators/validators**: nodes that aggregate + transactions, compress the underlying data, and publish the block on Ethereum +- **Verifier contract**: contract on the L1 that verifies the + [validity proof](#validity-proof) ## S ### Scaling -The main goal of scalability is to increase transaction speed (faster finality), and transaction throughput (high transactions per second), without sacrificing decentralization or security. +The main goal of scalability is to increase transaction speed (faster finality), +and transaction throughput (high transactions per second), without sacrificing +decentralization or security. ### Sidechain -A scaling solution that uses a separate chain with different, often faster, consensus rules. A bridge is needed to connect these sidechains to Mainnet. Rollups also use sidechains, but they operate in collaboration with Mainnet instead. Sidechains are NOT considered [L2](#layer-2) solutions, because they do not leverage Ethereum for data availability and security. +A scaling solution that uses a separate chain with different, often faster, +consensus rules. A bridge is needed to connect these sidechains to Mainnet. +Rollups also use sidechains, but they operate in collaboration with Mainnet +instead. Sidechains are NOT considered [L2](#layer-2) solutions, because they do +not leverage Ethereum for data availability and security. ## T ### Transaction fee -A fee you need to pay whenever you use the Ethereum network. Examples include: sending funds from your wallet, or a dapp interaction, like swapping tokens or buying a collectible. You can think of this like a service charge. This fee will change based on how busy the network is. This is because miners or sequencers, the people responsible for processing your transaction depending on the network, are likely to prioritize transactions with higher fees – so congestion forces the price up. +A fee you need to pay whenever you use the Ethereum network. Examples include: +sending funds from your wallet, or a dapp interaction, like swapping tokens or +buying a collectible. You can think of this like a service charge. This fee will +change based on how busy the network is. This is because miners or sequencers, +the people responsible for processing your transaction depending on the network, +are likely to prioritize transactions with higher fees – so congestion forces +the price up. ## U @@ -184,11 +278,20 @@ A fee you need to pay whenever you use the Ethereum network. Examples include: s ### Validity proof -A security model for certain [L2](#layer-2) solutions where, to increase speed, transactions are rolled up into batches and submitted to Ethereum in a single transaction. The transaction computation is done off-chain and then supplied to the main chain with a proof of their validity. This method increases the amount of transactions possible while maintaining security. Some rollups use [fraud proofs](#fraud-proof). +A security model for certain [L2](#layer-2) solutions where, to increase speed, +transactions are rolled up into batches and submitted to Ethereum in a single +transaction. The transaction computation is done off-chain and then supplied to +the main chain with a proof of their validity. This method increases the amount +of transactions possible while maintaining security. Some rollups use +[fraud proofs](#fraud-proof). ### Verifiable computation -Verifiable computation allows a “weak computer” (Ethereum L1) to offload computation to a potentially untrusted, but “powerful computer” (Linea L2). The “powerful computer” must return a validity proof of the correctness of its results. Verifying the proof is cheaper than performing the computation from scratch. +Verifiable computation allows a “weak computer” (Ethereum L1) to offload +computation to a potentially untrusted, but “powerful computer” (Linea L2). The +“powerful computer” must return a validity proof of the correctness of its +results. Verifying the proof is cheaper than performing the computation from +scratch. ## W @@ -200,16 +303,36 @@ Verifiable computation allows a “weak computer” (Ethereum L1) to offload com ### Zero-knowledge proof -A zero-knowledge proof, or zk-proof, is a cryptographic method that allows an individual to prove that a statement is true without conveying any additional information. This is commonly associated with privacy, but is great for _scaling_ blockchain networks through rollups, because it reduces the amount of information you have to provide to lower layers. This is the [validity proof](#validity-proof) that the “powerful computer” must provide for [verifiable computation](#verifiable-computation). +A zero-knowledge proof, or zk-proof, is a cryptographic method that allows an +individual to prove that a statement is true without conveying any additional +information. This is commonly associated with privacy, but is great for +_scaling_ blockchain networks through rollups, because it reduces the amount of +information you have to provide to lower layers. This is the +[validity proof](#validity-proof) that the “powerful computer” must provide for +[verifiable computation](#verifiable-computation). ### Zero-knowledge rollup -This is a [L2 scaling solution](#layer-2) that uses a [zero-knowledge proof](#zero-knowledge-proof) as its [validity proof](#validity-proof) to post data back to Ethereum L1. As compared to [optimistic rollups](#optimistic-rollup), this validity proof allows for a more secure trust assumption and removes the need for a challenge period. +This is a [L2 scaling solution](#layer-2) that uses a +[zero-knowledge proof](#zero-knowledge-proof) as its +[validity proof](#validity-proof) to post data back to Ethereum L1. As compared +to [optimistic rollups](#optimistic-rollup), this validity proof allows for a +more secure trust assumption and removes the need for a challenge period. ### zkEVM -A zkEVM is a virtual machine that executes smart contracts and proves the correctness of execution using zero-knowledge proofs. ZkEVMs recreate aspects of Ethereum’s design, which provides an “Ethereum-like” experience for developers and users. For Ethereum developers, this means you can write in Solidity, but leverage the zkEVM to perform off-chain computations to offload execution from Ethereum, enabling the scalability provided by zk-rollups! +A zkEVM is a virtual machine that executes smart contracts and proves the +correctness of execution using zero-knowledge proofs. ZkEVMs recreate aspects of +Ethereum’s design, which provides an “Ethereum-like” experience for developers +and users. For Ethereum developers, this means you can write in Solidity, but +leverage the zkEVM to perform off-chain computations to offload execution from +Ethereum, enabling the scalability provided by zk-rollups! ### zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) -This is a type of zk-proof where the prover and verifier don’t have to interact. With zk-SNARKs, you can verify 1 transaction or 1 billion transactions in the same amount of time, which is great for scaling. You can read more about zk-SNARKs [here](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) and [here](https://docs.gnark.consensys.net/Concepts/zkp). +This is a type of zk-proof where the prover and verifier don’t have to interact. +With zk-SNARKs, you can verify 1 transaction or 1 billion transactions in the +same amount of time, which is great for scaling. You can read more about +zk-SNARKs +[here](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) +and [here](https://docs.gnark.consensys.net/Concepts/zkp). 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/img/socialCards/etherscan.jpg b/static/img/socialCards/etherscan.jpg new file mode 100644 index 000000000..393413229 Binary files /dev/null and b/static/img/socialCards/etherscan.jpg differ 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 }], + }, +};