From 7600371df0be3bb8508efac127d6413ac78173a7 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Sat, 9 Apr 2022 15:35:59 +0100 Subject: [PATCH 001/298] Add new information to Plasma page Suggest updating the pros vs cons section for Plasma chains and adding a comparison of Plasma against similar scaling solutions, like sidechains and sharding. --- .../developers/docs/scaling/plasma/index.md | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/scaling/plasma/index.md b/src/content/developers/docs/scaling/plasma/index.md index cdde72d051b..f205187d5c5 100644 --- a/src/content/developers/docs/scaling/plasma/index.md +++ b/src/content/developers/docs/scaling/plasma/index.md @@ -19,8 +19,35 @@ You should have a good understanding of all the foundational topics and a high-l | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | High throughput, low cost per transaction. | Does not support general computation. Only basic token transfers, swaps, and a few other transaction types are supported via predicate logic. | | Good for transactions between arbitrary users (no overhead per user pair if both are established on the plasma chain) | Need to periodically watch the network (liveness requirement) or delegate this responsibility to someone else to ensure the security of your funds. | -| | Relies on one or more operators to store data and serve it upon request. | -| | Withdrawals are delayed by several days to allow for challenges. For fungible assets this can be mitigated by liquidity providers, but there is an associated capital cost. | +| Plasma chains can be adapted to specific use-cases that are unrelated to the main chain. Anyone, including businesses, can customize Plasma smart contracts to provide scalable infrastructure that works in different contexts. | Relies on one or more operators to store data and serve it upon request. | +| | Withdrawals are delayed by several days to allow for challenges. For fungible assets this can be mitigated by liquidity providers, but there is an associated capital cost. | +| | If too many users try to exit their Plasma chain simultaneously (due to malicious activity or network failure), they could flood the root chain and congest the network. | + +## How does Plasma differ from sidechains and sharding? + +Plasma, sidechains, and sharding all follow a similar pattern where a collection of "child chains" rely on a "main chain" for consensus. At intervals, cryptographic proofs of transaction validity (hashes) are submitted to the main chain to prevent fraudulent activity on child chains. + +However, the three scaling solutions have slight differences. Here is a quick comparison of Plasma chains, sidechains, and shard chains: + +### Plasma vs sidechains + +A [sidechain](https://ethereum.org/en/developers/docs/scaling/sidechains/) is a blockchain operating independently but connects to the main blockchain (Ethereum Mainnet) via a two-way bridge. [Bridges](https://ethereum.org/en/bridges/) allow users to exchange tokens between both blockchains, so they can transact on the sidechain—reducing congestion on the base layer and improving scalability. +With sidechains, there's the risk of losing your funds. Sidechains use a separate consensus mechanism and, ergo, cannot rely on the security of Ethereum Mainnet (Layer 1). + +Conversely, Plasma chains are somewhat safer than sidechains because they derive their security from Ethereum's base layer. Like sidechains, Plasma chains can have a different consensus protocol. + +The difference is that Plasma publishes Merkle roots for each block on the Ethereum main chain. Block roots are small pieces of information we can use to verify information about transactions that happen on a Plasma chain. If an attack happens on a Plasma chain, users can safely exit to the main chain and withdraw their funds using the appropriate proofs. + +A simple way to differentiate between Plasma and sidechains is that Plasma chains are non-custodial, while sidechains are custodial. + +### Plasma vs sharding + +Both Plasma chains and [shard chains](https://ethereum.org/en/upgrades/shard-chains/) periodically publish cryptographic proofs on the main chain. However, both have different security properties. +Shard chains are tightly coupled to the main chain, but plasma chains are not. Even if one shard block is invalid, the entire chain will reorganize and discard the invalid block. Thus, shard chains can be as safe as the main chain. + +While Plasma chains can benefit from Layer 1 security, they are not as tightly linked to the main chain as shard chains. It's possible to commit an invalid Plasma block header to the main chain since the larger network has little information about the state of the Plasma chain. + +With sharding, the main chain knows how sharded sub-chains should operate and can reject an invalid shard transition. The upside to Plasma is the effects of a malicious activity can be restricted to the child chain, while the effect on malicious activity on shard chains would affect the entire network. ### Use Plasma {#use-plasma} @@ -35,5 +62,6 @@ Multiple projects provide implementations of Plasma that you can integrate into - [EthHub on Plasma](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/plasma/) - [Learn Plasma](https://www.learnplasma.org/en/) +- [Sidechains vs Plasma vs Sharding](https://vitalik.ca/general/2019/06/12/plasma_vs_sharding.html) _Know of a community resource that helped you? Edit this page and add it!_ From d16e26a24f3a584db10626607d29daaabf376a28 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 19 Apr 2022 18:17:56 +0200 Subject: [PATCH 002/298] setup translations --- src/intl/en/page-layer-2.json | 54 +++++++- src/pages/layer-2.js | 240 +++++++++++++--------------------- 2 files changed, 144 insertions(+), 150 deletions(-) diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index 0ebc45e01bc..af5a48808b9 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -2,5 +2,57 @@ "layer-2-arbitrum-note": "Fraud proofs only for whitelisted users, whitelist not open yet", "layer-2-boba-note": "State validation in development", "layer-2-metis-note": "Fraud proofs in development", - "layer-2-optimism-note": "Fault proofs in development" + "layer-2-optimism-note": "Fault proofs in development", + "layer-2-hero-title": "Layer 2", + "layer-2-hero-header": "Ethereum for everyone", + "layer-2-hero-subtitle": "Scaling Ethereum without compromising on security or decentralization.", + "layer-2-hero-alt-text": "Layer 2 diagram", + "layer-2-hero-button-1": "What is layer 2", + "layer-2-hero-button-2": "Use layer 2", + "layer-2-statsbox-1": "TVL locked in layer 2 (USD)", + "layer-2-statsbox-2": "Average layer 2 ETH transfer fee (USD)", + "layer-2-statsbox-3": "Layer 2 TVL change (30 days)", + "layer-2-what-is-layer-2-title": "What is layer 2?", + "layer-2-what-is-layer-2-1": "Layer 2 (L2) is a collective term to describe a specific set of Ethereum scaling solutions. A layer 2 is separate blockchain that extends Ethereum and inherits the security guarantees of Ethereum.", + "layer-2-what-is-layer-2-2": "Now let’s dig into it a bit more, and to do this we need to explain layer 1 (L1).", + "layer-2-what-is-layer-1-title": "What is layer 1?", + "layer-2-what-is-layer-1-1": "Layer 1 is the base blockchain. Ethereum and Bitcoin are both layer 1 blockchains because they are the underlying foundation that various layer 2 networks build on top of. Examples of layer 2 projects include \"rollups\" on Ethereum and the Lighting Network on top of Bitcoin. All user transaction activity on these layer 2 projects can ultimately settle back to the layer 1 blockchain.", + "layer-2-what-is-layer-1-2": "Ethereum also functions as a data availability layer for layer 2s. Layer 2 projects will post their transaction data onto Ethereum, relying on Ethereum for data availability. This data can be used to get the state of the layer 2, or to dispute transactions on layer 2.", + "layer-2-what-is-layer-1-list-title": "Ethereum as the layer 1 includes:", + "layer-2-what-is-layer-1-list-1": "A network of node operators to secure and validate the network", + "layer-2-what-is-layer-1-list-2": "A network of block producers", + "layer-2-what-is-layer-1-list-3": "The blockchain itself and the history of transaction data", + "layer-2-what-is-layer-1-list-4": "The consensus mechanism for the network", + "layer-2-what-is-layer-1-list-link-1": "Still confused on Ethereum?", + "layer-2-what-is-layer-1-list-link-2": "Learn what Ethereum is.", + "layer-2-why-do-we-need-layer-2-title": "Why do we need layer 2?", + "layer-2-why-do-we-need-layer-2-1": "Three desirable properties of a blockchain are that it is decentralized, secure, and scalable. The blockchain trilemma states that a simple blockchain architecture can only achieve two out of three. Want a secure and decentralized blockchain? You need to sacrifice scalability.", + "layer-2-why-do-we-need-layer-2-2": "Ethereum has reached the network's current capacity with 1+ million transactions per day and high demand for each of these transactions. The success of Ethereum and the demand to use it has caused gas prices to rise substantially. Therefore the need for scaling solutions has increased in demand as well. This is where layer 2 networks come in.", + "layer-2-why-do-we-need-layer-2-scalability": "Scalability", + "layer-2-why-do-we-need-layer-2-scalability-1": "The main goal of scalability is to increase transaction speed (faster finality) and transaction throughput (higher transactions per second) without sacrificing decentralization or security.", + "layer-2-why-do-we-need-layer-2-scalability-2": "The Ethereum community has taken a strong stance that it would not throw out decentralization or security in order to scale. Until sharding, Ethereum Mainnet (layer 1) is only able to process roughly 15 transactions per second. When demand to use Ethereum is high, the network becomes congested, which increases transaction fees and prices out users who cannot afford those fees. That is where layer 2 comes in to scale Ethereum today.", + "layer-2-why-do-we-need-layer-2-scalability-3": "More on Ethereum's vision", + "layer-2-benefits-of-layer-2-title": "Benefits of layer 2", + "layer-2-lower-fees-title": "Lower fees", + "layer-2-lower-fees-description": "By combining multiple off-chain transactions into a single layer 1 transaction, transaction fees are massively reduced, making Ethereum more accessible for all.", + "layer-2-maintain-security-title": "Maintain security", + "layer-2-maintain-security-description": "Layer 2 blockchains settle their transactions on Ethereum Mainnet, allowing users to benefit from the security of the Ethereum network.", + "layer-2-expand-use-cases-title": "Expand use cases", + "layer-2-expand-use-cases-description": "With higher transactions per second, lower fees, and new technology, projects will expand into new applications with improved user experience.", + "layer-2-how-does-layer-2-work-title": "How does layer 2 work?", + "layer-2-how-does-layer-2-work-1": "As we mentioned above, Layer 2 is a collective term for Ethereum scaling solutions that handle transactions off Ethereum layer 1 while still taking advantage of the robust decentralized security of Ethereum layer 1. A layer 2 is a separate blockchain that extends Ethereum. How does that work?", + "layer-2-how-does-layer-2-work-2": "A layer 2 blockchain regularly communicates with Ethereum (by submitting bundles of transactions) in order to ensure it has similar security and decentralization guarantees. All this requires no changes to the layer 1 protocol (Ethereum). This lets layer 1 handle security, data availability, and decentralization, while layer 2s handles scaling. Layer 2s take the transactional burden away from the layer 1 and post finalized proofs back to the layer 1. By removing this transaction load from layer 1, the base layer becomes less congested, and everything becomes more scalable.", + "layer-2-rollups-title": "Rollups", + "layer-2-rollups-1": "Rollups are currently the preferred layer 2 solution for scaling Ethereum. By using rollups, users can reduce gas fees by up to 100x compared to layer 1.", + "layer-2-rollups-2": "Rollups bundle (or ’roll up’) hundreds of transactions into a single transaction on layer 1. This distributes the L1 transaction fees across everyone in the rollup, making it cheaper for each user. Rollup transactions get executed outside of layer 1 but the transaction data gets posted to layer 1. By posting transaction data onto layer 1, rollups inherit the security of Ethereum. There are two different approaches to rollups: optimistic and zero-knowledge - they differ primarily on how this transaction data is posted to L1.", + "layer-2-optimistic-rollups-title": "Optimistic rollups", + "layer-2-optimistic-rollups-description": "Optimistic rollups are 'optimistic' in the sense that transactions are assumed to be valid, but can be challenged if necessary. If an invalid transaction is suspected, a fault proof is ran to see if this has taken place.", + "layer-2-optimistic-rollups-childSentance": "More on optimistic rollups", + "layer-2-zk-rollups-title": "Zero-knowledge rollups", + "layer-2-zk-rollups-description": "Zero-knowledge rollups use validity proofs where transactions are computed off-chain, and then compressed data is supplied to Ethereum Mainnet as a proof of their validity.", + "layer-2-zk-rollups-childSentance": "More on zk-rollups", + "layer-2-dyor-title": "Do your own research: risks of layer 2", + "layer-2-dyor-1": "Since layer 2 chains inherit security from Ethereum, in an ideal world, they are as safe as L1 Ethereum. However, many of the projects are still young and somewhat experimental. After years of research and development, many of the L2 technologies that will scale Ethereum launched in 2021. Many projects still have additional trust assumptions as they work to decentralize their networks. Always do your own research to decide if you're comfortable with any risks involved.", + "layer-2-dyor-2": "For more information on the technology, risks, and trust assumptions of layer 2s, we recommend checking out L2BEAT, which provides a comprehensive risk assessment framework of each project.", + "layer-2-dyor-3": "Go to L2BEAT" } diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 044eeb68729..d5a29aca720 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -253,19 +253,18 @@ const Layer2Page = ({ data }) => { }, []) const heroContent = { - title: "Layer 2", - header: "Ethereum for everyone", - subtitle: - "Scaling Ethereum without compromising on security or decentralization.", + title: translateMessageId("layer-2-hero-title", intl), + header: translateMessageId("layer-2-hero-header", intl), + subtitle: translateMessageId("layer-2-hero-subtitle", intl), image: getImage(data.heroImage), - alt: "test", + alt: translateMessageId("layer-2-hero-alt-text", intl), buttons: [ { - content: "What is layer 2", + content: translateMessageId("layer-2-hero-button-1", intl), pathId: "what-is-layer-2", }, { - content: "Use layer 2", + content: translateMessageId("layer-2-hero-button-2", intl), pathId: "use-layer-2", isSecondary: "isSecondary", }, @@ -275,40 +274,49 @@ const Layer2Page = ({ data }) => { const layer2Cards = [ { emoji: ":money_with_wings:", - title: "Lower fees", - description: - "By combining multiple off-chain transactions into a single layer 1 transaction, transaction fees are massively reduced, making Ethereum more accessible for all.", + title: translateMessageId("layer-2-lower-fees-title", intl), + description: translateMessageId("layer-2-lower-fees-description", intl), }, { emoji: ":closed_lock_with_key:", - className: "security-card", - title: "Maintain security", - description: - "Layer 2 blockchains settle their transactions on Ethereum Mainnet, allowing users to benefit from the security of the Ethereum network.", + title: translateMessageId("layer-2-maintain-security-title", intl), + description: translateMessageId( + "layer-2-maintain-security-description", + intl + ), }, { emoji: ":hammer_and_wrench:", - title: "Expand use cases", - description: - "With higher transactions per second, lower fees, and new technology, projects will expand into new applications with improved user experience.", + title: translateMessageId("layer-2-expand-use-cases-title", intl), + description: translateMessageId( + "layer-2-expand-use-cases-description", + intl + ), }, ] const rollupCards = [ { image: getImage(data.optimisticRollup), - title: "Optimistic rollups", - description: - "Optimistic rollups are 'optimistic' in the sense that transactions are assumed to be valid, but can be challenged if necessary. If an invalid transaction is suspected, a fault proof is ran to see if this has taken place.", - childSentence: "More on optimistic rollups", + title: translateMessageId("layer-2-optimistic-rollups-title", intl), + description: translateMessageId( + "layer-2-optimistic-rollups-description", + intl + ), + childSentence: translateMessageId( + "layer-2-optimistic-rollups-childSentance", + intl + ), childLink: "/developers/docs/scaling/optimistic-rollups/", }, { image: getImage(data.zkRollup), - title: "Zero-knowledge rollups", - description: - "Zero-knowledge rollups use validity proofs where transactions are computed off-chain, and then compressed data is supplied to Ethereum Mainnet as a proof of their validity.", - childSentence: "More on zk-rollups", + title: translateMessageId("layer-2-zk-rollups-title", intl), + description: translateMessageId("layer-2-zk-rollups-description", intl), + childSentence: translateMessageId( + "layer-2-zk-rollups-childSentance", + intl + ), childLink: "/developers/docs/scaling/zk-rollups/", }, ] @@ -394,7 +402,9 @@ const Layer2Page = ({ data }) => { {tvl} - TVL locked in layer 2 (USD) + + + { {averageFee} - Average layer 2 ETH transfer fee (USD) + { {percentChangeL2} - Layer 2 TVL change (30 days) + + + { -

What is layer 2?

+

+ +

- Layer 2 (L2) is a collective term to describe a specific set of - Ethereum scaling solutions.{" "} - - A layer 2 is separate blockchain that extends Ethereum and - inherits the security guarantees of Ethereum - - . +

- Now let’s dig into it a bit more, and to do this we need to - explain layer 1 (L1). +

@@ -469,55 +476,43 @@ const Layer2Page = ({ data }) => {
-

What is Layer 1?

+

+ +

- Layer 1 is the base blockchain. Ethereum and Bitcoin are both - layer 1 blockchains because they are the{" "} - - underlying foundation that various layer 2 networks build on top - of - - . Examples of layer 2 projects include "rollups" on Ethereum and - the Lighting Network on top of Bitcoin. All user transaction - activity on these layer 2 projects can ultimately settle back to - the layer 1 blockchain. +

- Ethereum also functions as a data availability layer for layer 2s. - Layer 2 projects will post their transaction data onto Ethereum, - relying on Ethereum for data availability. This data can be used - to get the state of the layer 2, or to dispute transactions on - layer 2. +

- {/* TODO: Convert these inline styles into styled components */}

- Ethereum as the layer 1 includes: +

- A network of node operators to secure and validate the - network +

,

- A network of block producers +

,

- The blockchain itself and the history of transaction - data +

,

- The consensus mechanism for the network +

, ]} />

- Still confused on Ethereum?{" "} - Learn what Ethereum is. + {" "} + + +

@@ -540,55 +535,33 @@ const Layer2Page = ({ data }) => { /> -

Why do we need layer 2?

+

+ +

- Three desirable properties of a blockchain are that it is{" "} - decentralized, secure, and scalable. The{" "} - - blockchain trilemma - {" "} - states that a simple blockchain architecture can only achieve two - out of three. Want a secure and decentralized blockchain? You need - to sacrifice scalability. +

- Ethereum has reached the network's current capacity with{" "} - - 1+ million transactions per day - - and high demand for each of these transactions. The success of - Ethereum and the demand to use it has caused gas prices to rise - substantially. Therefore the{" "} - - need for scaling solutions - {" "} - has increased in demand as well. This is where layer 2 networks - come in. +

-

Scalability

+

+ +

- The main goal of scalability is to increase transaction speed - (faster finality) and transaction throughput (higher transactions - per second) without sacrificing decentralization or security. +

- The Ethereum community has taken a strong stance that it would not - throw out decentralization or security in order to scale. Until{" "} - sharding, Ethereum Mainnet - (layer 1) is only able to process{" "} - - roughly 15 transactions per second - - . When demand to use Ethereum is high, the network becomes - congested, which increases transaction fees and prices out users - who cannot afford those fees. That is where layer 2 comes in to - scale Ethereum today. +

- More on Ethereum's vision + + +
-

Benefits of layer 2

+

+ +

{layer2Cards.map(({ emoji, title, description }, idx) => ( { -

How does layer 2 work?

+

+ +

- As we mentioned above, Layer 2 is a collective term for Ethereum - scaling solutions that handle transactions off Ethereum layer 1 - while still taking advantage of the robust decentralized security - of Ethereum layer 1.{" "} - A layer 2 is a separate blockchain that extends Ethereum. - How does that work? +

- A layer 2 blockchain regularly communicates with Ethereum (by - submitting bundles of transactions) in order to ensure it has - similar security and decentralization guarantees. All this - requires no changes to the layer 1 protocol (Ethereum). This lets - layer 1 handle security, data availability, and decentralization, - while layer 2s handles scaling. Layer 2s take the transactional - burden away from the layer 1 and post finalized proofs back to the - layer 1. By removing this transaction load from layer 1, the base - layer becomes less congested, and everything becomes more - scalable. +

-

Rollups

+

+ +

- Rollups are currently the preferred layer 2 solution for scaling - Ethereum. By using rollups, users can{" "} - - reduce gas fees by up to 100x - {" "} - compared to layer 1. +

- Rollups bundle (or ’roll up’) hundreds of transactions into a - single transaction on layer 1. This distributes the L1 transaction - fees across everyone in the rollup, making it cheaper for each - user. Rollup transactions get executed outside of layer 1 but the - transaction data gets posted to layer 1. By posting transaction - data onto layer 1, rollups inherit the security of Ethereum. There - are two different approaches to rollups: optimistic and - zero-knowledge - they differ primarily on how this transaction - data is posted to L1. +

- {/* TODO: Convert these inline styles into styled components */} { -

Do your own research: risks of layer 2

+

+ +

- Since layer 2 chains inherit security from Ethereum, in an ideal - world, they are as safe as L1 Ethereum. However, many of the{" "} - projects are still young and somewhat experimental. After - years of research and development, many of the L2 technologies that - will scale Ethereum launched in 2021. Many projects still have - additional trust assumptions as they work to decentralize their - networks. Always do your own research to decide if you're - comfortable with any risks involved. +

- For more information on the technology, risks, and trust assumptions - of layer 2s, we recommend checking out L2BEAT, which provides a - comprehensive risk assessment framework of each project. +

- Go to L2BEAT +

From 0ba7678d8ac73f2e4e62a5d9f94e27f57e7e830d Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Sun, 24 Apr 2022 20:49:32 +0200 Subject: [PATCH 003/298] Add basic open research page --- src/content/community/get-involved/index.md | 2 ++ .../get-involved/open-research/index.md | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/content/community/get-involved/open-research/index.md diff --git a/src/content/community/get-involved/index.md b/src/content/community/get-involved/index.md index 462438e102a..afb8bdedc7d 100644 --- a/src/content/community/get-involved/index.md +++ b/src/content/community/get-involved/index.md @@ -27,6 +27,8 @@ Do you have a background in mathematics, cryptography, or economics? You might b - [Ethresear.ch](https://ethresear.ch) - Ethereum’s primary forum for research, and the world’s most influential forum for cryptoeconomics - [Ecosystem Support Program's wishlist](https://esp.ethereum.foundation/wishlist/) - research areas where the Ethereum Ecosystem Support Program is actively seeking grant applications +[Explore more active areas of research](/community/get-involved/open-research/). + ## Non-technical skillsets ‍ {#non-technical} If you’re not a developer, it can be hard to know where to start in Ethereum. Here are a few suggestions, along with resources for specific professional backgrounds. diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md new file mode 100644 index 00000000000..c9c0a2502d1 --- /dev/null +++ b/src/content/community/get-involved/open-research/index.md @@ -0,0 +1,34 @@ +--- +title: Active areas of Ethereum research +description: Explore different areas of open research and learn how to get involved. +sidebar: true +lang: en +--- + +# Ethereum open areas of research + +Do you have a background in mathematics, cryptography, or economics? You might be interested in some of the cutting-edge work being done within the Ethereum ecosystem. + +TODOs + +- [x] Create basic page +- [ ] Talk to researchers - what are the open questions? What are topics & resources? +- [ ] Decide how topics should be categorized - what's the hierarchy? +- [ ] Create +- [ ] Create + +Derp derp derp + +List different categories of research... + +Protocol? +e.g. various upgrades https://ethereum.org/en/upgrades/ + +Cryptography? +e.g. topics on https://cryptography-research.netlify.app/research + +Copied over from "get involved" section: + +- [Challenges.ethereum.org](https://challenges.ethereum.org/) - a series of high-value research bounties, where you can earn >$100,000 USD +- [Ethresear.ch](https://ethresear.ch) - Ethereum’s primary forum for research, and the world’s most influential forum for cryptoeconomics +- [Ecosystem Support Program's wishlist](https://esp.ethereum.foundation/wishlist/) - research areas where the Ethereum Ecosystem Support Program is actively seeking grant applications From 277190bc48559dca377b587f67ff0c85e6e51d92 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Sun, 1 May 2022 23:59:10 +0200 Subject: [PATCH 004/298] Add more high-level topic suggestions --- .../get-involved/open-research/index.md | 59 ++++++++++++++++--- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index c9c0a2502d1..5ec80ea2a5e 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -9,26 +9,67 @@ lang: en Do you have a background in mathematics, cryptography, or economics? You might be interested in some of the cutting-edge work being done within the Ethereum ecosystem. -TODOs +**TODOs** - [x] Create basic page - [ ] Talk to researchers - what are the open questions? What are topics & resources? - [ ] Decide how topics should be categorized - what's the hierarchy? -- [ ] Create -- [ ] Create -Derp derp derp +## Community + +List general communities / resources for general topics? + +- [Ethresear.ch](https://ethresear.ch) - Ethereum’s primary forum for research List different categories of research... -Protocol? +## Protocol + +Is this a valid category? What best captures these topics? e.g. various upgrades https://ethereum.org/en/upgrades/ -Cryptography? -e.g. topics on https://cryptography-research.netlify.app/research +### Consensus + +Should this just be "proof-of-stake" at this point? Or other relevant areas of consensus research? + +Separate consensus layer & execution layer as top-level categories? + +Derp derp derp + +### Sharding + +Derp derp derp + +## Economics + +## Cryptography + +e.g. topics on https://crypto.ethereum.org/research + +### Hash Functions -Copied over from "get involved" section: +Derp derp derp + +### Polynomial and vector commitments + +Derp derp derp + +### Verifiable delay functions and random beacons + +Derp derp derp + +### Zero-Knowledge Proofs + +Derp derp derp + +## Layer 2 + +## Privacy + +## Data Science + +Include miscellaneous places to find areas of opportunity/investment? - [Challenges.ethereum.org](https://challenges.ethereum.org/) - a series of high-value research bounties, where you can earn >$100,000 USD -- [Ethresear.ch](https://ethresear.ch) - Ethereum’s primary forum for research, and the world’s most influential forum for cryptoeconomics + - [Ecosystem Support Program's wishlist](https://esp.ethereum.foundation/wishlist/) - research areas where the Ethereum Ecosystem Support Program is actively seeking grant applications From 3b6be0385dc22d4130c1fc62a50675367ee03241 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Mon, 9 May 2022 08:59:18 +0100 Subject: [PATCH 005/298] Update page on smart contract composability The smart contract composability lacked detailed information, so I included new details that may be helpful to readers. This includes a more in-depth explanation of smart contract composability and why it matters for developers. The update also contains a new section on examples of composability in Ethereum, asides from the Uniswap example mentioned at the beginning. --- .../smart-contracts/composability/index.md | 59 ++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/smart-contracts/composability/index.md b/src/content/developers/docs/smart-contracts/composability/index.md index 2baf422320c..cb01505bd90 100644 --- a/src/content/developers/docs/smart-contracts/composability/index.md +++ b/src/content/developers/docs/smart-contracts/composability/index.md @@ -8,7 +8,61 @@ incomplete: true ## A brief introduction {#a-brief-introduction} -Smart contracts are public on Ethereum and can be thought of as open APIs. You don't need to write your own smart contract to become a dapp developer, you just need to know how to interact with them. For example, you can use the existing smart contracts of [Uniswap](https://uniswap.exchange/swap), a decentralized exchange, to handle all the token swap logic in your app – you don't need to start from scratch. Check out some of their [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) and [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) contracts. +Smart contracts are public on Ethereum and can be thought of as open APIs. You don't need to write your own smart contract to become a dapp developer, you just need to know how to interact with them. + +For example, you can use the existing smart contracts of [Uniswap](https://uniswap.exchange/swap), a decentralized exchange, to handle all the token swap logic in your app – you don't need to start from scratch. Check out some of their [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) and [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) contracts. + +## What is composability? {#what-is-composability} + +Composability is the idea that distinct components can be integrated or combined to create new systems or outputs. In the context of blockchain development, composability means existing pieces of software can be reused to build new applications. + +A good way to understand composability is to think of composable elements as Lego blocks. Each Lego is designed to fit into another, such that you can build complex structures by combining different Lego blocks. + +In Ethereum, every smart contract is a Lego of sorts—you can use smart contracts from other projects as building blocks for your project. This means you don't have to spend time reinventing the wheel or building from scratch. + +## How does composability work? {#how-does-composability-work} + +As we said in the beginning, Ethereum smart contracts are like public APIs. This means anyone can interact with them or integrate them into dapps for added functionality. + +Smart contract composability generally works off three principles: modularity, autonomy, and discoverability: + +**1. Modularity**: This is the ability of individual components to perform a specific task. In Ethereum, every smart contract has specific use-case (as shown in the Uniswap example). + +**2. Autonomy**: Composable components must be able to operate independently. Each smart contract in Ethereum is self-executing and can function without relying on other parts of the system. + +**3. Discoverability**: Developers cannot call external contracts or integrate software libraries into applications if the former are not publicly available. By design, smart contracts are open-source; anyone can call a smart contract or fork a codebase. + +## Benefits of composability {#benefits-of-composability} + +### Shorter development cycle + +Composability reduces the work that developers have to do when creating [decentralized applications](https://ethereum.org/en/dapps/#what-are-dapps) (dapps). As Naval Ravikant [puts it](https://twitter.com/naval/status/1444366754650656770): "Open source means every problem has to be solved once." + +Once a particular smart contract solves one problem, other developers can reuse it, so they don’t have to solve the same problem. In this way, developers can take existing software libraries and add extra functionality to create new dapps. + +### Greater innovation + +Composability encourages innovation and experimentation. That’s because developers are free to reuse, modify, duplicate, or integrate open-source code to create desired results. + +Also, development teams spend less time on basic functionality and can allocate more time to experimenting with new features. This explains why there are so many great projects in the Ethereum ecosystem today—developers can focus on improve on existing dapps and build better products. + +### Better user experience + +Interoperability between components of the Ethereum ecosystem improves the user experience. Users can access greater functionality when dapps integrate external smart contracts than in a fragmented ecosystem where applications cannot communicate. + +## Examples of composability in Ethereum {#composability-in-ethereum} + +### Token swaps + +Say you have a dapp that requires to pay for transactions in ETH. You can add more payment options by integrating token swap logic from Uniswap contracts. This code will automatically convert the user’s token to ETH before the contract executes the called function. + +### Governance + +Building bespoke governance systems for a [decentralized autonomous organization](https://ethereum.org/en/dao/) (DAO) can be expensive and time-consuming. However, you can use [Aragon Client](https://client.aragon.org/)—an open-source governance toolkit from Aragon—to bootstrap your DAO and quickly create a usable governance framework. + +### Identity management + +Instead of building a custom authentication system or relying on centralized providers, you can integrate decentralized identity (DID) tools to manage authentication for users. An example is [SpruceID](https://www.spruceid.com/), an open-source toolkit which offers a "Sign in with Ethereum" functionality that lets users authenticate identities with an Ethereum wallet. ## Related tutorials {#related-tutorials} @@ -20,3 +74,6 @@ Smart contracts are public on Ethereum and can be thought of as open APIs. You d _Know of a community resource that helped you? Edit this page and add it!_ - [Composability is Innovation](https://future.a16z.com/how-composability-unlocks-crypto-and-everything-else/) +- [Why Composability Matters For Web3](https://hackernoon.com/why-composability-matters-for-web3) +- [What is Composability?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.) + From a5892c32b0f3fb2c720e91d63aa4f69eab2eea1d Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Tue, 10 May 2022 14:47:03 +0100 Subject: [PATCH 006/298] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../smart-contracts/composability/index.md | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/composability/index.md b/src/content/developers/docs/smart-contracts/composability/index.md index cb01505bd90..36017173c27 100644 --- a/src/content/developers/docs/smart-contracts/composability/index.md +++ b/src/content/developers/docs/smart-contracts/composability/index.md @@ -8,23 +8,17 @@ incomplete: true ## A brief introduction {#a-brief-introduction} -Smart contracts are public on Ethereum and can be thought of as open APIs. You don't need to write your own smart contract to become a dapp developer, you just need to know how to interact with them. - -For example, you can use the existing smart contracts of [Uniswap](https://uniswap.exchange/swap), a decentralized exchange, to handle all the token swap logic in your app – you don't need to start from scratch. Check out some of their [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) and [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) contracts. +Smart contracts are public on Ethereum and can be thought of as open APIs. You don't need to write your own smart contract to become a dapp developer, you just need to know how to interact with them. For example, you can use the existing smart contracts of [Uniswap](https://uniswap.exchange/swap), a decentralized exchange, to handle all the token swap logic in your app – you don't need to start from scratch. Check out some of their [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) and [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) contracts. ## What is composability? {#what-is-composability} -Composability is the idea that distinct components can be integrated or combined to create new systems or outputs. In the context of blockchain development, composability means existing pieces of software can be reused to build new applications. - -A good way to understand composability is to think of composable elements as Lego blocks. Each Lego is designed to fit into another, such that you can build complex structures by combining different Lego blocks. +Composability is combing distinct components to create new systems or outputs. In software development, composability means developers can reuse existing software components to build new applications. A good way to understand composability is to think of composable elements as Lego blocks. Each Lego can be combined with another, allowing you to build complex structures by combining different Legos. In Ethereum, every smart contract is a Lego of sorts—you can use smart contracts from other projects as building blocks for your project. This means you don't have to spend time reinventing the wheel or building from scratch. ## How does composability work? {#how-does-composability-work} -As we said in the beginning, Ethereum smart contracts are like public APIs. This means anyone can interact with them or integrate them into dapps for added functionality. - -Smart contract composability generally works off three principles: modularity, autonomy, and discoverability: +Ethereum smart contracts are like public APIs, so anyone can interact with the contract or integrate them into dapps for added functionality. Smart contract composability generally works off three principles: modularity, autonomy, and discoverability: **1. Modularity**: This is the ability of individual components to perform a specific task. In Ethereum, every smart contract has specific use-case (as shown in the Uniswap example). @@ -34,17 +28,16 @@ Smart contract composability generally works off three principles: modularity, a ## Benefits of composability {#benefits-of-composability} -### Shorter development cycle +### Shorter development cycle {#shorter-development-cycle} -Composability reduces the work that developers have to do when creating [decentralized applications](https://ethereum.org/en/dapps/#what-are-dapps) (dapps). As Naval Ravikant [puts it](https://twitter.com/naval/status/1444366754650656770): "Open source means every problem has to be solved once." +Composability reduces the work that developers have to do when creating [dapps](/dapps/#what-are-dapps). [As Naval Ravikant puts it:](https://twitter.com/naval/status/1444366754650656770) "Open source means every problem has to be solved once." -Once a particular smart contract solves one problem, other developers can reuse it, so they don’t have to solve the same problem. In this way, developers can take existing software libraries and add extra functionality to create new dapps. +If there is a smart contract that solves one problem, other developers can reuse it, so they don’t have to solve the same problem. This way, developers can take existing software libraries and add extra functionality to create new dapps. ### Greater innovation -Composability encourages innovation and experimentation. That’s because developers are free to reuse, modify, duplicate, or integrate open-source code to create desired results. +Composability encourages innovation and experimentation because developers are free to reuse, modify, duplicate, or integrate open-source code to create desired results. As a result, development teams spend less time on basic functionality and can allocate more time experimenting with new features. -Also, development teams spend less time on basic functionality and can allocate more time to experimenting with new features. This explains why there are so many great projects in the Ethereum ecosystem today—developers can focus on improve on existing dapps and build better products. ### Better user experience @@ -54,11 +47,11 @@ Interoperability between components of the Ethereum ecosystem improves the user ### Token swaps -Say you have a dapp that requires to pay for transactions in ETH. You can add more payment options by integrating token swap logic from Uniswap contracts. This code will automatically convert the user’s token to ETH before the contract executes the called function. +If you create a dapp that requires transactions to be paid in ETH, you can allow users to pay in other ERC-20 tokens by integrating token swap logic. The code will automatically convert the user’s token to ETH before the contract executes the called function. ### Governance -Building bespoke governance systems for a [decentralized autonomous organization](https://ethereum.org/en/dao/) (DAO) can be expensive and time-consuming. However, you can use [Aragon Client](https://client.aragon.org/)—an open-source governance toolkit from Aragon—to bootstrap your DAO and quickly create a usable governance framework. +Building bespoke governance systems for a [DAO](/dao/) can be expensive and time-consuming. Instead, you could use an open-source governance toolkit, such as [Aragon Client](https://client.aragon.org/), to bootstrap your DAO to quickly create a governance framework. ### Identity management From 013d2ca3e4ee82326e9600a41acc7da574e58bd3 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Tue, 10 May 2022 14:51:22 +0100 Subject: [PATCH 007/298] Update index.md Added header IDs and fixed some typos. --- .../docs/smart-contracts/composability/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/composability/index.md b/src/content/developers/docs/smart-contracts/composability/index.md index 36017173c27..f1b12a38a83 100644 --- a/src/content/developers/docs/smart-contracts/composability/index.md +++ b/src/content/developers/docs/smart-contracts/composability/index.md @@ -12,7 +12,7 @@ Smart contracts are public on Ethereum and can be thought of as open APIs. You d ## What is composability? {#what-is-composability} -Composability is combing distinct components to create new systems or outputs. In software development, composability means developers can reuse existing software components to build new applications. A good way to understand composability is to think of composable elements as Lego blocks. Each Lego can be combined with another, allowing you to build complex structures by combining different Legos. +Composability is combining distinct components to create new systems or outputs. In software development, composability means developers can reuse existing software components to build new applications. A good way to understand composability is to think of composable elements as Lego blocks. Each Lego can be combined with another, allowing you to build complex structures by combining different Legos. In Ethereum, every smart contract is a Lego of sorts—you can use smart contracts from other projects as building blocks for your project. This means you don't have to spend time reinventing the wheel or building from scratch. @@ -34,26 +34,26 @@ Composability reduces the work that developers have to do when creating [dapps]( If there is a smart contract that solves one problem, other developers can reuse it, so they don’t have to solve the same problem. This way, developers can take existing software libraries and add extra functionality to create new dapps. -### Greater innovation +### Greater innovation {#greater-innovation} Composability encourages innovation and experimentation because developers are free to reuse, modify, duplicate, or integrate open-source code to create desired results. As a result, development teams spend less time on basic functionality and can allocate more time experimenting with new features. -### Better user experience +### Better user experience {#better-user-experience} Interoperability between components of the Ethereum ecosystem improves the user experience. Users can access greater functionality when dapps integrate external smart contracts than in a fragmented ecosystem where applications cannot communicate. ## Examples of composability in Ethereum {#composability-in-ethereum} -### Token swaps +### Token swaps {#token-swaps} If you create a dapp that requires transactions to be paid in ETH, you can allow users to pay in other ERC-20 tokens by integrating token swap logic. The code will automatically convert the user’s token to ETH before the contract executes the called function. -### Governance +### Governance {#governance} Building bespoke governance systems for a [DAO](/dao/) can be expensive and time-consuming. Instead, you could use an open-source governance toolkit, such as [Aragon Client](https://client.aragon.org/), to bootstrap your DAO to quickly create a governance framework. -### Identity management +### Identity management {#identity-management} Instead of building a custom authentication system or relying on centralized providers, you can integrate decentralized identity (DID) tools to manage authentication for users. An example is [SpruceID](https://www.spruceid.com/), an open-source toolkit which offers a "Sign in with Ethereum" functionality that lets users authenticate identities with an Ethereum wallet. From 4efc4611262f1d36a6ff7cf12d2a5897135770b3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 10 May 2022 12:06:08 -0600 Subject: [PATCH 008/298] bridges for developers page --- src/content/developers/docs/bridges/index.md | 114 +++++++++++++++++++ src/data/developer-docs-links.yaml | 3 + src/intl/en/page-developers-docs.json | 2 + 3 files changed, 119 insertions(+) create mode 100644 src/content/developers/docs/bridges/index.md diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md new file mode 100644 index 00000000000..d058cd11e08 --- /dev/null +++ b/src/content/developers/docs/bridges/index.md @@ -0,0 +1,114 @@ +--- +title: Bridges +description: An overview of the different kind of bridging +lang: en +sidebar: true +--- + +With the proliferation of L1 blockchains and L2 [scaling](/developers/docs/scaling/) solutions, alongside an ever-growing number of decentralized applications going cross-chain, the need for communication and asset movement across chains has never been more important. + +This is where blockchain bridges come in. + +## Need for bridges {#need-for-bridges} + +Bridges exist to connect blockchain networks. They enable connectivity and interoperability between blockchains. + +Blockchains exist in siloed environments, meaning there is no way for blockchains to trade and communicate with other blockchains naturally. As a result, while there could be significant activity and innovation within an ecosystem, it is limited by the lack of connectivity and interoperability with other ecosystems. + +Bridges offer a way for isolated blockchain environments to connect with each other. They establish a transportation route between blockchains where tokens, messages, arbitrary data, and even [smart contract](/developers/docs/smart-contracts/) calls can be transferred from one chain to another. + +## Benefits of bridges {#benefits-of-bridges} + +Put simply, bridges unlock developer potential by allowing blockchain networks to exchange data and move assets between them. + +Different blockchains and communities have unique strengths, weaknesses, and approaches to building applications (such as speed, throughput, costliness, etc.). Bridges help the development of the overall crypto ecosystem by enabling blockchains to leverage the innovations of each other. + +Moreover, bridges unlock new use cases and possibilities for both users and developers. For example, users can now move assets across different ecosystems, making them more productive. For developers and protocols, bridges open up an almost limitless amount of possibilities by expanding the design space for [dApps](/developers/docs/dapps/) across multiple crypto ecosystems. + +## How do bridges work? {#how-do-bridges-work} + +While there are many [types of bridge designs](https://blog.li.fi/what-are-blockchain-bridges-and-how-can-we-classify-them-560dc6ec05fa), three ways to facilitate the cross-chain transfer of assets stand out: + +- **Lock and Mint –** Lock assets on the source chain and mint assets on the destination chain. +- **Burn and Mint –** Burn assets on the source chain and mint assets on the destination chain. +- **Atomic Swaps –** Swap assets on the source chain for assets on the destination chain. + +## Bridge types {#bridge-types} + +Bridges come in different types and flavors. Broadly, bridges can usually be classified into one of the following buckets: + +- **Native Bridges –** These bridges are typically built to bootstrap liquidity on a particular blockchain, making it easier for users to move funds to the ecosystem. For example, the Avalanche Bridge is built to make it convenient for users to bridge from [Ethereum](/developers/docs/intro-to-ethereum/) to Avalanche. Other such bridges include Polygon PoS Bridge, Arbitrum Bridge, etc. +- **Validator or Oracle Based Bridges –** These bridges rely on an external validator set or oracles to validate cross-chain transfers. Examples: Multichain and Across. +- **Generalized Message Passing Bridges –** These bridges can transfer assets, along with messages and arbitrary data across chains. Examples: Nomad and LayerZero. +- **Liquidity Networks –** These bridges primarily focus on transferring assets from one chain to another via atomic swaps. Generally, they don’t support cross-chain message passing. Examples: Connext and Hop. + +## Evolution of bridges {#evolution-of-bridges} + +With bridges, there are no perfect solutions. Rather, there are only trade-offs made to fulfill a purpose. Developers and users can evaluate bridges based on the following factors: + +- **Security –** Who verifies the system? Bridges secured by external validators are typically less secure than bridges that are locally or natively secured by the blockchain’s validators. +- **Convenience –** How long does it take to complete a transaction, and how many transactions did a user need to sign? For a developer, how long does it take to integrate a bridge, and how complex is the process? +- **Connectivity –** What are the different destination chains a bridge can connect (i.e., rollups, sidechains, other layer 1 blockchains, etc.), and how hard is it to integrate a new blockchain? +- **Ability to pass more complex data –** Can a bridge enable the transfer of messages and more complex arbitrary data across chains, or does it only support cross-chain asset transfers? +- **Cost-Effectiveness –** How much does it cost to transfer assets across chains via a bridge? Typically, bridges charge a fixed or variable fee depending on gas costs and the liquidity of specific routes. It is also critical to evaluate the cost-effectiveness of a bridge based on the capital required to ensure its security. + +At a high level, bridges can be categorized as trusted and trustless. + +- **Trusted –** Trusted bridges are externally verified. They use an external set of verifiers (Federations with multi-sig, multi-party computation systems, oracle network) to send data across chains. As a result, they can offer great connectivity and enable fully generalized message passing across chains. They also tend to perform well with speed and cost-effectiveness. This comes at the cost of security, as users have to rely on the security of the bridge. +- **Trustless –** These bridges rely on the blockchains they are connecting and their validators to transfer messages and tokens. They are 'trustless' because they do not add new trust assumptions (in addition to the blockchains). As a result, trustless bridges are considered to be more secure than trusted bridges. To evaluate trustless bridges based on other factors, we must break them down into generalized message passing bridges and liquidity networks. + - **Generalized Message Passing Bridges –** These bridges excel with security and the ability to transfer more complex data across chains. Typically, they are also good with cost-effectiveness. However, these strengths generally come at the cost of connectivity for light client bridges (ex: IBC) and speed drawbacks for optimistic bridges (ex: Nomad) that use fraud proofs. + - **Liquidity Networks –** These bridges use atomic swaps for transferring assets and are locally verified systems (i.e., they use the underlying blockchains’ validators to verify transactions). As a result, they excel with security and speed. Moreover, they are considered comparatively cost-effective and offer good connectivity. However, the major tradeoff is their ability to pass more complex data – as they don’t support cross-chain message passing. + +## Risk with bridges {#risk-with-bridges} + +Bridges account for the top 3 [biggest hacks in DeFi](https://rekt.news/leaderboard/) and are still in the early stages of development. Using any bridge carries the following risks: + +- **Smart Contract Risk –** While many bridges have successfully passed audits, all it takes is one flaw in a smart contract for assets to be exposed to hacks (ex: [Solana’s Wormhole Bridge](https://rekt.news/wormhole-rekt/)). +- **Technology Risk –** Given the complexity of bridge operations, there is a possibility of technology risks like software failure, buggy code, human error, spam, and malicious attacks. +- **Systematic Financial Risks** – Many bridges use wrapped assets to mint canonical versions of the original asset on a new chain. This exposes the ecosystem to systematic risk, as we have seen wrapped versions of tokens exploited. +- **Trusted Third-Party Risk –** Some bridges utilize a trusted design that requires users to rely on the assumption that validators will not collude to steal user funds. The need for users to trust these third-party actors exposes them to risks such as rugs, censorship, and other malicious activities. +- **Open Issues –** Given that bridges are in the nascent stages of development, there are many unanswered questions related to how bridges will perform in different market conditions, like times of network congestion and during unforeseen events such as network-level attacks or state rollbacks. This uncertainty poses certain risks, the degree of which is still unknown. + +## How can dapps use bridges? {#how-can-dapps-use-bridges} + +Here are some practical applications that developers can consider about bridges and taking their dApp cross-chain: + +### Integrating bridges {#integrating-bridges} + +For developers, there are many ways to add support for bridges: + +1. **Building your own bridge –** Building a secure and reliable bridge is not easy, especially if you take a more trust-minimized route. Moreover, it requires years of experience and technical expertise related to scalability and interoperability studies. Additionally, it would require a hands-on team to maintain a bridge and attract sufficient liquidity to make it feasible. +2. **Showing users multiple bridge options –** Many dApps require users to have their native token to interact with them. To enable users to access their tokens, they offer different bridge options on their website. However, this method is a quick fix to the problem as it takes the user away from the dApp interface and still requires them to interact with other dApps and bridges. This is a cumbersome onboarding experience with the increased scope of making mistakes. +3. **Integrating a bridge –** This solution doesn’t require the dApp to send users to the external bridge and DEX interfaces. It allows dApps to improve the user onboarding experience. However, this approach has its limitations: + - Assessment and maintenance of bridges are hard and time-consuming. + - Selecting one bridge creates a single point of failure and dependency. + - The dApp is limited by the bridge’s capabilities. + - Bridges alone might not be enough. dApps might need DEXs to offer more functionality such as cross-chain swaps. +4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers – the scarcest resource in crypto. +5. **Integrating a bridge aggregator –** Another option for dApps is integrating a bridge aggregation solution that gives them access to multiple bridges. Bridge aggregators inherit the strengths of all the bridges and thus are not limited by any single bridge’s capabilities. Notably, the bridge aggregators typically maintain the bridge integrations, which saves the dApp from the hassle of staying on top of the technical and operational aspects of a bridge integration. + + That being said, bridge aggregators also have their limitations. For instance, while they can offer more bridge options, many more bridges are typically available in the market other than those offered on the aggregator's platform. Moreover, just like bridges, bridge aggregators are also exposed to smart contracts and technology risks (more smart contracts = more risks). + +If a dApp goes down the route of integrating a bridge or an aggregator, there are different options based on how deep the integration is meant to be. For instance, if it’s only a front-end integration to improve the user onboarding experience, a dApp would integrate the widget. However, if the integration is to explore deeper cross-chain strategies like staking, yield farming, etc., the dApp integrates the SDK or API. + +### Deploying a dapp on multiple chains {#deploying-a-dapp-on-multiple-chains} + +To deploy a dApp on multiple chains, developers can use development platforms like Alchemy, Hardhat, Truffle, etc. Typically, these platforms come with composable plugins that can enable dApps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the hardhat-deploy plugin. + +### Monitoring contract activity across chains {#monitoring-contract-activity-across-chains} + +To monitor contract activity across chains, developers can use subgraphs and developer platforms like Tenderly to observe smart contracts in real-time. Such platforms also have tools that offer greater data monitoring functionality for cross-chain activities, such as checking for events emitted by contracts, etc. + +## Further reading {#further-reading} + +- [Blockchain Bridges](/en/bridges/) – ethereum.org +- [Blockchain Bridges: Building Networks of Cryptonetworks](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) Sep 8, 2021 – Dmitriy Berenzon +- [The Interoperability Trilemma](https://blog.connext.network/the-interoperability-trilemma-657c2cf69f17) Oct 1, 2021 – Arjun Bhuptani +- [Clusters: How Trusted & Trust-Minimized Bridges Shape the Multi-Chain Landscape](https://blog.celestia.org/clusters/) Oct 4, 2021 – Mustafa Al-Bassam +- [LI.FI: With Bridges, Trust is a Spectrum](https://blog.li.fi/li-fi-with-bridges-trust-is-a-spectrum-354cd5a1a6d8) Apr 28, 2022 – Arjun Chand + +Additionally, here are some insightful presentations by [James Prestwich](https://twitter.com/_prestwich) that can help develop a deeper understanding of bridges: + +- [Building Bridges, Not Walled Gardens](https://youtu.be/ZQJWMiX4hT0) +- [Breaking Down Bridges](https://youtu.be/b0mC-ZqN8Oo) +- [Why are the Bridges Burning](https://youtu.be/c7cm2kd20j8) diff --git a/src/data/developer-docs-links.yaml b/src/data/developer-docs-links.yaml index 830784a452e..37309a5ed2f 100644 --- a/src/data/developer-docs-links.yaml +++ b/src/data/developer-docs-links.yaml @@ -149,6 +149,9 @@ - id: docs-nav-advanced path: /developers/docs/ items: + - id: docs-nav-bridges + to: /developers/docs/bridges/ + description: docs-nav-bridges-description - id: docs-nav-standards to: /developers/docs/standards/ description: docs-nav-standards-description diff --git a/src/intl/en/page-developers-docs.json b/src/intl/en/page-developers-docs.json index a8ba560e92d..dbbe1ffab30 100644 --- a/src/intl/en/page-developers-docs.json +++ b/src/intl/en/page-developers-docs.json @@ -6,6 +6,8 @@ "docs-nav-block-explorers": "Block explorers", "docs-nav-blocks": "Blocks", "docs-nav-blocks-description": "The way transactions are batched to ensure state is synchronised across all actors", + "docs-nav-bridges": "Bridges", + "docs-nav-bridges-description": "Bridges for developers", "docs-nav-compiling-smart-contracts": "Compiling smart contracts", "docs-nav-composability": "Composability", "docs-nav-consensus-mechanisms": "Consensus mechanisms", From c1b450c64cdc65d4cecbe9125298d764c92d88db Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 10 May 2022 12:06:27 -0600 Subject: [PATCH 009/298] change description --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index d058cd11e08..0332fd9c3d2 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -1,6 +1,6 @@ --- title: Bridges -description: An overview of the different kind of bridging +description: An overview of bridging for developers lang: en sidebar: true --- From 25effd936134cdc9620147306caba8742814775d Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 10 May 2022 12:06:51 -0600 Subject: [PATCH 010/298] change description --- src/intl/en/page-developers-docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-developers-docs.json b/src/intl/en/page-developers-docs.json index dbbe1ffab30..647b8d0a25f 100644 --- a/src/intl/en/page-developers-docs.json +++ b/src/intl/en/page-developers-docs.json @@ -7,7 +7,7 @@ "docs-nav-blocks": "Blocks", "docs-nav-blocks-description": "The way transactions are batched to ensure state is synchronised across all actors", "docs-nav-bridges": "Bridges", - "docs-nav-bridges-description": "Bridges for developers", + "docs-nav-bridges-description": "An overview of bridging for developers", "docs-nav-compiling-smart-contracts": "Compiling smart contracts", "docs-nav-composability": "Composability", "docs-nav-consensus-mechanisms": "Consensus mechanisms", From 7c5ab192465922c5c5d383bbf4cf9bd707b19fb4 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 12 May 2022 17:04:45 -0700 Subject: [PATCH 011/298] de Foundational docs import latest from Crowdin --- .../de/developers/docs/accounts/index.md | 118 +++++++ .../de/developers/docs/blocks/index.md | 70 ++++ .../docs/consensus-mechanisms/index.md | 94 +++++ .../docs/consensus-mechanisms/pos/index.md | 98 ++++++ .../docs/consensus-mechanisms/pow/index.md | 112 ++++++ .../consensus-mechanisms/pow/mining/index.md | 77 +++++ .../de/developers/docs/dapps/index.md | 83 +++++ .../de/developers/docs/evm/index.md | 80 +++++ .../de/developers/docs/gas/index.md | 171 +++++++++ .../translations/de/developers/docs/index.md | 26 ++ .../developers/docs/intro-to-ether/index.md | 78 +++++ .../docs/intro-to-ethereum/index.md | 121 +++++++ .../de/developers/docs/networks/index.md | 129 +++++++ .../docs/nodes-and-clients/index.md | 324 ++++++++++++++++++ .../nodes-as-a-service/index.md | 218 ++++++++++++ .../nodes-and-clients/run-a-node/index.md | 166 +++++++++ .../de/developers/docs/transactions/index.md | 209 +++++++++++ .../de/developers/docs/web2-vs-web3/index.md | 62 ++++ src/intl/de/page-developers-docs.json | 53 ++- 19 files changed, 2282 insertions(+), 7 deletions(-) create mode 100644 src/content/translations/de/developers/docs/accounts/index.md create mode 100644 src/content/translations/de/developers/docs/blocks/index.md create mode 100644 src/content/translations/de/developers/docs/consensus-mechanisms/index.md create mode 100644 src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md create mode 100644 src/content/translations/de/developers/docs/consensus-mechanisms/pow/index.md create mode 100644 src/content/translations/de/developers/docs/consensus-mechanisms/pow/mining/index.md create mode 100644 src/content/translations/de/developers/docs/dapps/index.md create mode 100644 src/content/translations/de/developers/docs/evm/index.md create mode 100644 src/content/translations/de/developers/docs/gas/index.md create mode 100644 src/content/translations/de/developers/docs/index.md create mode 100644 src/content/translations/de/developers/docs/intro-to-ether/index.md create mode 100644 src/content/translations/de/developers/docs/intro-to-ethereum/index.md create mode 100644 src/content/translations/de/developers/docs/networks/index.md create mode 100644 src/content/translations/de/developers/docs/nodes-and-clients/index.md create mode 100644 src/content/translations/de/developers/docs/nodes-and-clients/nodes-as-a-service/index.md create mode 100644 src/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md create mode 100644 src/content/translations/de/developers/docs/transactions/index.md create mode 100644 src/content/translations/de/developers/docs/web2-vs-web3/index.md diff --git a/src/content/translations/de/developers/docs/accounts/index.md b/src/content/translations/de/developers/docs/accounts/index.md new file mode 100644 index 00000000000..c6a1f67f29b --- /dev/null +++ b/src/content/translations/de/developers/docs/accounts/index.md @@ -0,0 +1,118 @@ +--- +title: Ethereum-Konten +description: Eine Erklärung der Ethereum-Konten – ihre Datenstrukturen und ihre Beziehung zur Schlüsselpaar-Kryptografie. +lang: de +sidebar: true +--- + +Ein Ethereum-Konto ist eine Entität mit einem Ether(ETH)-Guthaben, welche Transaktionen bei Ethereum durchführen kann. Konten können benutzerkontrolliert oder als intelligenter Vertrag bereitgestellt werden. + +## Voraussetzungen {#prerequisites} + +Konten sind ein sehr anfängerfreundliches Thema. Um dir jedoch zu helfen, diese Seite besser zu verstehen, empfehlen wir dir, zuerst unsere [Einführung in Ethereum](/developers/docs/intro-to-ethereum/) zu lesen. + +## Kontotypen {#types-of-account} + +Ethereum hat zwei Kontotypen: + +- Externer Besitz – kontrolliert von jedem mit den privaten Schlüsseln +- Vertrag – ein intelligenter Vertag, der im Neztwerk bereitgestellt und über einen Code gesteuert wird. Erfahre mehr über [intelligente Verträge](/developers/docs/smart-contracts/). + +Beide Kontotypen haben die Möglichkeit + +- ETH und Token zu empfangen, zu halten und zu versenden, +- mit bereitgestellten, intelligenten Verträgen zu interagieren. + +### Wesentliche Unterschiede {#key-differences} + +**Externer Besitz** + +- Die Erstellung eines Kontos ist kostenlos. +- Kann Transaktionen initiieren +- Transaktionen zwischen fremden Konten können nur ETH/Token-Transfers sein. + +**Vertrag** + +- Die Erstellung eines Vertrags ist mit Kosten verbunden, da diese Netzwerkspeicher verwenden. +- Transaktionen können nur als Antwort auf den Erhalt einer Transaktion gesendet werden. +- Transaktionen von einem externen Konto auf ein Vertragskonto können einen Code auslösen, der viele verschiedene Aktionen ausführt, z. B. die Übertragung von Token oder sogar die Erstellung eines neuen Vertrags. + +## Analyse eines Kontos {#an-account-examined} + +Ethereum-Konten haben vier Bereiche: + +- `Nonce` – einen Zähler, der die Anzahl an Transaktionen angibt, die vom Konto gesendet wurden. Dies stellt sicher, dass Transaktionen nur einmal verarbeitet werden. Bei einem Vertragskonto steht diese Zahl für die Anzahl der Verträge, die durch das Konto erstellt wurden. +- `Balance` – die Anzahl von wei, die diese Adresse besitzt. Wei ist eine Stückelung der ETH und es gibt 1e+18 wei pro ETH. +- `codeHash` – Dieser Hash bezieht sich auf den _code_ eines Kontos auf der Ethereum Virtual Machine (EVM). In Vertragskonten sind Codefragmente einprogrammiert, die verschiedene Operationen ausführen können. Dieser EVM-Code wird ausgeführt, wenn das Konto einen Nachrichtenaufruf erhält. Er kann im Gegensatz zu den anderen Kontofeldern nicht geändert werden. Alle diese Codefragmente werden in der Zustandsdatenbank unter den entsprechenden Hashes gespeichert und können später abgerufen werden. Dieser Hash-Wert wird als codeHash bezeichnet. Bei externen Konten ist das Feld codeHash der Hash einer leeren Zeichenfolge. +- `StorageRoot` – manchmal auch bekannt als Speicher-Hash. Ein 256-Bit-Hash des Wurzelknotens eines Merkle-Patricia-Tries, der den Speicherinhalt des Kontos codiert (eine Zuordnung zwischen 256-Bit-Integer-Werten), codiert in den Trie als eine Zuordnung vom Keccak-256-Bit-Hash der 256-Bit-Integer-Schlüssel zu den RLP-codierten 256-Bit-Integer-Werten. Dieser Trie kodiert den Hash des Speicherinhalts dieses Kontos und ist standardmäßig leer. + +![Ein Diagramm, das die Funktionsweise eines Kontos zeigt](./accounts.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## Externe Konten und Schlüsselpaare {#externally-owned-accounts-and-key-pairs} + +Ein Konto besteht aus einem kryptographischen Schlüsselpaar: öffentlich und privat. Sie tragen zum Nachweis bei, dass eine Transaktion tatsächlich vom Absender unterzeichnet wurde, und verhindern Fälschungen. Deinen privaten Schlüssel verwendest du, um Transaktionen zu unterzeichnen; so gewährt er dir die Obhut über das mit deinem Konto verbundene Guthaben. Man besitzt nie wirklich Kryptowährung, sondern private Schlüssel – das Geld ist immer auf Ethereums Hauptbuch (ledger). + +Dies hindert böswillige Akteure daran, gefälschte Transaktionen zu übertragen, da du immer den Absender einer Transaktion überprüfen kannst. + +Wenn Alice Ether von ihrem Konto an das Konto von Bob senden möchte, muss sie eine Transaktionsanfrage erstellen und zur Verifizierung an das Netzwerk senden. Ethereums Verwendung von Kryptographie mit öffentlichem Schlüssel stellt sicher, dass Alice nachweisen kann, dass sie ursprünglich die Transaktionsanfrage initiiert hat. Ohne kryptographische Mechanismen könnte Eve, ein böswilliger Akteur, einfach öffentlich eine Anfrage senden, die so aussieht wie „sende 5 ETH von Alices Konto auf Eves Konto", und niemand wäre in der Lage zu überprüfen, dass sie nicht von Alice kommt. + +## Kontoerstellung {#account-creation} + +Wenn du ein Konto erstellst, werden die meisten "libraries" dir einen zufälligen, privaten Schlüssel generieren. + +Ein privater Schlüssel besteht aus 64 hexadezimalen Zeichen und kann mit einem Passwort verschlüsselt werden. + +Beispiel: + +`fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f` + +Der öffentliche Schlüssel wird mithilfe des [Elliptic Curve Digital Signature Algorithm](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) aus dem privaten Schlüssel generiert. Du erhältst eine öffentliche Adresse für dein Konto, indem du die letzten 20 Bytes des Keccak-256-Hashes des öffentlichen Schlüssels nimmst und `0x` an den Anfang setzt. + +Hier ist ein Beispiel für die Erstellung eines Kontos in der Konsole, in der GETH's `personal_newAccount` verwendet wird + +```go +> personal.newAccount() +Passphrase: +Repeat passphrase: +"0x5e97870f263700f46aa00d967821199b9bc5a120" + +> personal.newAccount("h4ck3r") +"0x3d80b31a78c30fc628f20b2c89d7ddbf6e53cedc +``` + +[GETH-Dokumentation](https://geth.ethereum.org/docs) + +Es ist möglich, neue öffentliche Schlüssel von deinem privaten Schlüssel abzuleiten, aber nicht, einen privaten Schlüssel von öffentlichen Schlüsseln abzuleiten. Dies bedeutet, dass es unerlässlich ist, einen privaten Schlüssel sicher und, wie der Name schon sagt, **PRIVAT** aufzubewahren. + +Du benötigst einen privaten Schlüssel, um Nachrichten und Transaktionen zu signieren, die eine Signatur nach außen anzeigen. Andere können dann die Unterschrift verwenden, um deinen öffentlichen Schlüssel abzuleiten und den Autor der Nachricht zu verifizieren. In deiner App kannst du eine Javascript-Bibliothek verwenden, um Transaktionen ins Netzwerk zu senden. + +## Vertragskonten {#contract-accounts} + +Vertragskonten haben eine 42-stellige, hexadezimale Adresse: + +Beispiel: + +`0x06012c8cf97bead5deae237070f9587f8e7a266d` + +Die Vertragsadresse wird in der Regel angegeben, wenn ein Vertrag an die Ethereum Blockchain versendet wird. Diese Adresse stammt von der Erstelleradresse und der Anzahl der Transaktionen, die von dieser Adresse versendet werden (die „nonce“). + +## Ein Hinweis zu Wallets {#a-note-on-wallets} + +Ein Konto ist kein Wallet. Ein Konto ist das Schlüsselpaar für ein Ethereum-Konto, das dem Benutzer gehört. Eine Wallet ist eine Schnittstelle oder Anwendung, über die du mit deinem Ethereum-Konto interagieren kannst. + +## Eine visuelle Demo {#a-visual-demo} + +Austin führt dich durch Hash-Funktionen und Schlüsselpaare. + + + + + +## Weiterführende Informationen {#further-reading} + +_Du kennst Community-Resourcen die dir geholfen haben? Bearbeite diese Seite und füge sie hinzu!_ + +## Verwandte Themen {#related-topics} + +- [Smart Contracts](/developers/docs/smart-contracts/) +- [Transaktionen](/developers/docs/transactions/) diff --git a/src/content/translations/de/developers/docs/blocks/index.md b/src/content/translations/de/developers/docs/blocks/index.md new file mode 100644 index 00000000000..94260572196 --- /dev/null +++ b/src/content/translations/de/developers/docs/blocks/index.md @@ -0,0 +1,70 @@ +--- +title: Blöcke +description: Eine Übersicht über Blöcke in der Ethereum Blockchain – ihre Datenstruktur, warum sie benötigt werden und wie sie erstellt werden. +lang: de +sidebar: true +--- + +Blöcke sind Stapel von Transaktionen mit einem Hash des vorherigen Blocks in der Kette. Dies verbindet Blöcke (in einer Kette), weil Hashes kryptographisch aus den Blockdaten abgeleitet werden. Dies verhindert Betrug: Eine Änderung in irgendeiner Chronik würde alle nachfolgenden Blöcke ungültig machen, da sich alle nachfolgenden Hashes ändern und jeder, der die Blockchain ausführt, dies bemerken würde. + +## Voraussetzungen {#prerequisites} + +Blöcke sind ein sehr anfängerfreundliches Thema. Um dir jedoch zu helfen, diese Seite besser zu verstehen, empfehlen wir, zuerst [ Konten](/developers/docs/accounts/), [Transaktionen](/developers/docs/transactions/) und unsere [Einführung in Ethereum](/developers/docs/intro-to-ethereum/) zu lesen. + +## Warum Blöcke? {#why-blocks} + +Um sicherzustellen, dass alle Teilnehmer des Ethereum-Netzwerks einen synchronisierten Zustand beibehalten und sich über den genauen Verlauf der Transaktionen einig sind, fassen wir die Transaktionen in Blöcken zusammen. Das bedeutet, dass Dutzende (oder Hunderte) Transaktionen auf einmal übergeben, bestätigt und synchronisiert werden. + +![Ein Diagramm, das Transaktionen in einem Block zeigt, die Zustandsänderungen verursachen](./tx-block.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Durch die Aufteilung der Übertragungen geben wir allen Netzwerkteilnehmern genügend Zeit, einen Konsens zu finden: Obwohl Transaktionsanfragen dutzende Male pro Sekunde auftreten, werden Blöcke auf Ethereum etwa alle fünfzehn Sekunden übertragen. + +## Wie Blöcke funktionieren {#how-blocks-work} + +Um die Transaktionsgeschichte zu erhalten, sind Blöcke streng sortiert (jeder neu erstellte Block enthält einen Verweis auf den übergeordneten Block), und Transaktionen innerhalb von Blöcken sind ebenfalls streng geordnet. Außer in seltenen Fällen, zu einem bestimmten Zeitpunkt, sind sich alle Teilnehmer des Netzwerks über die genaue Anzahl und Geschichte der Blöcke einig und arbeiten daran, die aktuellen Live-Transaktionsanfragen in den nächsten Block zu integrieren. + +Sobald ein Block von einem Miner im Netzwerk zusammengesetzt wird (geschürft, mined [engl.]), wird er an den Rest des Netzwerks weitergeleitet: Alle Nodes fügen diesen Block am Ende ihrer Blockchain hinzu und das Mining (Schürfen) geht weiter. Der genaue Prozess der Blockmontage (Schürfen/Mining [engl.]) und der Commitment/Konsensus-Prozess werden derzeit durch das „Proof-of-Work-Protokoll" von Ethereum spezifiziert. + +### Eine visuelle Demo {#a-visual-demo} + + + +## Proof-of-Work-Protokoll {#proof-of-work-protocol} + +Proof-of-Work bedeutet Folgendes: + +- Mining-Knoten müssen eine variable, aber beträchtliche Menge an Energie, Zeit und Rechenleistung aufwenden, um ein "Legitimationszertifikat" für einen Block zu erstellen, den sie dem Netzwerk vorschlagen. Dies trägt u. a. zum Schutz des Netzes vor Spam-/Denial-of-Service-Angriffen bei, da Zertifikate in der Herstellung teuer sind. +- Andere Miner, die von einem neuen Block mit einem gültigen Legitimationszertifikat erfahren, müssen den neuen Block als den kanonischen nächsten Block auf der Blockchain akzeptieren. +- Die genaue Zeit, die ein bestimmter Miner benötigt, um dieses Zertifikat zu erstellen, ist eine Zufallsvariable mit hoher Varianz. Dies stellt sicher, dass es unwahrscheinlich ist, dass zwei Miner gleichzeitig Validierungen für einen vorgeschlagenen nächsten Block erstellen. Wenn ein Miner einen zertifizierten neuen Block erstellt und verbreitet, kann er fast sicher sein, dass der Block vom Netzwerk als kanonischer nächster Block auf der Blockchain akzeptiert wird, ohne dass es zu Konflikten kommt (obwohl es auch ein Protokoll für den Umgang mit Konflikten gibt, falls zwei Ketten zertifizierter Blöcke fast gleichzeitig erstellt werden). + +[Mehr zum Mining](/developers/docs/consensus-mechanisms/pow/mining/) + +## Was enthält ein Block? {#block-anatomy} + +- `Zeitstempel` – die Zeit, zu der der Block gemint wurde. +- `Blocknummer` – die Länge der Blockchain in Blöcken. +- `Basisgebühr pro Gas` – die Mindestgebühr pro Gas, die erforderlich ist, damit eine Transaktion in den Block aufgenommen wird. +- `Schwierigkeit` – der Aufwand, der erforderlich ist, um den Block abzubauen. +- `mixHash` – ein eindeutiger Bezeichner für diesen Block. +- `parentHash` – der eindeutige Bezeichner des vorhergehenden Blocks (so werden die Blöcke in einer Kette verknüpft). +- `Transaktionen` – die im Block enthaltenen Transaktionen. +- `stateRoot` – der gesamte Status des Systems: Kontosalden, Vertragsspeicher, Vertragscode und Konto-Nonce sind darin enthalten. +- `nonce` – ein Hash, der in Kombination mit dem mixHash beweist, dass der Block den [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/) durchlaufen hat. + +## Blockzeit {#block-time} + +Die Blockzeit bezieht sich auf die Zeit, die für das Mining eines neuen Blocks benötigt wird. In Ethereum beträgt die durchschnittliche Blockzeit zwischen 12 und 14 Sekunden und wird nach jedem Block ausgewertet. Die erwartete Blockzeit wird als Konstante auf Protokollebene festgelegt und dient dazu, die Sicherheit des Netzwerks zu schützen, wenn die Miner mehr Rechenleistung einsetzen. Die durchschnittliche Blockzeit wird mit der erwarteten Blockzeit verglichen, und wenn die durchschnittliche Blockzeit höher ist, dann wird die Schwierigkeit im Block-Header verringert. Wenn die durchschnittliche Blockzeit kleiner ist, wird die Schwierigkeit im Block-Header erhöht. + +## Blockgröße {#block-size} + +Ein finaler, wichtiger Hinweis ist, dass Blöcke selbst in ihrer Größe begrenzt sind. Jeder Block hat eine Zielgröße von 15 Millionen Gas, aber die Größe der Blöcke wird entsprechend der Netznachfrage erhöht oder verringert, bis zur Blockgrenze von 30 Millionen Gas (doppelte Zielblockgröße). Die Gesamtmenge des von allen Transaktionen im Block verbrauchten Gases muss unter dem Blockgaslimit liegen. Dies ist wichtig, weil dadurch sichergestellt wird, dass Blöcke nicht willkürlich groß sein können. Wenn Blöcke beliebig groß sein könnten, würden weniger leistungsstarke Nodes aufgrund von Platz- und Geschwindigkeitsanforderungen allmählich nicht mehr mit dem Netzwerk Schritt halten können. + +## Weiterführende Informationen {#further-reading} + +_Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!_ + +## Verwandte Themen {#related-topics} + +- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) +- [Transaktionen](/developers/docs/transactions/) +- [Ressourcen](/developers/docs/gas/) diff --git a/src/content/translations/de/developers/docs/consensus-mechanisms/index.md b/src/content/translations/de/developers/docs/consensus-mechanisms/index.md new file mode 100644 index 00000000000..49dfec2f13c --- /dev/null +++ b/src/content/translations/de/developers/docs/consensus-mechanisms/index.md @@ -0,0 +1,94 @@ +--- +title: Konsensmechanismus +description: Eine Erklärung von Konsensprotokollen in verteilten Systemen und die Rolle, die sie in Ethereum spielen. +lang: de +sidebar: true +incomplete: true +--- + +Bei Blockchains wie Ethereum, die im Grunde verteilte Datenbanken sind, müssen sich die Nodes des Netzwerks über den aktuellen Zustand des Netzwerks einigen. Diese Einigung wird durch Konsensmechanismen erreicht. + +Auch wenn die Konsensmechanismen nicht direkt mit der Entwicklung einer App zu tun haben, wird das Verständnis dieser Mechanismen dir und deinen Nutzern/Nutzerinnen helfen, Konzepte wie Gaspreise und Transaktionszeiten zu verstehen. + +## Voraussetzungen {#prerequisites} + +Um diese Seite besser zu verstehen, empfehlen wir dir, zuerst unsere [Einführung in Ethereum](/developers/docs/intro-to-ethereum/) zu lesen. + +## Was ist ein Konsens? {#what-is-consensus} + +Unter einem Konsens verstehen wir, dass eine allgemeine Einigung erzielt wurde. Stell dir vor, eine Gruppe von Menschen geht ins Kino. Wenn es keine Meinungsverschiedenheiten über eine vorgeschlagene Filmauswahl gibt, wird ein Konsens erzielt. Im Extremfall wird sich die Gruppe ohne Konsens aufspalten. + +In Bezug auf die Blockchain ist der Prozess formalisiert und das Erreichen eines Konsenses bedeutet, dass sich mindestens 51 % der Nodes im Netzwerk über den nächsten globalen Zustand des Netzwerks einig sind. + +## Was ist ein Konsensmechanismus? {#what-is-a-consensus-mechanism} + +Konsensmechanismen (auch bekannt als Konsensprotokolle oder Konsensalgorithmen) ermöglichen, dass verteilte Systeme (Computernetzwerke) zusammenarbeiten und sicher bleiben. + +Seit Jahrzehnten werden Mechanismen genutzt, um einen Konsens zwischen Datenbank-Nodes, Anwendungsservern und anderen Unternehmensinfrastrukturen herzustellen. In den letzten Jahren wurden neue Konsensmechanismen erfunden, die es kryptoökonomischen Systemen wie Ethereum ermöglichen, sich über den Zustand des Netzwerks zu einigen. + +Ein Konsensmechanismus in einem kryptoökonomisches System hilft auch bestimmte Arten von wirtschaftlichen Angriffen zu verhindern. Theoretisch kann ein Angreifer den Konsens erreichen, indem er 51 % des Netzwerks kontrolliert. Konsensmechanismen sollen diesen "51-%-Angriff" unmöglich zu machen. Verschiedene Mechanismen werden entwickelt, um dieses Sicherheitsproblem auf unterschiedliche Weise zu lösen. + + + +## Arten von Konsensmechanismen {#types-of-consensus-mechanisms} + +### Proof-of-Work {#proof-of-work} + +Ethereum verwendet, wie Bitcoin, derzeit ein **Proof-of-Work(PoW)**-Konsensprotokoll. + +#### Blockerstellung {#pow-block-creation} + +Der Proof-of-Work wird durch [Miner](/developers/docs/consensus-mechanisms/pow/mining/) erledigt, die um die Erstellung eines neuen Blocks voller verarbeiteter Transaktionen konkurrieren. Der Gewinner teilt den neuen Block mit dem Rest des Netzwerks und verdient einige frisch geminte ETH. Es gewinnt derjenige, dessen Computer am schnellsten ein mathematisches Rätsel lösen kann. Dadurch wird die kryptographische Verbindung zwischen dem aktuellen Block und dem vorherigen Block hergestellt. Die Lösung dieses Rätsels ist die Arbeit ("Work") im "Proof-of-Work". + +#### Sicherheit {#pow-security} + +Die Sicherheit des Netzwerks wird dadurch gewährleistet, dass du 51 % der Rechenleistung des Netzwerks brauchst, um die Kette zu betrügen. Das würde so große Investitionen in Ausrüstung und Energie erfordern, dass du wahrscheinlich mehr ausgibst, als du gewinnst. + +Mehr über [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/) + +### Proof-of-Stake {#proof-of-stake} + +Ethereum plant ein Upgrade zum **Proof-of-Stake(PoS)**-Konsensprotokoll. + +#### Blockerstellung {#pos-block-creation} + +Der Proof-of-Stake wird durch Validatoren vollzogen, welche ihre ETH für die Teilnahme im System eingesetzt haben. Ein Validator wird nach dem Zufallsprinzip ausgewählt, um neue Blöcke zu erstellen, sie mit dem Netzwerk zu teilen und Belohnungen zu verdienen. Anstatt intensive Rechenarbeit leisten zu müssen, musst du einfach deine ETH ins Netzwerk gesteckt haben. Das schafft Anreize für ein gesundes Netzwerkverhalten. + +#### Sicherheit {#pos-security} + +Ein Proof-of-Stake-System wird durch die Tatsache gesichert, dass man 51 % der gesamten eingesetzten ETH benötigt, um die Kette zu betrügen, und dass dein Einsatz für böswilliges Verhalten gekürzt wird. + +Mehr zu [Proof-of-Stake](/developers/docs/consensus-mechanisms/pos/) + +### Ein visueller Leitfaden {#types-of-consensus-video} + +Erfahre mehr über die verschiedenen Arten von Konsensmechanismen, die auf Ethereum verwendet werden: + + + +### Sybil: Widerstand & Kettenauswahl {#sybil-chain} + +Technisch gesehen sind Proof-of-Work und Proof-of-Stake keine Konsensprotokolle, aber der Einfachheit halber werden sie oft als solche bezeichnet. Sie sind eigentlich Sybil-Widerstandsmechanismen und Blockautor-Selektoren; sie sind ein Weg, um zu entscheiden, wer der Autor des letzten Blocks ist. Dieser Sybil-Widerstandsmechanismus in Kombination mit einer Kettenauswahlregel macht einen echten Konsensmechanismus aus. + +Der **Sybil-Widerstand** misst, wie ein Protokoll gegen einen [Sybil-Angriff](https://wikipedia.org/wiki/Sybil_attack) abschneidet. Bei Sybil-Angriffen gibt sich ein Nutzer oder eine Gruppe als viele Nutzer aus. Der Widerstand gegen diese Art von Angriffen ist für eine dezentrale Blockchain unerlässlich und ermöglicht es Minern und Validatoren, auf der Grundlage der eingesetzten Ressourcen gleichermaßen belohnt zu werden. Proof-of-Work und Proof-of-Stake schützen davor, indem sie die Nutzer/Nutzerinnen dazu bringen, viel Energie aufzuwenden oder eine Menge Sicherheiten zu stellen. Diese Schutzmaßnahmen sind eine wirtschaftliche Abschreckung gegen Sybil-Angriffe. + +Eine **Kettenauswahlregel** wird verwendet, um zu entscheiden, welche Kette die "richtige" ist. Ethereum und Bitcoin verwenden derzeit die "Longest-Chain"-Regel, was bedeutet, dass die Blockchain, die am längsten ist, von den anderen Nodes als gültig akzeptiert wird und mit ihr arbeitet. Bei Proof-of-Work-Ketten wird die längste Kette durch die gesamte kumulative Proof-of-Work-Schwierigkeit der Kette bestimmt. + +Die Kombination aus Proof-of-Work und Longest-Chain-Regel ist als "Nakamoto-Konsens" bekannt. + +Die [Beacon Chain](/upgrades/beacon-chain/) verwendet einen Konsensmechanismus namens [Casper the Friendly Finality Gadget](https://arxiv.org/abs/1710.09437), der auf einem Proof-of-Stake basiert. + +## Weiterführende Informationen {#further-reading} + +- [Was ist ein Blockchain-Konsens-Algorithmus?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) +- [Was ist der Nakamoto-Konsens? Vollständiger Leitfaden für Anfänger](https://blockonomi.com/nakamoto-consensus/) +- [Wie funktioniert Casper?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- [Über die Sicherheit und Leistungsfähigkeit von Proof-of-Work-Blockchains](https://eprint.iacr.org/2016/555.pdf) + +_Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!_ + +## Verwandte Themen {#related-topics} + +- [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/) +- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) +- [Proof-of-Stake](/developers/docs/consensus-mechanisms/pos/) diff --git a/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md new file mode 100644 index 00000000000..49de72dc5be --- /dev/null +++ b/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md @@ -0,0 +1,98 @@ +--- +title: Proof-of-Stake (PoS) +description: Eine Erklärung des Proof-of-Stake-Konsensprotokolls und seiner Rolle in Ethereum. +lang: de +sidebar: true +incomplete: true +--- + +Ethereum bewegt sich vom [Proof-of-Work (PoW)](/developers/docs/consensus-mechanisms/pow/) zu einem Konsensmechanismus, genannt Proof-of-Stake (PoS). Das war immer der Plan, denn es ist ein wichtiger Teil der Strategie der Community, Ethereum über [Upgrades](/upgrades/) zu skalieren. Allerdings ist es eine große technische Herausforderung, PoS richtig umzusetzen, und nicht so einfach wie PoW zu nutzen, um einen Konsens über das Netzwerk zu erzielen. + +## Voraussetzungen {#prerequisites} + +Um diese Seite besser zu verstehen, empfehlen wir dir, zuerst einen Blick auf [Konsensmechanismen](/developers/docs/consensus-mechanisms/) zu werfen. + +## Was ist Proof-of-Stake (PoS)? {#what-is-pos} + +Proof-of-Stake ist eine Art von [Konsensmechanismus](/developers/docs/consensus-mechanisms/), die von Blockchain-Netzwerken benutzt wird, um einen verteilten Konsens zu erreichen. + +Es verlangt von Nutzern das Einsetzen ([engl.] Staking) ihrer ETH, um ein Validator im Netzwerk zu werden. Validatoren sind verantwortlich für die gleichen Dinge wie Miner in [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/): Ordnen von Transaktionen und Erstellen von neuen Blöcken, so dass alle Nodes mit dem Status des Netzwerks übereinstimmen. + +Proof-of-Stake kommt mit einer Anzahl an Verbesserungen zum Proof-of-Work-System hinzu: + +- bessere Energieeffizienz – weniger Energieaufwand für das Minen (Schürfen) von Blöcken +- weniger Hindernisse für den Einstieg, zeduziert Hardwareanforderungen – Du brauchst keine Elite-Hardware, um neue Blöcke zu erstellen +- stärkere Immunität gegen die Zentralisierung – Proof-of-Stake sollte zu mehr Nodes im Netzwerk führen +- stärkere Unterstützung für [Shard Chains](/upgrades/shard-chains/) – ein wichtiges Upgrade bei der Skalierung des Ethereum-Netzwerks + +## Proof-of-Stake, Staking und Validatoren {#pos-staking-validators} + +Proof-of-Stake ist der zugrundeliegende Mechanismus, der Validatoren aktiviert, wenn genügend Stakes vorhanden sind. Für Ethereum müssen Benutzer 32 ETH staken (einsetzen), um ein Validator zu werden. Validatoren werden zufällig ausgewählt, um Blöcke zu erstellen, und sind für die Überprüfung und Bestätigung von Blöcken, die sie nicht erstellen, verantwortlich. Der Einsatz eines Benutzers wird auch als Anreiz für ein gutes Validator-Verhalten verwendet. Zum Beispiel kann ein Nutzer einen Teil seines Stakes für Dinge wie offline zu gehen (Fehlversuch der Validierung) oder seinen gesamten Stake für vorsätzliche Kollusion verlieren. + +## Wie funktioniert Ethereums Proof-of-Stake? {#how-does-pos-work} + +Im Gegensatz zum Proof-of-Work müssen Validatoren keine erheblichen Mengen an Rechenleistung verwenden, da sie zufällig ausgewählt werden und nicht miteinander konkurrieren. Sie müssen nicht unentwegt Blocks minen (schürfen), sondern nur dann, wenn sie ausgewählt werden, und vorgeschlagene Blöcke validieren, wenn sie nicht ausgewählt sind. Diese Validierung wird als Attestieren bezeichnet. Du kannst dir das Attestieren vorstellen, wie "dieser Block sieht gut für mich aus" zu sagen. Validatoren erhalten Belohnungen für neue Blöcke und das Zertifizieren von Blöcken, die sie gesehen haben. + +Wenn du bösartige Blöcke attestierst, verlierst du deinen Einsatz. + +### Die Beacon Chain {#the-beacon-chain} + +Wenn Ethereum den Proof-of-Work durch den Proof-of-Stake ersetzt, wird es zusätzlich die Komplexität von [Shard-Chains](/upgrades/shard-chains/) geben. Das sind separate Blockchains, die Validatoren benötigen, um Transaktionen zu verarbeiten und neue Blöcke zu erstellen. Der Plan sind 64 Scherben-Ketten, die alle ein geteiltes Verständnis vom Status des Netzwerks haben. Daher ist eine zusätzliche Koordination notwendig, die von [der Beacon Chain](/upgrades/beacon-chain/) übernommen wird. + +Die Beacon Chain erhält Statusinformationen von den Fragmenten und stellt sie für die anderen Fragmente zur Verfügung, so dass das Netzwerken synchronisiert bleiben kann. Die Beacon Chain verwaltet auch die Validatoren, von der Registrierung ihrer Einlagen bis hin zur Verteilung ihrer Belohnungen und Strafen. + +So funktioniert dieser Prozess. + +### Wie Validierung funktioniert {#how-does-validation-work} + +Wenn du eine Transaktion auf einem Shard einreichst, ist ein Validator dafür verantwortlich, deine Transaktion zu einem Shard-Block hinzuzufügen. Validatoren werden algorithmisch von der Beacon Chain ausgewählt, um neue Blöcke zu vorzuschlagen. + +#### Attestierung {#attestation} + +Wird ein Validator nicht ausgewählt, um einen neuen Shard-Block vorzuschlagen, muss er den Vorschlag eines anderen Validators attestieren und bestätigen, dass alles so aussieht wie es soll. Es ist die Attestierung, die in der Beacon-Kette aufgezeichnet wird, und nicht die Transaktion selbst. + +Mindestens 128 Validatoren werden benötigt, um jeden Shard-Block zu attestieren. Diese werden als "Komitee" bezeichnet. + +Das Komitee hat einen Zeitrahmen, in dem es einen Shard-Block vorschlagen und validieren muss. Dieser ist als "Slot" bekannt. Pro Slot wird lediglich ein gültiger Block erstellt und 32 Slots bilden eine "Epoche." Nach jeder Epoche wird das Komitee aufgelöst und mit verschiedenen, zufälligen Teilnehmern reformiert. Dies trägt dazu bei, Shards vor Ausschüssen aus schlechten Akteuren zu schützen. + +#### Crosslinks {#rewards-and-penalties} + +Wenn ein neuer Shard-Block-Vorschlag genug Attestierungen hat, wird ein "Crosslink" erzeugt, welcher die Aufnahme des Blocks und deiner Transaktion in der Beacon Chain bestätigt. + +Sobald es einen Crosslink gibt, erhält der Validator, der den Block vorgeschlagen hat, seine Belohnung. + +#### Finalisierung {#finality} + +In verteilten Netzwerken hat eine Transaktion eine "Finalisierung", wenn sie Teil eines Bausteins ist, der sich nicht ändern kann. + +Um dies in Proof-of-Stake zu tun, bringt Casper, ein Finalisierungsprotokoll, Validatoren dazu, den Zustand eines Blocks an bestimmten Kontrollpunkten zu bestätigen. Solange 2/3 der Validatoren bestätigt haben, ist der Block fertig. Validatioren verlieren ihren gesamten Stake, wenn sie versuchen, dies später durch einen 51-%-Angriff rückgängig zu machen. + +Vlad Zamfir drückte es so aus: Das ist wie bei einem Miner, dem aufgrund der Teilnahme an einem 51-%-Angriff seine Mining-Hardware abbrennt. + +## Proof-of-Stake und Sicherheit {#pos-and-security} + +Die Bedrohung eines [51-%-Angriffs](https://www.investopedia.com/terms/1/51-attack.asp) existiert im Proof-of-Stake weiterhin, jedoch ist das Risiko für den Angreifer noch größer. Für solch einen Angriff musst du 51 % aller eingesetzten ETH kontrollieren. Dies ist nicht nur eine große Menge an Geld, sondern würde wahrscheinlich auch dazu führen, dass der ETH-Wert sinkt. Es gibt wenig Anreiz dafür, den Wert einer Währung zu zerstören, an der du eine Mehrheit hast. Es ist wesentlich erstrebenswerter, das Netzwerk sicher und gesund zu halten. + +Stake-Kürzungen, Ausschlüsse und andere Strafen, die von der Beacon Chain koordiniert werden, werden existieren, um andere schlechte Handlungen zu verhindern. Validatoren werden auch dafür verantwortlich sein, diese Vorfälle zu melden. + +## Vor- und Nachteile {#pros-and-cons} + +| Vorteile | Nachteile | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| Staking macht dir die Ausführung eines Nodes einfacher. Es erfordert keine großen Investitionen in Hardware oder Energie und wenn du nicht genug ETH zum Staken hast, kannst du dich einem Staking-Pool anschließen. | Proof-of-Stake steckt noch in den Kinderschuhen und ist im Vergleich zum Proof-of-Work weniger erprobt. | +| Staking ist stärker dezentralisiert. Es erlaubt eine erhöhte Beteiligung und mehr Nodes bedeuten keinen %-Anstieg der Erträge, wie etwa beim Mining. | | +| Staking ermöglicht sicheres Sharding. Shard-Chains erlauben es Ethereum, mehrere Blöcke zur gleichen Zeit zu erstellen, wodurch der Durchsatz an Transaktionen erhöht wird. Das Sharding des Netzwerks in einem Proof-of-Work-System würde einfach die Leistung verringern, die nötig ist, um einen Teil des Netzes zu kompromittieren. | | + +## Weiterführende Informationen {#further-reading} + +- [Proof of Stake FAQ](https://vitalik.ca/general/2017/12/31/pos_faq.html) _Vitalik Buterin_ +- [Was ist Proof-of-Stake](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/) _ConsenSys_ +- [Was Proof of Stake ist und warum sie wichtig ist](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463) _Vitalik Buterin_ +- [Die Erklärung der Ethereum 2.0 Beacon Chain, die du zuerst lesen solltest](https://ethos.dev/beacon-chain/) _Ethos.dev_ +- [Warum Proof of Stake (Nov 2020)](https://vitalik.ca/general/2020/11/06/pos2020.html) _Vitalik Buterin_ +- [Proof of Stake: How I Learned to Love Weak Subjectivity](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ +- [A Proof of Stake Design Philosophy](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ + +## Verwandte Themen {#related-topics} + +- [Proof of work](/developers/docs/consensus-mechanisms/pow/) diff --git a/src/content/translations/de/developers/docs/consensus-mechanisms/pow/index.md b/src/content/translations/de/developers/docs/consensus-mechanisms/pow/index.md new file mode 100644 index 00000000000..193b651e5e9 --- /dev/null +++ b/src/content/translations/de/developers/docs/consensus-mechanisms/pow/index.md @@ -0,0 +1,112 @@ +--- +title: Proof-of-Work (PoW) +description: Eine Erklärung für das Proof-of-Work-Konsensprotokoll und seine Rolle in Ethereum. +lang: de +sidebar: true +incomplete: true +--- + +Ethereum verwendet, wie Bitcoin, derzeit ein Konsensprotokoll namens **[Proof-of-Work (PoW)](https://wikipedia.org/wiki/Proof_of_work)**. Dies ermöglicht es den Nodes des Ethereum-Netzwerks, sich über den Stand aller auf der Ethereum-Blockchain aufgezeichneten Informationen zu einigen, und verhindert bestimmte Arten von wirtschaftlichen Angriffen. + +Im Laufe des nächsten Jahres wird Proof-of-Work zugunsten von **[Proof-of-Stake (PoS)](/developers/docs/consensus-mechanisms/pos)** auslaufen. Mit dem Übergang zu Proof-of-Stake wird auch das Mining von Ethereum auslaufen. [Mehr zum Merge](/upgrades/merge/) + +## Voraussetzungen {#prerequisites} + +Um diese Seite besser zu verstehen, empfehlen wir dir, zuerst etwas über [Transaktionen](/developers/docs/transactions/), [Blöcke](/developers/docs/blocks/) und [Konsensmechanismen](/developers/docs/consensus-mechanisms/) zu lesen. + +## Was ist Proof-of-Work (PoW)? {#what-is-pow} + +Proof-of-Work ist der Mechanismus, der es dem dezentralen Ethereum-Netzwerk ermöglicht, einen Konsens zu finden oder sich auf Dinge wie Kontostände und die Reihenfolge von Transaktionen zu einigen. Dies verhindert, dass die Nutzer/innen ihre Coins doppelt ausgeben, und stellt sicher, dass die Ethereum-Kette nur sehr schwer angegriffen oder manipuliert werden kann. + +## Proof-of-Work und Mining {#pow-and-mining} + +Proof-of-Work ist der grundlegende Algorithmus, der den Schwierigkeitsgrad und die Regeln für die Arbeit der Miner festlegt. Mining ist die "Arbeit" (Work) selbst. Es ist das Hinzufügen von gültigen Blöcken zur Kette (Chain). Das ist wichtig, denn die Länge der Kette hilft dem Netzwerk, der richtigen Ethereum-Kette zu folgen und den aktuellen Zustand von Ethereum zu verstehen. Je mehr "Arbeit" geleistet wird, desto länger ist die Kette, und je höher die Blocknummer ist, desto sicherer kann sich das Netzwerk über den aktuellen Stand der Dinge sein. + +[Mehr zum Mining](/developers/docs/consensus-mechanisms/pow/mining/) + +## Wie funktioniert Ethereums Proof-of-Work? {#how-it-works} + +Ethereums Transaktionen werden zu Blöcken verarbeitet. Jeder Block hat + +- einen Block-Schwierigkeitsgrad – zum Beispiel: 3.324.092.183.262.715, +- einen mixHash – zum Beispiel, `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29`, +- eine Nonce – zum Beispiel: `0xd3ee432b4fb3d26b`. + +Diese Blockdaten sind direkt mit dem Proof-of-Work verbunden. + +### Die "Arbeit" (Work) in Proof-of-Work {#the-work} + +Das Proof-of-Work-Protokoll Ethash verlangt von den Minern einen intensiven Wettlauf von Versuch und Irrtum, um die Nonce für einen Block zu finden. Nur Blöcke mit einer gültigen Nonce können der Chain hinzugefügt werden. + +Beim Wettlauf zur Erstellung eines Blocks setzt ein Miner wiederholt einen Datensatz, den du nur durch Downloaden und Ausführen der kompletten Chain (wie es ein Miner macht) erhältst, in eine mathematische Funktion ein. Der Datensatz wird verwendet, um einen mixHash unter einer Ziel-Nonce zu generieren, die von der Blockschwierigkeit abhängt. Die beste Methode hierfür ist durch Versuch und Irrtum. + +Die Schwierigkeit bestimmt das Ziel für den Hash. Je niedriger das Ziel, desto kleiner ist der Satz gültiger Hashes. Einmal generiert, ist dies für andere Miner und Nutzer/Nutzerinnen unglaublich einfach zu überprüfen. Selbst wenn sich eine Transaktion ändern würde, wäre der Hash völlig anders und würde auf Betrug hindeuten. + +"Hashing" macht es leichter, Betrug zu erkennen. Aber Proof-of-Work als Prozess ist auch eine große Abschreckung für Angriffe auf die Kette. + +### Sicherheit von Proof-of-Work {#security} + +"Minern" wird ein Anreiz geboten, diese Arbeit an der wichtigsten Ethereum-Kette zu leisten. Es gibt einen kleinen Ansporn für einen Teil der Miner, ihre eigene Kette zu starten – dies untergräbt das System. Bockchains sind auf einen einzigen Status als Quelle der Wahrheit angewiesen. Und Benutzer werden immer die längste, "schwerste" Kette auswählen. + +Das Ziel des Proof-of-Work ist es, die Kette zu verlängern. Die längste Kette ist am glaubwürdigsten, weil für sie die meisten Berechnungen durchgeführt wurden. Im PoW-System von Ethereum ist es fast unmöglich, neue Blöcke zu erstellen, die Transaktionen löschen, gefälschte Blöcke zu erstellen oder eine zweite Kette zu unterhalten. Das liegt daran, dass ein böswilliger Miner die Block-Nonce immer schneller lösen müsste als alle anderen. + +Um ständig bösartige und dennoch gültige Blöcke zu erzeugen, brauchst du über 51 % der Mining-Power im Netzwerk, um alle anderen zu schlagen. Du bräuchtest eine Menge Rechenleistung, um diese Menge an "Work" erledigen zu können. Und die aufgewendete Energie könnte sogar den Gewinn aufwiegen, den du bei einem Angriff erzielen würdest. + +### Wirtschaftlichkeit von Proof-of-Work {#economics} + +Der Proof-of-Work ist auch dafür verantwortlich, dass neue Währung in das System kommt und die Miner einen Anreiz haben, die Arbeit zu machen. + +Miner die erfolgreich einen Block erstellen, werden mit zwei frisch erzeugten ETH belohnt, erhalten aber nicht mehr alle Transaktionsgebühren, da die Grundgebühr verbraucht wird, während die Trinkgeld- und Blockbelohnung an den Miner geht. Ein Miner kann auch 1,75 ETH für einen Onkelblock erhalten. Onkelblöcke sind gültige Blöcke, die von einem Miner praktisch zur gleichen Zeit erstellt wurden, als ein anderer Miner den erfolgreichen Block gemint hat. Onkleblöcke entstehen normalerweise aufgrund von Netzwerklatenz. + +## Endgültigkeit {#finality} + +Eine Transaktion hat bei Ethereum "Endgültigkeit", wenn sie Teil eines Blocks ist, der sich nicht mehr ändern kann. + +Da die Miner dezentral arbeiten, können zwei gültige Blöcke gleichzeitig gemint werden. Dadurch entsteht eine temporäre Abzweigung. Letztendlich wird eine dieser Ketten zur akzeptierten Kette, nachdem ein weiterer Block abgebaut und hinzugefügt wurde, wodurch sie länger wird. + +Aber um die Sache noch komplizierter zu machen, können Transaktionen, die bei der temporären Gabelung abgelehnt wurden, in die akzeptierte Kette aufgenommen worden sein. Das bedeutet, dass die Transaktion rückgängig gemacht werden könnte. Die Endgültigkeit bezieht sich also auf die Zeit, die du warten solltest, bevor du eine Transaktion als unumkehrbar betrachtest. Für Ethereum beträgt die empfohlene Zeit sechs Blöcke oder etwas mehr als eine Minute. Nach sechs Blöcken kannst du mit relativer Sicherheit sagen, dass die Transaktion erfolgreich war. Du kannst noch länger auf noch größere Zusicherungen warten. + +Die Endgültigkeit ist etwas, das du beim Entwerfen von Dapps beachten solltest. Es wäre ein schlechtes Nutzererlebnis, wenn du für deine Nutzer/Nutzerinnen die Transaktionsinformationen falsch darstellst, vor allem wenn die Transaktion einen hohen Wert hat. + +Denke daran, dass diese Zeitspanne nicht die Wartezeiten beinhaltet, bis eine Transaktion von einem Miner abgeholt wird. + +## Energieverbrauch von Proof-of-Work {#energy} + +Ein Hauptkritikpunkt an Proof-of-Work ist die Menge an Energie, die benötigt wird, um das Netzwerk sicher zu halten. Um die Sicherheit und Dezentralisierung aufrechtzuerhalten, verbraucht Ethereum mit Proof-of-Work jährlich 73,2 TWh, was dem Energieäquivalent eines mittelgroßen Landes wie Österreich entspricht. + +## Vor- und Nachteile {#pros-and-cons} + +| Vorteile | Nachteile | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| Proof-of-Work ist neutral. Du brauchst keine ETH, um loszulegen, und die Blockbelohnungen erlauben dir von 0 ETH auf einen positiven Kontostand zu kommen. Für [Proof-of-Stake](/developers/docs/consensus-mechanisms/pos/) brauchst du zu Beginn ETH. | Proof-of-Work verbraucht so viel Energie, dass es schlecht für die Umwelt ist. | +| Proof-of-Work ist ein bewährter Konsensmechanismus, der Bitcoin und Ethereum seit vielen Jahren sicher und dezentralisiert macht. | Wenn du Mining betreiben willst, brauchst du eine so spezielle Ausrüstung, dass es eine große Investition ist, damit anzufangen. | +| Verglichen mit dem Proof-of-Stake ist es relativ einfach zu implementieren. | Da immer mehr Rechenleistung benötigt wird, könnten Mining-Pools das Mining-Geschäft dominieren, was zu Zentralisierung und Sicherheitsrisiken führt. | + +## Vergleich mit Proof-of-Stake {#compared-to-pos} + +Im Großen und Ganzen hat der Proof-of-Stake dasselbe Ziel wie der Proof-of-Work: dem dezentralen Netzwerk zu helfen, sicher einen Konsens zu erreichen. Aber er hat einige Unterschiede im Prozess und im Personal: + +- Der Proof-of-Stake hebt die Bedeutung der Rechenleistung für die eingesetzte ETH auf. +- Beim Proof-of-Stake werden die Miner durch Validatoren ersetzt. Validatoren setzen ihre ETH ein ("Staking"), um die Fähigkeit, neue Blöcke zu erstellen, zu aktivieren. +- Validatoren konkurrieren nicht um Blöcke, sondern werden zufällig durch einen Algorithmus ausgewählt. +- Die Endgültigkeit ist klarer: Wenn sich 2/3 der Prüfer/Prüferinnen an bestimmten Kontrollpunkten über den Zustand des Blocks einig sind, gilt er als endgültig. Die Validatoren müssen ihren gesamten Einsatz darauf setzen. Wenn sie also versuchen, sich abzusprechen, verlieren sie ihren gesamten Einsatz. + +[Mehr über Proof-of-Stake](/developers/docs/consensus-mechanisms/pos/) + +## Eher ein visueller Lerner? {#visual-learner} + + + +## Weiterführende Informationen {#further-reading} + +- [Mehrheitsangriff](https://en.bitcoin.it/wiki/Majority_attack) +- [Zur Endgültigkeit der Abrechnung](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) + +### Videos {#videos} + +- [Eine technische Erklärung von Proof-of-Work-Protokollen](https://youtu.be/9V1bipPkCTU) + +## Verwandte Themen {#related-topics} + +- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) +- [Proof-of-Stake](/developers/docs/consensus-mechanisms/pos/) diff --git a/src/content/translations/de/developers/docs/consensus-mechanisms/pow/mining/index.md b/src/content/translations/de/developers/docs/consensus-mechanisms/pow/mining/index.md new file mode 100644 index 00000000000..cc295f416a1 --- /dev/null +++ b/src/content/translations/de/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -0,0 +1,77 @@ +--- +title: Mining +description: Eine Erklärung, wie "Mining" in Ethereum funktioniert und wie es dazu beiträgt, Ethereum sicher und dezentral zu halten. +lang: de +sidebar: true +incomplete: true +--- + +## Voraussetzungen {#prerequisites} + +Um diese Seite besser zu verstehen, empfehlen wir dir, zuerst [Transaktionen](/developers/docs/transactions/), [Blöcke](/developers/docs/blocks/) und [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/) zu lesen. + +## Was ist Ethereum-Mining? {#what-is-ethereum-mining} + +Mining ist der Prozess zur Erstellung eines Blocks aus Transaktionen, der zur Ethereum-Blockchain hinzugefügt werden soll. + +Ethereum verwendet derzeit, genau wie Bitcoin, einen [Proof-of-Work (PoW)](/developers/docs/consensus-mechanisms/pow/)-Konsensmechanismus. Mining ist das Lebenselixier des Proof-of-Work. Ethereum-Miner (Computer, die eine Software ausführen) nutzen ihre Zeit und Rechenleistung zur Verarbeitung von Transaktionen und Erstellung von Blöcken. + + + Proof-of-Stake wird im Laufe des nächsten Jahres Mining und Proof-of-Work ersetzen. Du kannst schon heute mit dem Staking deiner ETH beginnen. Mehr zum Staking + + +## Warum gibt es Miner? {#why-do-miners-exist} + +In dezentralisierten Systemen wie Ethereum müssen wir sicherstellen, dass jeder mit der Reihenfolge der Transaktionen übereinstimmt. Miner helfen dabei, indem sie rechnerisch schwierige Puzzles lösen, um Blöcke zu erzeugen, welche als Möglichkeit dienen, das Netzwerk vor Angriffen zu schützen. + +[Mehr zum Proof-of-Work](/developers/docs/consensus-mechanisms/pow/) + +## Wer kann Miner bei Ethereum werden? {#who-can-become-a-miner} + +Technisch gesehen kann jeder mit seinem Computer im Ethereum-Netzwerk minen. Allerdings kann nicht jeder Ether (ETH) gewinnbringend minen. In den meisten Fällen müssen Miner spezielle Computerhardware kaufen, um gewinnbringend minen zu können. Zwar kann jeder die Mining-Software auf seinem Computer laufen lassen, doch ist es unwahrscheinlich, dass ein durchschnittlicher Computer genügend Blockprämien erwirtschaftet, um die mit dem Mining verbundenen Kosten zu decken. + +### Mining-Kosten {#cost-of-mining} + +- Mögliche Kosten für die Hardware, die für den Bau und die Wartung einer Mining-Anlage erforderlich ist +- Stromkosten für den Betrieb der Mining-Anlage +- Wenn Sie in einem Pool minen, erheben die Pools in der Regel eine pauschale Gebühr in Höhe eines Prozentsatzes jedes vom Pool erzeugten Blocks +- Mögliche Kosten für die Ausrüstung zur Unterstützung der Mining-Anlage (Belüftung, Energieüberwachung, elektrische Verkabelung usw.) + +Um die Rentabilität des Minings weiter zu erkunden, kannst du einen Mining-Rechner verwenden, wie ihn [Etherscan](https://etherscan.io/ether-mining-calculator) anbietet. + +## Wie Ethereum-Transaktionen gemint werden {#how-ethereum-transactions-are-mined} + +1. Ein Benutzer schreibt und signiert eine Anfrage für eine [Transaktion](/developers/docs/transactions/) mit seinem privaten Schlüssel von einem [Konto](/developers/docs/accounts/). +2. Der Benutzer überträgt die Transaktionsanfrage von einigen [Nodes](/developers/docs/nodes-and-clients/) an das gesamte Ethereum-Netzwerk. +3. Wenn sie von der neuen Transaktionsanfrage hören, fügen alle Nodes die Anfrage ihrem lokalen Mempool (eine Liste aller Transaktionsanfragen, die noch nicht an die Blockchain übertragen wurden, von denen sie gehört haben) hinzu. +4. Irgendwann fasst ein Mining-Node mehrere Dutzend oder Hundert Transaktionsanfragen in einem potenziellen [Block](/developers/docs/blocks/) zusammen, so dass die [Transaktionsentgelte](/developers/docs/gas/), die sie verdienen, maximiert werden, während sie unter dem Block-Ressourcen-Limit bleiben. Zu diesem Zeitpunkt tut der Mining-Node Folgendes: + 1. Er überprüft die Gültigkeit jeder Transaktionsanfrage (z. B. es versucht keiner, die Ether von einem Konto ohne Signatur zu transferieren, die Anfrage ist nicht fehlerhaft etc.), führt dann den Code der Anfrage aus und ändert den Status ihrer lokalen Kopie der EVM. Die Miner erhalten die Transaktionsentgelte für jede dieser Transaktionsanfragen auf ihr eigenes Konto. + 2. Startet den Prozess der Erstellung des Proof-of-Work "Nachweiszertifikat der Legitimität" für den potenziellen Block, sobald alle Transaktionsanfragen in dem Block verifiziert und in der lokalen EVM-Kopie ausgeführt wurden. +5. Letztendlich wird ein Miner ein Zertifikat für einen Block erstellen, der unsere spezifische Transaktionsanfrage enthält. Dieser Miner sendet dann den vollendeten Block, der das Zertifikat und eine Prüfsumme des beanspruchten neuen EVM-Status enthält. +6. Andere Nodes hören von dem neuen Block. Sie prüfen das Zertifikat, führen alle Transaktionen in dem Block selbst aus (einschließlich der ursprünglich von unserem Nutzer übermittelten Transaktion) und überprüfen, ob die Prüfsumme von ihrem neuem EVM-Status nach der Ausführung aller Transaktionen mit der Prüfsumme aus dem vom Miner-Block selbst behaupteten Status übereinstimmt. Nur dann fügen diese Nodes den Block an den Schwanz ihrer Blockchain an und akzeptieren den neuen EVM-Status als kanonischen Status. +7. Jeder Node entfernt alle Transaktionen in dem neuen Block aus seinem lokalen Mempool aus unerfüllten Transaktionsanfragen. +8. Neue Knoten, die dem Netzwerk beitreten, laden alle Blöcke in Reihenfolge herunter, einschließlich des Blocks mit der von uns vefolgten Transaktion. Sie initialisieren eine lokale EVM-Kopie (diese startet als ein leerer EVM-Status), gehen dann durch den Ausführungsprozess jeder Transaktion in jedem Block an der Spitze der lokalen EVM-Kopie und überprüfen dabei in jedem Block die Prüfsummenstatus. + +Jede Transaktion wird einmal gemint (einschließen in einen neuen Block und zum ersten Mal propagiert), aber von jedem Teilnehmer im Prozess der Weiterentwicklung des kanonischen EVM-Zustands mehrfach abgearbeitet und verifiziert. Dies hebt eines der wichtigsten Mantras der Blockchain hervor: **Vertraue nicht, prüfe!**. + +## Eine visuelle Demo {#a-visual-demo} + +Schaue zu, wie Austin dich durch Mining und die Proof-of-Work-Blockchain führt. + + + +## Weiterführende Informationen {#further-reading} + +- [Was bedeutet es, Ethereum zu minen?](https://docs.ethhub.io/using-ethereum/mining/) _EthHub_ + +## Verwandte Tools {#related-tools} + +- [Verwandte Themen](https://etherscan.io/stat/miner?range=7&blocktype=blocks) +- [Etherscan-Mining-Rechner](https://etherscan.io/ether-mining-calculator) +- [Minerstat-Mining-Rechner](https://minerstat.com/coin/ETH) + +## Verwandte Themen {#related-topics} + +- [Gas](/developers/docs/gas/) +- [EVM](/developers/docs/evm/) +- [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/) diff --git a/src/content/translations/de/developers/docs/dapps/index.md b/src/content/translations/de/developers/docs/dapps/index.md new file mode 100644 index 00000000000..83a103133b1 --- /dev/null +++ b/src/content/translations/de/developers/docs/dapps/index.md @@ -0,0 +1,83 @@ +--- +title: Einführung in Dapps +description: +lang: de +sidebar: true +--- + +Eine dezentralisierte Anwendung ([engl.] decentralized application, dapp) ist eine Anwendung, die auf einem dezentralisierten Netzwerk aufgebaut ist. Dies kombiniert einen [Smart Contract](/developers/docs/smart-contracts/) und eine Frontend-Benutzeroberfläche. Beachte, dass Smart Contracts in Ethereum zugänglich und transparent sind – wie offene APIs –, also kann deine Dapp sogar einen Smart Contract enthalten, den eine andere Person geschrieben hat. + +## Voraussetzungen {#prerequisites} + +Bevor du mehr über Dapps lernst, solltest du die [Blockchain-Basics](/developers/docs/intro-to-ethereum/) kennen und dir durchlesen, was das Ethereum-Netzwerk ist und wie es dezentralisiert wird. + +## Definition einer Dapp {#definition-of-a-dapp} + +Eine Dapp hat ihren Backend-Code auf einem dezentralisierten Peer-to-Peer-Netzwerk laufen. Vergleiche das mit einer App, bei der der Backend-Code auf dezentralisierten Servern läuft. + +Eine Dapp kann Frontend-Code und eine Benutzeroberfläche in jeder beliebigen Sprache haben (genau wie eine App), die Aufrufe in ihrem Backend tätigen können. Darüber hinaus kann das Frontend auf dezentralisiertem Speicher wie [IPFS](https://ipfs.io/) gehostet werden. + +- **Dezentralisiert** – Dapps arbeiten auf Ethereum, einer offenen, öffentlichen und dezentralen Plattform, auf der keine Person oder Gruppe die Kontrolle hat. +- **Deterministisch** – Dapps führen dieselbe Funktion aus, unabhängig von der Umgebung, in der sie ausgeführt werden. +- **Turing-Vollständigkeit** – Dapps können jede Aktion ausführen, wenn die erforderlichen Ressourcen vorhanden sind. +- **Isoliert** – Dapps werden in einer virtuellen Umgebung ausgeführt, die als Ethereum Virtual Machine bekannt ist, so dass ein Fehler im Smart Contract die normale Funktion des Blockchain-Netzwerks nicht beeinträchtigt. + +### Smart Contracts {#on-smart-contracts} + +Um Dapps einzuführen, müssen wir auch Smart Contracts vorstellen – das Backend einer Dapp. Einen detaillierten Überblick findest du in unserem Abschnitt über [Smart Contracts](/developers/docs/smart-contracts/). + +Ein Smart Contract ist ein Code, der auf der Ethereum-Blockchain existiert und genau wie programmiert abläuft. Sobald Smart Contracts im Netzwerk eingesetzt werden, kannst du sie nicht mehr ändern. Dapps können dezentralisiert sein, weil sie von der Logik kontrolliert werden, die in den Vertrag geschrieben ist, und nicht von einem Individuum oder einem Unternehmen. Das bedeutet auch, dass du deine Verträge sehr sorgfältig gestalten und gründlich testen musst. + +## Vorteile der Dapp-Entwicklung {#benefits-of-dapp-development} + +- **Zero downtime** - Sobald der Smart Contract auf der Blockchain implementiert ist, kann das gesamte Netzwerk jederzeit Kunden bedienen, die mit dem Vertrag interagieren wollen. Böswillige Akteure können daher keine "Denial-of-Service"-Angriffe starten, die auf einzelne Dapps abzielen. +- **Privatsphäre** – Du musst keine echte Identität zur Verfügung stellen, um eine Dapp bereitzustellen oder mit einer zu interagieren. +- **Resistenz gegen Zensur** - keine einzige Entität im Netzwerk kann Benutzer daran hindern, Transaktionen zu übertragen, Dapps bereitzustellen oder Daten der Blockchain auszulesen. +- **Komplette Datenintegrität** – Daten, die auf der Blockchain gespeichert sind, sind unveränderbar und unbestreitbar, dank kryptographischer Primitivität. Böswillige Akteure können keine Transaktionen oder andere Daten, die bereits öffentlich gemacht wurden, fälschen. +- **Vertrauenslose Berechnung/überprüfbares Verhalten** – Smart Contracts können analysiert werden und garantieren, dass sie auf vorhersehbare Weise ausgeführt werden, ohne dass man einer zentralen Autorität vertrauen muss. Das ist bei traditionellen Modellen nicht der Fall. Wenn wir zum Beispiel Online-Banking-Systeme nutzen, müssen wir darauf vertrauen, dass die Finanzinstitute unsere Finanzdaten nicht missbrauchen, keine Aufzeichnungen manipulieren und uns nicht hacken. + +## Nachteile der Dapp-Entwicklung {#drawbacks-of-dapp-development} + +- **Wartung** – Dapps können schwieriger zu warten sein, weil der Code und die Daten, die auf der Blockchain veröffentlicht werden, schwerer zu ändern sind. Für Entwickler ist es schwierig ihre Dapps (oder die zugrunde liegenden Daten, die von einer Dapp gespeichert werden) zu aktualisieren, sobald sie bereitgestellt wurden, selbst wenn in einer alten Version Fehler oder Sicherheitsrisiken festgestellt werden. +- **Performance-Overhead** – Es gibt einen enormen Performance-Overhead und die Skalierung ist sehr schwierig. Um den Grad an Sicherheit, Integrität, Transparenz und Zuverlässigkeit zu erreichen, den Ethereum anstrebt, führt jeder Node jede Transaktion aus und speichert sie. Darüber hinaus benötigt Proof-of-Work auch Zeit. Eine "Back-of-the-Envelope"-Rechnung setzt den Leistungsaufwand auf etwa das 1.000.000-Fache der Standardrechnung. +- **Netzüberlastung** – Wenn eine Dapp zu viele Rechenressourcen verbraucht, gerät das gesamte Netzwerk ins Stocken. Derzeit kann das Netzwerk nur etwa 10 bis 15 Transaktionen pro Sekunde verarbeiten; wenn Transaktionen schneller eingehen, kann der Pool an unbestätigten Transaktionen schnell anschwellen. +- **Benutzererfahrung** – Es könnte schwieriger sein, eine benutzerfreundliche Erfahrung zu entwickeln, weil es für den durchschnittlichen Endbenutzer zu schwer sein könnte, die notwendigen Tools für eine wirklich sichere Interaktion mit der Blockchain einzurichten. +- **Zentralisierung** – Benutzer- und entwicklerfreundliche Lösungen, die auf der Basisschicht von Ethereum aufgebaut sind, könnten am Ende ohnehin wie zentralisierte Dienste aussehen. Solche Dienste können zum Beispiel Schlüssel oder andere sensible Informationen serverseitig speichern, ein Frontend über einen zentralen Server bedienen oder wichtige Geschäftslogik auf einem zentralen Server ausführen, bevor sie in die Blockchain geschrieben werden. Durch die Zentralisierung werden viele (wenn nicht alle) Vorteile der Blockchain gegenüber dem traditionellen Modell aufgehoben. + +## Eher ein visueller Lerner? {#visual-learner} + + + +## Werkzeuge für das Erstellen von Dapps {#dapp-tools} + +**Scaffold-ETH _- Experimentiere schnell mit Solidity, indem du ein Frontend verwendest, das sich an deinen Smart Contract anpasst._** + +- [GitHub](https://github.com/austintgriffith/scaffold-eth) +- [Beispiel-Dapp](https://punkwallet.io/) + +**Eth App erstellen _– Erstelle Ethereum-gestützte Apps mit einem Befehl._** + +- [GitHub](https://github.com/paulrberg/create-eth-app) + +**One Click Dapp _– FOSS-Tool zur Erstellung von Dapp-Frontends aus einer [ABI](/glossary/#abi)._** + +- [oneclickdapp.com](https://oneclickdapp.com) +- [GitHub](https://github.com/oneclickdapp/oneclickdapp-v1) + +**Etherflow _– FOSS-Tool für Ethereum-Entwickler, um ihre Nodes zu testen und RPC-Aufrufe vom Browser aus zu komponieren und zu debuggen._** + +- [etherflow.quiknode.io](https://etherflow.quiknode.io/) +- [GitHub](https://github.com/abunsen/etherflow) + +## Weiterführende Informationen {#further-reading} + +- [Die Architektur einer Web 3.0 Anwendung](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) – _Preethi Kasireddy_ +- [Ein Leitfaden für dezentrale Anwendungen aus dem Jahr 2021](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) – _LimeChain_ +- [Was sind dezentrale Apps?](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) – _Gemini_ + +_Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!_ + +## Verwandte Themen {#related-topics} + +- [Eine Anleitung zum Ethereum-Stack](/developers/docs/ethereum-stack/) +- [Entwicklungs-Frameworks](/developers/docs/frameworks/) diff --git a/src/content/translations/de/developers/docs/evm/index.md b/src/content/translations/de/developers/docs/evm/index.md new file mode 100644 index 00000000000..b8f79f98d59 --- /dev/null +++ b/src/content/translations/de/developers/docs/evm/index.md @@ -0,0 +1,80 @@ +--- +title: Ethereum Virtual Machine (EVM) +description: Eine Einführung in die virtuelle Maschine von Ethereum und wie sie sich auf Zustand, Transaktionen und Smart Contracts bezieht. +lang: de +sidebar: true +--- + +Die physische Überschreibung der EVM kann nicht auf dieselbe Weise beschrieben werden, wie eine Wolke oder Ozeanwelle. Sie _existiert_ vielmehr als eine zusammenhängende Einheit, die von tausenden verbundenen Computern, die einen Ethereum-Client laufen lassen, aufrechterhalten wird. + +Das Ethereum-Protokoll selbst besteht ausschließlich zu dem Zweck, den kontinuierlichen, ununterbrochenen und unveränderlichen Betrieb dieser speziellen Zustandsmaschine aufrechtzuerhalten. Es ist das Umfeld, in dem alle Ethereum-Konten und Smart Contracts existieren. Bei jedem Block in der Kette hat Ethereum genau einen "kanonischen" Zustand und die EVM definiert die Regeln für die Berechnung eines neuen gültigen Zustands von Block zu Block. + +## Voraussetzungen {#prerequisites} + +Um den EVM zu verstehen, sind ein paar grundlegende Kenntnisse der gängigen Informatikterminologie wie [Bytes](https://wikipedia.org/wiki/Byte), [Speicher](https://wikipedia.org/wiki/Computer_memory) und [Stack]() notwendig. Es wäre auch hilfreich, wenn du dich mit Kryptografie-/Blockchain-Konzepten wie [Hash-Funktionen](https://wikipedia.org/wiki/Cryptographic_hash_function), [Proof-of-Work](https://wikipedia.org/wiki/Proof_of_work) und dem [Merkle-Baum](https://wikipedia.org/wiki/Merkle_tree) auskennst. + +## Vom Ledger zur Zustandsmaschine {#from-ledger-to-state-machine} + +Die Analogie eines 'verteilten Schalters' wird oft verwendet, um Blockchains wie Bitcoin zu beschreiben, die eine dezentrale Währung mit grundlegenden Tools der Kryptographie ermöglichen. Eine Kryptowährung verhält sich wie eine "normale" Währung, da es Regeln gibt, die bestimmen, was man tun kann und was nicht, um den Ledger zu verändern. Zum Beispiel kann eine Bitcoin-Adresse nicht mehr Bitcoin ausgeben, als sie zuvor erhalten hat. Diese Regeln untermauern alle Transaktionen auf Bitcoin und vielen anderen Blockchains. + +Während Ethereum seine eigene native Kryptowährung (Ether) hat, die fast genau den gleichen intuitiven Regeln folgt, ermöglicht es auch eine wesentlich leistungsfähigere Funktion: [Smart Contracts](/developers/docs/smart-contracts/). Für diese komplexere Funktion ist eine ausgeklügeltere Analogie erforderlich. Anstelle eines verteilten Ledgers ist Ethereum eine verteilte [Zustandsmaschine](https://wikipedia.org/wiki/Finite-state_machine). Ethereums Zustand ist eine große Datenstruktur, die nicht nur alle Konten und Kontostände enthält, sondern einen _Maschinenzustand_, der nach einer vordefinierten Reihe von Regeln von Block zu Block wechselt und beliebigen Maschinencode ausführen kann. Die spezifischen Regeln für das Ändern des Zustands von Block zu Block werden vom EVM definiert. + +![Ein Diagramm, das die Funktionsweise eines Kontos zeigt](./evm.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## Ethereum-Zustandsübergangsfunktion {#the-ethereum-state-transition-function} + +Die EVM verhält sich wie eine mathematische Funktion: Mit einer Eingabe, erzeugt sie eine deterministische Ausgabe. Folglich ist es sehr hilfreich, Ethereum formaler als eine **Zustandsübergangsfunktion** enthaltend zu beschreiben: + +``` +Y(S, T)= S' +``` + +Bei einem alten gültigen Zustand `(S)` und einem neuen Satz gültiger Transaktionen `(T)` erzeugt die Ethereum-Statusübergangsfunktion `Y(S, T)` einen neuen gültigen Ausgabezustand `S'`. + +### Zustand {#state} + +Im Rahmen von Ethereum ist der Zustand eine enorme Datenstruktur, die eine [ modifizierte Merkle-Patricia-Trie](https://eth.wiki/en/fundamentals/patricia-tree) genannt wird, die alle [Konten](/developers/docs/accounts/) durch Hashes verbunden hält und mit einem einzigen Root-Hash in der Blockchain abrufbar ist. + +### Transaktionen {#transactions} + +Transaktionen sind kryptographisch signierte Anweisungen von Konten. Es gibt zwei Arten von Transaktionen: solche, die zu Nachrichtenanrufen führen, und solche, die zur Erstellung von Verträgen führen. + +Die Erstellung von Verträgen führt zur Erstellung eines neuen Vertragskontos mit zusammengestelltem [Smart-Contract](/developers/docs/smart-contracts/anatomy/)-Bytecode. Immer wenn ein anderes Konto einen Nachrichtenaufruf an diesen Vertrag stellt, führt es seinen Bytecode aus. + +## EVM-Anweisungen {#evm-instructions} + +Die EVM wird als [Stackmaschine](https://wikipedia.org/wiki/Stack_machine) mit einer Tiefe von 1024 Artikeln ausgeführt. Jedes Element ist ein 256-Bit-Wort, das für die einfache Verwendung mit 256-Bit-Kryptographie (wie Keccak-256-Hashes oder secp256k1-Signaturen) gewählt wurde. + +Während der Ausführung behält die EVM einen transienten _-Speicher_ (als wortadressiertes Byte-Array), der zwischen Transaktionen nicht vorhanden ist. + +Verträge enthalten jedoch eine Merkle-Patricia*-Speicher*-Trie (als wortadressierbares Wort-Array), mit der das betreffende Konto und ein Teil des globalen Zustands verbunden sind. + +Kompilierter Smart-Contract-Bytecode wird als eine Anzahl von EVM-[Opcodes ausgeführt](/developers/docs/evm/opcodes), die standardmäßige Stackoperationen wie `XOR`, `UND`, `ADD`, `SUB` etc. ausführen. Die EVM implementiert auch eine Reihe von Blockchain-spezifischen Stack-Operationen, wie `ADDRESS`, `BALANCE`, `BLOCKHASH` usw. + +![Ein Diagramm, das zeigt, wo Gas im EVM-Betrieb benötigt wird](../gas/gas.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## EVM-Implementierungen {#evm-implementations} + +Alle Implementierungen der EVM müssen sich nach der im Yellowpaper von Ethereum beschriebenen Spezifikation richten. + +Während der fünfjährigen Geschichte von Ethereum hat die EVM mehrere Revisionen durchlaufen und es gibt mehrere Implementierungen der EVM in verschiedenen Programmiersprachen. + +Alle [Ethereum-Clients](/developers/docs/nodes-and-clients/#execution-clients) enthalten eine EVM-Implementierung. Zusätzlich gibt es mehrere Standalone-Implementierungen, einschließlich: + +- [Py-EVM](https://github.com/ethereum/py-evm) - _Python_ +- [evmone](https://github.com/ethereum/evmone) - _C++_ +- [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _JavaScript_ +- [eEVM](https://github.com/microsoft/eevm) - _C++_ +- [Hyperledger Burrow](https://github.com/hyperledger/burrow) - _Go_ + +## Weiterführende Informationen {#further-reading} + +- [Ethereum Yellowpaper](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Jellopaper aka KEVM: Semantics of EVM in K](https://jellopaper.org/) +- [The Beigepaper](https://github.com/chronaeon/beigepaper) +- [Opcodes der virtuellen Maschine von Ethereum](https://www.ethervm.io/) +- [Eine kurze Einführung in die Dokumentation von Solidity](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) + +## Verwandte Themen {#related-topics} + +- [Gas](/developers/docs/gas/) diff --git a/src/content/translations/de/developers/docs/gas/index.md b/src/content/translations/de/developers/docs/gas/index.md new file mode 100644 index 00000000000..aac820be27c --- /dev/null +++ b/src/content/translations/de/developers/docs/gas/index.md @@ -0,0 +1,171 @@ +--- +title: Gas und Gebühren +description: +lang: de +sidebar: true +--- + +Gas ist für das Ethereum-Netzwerk unerlässlich. Es ist der Treibstoff, der Ethereum den Betrieb ermöglicht, so wie ein Auto Benzin braucht, um zu fahren. + +## Voraussetzungen {#prerequisites} + +Um diese Seite besser zu verstehen, empfehlen wir dir, zuerst [Transaktionen](/developers/docs/transactions/) und [Blöcke](/developers/docs/evm/) zu lesen. + +## Was ist Gas? {#what-is-gas} + +Gas bezieht sich auf die Einheit, die den Umfang des Rechenaufwands misst, der für die Durchführung spezifischer Operationen im Ethereum-Netzwerk erforderlich ist. + +Da jede Ethereum-Transaktion Rechenressourcen benötigt, um ausgeführt zu werden, wird für jede Transaktion eine Gebühr fällig. Gas bezieht sich auf die Gebühr, die erforderlich ist, um eine Transaktion auf Ethereum erfolgreich durchzuführen. + +![Ein Diagramm, das zeigt, wo Gas im EVM-Betrieb benötigt wird](./gas.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Im Wesentlichen werden Gasgebühren in Ethereums Eigenwährung, Ether (ETH) gezahlt. Die Gaspreise sind in Gwei angegeben, was selbst eine Bezeichnung für ETH ist. Jeder Gwei ist gleich 0,00000001 ETH (10-9 ETH). Anstatt z. B. zu sagen, dass dein Gas 0,000000001 Ether kostet, kannst du sagen, dass dein Gas 1 Gwei kostet. Das Wort "gwei" selbst bedeutet "giga-wei" und entspricht 1.000.000.000 wei. Wei selbst (benannt nach [Wei Dai](https://wikipedia.org/wiki/Wei_Dai), dem Erfinder von [B-Geld](https://www.investopedia.com/terms/b/bmoney.asp)) ist die kleinste Einheit von ETH. + +## Vor dem London-Upgrade {#pre-london} + +Die Art und Weise, wie die Transaktionsgebühren im Ethereum-Netzwerk berechnet wurden, änderte sich mit dem [London-Upgrade](/history/#london) vom August 2021. Hier ist eine Zusammenfassung, wie die Dinge früher funktionierten: + +Nehmen wir an, Alice müsste Bob 1 ETH zahlen. Bei der Transaktion liegt das Gaslimit bei 21.000 Einheiten und der Gaspreis bei 200 gwei. + +Die Gesamtgebühr wäre gewesen: `Gaseinheiten (Limit) * Gaspreis pro Einheit`, d. h. `21.000 * 200 = 4.200.000 gwei` oder 0,0042 ETH. + +Wenn Alice das Geld schickt, werden 1,0042 ETH von ihrem Konto abgezogen. Bob würden 1,0000 ETH gutgeschrieben werden. Der Miner würde 0,0042 ETH erhalten. + +Dieses Video bietet einen kurzen Überblick über Gas und warum es existiert: + + + +## Nach dem London-Upgrade {#post-london} + +[Das London-Upgrade](/history/#london) wurde am 5. August 2021 eingeführt, um Transaktionen auf Ethereum für die Nutzer berechenbarer zu machen, indem der Transaktionsgebühren-Mechanismus von Ethereum überarbeitet wurde. Zu den wichtigsten Vorteilen dieser Änderung gehören eine bessere Schätzung der Transaktionsgebühren, eine allgemein schnellere Aufnahme von Transaktionen und die Kompensation der ETH-Ausgabe durch das Verbrennen eines Prozentsatzes der Transaktionsgebühren. + +Seit dem Upgrade des Londoner Netzes gibt es für jeden Block eine Grundgebühr, den Mindestpreis pro Gaseinheit für die Aufnahme in diesen Block, der vom Netz auf der Grundlage der Nachfrage nach Blockraum berechnet wird. Da die Grundgebühr der Transaktionsgebühr verbrannt wird, wird von den Nutzern erwartet, dass sie bei ihren Transaktionen auch ein Trinkgeld (Prioritätsgebühr) festlegen. Das Trinkgeld entschädigt die Miner für die Ausführung und Weitergabe von Nutzertransaktionen in Blöcken und wird voraussichtlich von den meisten Wallets automatisch festgelegt. + +Die Berechnung der gesamten Transaktionsgebühr funktioniert wie folgt: `Gaseinheiten (Limit) * (Grundgebühr + Trinkgeld)` + +Sagen wir, Jordan muss Taylor 1 ETH zahlen. Bei der Transaktion liegt das Gaslimit bei 21.000 Einheiten und die Grundgebühr bei 100 gwei. Jordan enthält ein Trinkgeld von 10 gwei. + +Mit der obigen Formel können wir dies als `21.000 * (100 + 10) = 2.310.000 gwei` oder 0,00231 ETH berechnen. + +Wenn Jordan das Geld schickt, werden 1,00231 ETH von seinem Konto abgezogen. Taylor werden 1,0000 ETH gutgeschrieben. Der Miner erhält das Trinkgeld von 0,00021 ETH. Die Grundgebühr von 0,0021 ETH wird verbrannt. + +Zusätzlich kann Jordan auch eine maximale Gebühr (`maxFeePerGas`) für die Transaktion festlegen. Die Differenz zwischen der Höchstgebühr und der tatsächlichen Gebühr wird Jordan zurückerstattet, d. h. `Erstattung = Höchstgebühr - (Grundgebühr + Prioritätsgebühr)`. Jordan kann einen Höchstbetrag für die Ausführung der Transaktion festlegen und muss sich keine Sorgen machen, dass er "über" die Grundgebühr hinaus zahlt, wenn die Transaktion ausgeführt wird. + +### Blockgröße {#block-size} + +Vor dem London-Upgrade hatte Ethereum Blöcke mit fester Größe. In Zeiten hoher Netznachfrage waren diese voll ausgelastet. Infolgedessen mussten die Nutzer/Nutzerinnen oft warten, bis die hohe Nachfrage nachließ, um in einen Block aufgenommen zu werden, was zu einem schlechten Nutzererlebnis führte. + +Mit dem London-Upgrade wurden in Ethereum Blöcke mit variabler Größe eingeführt. Jeder Block hat eine Zielgröße von 15 Millionen Gas, aber die Größe der Blöcke wird entsprechend der Netznachfrage erhöht oder verringert, bis zur Blockgrenze von 30 Millionen Gas (2x die Zielblockgröße). Das Protokoll erreicht durch den Prozess des _Tâtonnement_ eine gleichgewichtige Blockgröße von durchschnittlich 15 Millionen. Das heißt, wenn die Blockgröße die Zielblockgröße übersteigt, erhöht das Protokoll die Grundgebühr für den folgenden Block. Ebenso senkt das Protokoll die Grundgebühr, wenn die Blockgröße kleiner als die Zielblockgröße ist. Der Betrag, um den die Grundgebühr angepasst wird, ist proportional dazu, wie weit die aktuelle Blockgröße vom Zielwert entfernt ist. [Mehr über Blöcke](/developers/docs/blocks/). + +### Grundgebühr {#base-fee} + +Jeder Block hat eine Grundgebühr, die als Reservepreis dient. Um in einen Block aufgenommen zu werden, muss der angebotene Preis pro Gas mindestens der Grundgebühr entsprechen. Die Grundgebühr wird unabhängig vom aktuellen Block berechnet und richtet sich stattdessen nach den vorherigen Blöcken. Das macht die Transaktionsgebühren für die Nutzer/Nutzerinnen berechenbarer. Wenn der Block abgebaut wird, wird diese Grundgebühr "verbrannt" und aus dem Verkehr gezogen. + +Die Grundgebühr wird anhand einer Formel berechnet, die die Größe des vorherigen Blocks (die für alle Transaktionen verwendete Gasmenge) mit der Zielgröße vergleicht. Die Grundgebühr erhöht sich um maximal 12,5 % pro Block, wenn die Zielblockgröße überschritten wird. Dieses exponentielle Wachstum macht es wirtschaftlich unrentabel, die Blockgröße unbegrenzt hoch zu halten. + +| Blocknummer | Enthaltenes Gas | Gebührenerhöhung | Aktuelle Grundgebühr | +| ----------- | --------------: | ---------------: | -------------------: | +| 1 | 15 m | 0 % | 100 gwei | +| 2 | 30 m | 0 % | 100 gwei | +| 3 | 30 m | 12,5 % | 112,5 gwei | +| 4 | 30 m | 12,5 % | 126,6 gwei | +| 5 | 30 m | 12,5 % | 142,4 gwei | +| 6 | 30 m | 12,5 % | 160,2 gwei | +| 7 | 30 m | 12,5 % | 180,2 gwei | +| 8 | 30 m | 12,5 % | 202,7 gwei | + +Im Vergleich zum Markt vor der Londoner Gasauktion führt diese Änderung des Transaktionsgebühren-Mechanismus dazu, dass die Gebührenvorhersage zuverlässiger ist. Der obigen Tabelle folgend, um eine Transaktion auf Block Nummer 9 zu erstellen, wird eine Wallet den Nutzer mit Sicherheit wissen lassen, dass die **maximale Grundgebühr**, die zum nächsten Block hinzugefügt werden soll, `aktuelle Grundgebühr * 112,5%` oder `202,8 gwei * 112,5% = 228,1 gwei` ist. + +Außerdem ist es unwahrscheinlich, dass wir längere Spitzen von vollen Blöcken sehen werden, weil die Grundgebühr bei einem vollen Block so schnell steigt. + +| Blocknummer | Enthaltenes Gas | Gebührenerhöhung | Aktuelle Grundgebühr | +| ----------- | --------------: | ---------------: | -------------------: | +| 30 | 30 m | 12,5 % | 2705,6 gwei | +| ... | ... | 12,5 % | ... | +| 50 | 30 m | 12,5 % | 28531,3 gwei | +| ... | ... | 12,5 % | ... | +| 100 | 30 m | 12,5 % | 10302608,6 gwei | + +### Prioritätsgebühr (Trinkgeld) {#priority-fee} + +Vor dem London-Upgrade erhielten die Miner die gesamte Gasgebühr für jede in einem Block enthaltene Transaktion. + +Da die neue Grundgebühr verbrannt wurde, führte das London-Upgrade eine Prioritätsgebühr (Trinkgeld) ein, um Minern einen Anreiz zu geben, eine Transaktion in den Block aufzunehmen. Ohne Trinkgelder würde es sich für Miner lohnen, leere Blöcke abzubauen, da sie die gleiche Blockbelohnung erhalten würden. Unter normalen Bedingungen bietet ein kleines Trinkgeld den Minern einen minimalen Anreiz, eine Transaktion durchzuführen. Für Transaktionen, die vor anderen Transaktionen im selben Block bevorzugt ausgeführt werden müssen, ist ein höheres Trinkgeld notwendig, um konkurrierende Transaktionen zu überbieten. + +### Maximale Gebühr {#maxfee} + +Um eine Transaktion im Netzwerk auszuführen, können Nutzer/Nutzerinnen ein maximales Limit angeben, das sie bereit sind, für die Ausführung ihrer Transaktion zu zahlen. Dieser optionale Parameter ist als `maxFeePerGas` bekannt. Damit eine Transaktion ausgeführt werden kann, muss die maximale Gebühr die Summe aus der Grundgebühr und dem Trinkgeld übersteigen. Der Absender der Transaktion erhält die Differenz zwischen der maximalen Gebühr und der Summe aus Grundgebühr und Trinkgeld zurück. + +### Berechnung der Gebühren {#calculating-fees} + +Einer der Hauptvorteile des London-Upgrades ist die Verbesserung der Benutzererfahrung bei der Festlegung der Transaktionsgebühren. Bei Wallets, die das Upgrade unterstützen, geben die Wallet-Anbieter nicht mehr explizit an, wie viel du bereit bist, für deine Transaktion zu zahlen, sondern legen automatisch eine empfohlene Transaktionsgebühr fest (Grundgebühr + empfohlene Prioritätsgebühr), um die Komplexität für ihre Nutzer zu reduzieren. + +## EIP-1559 {#eip-1559} + +Die Implementierung der [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) im London-Upgrade hat den Mechanismus der Transaktionsgebühren komplexer gemacht als die vorherige Gaspreisauktion. Dies hat aber den Vorteil, dass die Gasgebühren berechenbarer sind, was zu einem effizienteren Markt für Transaktionsgebühren führt. Nutzer können Transaktionen mit einem `maxFeePerGas` einreichen, der angibt, wie viel sie bereit sind, für die Ausführung der Transaktion zu zahlen. Dabei können sie sicher sein, dass sie nicht mehr als den Marktpreis für Gas (`baseFeePerGas`) zahlen und alles, was darüber hinausgeht, abzüglich ihres Trinkgelds zurückerstattet bekommen. + +Dieses Video erklärt EIP-1559 und die Vorteile, die es bringt: + + + +Wenn du interessiert bist, kannst du hier die genauen [EIP-1559 Spezifikationen](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) nachlesen. + +Gehe mit diesem Link weiter in den Kaninchenbau hinein: [EIP-1559 Resources](https://hackmd.io/@timbeiko/1559-resources). + +## Warum gibt es Gasgebühren? {#why-do-gas-fees-exist} + +Kurzum: Gasgebühren helfen dabei, das Ethereum-Netz sicher zu halten. Indem wir für jede Berechnung, die im Netzwerk ausgeführt wird, eine Gebühr verlangen, verhindern wir, dass schlechte Akteure das Netzwerk spammen. Um versehentliche oder feindliche Endlosschleifen oder andere Rechenverschwendung in Code zu vermeiden, muss jede Transaktion eine Grenze für die Anzahl der Rechenschritte festlegen, die sie zur Codeausführung verwenden kann. Die Grundeinheit der Berechnung ist "Gas". + +Auch wenn eine Transaktion ein Limit beinhaltet, wird jedes nicht verbrauchte Gas an den Nutzer zurückgegeben (d. h. `max fee - (base fee + tip)` wird zurückgegeben). + +![Ein Diagramm, das zeigt, wie ungenutztes Gas zurückerstattet wird](../transactions/gas-tx.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## Was ist das Gaslimit? {#what-is-gas-limit} + +Das Gaslimit bezieht sich auf die maximale Menge an Gas, die du bei einer Transaktion verbrauchen möchtest. Kompliziertere Transaktionen mit [smarten Verträgen](/developers/docs/smart-contracts/) erfordern mehr Rechenarbeit und damit ein höheres Gaslimit als eine einfache Zahlung. Ein Standard-ETH-Transfer erfordert ein Gaslimit von 21.000 Gaseinheiten. + +Wenn du zum Beispiel ein Gaslimit von 50.000 für einen einfachen ETH-Transfer festlegen würdest, würde die EVM 21.000 verbrauchen und du würdest die restlichen 29.000 zurückbekommen. Wenn du jedoch zu wenig Gas angibst, z. B. ein Gaslimit von 20.000 für einen einfachen ETH-Transfer, wird die EVM deine 20.000 Gaseinheiten verbrauchen und versuchen, die Transaktion durchzuführen, aber sie wird nicht abgeschlossen. Die EVM macht dann alle Änderungen rückgängig, aber da der Miner bereits Arbeit im Wert von 20.000 Gaseinheiten geleistet hat, ist dieses Gas verbraucht. + +## Warum können die Gasgebühren so hoch sein? {#why-can-gas-fees-get-so-high} + +Die hohen Gasgebühren sind auf die Beliebtheit von Ethereum zurückzuführen. Für jede Operation auf Ethereum muss Gas verbraucht werden, und der Gasplatz ist pro Block begrenzt. Zu den Gebühren gehören Berechnungen, das Speichern oder Verarbeiten von Daten oder die Übertragung von Token, die unterschiedliche Mengen von "Gas"-Einheiten verbrauchen. Je komplexer die Funktionalität einer App wird, desto mehr Operationen führt ein Smart Contract aus, was bedeutet, dass jede Transaktion mehr Platz in einem Block begrenzter Größe einnimmt. Wenn die Nachfrage zu groß ist, müssen die Nutzer/Nutzerinnen einen höheren Trinkgeldbetrag anbieten, um zu versuchen, die Transaktionen anderer Nutzer/Nutzerinnen zu überbieten. Ein höheres Trinkgeld kann die Wahrscheinlichkeit erhöhen, dass deine Transaktion in den nächsten Block gelangt. + +Wie viel wir für eine bestimmte Transaktion bezahlen müssen, wird nicht allein durch den Gaspreis bestimmt. Um die Transaktionsgebühr zu berechnen, müssen wir das verbrauchte Gas mit der Transaktionsgebühr multiplizieren, die in gwei gemessen wird. + +## Initiativen zur Senkung der Gaskosten {#initiatives-to-reduce-gas-costs} + +Die Ethereum-[Skalierbarkeits-Upgrades](/upgrades/) sollten letztendlich einige der Probleme mit den Gasgebühren lösen, was wiederum die Plattform in die Lage versetzen wird, Tausende von Transaktionen pro Sekunde zu verarbeiten und global zu skalieren. + +Die Skalierung auf Layer 2 ist eine der wichtigsten Initiativen, um die Gaskosten, das Nutzererlebnis und die Skalierbarkeit deutlich zu verbessern. [Mehr zur Skalierung mit Layer 2](/developers/docs/scaling/#layer-2-scaling) + +Das neue Proof-of-Stake-Modell, das auf der Beacon Chain eingeführt wurde, soll den hohen Stromverbrauch und die Abhängigkeit von spezieller Hardware reduzieren. Diese Kette wird es dem dezentralen Ethereum-Netzwerk ermöglichen, sich zu verständigen und das Netzwerk sicher zu halten, während der Energieverbrauch begrenzt wird, indem stattdessen ein finanzielles Commitment verlangt wird. + +Jeder, der mindestens 32 ETH besitzt, kann diese einsetzen, um ein Validator zu werden, welcher für die Verarbeitung von Transaktionen, die Validierung von Blöcken und das Vorschlagen neuer Blöcke für die Kette verantwortlich ist. Nutzer mit weniger als 32 ETH können an Staking-Pools teilnehmen. + +## Strategien zur Senkung der Gaskosten {#strategies-for-you-to-reduce-gas-costs} + +Wenn du die Gaskosten für deine ETH senken willst, kannst du ein Trinkgeld setzen, um die Prioritätsstufe deiner Transaktion anzugeben. Die Miner werden Transaktionen mit einem höheren Trinkgeld pro Gas "bearbeiten" und ausführen, da sie die von dir gezahlten Trinkgelder behalten können und weniger geneigt sind, Transaktionen mit niedrigeren Trinkgeldern auszuführen. + +Wenn du die Gaspreise überwachen willst, damit du deine ETH günstiger verschicken kannst, kannst du viele verschiedene Tools nutzen, wie z. B.: + +- [Etherscan](https://etherscan.io/gastracker) _Transaktionsgaspreis-Schätzer_ +- [Blocknative ETH Gas Estimator](https://chrome.google.com/webstore/detail/blocknative-eth-gas-estim/ablbagjepecncofimgjmdpnhnfjiecfm) _Gasschätzungs-Chrome-Erweiterung, die sowohl Typ 0 Legacy-Transaktionen als auch Typ 2 EIP-1559-Transaktionen unterstützt_ + +- [ETH-Tankstelle](https://ethgasstation.info/) _Verbraucherorientierte Metriken für den Ethereum-Gasmarkt _ +- [Cryptoneur-Gasgebührenrechner](https://www.cryptoneur.xyz/gas-fees-calculator) _Berechnen Sie Gasgebühren in Ihrer lokalen Währung für verschiedene Transaktionsarten im Mainnet, Arbitrum und Polygon._ + +## Verwandte Tools {#related-tools} + +- [Bloxy Gas Analytics](https://stat.bloxy.info/superset/dashboard/gas/?standalone=true) _Netzwerk-Gas-Statistik_ +- [Blocknative's Gas Platform](https://www.blocknative.com/gas) _Gas Schätzung API powered by Blocknative's global mempool data platform_ + +## Weiterführende Informationen {#further-reading} + +- [Ethereum Gas erklärt](https://defiprime.com/gas) +- [Wird die Nutzung von Ethereum mit steigendem Preis teurer?](https://docs.ethhub.io/questions-about-ethereum/is-ethereum-more-expensive-to-use-as-price-rises/) +- [Reduziere den Gasverbrauch deiner Smart Contracts](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) +- [Proof-of-Stake vs. Proof-of-Work](https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/) + +## Verwandte Themen {#related-topics} + +- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) diff --git a/src/content/translations/de/developers/docs/index.md b/src/content/translations/de/developers/docs/index.md new file mode 100644 index 00000000000..f15bea6d8af --- /dev/null +++ b/src/content/translations/de/developers/docs/index.md @@ -0,0 +1,26 @@ +--- +title: Ethereum-Entwicklungs-Dokumentation +description: Einführung in die ethereum.org-Entwicklerdokumentation. +lang: de +sidebar: true +--- + +Diese Dokumentation soll dir helfen, mit Ethereum zu entwickeln. Es umfasst Ethereum als Konzept, erklärt den Ethereum-Technologie-Stack, dokumentiert fortgeschrittene Themen für komplexere Anwendungen und Anwendungsfälle. + +Dies ist eine Open-Source-Community-Anstrengung, also zögere nicht, neue Themen vorzuschlagen oder neue Inhalte hinzuzufügen, und gib Beispiele an, wo immer du denkst, dass dies hilfreich sein könnte. Alle Entwicklerdokumentationen können auf GitHub editiert werden. Falls du dir nicht sicher bist wie, [folge einfach dieser Anleitung](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/contributing/editing-markdown.md). + +## Entwicklungsmodule {#development-modules} + +Wenn dies dein erster Versuch bei der Entwicklung mit Ethereum ist, empfehlen wir dir, ganz vorne zu beginnen und dich wie bei einem Buch durchzuarbeiten. + +### Grundsätzliche Themen {#foundational-topics} + + + +### Ethereum-Stack {#ethereum-stack} + + + +### Fortgeschritten {#advanced} + + diff --git a/src/content/translations/de/developers/docs/intro-to-ether/index.md b/src/content/translations/de/developers/docs/intro-to-ether/index.md new file mode 100644 index 00000000000..7d3fc4171da --- /dev/null +++ b/src/content/translations/de/developers/docs/intro-to-ether/index.md @@ -0,0 +1,78 @@ +--- +title: Einführung in Ether +description: Eine Einführung für Entwickler in die Kryptowährung Ether. +lang: de +sidebar: true +--- + +## Voraussetzungen {#prerequisites} + +Damit du diese Seite besser verstehst, empfehlen wir dir, zuerst [Einführung in Ethereum](/developers/docs/intro-to-ethereum/) zu lesen. + +## Was ist eine Kryptowährung? {#what-is-a-cryptocurrency} + +Eine Kryptowährung ist ein Tauschmittel, das durch ein Blockchain-basiertes Ledger gesichert ist. + +Ein Tauschmittel ist alles, was allgemein als Zahlungsmittel für Waren und Dienstleistungen akzeptiert wird, und ein Ledger ist ein Datenspeicher, der die Transaktionen aufzeichnet. Die Blockchain-Technologie ermöglicht es den Nutzern, Transaktionen auf dem Ledger durchzuführen, ohne sich auf eine vertrauenswürdige dritte Partei zu verlassen, die dieses verwaltet. + +Die erste Kryptowährung war Bitcoin, die vom Pseudonym Satoshi Nakamoto erschaffen wurde. Seit der Veröffentlichung von Bitcoin im Jahr 2009 haben Menschen Tausende von Kryptowährungen auf vielen verschiedenen Blockchains geschaffen. + +## Was ist Ether? {#what-is-ether} + +**Ether (ETH)** ist die Kryptowährung, die für viele Dinge im Ethereum-Netzwerk verwendet wird. Grundsätzlich ist es die einzig akzeptable Form der Bezahlung von Transaktionsgebühren, und nach [The Merge](/upgrades/merge) wird Ether erforderlich sein, um Blöcke im Mainnet zu validieren und vorzuschlagen. Ether werden u. a. auch als primäre Form von Sicherheiten auf den [DeFi](/defi)-Kreditmärkten, als Rechnungseinheit auf NFT-Marktplätzen, als Bezahlung für die Erbringung von Dienstleistungen oder für den Verkauf von Gütern in der realen Welt und mehr verwendet. + +Ethereum ermöglicht es Entwicklern, [**dezentrale Anwendungen (dapps)**](/developers/docs/dapps) zu erstellen, die sich alle einen Pool von Rechenleistung teilen. Da dieser gemeinsame Pool endlich ist, braucht Ethereum einen Mechanismus, um zu bestimmen, wer ihn nutzen darf. Andernfalls könnte eine App versehentlich oder böswillig alle Netzwerkressourcen verbrauchen, was anderen den Zugriff auf die App verwehren würde. + +Die Kryptowährung Ether unterstützt einen Preismechanismus für die Rechenleistung von Ethereum. Wenn Nutzer/Nutzerinnen eine Transaktion durchführen wollen, müssen sie Ether bezahlen, damit ihre Transaktion auf der Blockchain anerkannt wird. Diese Nutzungskosten werden als [Gasgebühren](/developers/docs/gas/) bezeichnet, und die Gasgebühr hängt von der Menge an Rechenleistung ab, die für die Ausführung der Transaktion benötigt wird, sowie von der netzwerkweiten Nachfrage nach Rechenleistung zu diesem Zeitpunkt. + +Selbst wenn eine böswillige Dapp eine Endlosschleife einreichen würde, ginge der Transaktion irgendwann der Ether aus und sie würde beendet, so dass das Netzwerk wieder zur Normalität zurückkehren könnte. + +Es ist [üblich](https://www.reuters.com/article/us-crypto-currencies-lending-insight-idUSKBN25M0GP#:~:text=Preis%20von%20Ethereum) [](https://abcnews.go.com/Business/bitcoin-slumps-week-low-amid-renewed-worries-chinese/story?id=78399845#:~:text=Kryptowährungen%20inklusive%20Ethereum) [](https://www.cnn.com/2021/03/14/tech/nft-art-buying/index.html#:~:text=Preis%20von%20Ethereum), Ethereum und Ether zu verwechseln; wenn Leute den "Preis von Ethereum" erwähnen, beschreiben sie den Preis von Ether. + +## Ether-Minting {#minting-ether} + +Minting ist der Prozess, bei dem neuer Ether im Ethereum-Ledger erstellt wird. Das zugrundeliegende Ethereum-Protokoll erstellt den neuen Ether, und es ist nicht möglich, dass ein Nutzer Ether erstellt. + +Ether wird gemintet, wenn ein Miner einen Block auf der Ethereum-Blockchain erstellt. Als Anreiz für Miner gewährt das Protokoll in jedem Block eine Belohnung, die das Guthaben einer Adresse erhöht, die vom Miner des Blocks festgelegt wurde. Die Blockbelohnung hat sich im Laufe der Zeit geändert und beträgt heute 2 ETH pro Block. + +## Ether verbrennen {#burning-ether} + +Neben der Erzeugung von Ether durch Blockprämien kann Ether auch durch einen Prozess namens "Verbrennen" zerstört werden. Wenn Ether verbrannt wird, wird er dauerhaft aus dem Verkehr gezogen. + +Bei jeder Transaktion auf Ethereum wird Ether verbrannt. Wenn Nutzer für ihre Transaktionen bezahlen, wird eine grundlegende Gasgebühr vernichtet, die vom Netzwerk entsprechend der Transaktion festgelegt wird. Dies, zusammen mit variablen Blockgrößen und einer maximalen Gasgebühr, vereinfacht die Abschätzung der Transaktionsgebühren auf Ethereum. Wenn die Nachfrage im Netzwerk hoch ist, können [Blöcke](https://etherscan.io/block/12965263) mehr Ether verbrauchen, als sie minten, wodurch die Ausgabe von Ether effektiv ausgeglichen wird. + +Die Verbrennung der Grundgebühr verhindert diverse Möglichkeiten der Miner zur Manipulation. Wenn beispielsweise die Miner ihre Grundgebühr erhalten, können sie ihre eigenen Transaktionen kostenlos einbeziehen und die Grundgebühr für alle anderen erhöhen. Alternativ könnten sie die Grundgebühr an einige Nutzer außerhalb der Kette zurückerstatten, was zu einem undurchsichtigen und komplexen Markt für Transaktionsgebühren führen würde. + +## Stückelung von Ether {#denominations} + +Da viele Transaktionen auf Ethereum klein sind, hat Ether mehrere Stückelungen, die für kleinere Beträge referenziert werden können. Von diesen Stückelungen sind Wei und gwei besonders wichtig. + +Wei ist die kleinstmögliche Menge an Ether. Daher basieren viele technische Implementierungen, wie das [Ethereum Yellowpaper](https://ethereum.github.io/yellowpaper/paper.pdf), auf Berechnungen in Wei. + +Gwei, kurz für Giga-Wei, wird oft verwendet, um die Gaskosten auf Ethereum zu beschreiben. + +| Stückelung | Wert in Ether | Häufige Verwendung | +| ---------- | ---------------- | ------------------------------ | +| Wei | 10-18 | Technische Implementierungen | +| Gwei | 10-9 | Menschlich lesbare Gasgebühren | + +## Überweisung von Ether {#transferring-ether} + +Jede Transaktion auf Ethereum enthält ein `Wert`-Feld, das den zu überweisenden Ether-Betrag in Wei angibt, der von der Adresse des Absenders an die Adresse des Empfängers gesendet wird. + +Wenn es sich bei der Empfängeradresse um einen [Smart Contract](/developers/docs/smart-contracts/) handelt, kann dieser übertragene Ether zum Bezahlen von Gas verwendet werden, wenn der Smart Contract seinen Code ausführt. + +[Weitere Informationen zu Transaktionen](/developers/docs/transactions/) + +## Ether-Saldo abfragen {#querying-ether} + +Nutzer können den Ether-Saldo jedes [Kontos](/developers/docs/accounts/) abfragen, indem sie das `Saldo`-Feld des Kontos einsehen, das den Ether-Bestand in Wei anzeigt. + +[Etherscan](https://etherscan.io) ist ein beliebtes Tool zur Überprüfung von Adresssalden über eine webbasierte Anwendung. Zum Beispiel zeigt [diese Etherscan-Seite](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae) den Kontostand der Ethereum Foundation. + +## Weiterführende Informationen {#further-reading} + +- [Definition von Ether und Ethereum](https://www.cmegroup.com/education/courses/introduction-to-ether/defining-ether-and-ethereum.html) - _CME Group_ +- [Ethereum Whitepaper](/whitepaper/): Der ursprüngliche Vorschlag für Ethereum. Dieses Dokument enthält eine Beschreibung von Ether und der Beweggründe für seine Entstehung. + +_Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!_ diff --git a/src/content/translations/de/developers/docs/intro-to-ethereum/index.md b/src/content/translations/de/developers/docs/intro-to-ethereum/index.md new file mode 100644 index 00000000000..f1e151999c0 --- /dev/null +++ b/src/content/translations/de/developers/docs/intro-to-ethereum/index.md @@ -0,0 +1,121 @@ +--- +title: Einleitung zu Ethereum +description: Die Einführung eines dApp Entwicklers in die Kernkonzepte von Ethereum. +lang: de +sidebar: true +--- + +## Was ist eine Blockchain? {#what-is-a-blockchain} + +Eine Blockchain wird am besten als öffentliche Datenbank beschrieben, die über viele Computer in einem Netzwerk aktualisiert und geteilt wird. + +"Block" bezieht sich auf die Tatsache, dass Daten und Zustand in sequenziellen Batches oder "Blocks" gespeichert werden. Wenn du ETH an jemand anderen sendest, müssen die Transaktionsdaten zu einem Block hinzugefügt werden, damit der Vorgang erfolgreich ist. + +"Chain" bezieht sich auf die Tatsache, dass jeder Block kryptographisch auf seinen vorherigen Block verweist. Mit anderen Worten: Blöcke werden aneinandergekettet. Die Daten in einem Block können sich nicht ändern, ohne alle nachfolgenden Blöcke zu ändern, was den Konsens des gesamten Netzwerks erfordern würde. + +Jeder Computer im Netzwerk muss jedem neuen Block und der Kette als Ganzes zustimmen. Diese Computer werden als " Nodes" bezeichnet. Die Nodes stellen sicher, dass jeder, der mit der Blockchain interagiert, die gleichen Daten hat. Um diese verteilte Vereinbarung zu erreichen, brauchen Blockchains einen Konsensmechanismus. + +Ethereum verwendet derzeit einen [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/)-Konsensmechanismus. Das bedeutet, dass jeder, der neue Blöcke zur Kette hinzufügen möchte, ein schwieriges Rätsel lösen muss, für das viel Rechenleistung benötigt wird. Das Lösen des Puzzles "beweist", dass die Rechenressourcen verwendet wurden. Dies wird als [Mining](/developers/docs/consensus-mechanisms/pow/mining/) bezeichnet. Mining funktioniert nach einem rauen Versuch-und-Fehler-Prinzip, aber das erfolgreiche Hinzufügen eines Blocks wird in ETH belohnt. + +Neue Blöcke werden an die Nodes im Netzwerk gesendet, geprüft und verifiziert, wodurch der Zustand der Blockchain für alle aktualisiert wird. + +Zusammenfassend lässt sich also festhalten: Wenn du ETH an jemanden sendest, muss die Transaktion gemint und in einen neuen Block aufgenommen werden. Der aktualisierte Zustand wird dann mit dem gesamten Netzwerk geteilt. + +Schau dir an, wie Austin dich durch Blockchains führt: + + + +Wenn du sehen willst, wie die Blockchain Daten hasht und der vorherige Block auf alle vorherigen Blöcke verweist, solltest du dir [diese Demo](https://andersbrownworth.com/blockchain/blockchain) von Anders Brownworth und das dazugehörige Video unten ansehen. + +Schau dir an, wie Anders Hashes in Blockchains erklärt: + + + +## Was ist Ethereum? {#what-is-ethereum} + +Im Ethereum-Universum gibt es einen einzigen kanonischen Computer (genannt die Ethereum virtuelle Maschine oder kurz EVM), dessen Zustand jeder im Ethereum-Netzwerk zustimmt. Jeder, der am Ethereum-Netzwerk (jeder Ethereum-Node) teilnimmt, behält eine Kopie des Zustands dieses Computers. Zusätzlich kann jeder Teilnehmer eine Anfrage an diesen Computer senden, um beliebige Berechnungen durchzuführen. Wenn eine solche Anfrage gesendet wird, überprüfen andere Teilnehmer/Teilnehmerinnen im Netzwerk die Berechnung und führen sie aus ("execute"). Diese Ausführung führt zu einer Zustandsänderung in der EVM, die bestätigt und im gesamten Netzwerk verbreitet wird. + +Rechenanfragen werden als Transaktionsanfragen bezeichnet; die Aufzeichnung aller Transaktionen und des aktuellen Zustands der EVM wird auf der Blockchain gespeichert, die wiederum von allen Nodes gespeichert und vereinbart wird. + +Kryptographische Mechanismen stellen sicher, dass Transaktionen, die einmal als gültig verifiziert und in die Blockchain aufgenommen wurden, später nicht mehr manipuliert werden können. Dieselben Mechanismen stellen auch sicher, dass alle Transaktionen signiert und mit den entsprechenden "Berechtigungen" ausgeführt werden (niemand außer Alice selbst sollte in der Lage sein, digitale Vermögenswerte von ihrem Konto zu versenden). + +## Was ist Ether? {#what-is-ether} + +**Ether (ETH)** ist die einheimische Kryptowährung von Ethereum. Der Zweck von Ether ist es, einen Markt für Berechnungen zu ermöglichen. Ein solcher Markt bietet einen wirtschaftlichen Anreiz für die Teilnehmer/Teilnehmerinnen, Transaktionsanfragen zu verifizieren und auszuführen und dem Netzwerk Rechenressourcen zur Verfügung zu stellen. + +Jeder Teilnehmer, der eine Transaktionsanfrage sendet, muss dem Netzwerk auch einen bestimmten Betrag an Ether als Kopfgeld anbieten. Dieses Kopfgeld erhält derjenige, der die Transaktion verifiziert, ausführt, in die Blockchain einträgt und an das Netzwerk weiterleitet. + +Die Menge an Ether, die bezahlt wird, entspricht der Zeit, die für die Berechnung benötigt wird. Diese Kopfgelder verhindern auch, dass böswillige Teilnehmer/Teilnehmerinnen das Netzwerk absichtlich verstopfen, indem sie die Ausführung von unendlichen Berechnungen oder anderen ressourcenintensiven Skripten anfordern, da diese Teilnehmer für die Rechenzeit bezahlen müssen. + +## Was sind Smart Contracts? {#what-are-smart-contracts} + +In der Praxis schreiben die Teilnehmer/Teilnehmerinnen nicht jedes Mal einen neuen Code, wenn sie eine Berechnung auf der EVM anfordern wollen. Vielmehr laden Anwendungsentwickler Programme (wiederverwendbare Codeschnipsel) in den EVM-Speicher hoch, und die Nutzer stellen Anfragen, um diese Codeschnipsel mit unterschiedlichen Parametern auszuführen. Wir nennen die Programme, die hochgeladen und durch das Netzwerk ausgeführt werden, Smart Contracts (intelligente Verträge). + +Ganz grundsätzlich kannst du dir einen Smart Contract wie eine Art Verkaufsautomat vorstellen: ein Skript, das, wenn es mit bestimmten Parametern aufgerufen wird, bestimmte Aktionen oder Berechnungen durchführt, wenn bestimmte Bedingungen erfüllt sind. Zum Beispiel könnte ein einfacher Händler-Smart-Contract das Eigentum an einem digitalen Vermögenswert erstellen und zuweisen, wenn der Interessent einem bestimmten Empfänger Ether sendet. + +Jeder Entwickler kann einen Smart Contract erstellen und im Netzwerk öffentlich machen, während die Blockchain als Datenschicht gegen eine Gebühr an das Netzwerk genutzt wird. Jeder Benutzer kann dann, wiederum gegen eine Gebühr an das Netzwerk, den Smart Contract aufrufen, um seinen Code auszuführen. + +Mit Smart Contracts können Entwickler/Entwicklerinnen beliebig komplexe nutzerorientierte Apps und Dienste entwickeln und bereitstellen, wie z. B. Marktplätze, Finanzinstrumente, Spiele etc. + +## Terminologie {#terminology} + +### Blockchain {#blockchain} + +Die Sequenz aller Blöcke, die dem Ethereum-Netzwerk in der Geschichte des Netzwerks übertragen wurden. So benannt, weil jeder Block einen Verweis auf den vorherigen Block enthält, was uns hilft, eine Zuordnung über alle Blöcke (und damit über die genaue Historie) aufrechtzuerhalten. + +### ETH {#eth} + +Die native Kryptowährung von Ethereum. Nutzer zahlen Ether an andere Nutzer, damit ihre Code-Ausführungsanfragen erfüllt werden. + +[Mehr zu ETH](/developers/docs/intro-to-ether/) + +### EVM {#evm} + +Die Ethereum Virtual Machine ist der globale virtuelle Computer, dessen Zustand jeder Teilnehmer im Ethereum-Netzwerk speichert und dem er zustimmt. Jeder Teilnehmer kann die Ausführung von beliebigem Code auf der EVM beantragen. Jede Codeausführung ändert den Zustand der EVM. + +[Mehr zur EVM](/developers/docs/evm/) + +### Nodes {#nodes} + +Die realen Maschinen, die den EVM-Zustand speichern. Nodes kommunizieren miteinander, um Informationen über den EVM-Zustand und neue Zustandsänderungen zu verbreiten. Jede/r Nutzer/in kann auch die Ausführung von Code anfordern, indem er/sie eine Anfrage zur Codeausführung von einem Node aus sendet. Das Ethereum-Netzwerk selbst ist das Aggregat aller Ethereum-Nodes und deren Kommunikation. + +[Mehr zu Nodes](/developers/docs/nodes-and-clients/) + +### Konten {#accounts} + +Wo Ether gespeichert wird. Nutzer können Konten initialisieren, Ether in die Konten einzahlen und Ether von ihren Konten auf andere Benutzer übertragen. Konten und Kontostände werden in einer großen Tabelle in der EVM gespeichert; sie sind Teil des EVM-Zustands. + +[Mehr über Konten](/developers/docs/accounts/) + +### Transaktionen {#transactions} + +Eine "Transaktionsanfrage" ist der formale Begriff für eine Anfrage zur Codeausführung auf der EVM, und eine "Transaktion" ist eine erfüllte Transaktionsanfrage und die damit verbundene Änderung des EVM-Zustands. Jeder Benutzer kann eine Transaktionsanfrage an das Netzwerk von einem Node senden. Damit sich die Transaktionsanfrage auf den vereinbarten EVM-Zustand auswirkt, muss sie von einem anderen Node validiert, ausgeführt und an das Netzwerk übertragen werden. Die Ausführung eines Codes führt zu einer Zustandsänderung in der EVM. Nach der Integration wird diese Zustandsänderung an alle Nodes im Netzwerk übertragen. Einige Beispiele für Transaktionen: + +- Schicke X Ether von meinem Konto an das Konto von Alice. +- Veröffentliche Smart-Contract-Code in den EVM-Zustand. +- Führe den Code des Smart Contracts unter Adresse X in der EVM mit Argumenten Y aus. + +[Mehr zu Transaktionen](/developers/docs/transactions/) + +### Blöcke {#blocks} + +Da das Transaktionsvolumen sehr hoch ist, werden die Transaktionen in Stapeln oder Blöcken "übertragen". Blöcke enthalten in der Regel Dutzende bis Hunderte von Transaktionen. + +[Mehr zu Blöcken](/developers/docs/blocks/) + +### Smart Contracts {#smart-contracts} + +Ein wiederverwendbares Code-Snippet (ein Programm), das ein Entwickler in den EVM-Zustand veröffentlicht. Jeder kann anfragen, dass der Smart-Contract-Code ausgeführt wird, indem er eine Transaktionsanfrage stellt. Da Entwickler beliebige ausführbare Anwendungen in die EVM (Spiele, Marktplätze, Finanzinstrumente etc.) schreiben können, werden diese oft in übergeordneter Form auch [dApps oder dezentralisierte Apps](/developers/docs/dapps/) genannt. + +[Mehr zu Smart Contracts](/developers/docs/smart-contracts/) + +## Weiterführende Informationen {#further-reading} + +- [Ethereum-Whitepaper](/whitepaper/) +- [Wie funktioniert Ethereum überhaupt?](https://www.preethikasireddy.com/post/how-does-ethereum-work-anyway) – _Preethi Kasireddy_ + +_Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!_ + +## Verwandte Tutorials {#related-tutorials} + +- [Ein Entwickler-Guide zu Ethereum, Teil 1 ](/developers/tutorials/a-developers-guide-to-ethereum-part-one/) _– Eine sehr anfängerfreundliche Erkundung von Ethereum mit Python und web3.py_ diff --git a/src/content/translations/de/developers/docs/networks/index.md b/src/content/translations/de/developers/docs/networks/index.md new file mode 100644 index 00000000000..face3cc806e --- /dev/null +++ b/src/content/translations/de/developers/docs/networks/index.md @@ -0,0 +1,129 @@ +--- +title: Netzwerke +description: Eine Übersicht über Ethereums Netzwerke und wo man Testnet Ether (ETH) zum Testen neuer Anwendungen bekommt. +lang: de +sidebar: true +--- + +Da Ethereum ein Protokoll ist, kann es mehrere unabhängige "Netzwerke" geben, die diesem Protokoll entsprechen, jedoch nicht miteinander interagieren. + +Netzwerke sind verschiedene Ethereum-Umgebungen, auf die du für Entwicklung, Tests oder Produktionsanwendungsfälle zugreifen kannst. Dein Ethereum-Konto wird in den verschiedenen Netzwerken funktionieren, aber dein Kontostand und die zugehörige Transaktionsgeschichte werden nicht von Ethereums Hauptnetzwerk auf andere Netzwerke übertragen. Zu Testzwecken ist es nützlich zu wissen, welche Netzwerke verfügbar sind und wie man Testnet ETH erhält, um damit zu experimentieren. + +## Voraussetzungen {#prerequisites} + +Du solltest die Grundlagen von Ethereum verstehen, bevor du über die verschiedenen Netzwerke liest, da die Testnetze dir eine günstige und sichere Version von Ethereum bieten, um damit herumzuspielen. Starte mit unserer [Einführung in Ethereum](/developers/docs/intro-to-ethereum/). + +## Öffentliche Netzwerke {#public-networks} + +Öffentliche Netzwerke sind für jedermann auf der Welt mit einer Internetverbindung zugänglich. Jeder kann Transaktionen in einer öffentlichen Blockchain lesen oder erstellen und die ausgeführten Transaktionen validieren. Die Vereinbarung über Transaktionen und den Zustand des Netzwerks wird durch einen Konsens von Netzwerkteilnehmern getroffen. + +### Mainnet {#mainnet} + +Mainnet ist die primäre öffentliche Ethereum-Produktions-Blockchain, bei der Transaktionen mit tatsächlichem Wert im dezentralisierten Ledger stattfinden. + +Wenn Menschen und Börsen ETH-Preise diskutieren, sprechen sie über Mainnet ETH. + +### Testnetze {#testnets} + +Zusätzlich zum Mainnet gibt es öffentliche Testnetze. Dabei handelt es sich um Netzwerke, die von Protokollentwicklern oder Smart-Contract-Entwicklern eingesetzt werden, um sowohl Protokoll-Upgrades als auch potenzielle Smart Contracts in einer produktionsähnlichen Umgebung zu testen, bevor sie ins Mainnet gelangen. Stelle dir dies als Analog zur Produktion im Vergleich zu Staging-Servern vor. + +Es ist generell wichtig, jeden Vertragscode, den du auf einem Testnetz schreibst, zu testen, bevor du ihn in das Mainnet einbringst. Wenn du eine dApp erstellst, die an bestehende Smart Contracts angeknüpft ist, haben die meisten Projekte Kopien in Testnetze, mit denen du interagieren kannst, bereitgestellt. + +Die meisten Testnetze verwenden den Konsensmechanismus Proof-of-Authority. Dies bedeutet, dass eine kleine Anzahl von Nodes ausgewählt wird, um Transaktionen zu validieren und neue Blöcke zu erstellen – und ihre Identität im Prozess zu hinterlegen. Es ist schwer, das Mining auf einem Testnetz zu fördern, was es aufgrund geringer Validierungsressourcen verwundbar machen kann. + +ETH auf Testnetzen hat keinen echten Wert. Daher gibt es keine Märkte für Testnet ETH. Da du ETH benötigst, um tatsächlich mit Ethereum zu interagieren, bekommen die meisten Leute Testnet ETH von Faucets. Die meisten Faucets sind Webapplikationen, bei denen du eine Adresse eingeben kannst, an die die ETH gesendet werden sollen. + +#### Arbitrum Rinkeby {#arbitrum-rinkeby} + +Ein Testnetz für [Arbitrum](https://arbitrum.io/). + +##### Arbitrum Rinkeby faucets + +- [FaucETH](https://fauceth.computing.org) (Multi-Chain-faucet ohne die Notwendigkeit eines sozialen Kontos) +- [Chainlink faucet](https://faucets.chain.link/) +- [Paradigmatischer Faucet](https://faucet.paradigm.xyz/) + +#### Görli {#goerli} + +Ein Proof-of-Authority-Testnetz, das über verschiedene Clients hinweg funktioniert. + +##### Görli faucets + +- [Görli faucet](https://faucet.goerli.mudit.blog/) +- [Chainlink faucet](https://faucets.chain.link/) +- [Alchemy Goerli Faucet](https://goerlifaucet.com/) + +#### Kintsugi {#kintsugi} + +Ein Fusionstestnetz für Ethereum. + +##### Kintsugi faucets + +- [FaucETH](https://fauceth.computing.org) (Multi-Chain-Faucet ohne die Notwendigkeit eines Social-Kontos) +- [Kintsugi faucet](https://faucet.kintsugi.themerge.dev/) + +#### Kovan {#kovan} + +Ein Proof-of-Authority-Testnetz für diejenigen, die OpenEthereum-Clients verwenden. + +##### Kovan faucets + +- [FaucETH](https://fauceth.computing.org) (Multi-Chain-Faucet ohne die Notwendigkeit eines Social-Kontos) +- [Kovan faucet](https://faucet.kovan.network/) +- [Chainlink faucet](https://faucets.chain.link/) +- [Paradigm faucet](https://faucet.paradigm.xyz/) + +#### Optimistischer Kovan {#optimistic-kovan} + +Ein Testnetz für [Optimismus](https://www.optimism.io/). + +##### Optimistische Kovan-Faucets + +- [FaucETH](https://fauceth.computing.org) (Multi-Chain-Faucet ohne die Notwendigkeit eines Social-Kontos) +- [Paradigmatischer Faucet](https://faucet.paradigm.xyz/) + +#### Rinkeby {#rinkeby} + +Ein Proof-of-Authority-Testnetz für diejenigen, die den Geth-Client verwenden. + +##### Rinkeby faucets + +- [FaucETH](https://fauceth.computing.org) (Multi-Chain-Faucet ohne die Notwendigkeit eines Social-Kontos) +- [Alchemy faucet](https://RinkebyFaucet.com) +- [Chainlink faucet](https://faucets.chain.link/) +- [Paradigm faucet](https://faucet.paradigm.xyz/) +- [Rinkeby faucet](https://faucet.rinkeby.io/) + +#### Ropsten {#ropsten} + +Ein Proof-of-Work-Testnetz. Das bedeutet, es ist die beste gleichartige Testnetzumgebung von Ethereum. + +##### Ropsten faucets + +- [FaucETH](https://fauceth.computing.org) (Multi-Chain-Faucet ohne die Notwendigkeit eines Social-Kontos) +- [Paradigmatischer Faucet](https://faucet.paradigm.xyz/) + +## Private Netzwerke {#private-networks} + +Ein Ethereum-Netzwerk ist ein privates Netzwerk, wenn seine Nodes nicht mit einem öffentlichen Netzwerk verbunden sind (d. h. Hauptnetz [engl. Mainnet] oder ein Testnetz [engl. Testnet). In diesem Zusammenhang bedeutet privat nur reserviert oder isoliert statt geschützt oder sicher. + +### Entwicklungsnetzwerke {#development-networks} + +Um eine Ethereum-Anwendung zu entwickeln, ist es ratsam, sie in einem privaten Netzwerk auszuführen, um zu sehen, wie sie funktioniert, bevor du sie in der Blockchain verteilst. Ähnlich wie du auf deinem Computer einen lokalen Server für Webentwicklung erstellst, kannst du eine lokale Blockchain-Instanz erstellen, um deine dApp zu testen. Dies ermöglicht eine wesentlich schnellere Iteration als ein öffentliches Testnetz. + +Es gibt Projekte und Tools, die dabei hilfreich sind. Erfahre mehr über [Entwicklungsnetzwerke](/developers/docs/development-networks/). + +### Konsortium-Netzwerke {#consortium-networks} + +Der Konsensprozess wird von einer vordefinierten Gruppe von Nodes gesteuert, die vertrauenswürdig sind, z. B. ein privates Netzwerk bekannter akademischer Institutionen, die jeweils einen einzelnen Node stellen, wodurch Blöcke mit einer Schwelle von Unterzeichnern innerhalb des Netzwerks validiert werden. + +Wenn ein öffentliches Ethereum-Netzwerk wie das öffentliche Internet ist, kannst du dir ein Konsortium-Netzwerk als privates Intranet vorstellen. + +## Verwandte Tools {#related-tools} + +- [Kettenliste](https://chainlist.org/) _Liste der EVM-Netzwerke, um Wallets und Anbieter mit der entsprechenden Ketten-ID und Netzwerk-ID zu verbinden_ +- [EVM-basierte Ketten](https://github.com/ethereum-lists/chains) _GitHub Repo der Ketten-Metadaten, die Chainlist_ unterstützen + +## Weiterführende Informationen {#further-reading} + +_Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!_ diff --git a/src/content/translations/de/developers/docs/nodes-and-clients/index.md b/src/content/translations/de/developers/docs/nodes-and-clients/index.md new file mode 100644 index 00000000000..5e8a1cd0107 --- /dev/null +++ b/src/content/translations/de/developers/docs/nodes-and-clients/index.md @@ -0,0 +1,324 @@ +--- +title: Nodes und Clients +description: Eine Übersicht über Ethereum-Nodes und Client-Software, wie eine Node eingerichtet wird und warum du dies tun solltest. +lang: de +sidebar: true +sidebarDepth: 2 +--- + +Ethereum ist ein verteiltes Netzwerk von Computern, auf denen Software (sogenannte Nodes) läuft, die Blöcke und Transaktionsdaten verifizieren kann. Du benötigst eine Anwendung, bekannt als Client, auf deinem Gerät, um einen Node zu "betreiben". + +## Voraussetzungen {#prerequisites} + +Du solltest das Konzept eines Peer-to-Peer-Netzwerks und die [Grundlagen der EVM](/developers/docs/evm/) verstehen, bevor du tiefer eintauchst und deine eigene Instanz eines Ethereum-Clients startest. Lies unsere [Einführung in Ethereum](/developers/docs/intro-to-ethereum/). + +Wenn dir das Thema Nodes neu ist, empfehlen wir dir, zunächst unsere benutzerfreundliche Einführung zum [Betreiben eines Ethereum-Nodes](/run-a-node) zu lesen. + +## Was sind Nodes und Clients? {#what-are-nodes-and-clients} + +"Node" bezieht sich auf eine laufende Client-Software. Ein Client ist eine Implementierung von Ethereum, die alle Transaktionen in jedem Block prüft und das Netzwerk somit sicher und die Daten genau hält. + +Du kannst eine Echtzeitansicht des Ethereum-Netzwerks sehen, indem du dir diese [Karte der Nodes](https://etherscan.io/nodetracker) ansiehst. + +Es gibt viele [Ethereum-Clients](/developers/docs/nodes-and-clients/#execution-clients) in einer Vielzahl von Programmiersprachen wie Go, Rust, JavaScript, Typescript, Python, C# .NET, Nim und Java. Was diese Implementierungen gemeinsam haben, ist dass sie alle einer formalen Spezifikation folgen (ursprünglich das [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf)). Diese Spezifikation bestimmt, wie das Ethereum-Netzwerk und die Blockchain funktionieren. + +![Ausführungs-Client](./client-diagram.png) Vereinfachtes Diagramm dessen, was einen Ethereum-Client ausmacht. + +## Node-Typen {#node-types} + +Wenn du [einen eigenen Node](/developers/docs/nodes-and-clients/run-a-node/) betreiben willst, solltest du verstehen, dass es verschiedene Arten von Nodes gibt, die Daten unterschiedlich konsumieren. In der Tat können Clients 3 verschiedene Arten von Nodes betreiben: Light, Full und Archive. Es gibt auch Optionen für verschiedene Synchronisierungsstrategien, die eine schnellere Synchronisationszeit ermöglichen. Die Synchronisierung bezieht sich darauf, wie schnell sie die aktuellsten Informationen über Ethereums Zustand erhalten kann. + +### Full-Node {#full-node} + +- Speichert die kompletten Blockchain-Daten. +- Beteiligt sich an der Blockprüfung, überprüft alle Blöcke und Zustände. +- Alle Zustände können von einem Full-Node abgeleitet werden. +- Bedient das Netzwerk und liefert Daten auf Anfrage. + +### Light-Node {#light-node} + +- Speichert nur die Header-Kette und fordert alles andere an. +- Kann die Gültigkeit der Daten gegen die Zustandswurzeln in den Block-Headern überprüfen. +- Nützlich für Geräte mit geringer Kapazität, wie Embedded-Geräte oder Mobiltelefone, die es sich nicht leisten können, Gigabyte an Blockchain-Daten zu speichern. + +### Archive-Node {#archive-node} + +- Speichert alles wie im Full-Node und baut zusätzlich ein Archiv von historischen Zuständen auf. Wird benötigt, wenn du z. B. einen Kontostand bei Block #4.000.000 abfragen oder einfach und zuverlässig [deine eigenen Transaktionen testen willst, ohne sie mit OpenEthereum](https://openethereum.github.io/JSONRPC-trace-module#trace_callmany) zu minen. +- Diese Daten stellen Einheiten von Terabytes dar, was Archive-Nodes für durchschnittliche Benutzer weniger attraktiv macht, aber für Dienste wie Blockexplorer, Wallet-Hersteller und die Blockchainanalyse nützlich sein kann. + +Das Synchronisieren von Clients in jedem anderen Modus als dem Archiv führt zu reduzierten (pruned) Blockchain-Daten. Das bedeutet, es gibt kein Archiv mit allen historischen Zuständen, aber der vollständige Node ist in der Lage, diese bei Bedarf zu erstellen. + +## Warum sollte ich einen Ethereum-Node betreiben? {#why-should-i-run-an-ethereum-node} + +Durch das Ausführen eines Nodes kannst du Ethereum vertraulich und privat nutzen, während das Ökosystem unterstützt wird. + +### Vorteile für dich {#benefits-to-you} + +Wenn du deinen eigenen Node betreibst, kannst du Ethereum auf eine wirklich private, autarke und vertrauenslose Weise verwenden. Du musst dem Netzwerk nicht vertrauen, weil du die Daten mit deinem Client selbst überprüfen kannst. "Nicht vertrauen, überprüfen" ist ein beliebtes Mantra der Blockchain. + +- Dein Node überprüft alle Transaktionen und Blöcke selbstständig gegen Konsensregeln. Das bedeutet, du musst dich nicht auf andere Nodes im Netzwerk verlassen oder ihnen vollständig vertrauen. +- Du musst deine Adressen und Salden nicht an zufälligen Nodes veröffentlichen. Alles kann mit deinem eigenen Client überprüft werden. +- Deine dApp kann sicherer und privater sein, wenn du einen eigenen Node verwendest. [MetaMask](https://metamask.io), [MyEtherWallet](https://myetherwallet.com) und einige andere Wallets können einfach mit deinem eigenen lokalen Node verknüpft werden. +- Du kannst deine eigenen RPC-Endpunkte programmieren. +- Du kannst dich mit deinem Node über **Interprozesskommunikation (IPC)** verbinden oder den Node umschreiben, um dein Programm als Plugin zu laden. Das garantiert eine niedrige Latenzzeit, die erforderlich ist, um deine Transaktionen so schnell wie möglich zu ersetzen (d. h. Frontrunning). + +![Wie du auf Ethereum über deine Anwendung und Nodes zugreifst](./nodes.png) + +### Netzwerkvorteile {#network-benefits} + +Eine Vielzahl von Nodes ist wichtig für Ethereums Gesundheit, Sicherheit und operative Belastbarkeit. + +- Sie bieten Light-Clients Zugriff auf Blockchain-Daten, die davon abhängen. Bei hohen Nutzungspitzen muss es genug vollständige Knoten geben, um die Synchronisation von Light-Nodes zu unterstützen. Light-Nodes speichern nicht die gesamte Blockchain, sondern verifizieren die Daten über die [Zustandswurzel in Block-Headern](/developers/docs/blocks/#block-anatomy). Sie können bei Bedarf weitere Informationen von Blöcken anfragen. +- Full-Nodes erzwingen die Konsensregeln für den Proof-of-Work, so dass sie nicht dazu gebracht werden können, Blöcke zu akzeptieren, die den Regeln nicht folgen. Dies bietet zusätzliche Sicherheit im Netzwerk, denn wenn alle Nodes Light-Nodes wären, die keine vollständige Verifizierung durchführen, könnten Miner das Netzwerk angreifen und zum Beispiel Blöcke mit höheren Belohnungen erstellen. + +Wenn du einen Full-Node betreibst, profitiert das gesamte Ethereum Netzwerk. + +## Betreiben eines eigenen Nodes {#running-your-own-node} + +Hast du Interesse, deinen eigenen Ethereum-Client zu betreiben? + +Eine anfängerfreundliche Einführung findest du auf unserer [Node-Seite](/run-a-node). + +Wenn du eher ein technischer Benutzer bist, kannst du [einen eigenen Node](/developers/docs/nodes-and-clients/run-a-node/) mit der Kommandozeile aufbauen. + +### Projekte {#projects} + +[**Wähle einen Client aus und folge den Anweisungen.**](#clients) + +**Ethnode -** **_Betreibe einen Ethereum-Node (Geth oder OpenEthereum) für lokale Entwicklung._** + +- [GitHub](https://github.com/vrde/ethnode) + +**dAppNode -** **_Eine Betriebssystem-GUI für den Betrieb von Web3-Nodes, einschließlich Ethereum und der Beacon Chain, auf einer eigenen Maschine._** + +- [dappnode.io](https://dappnode.io) + +### Ressourcen {#resources} + +- [Running Ethereum Full Nodes: A Complete Guide](https://medium.com/coinmonks/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _Nov 7, 2019 - Justin Leroux_ +- [Node Configuration Cheat Sheet](https://dev. to/5chdn/ethereum-node-configuration-modes-cheat-sheet-25l8) _Jan 5, 2019 - Afri Schoedon_ +- [How To Install & Run a Geth Node](https://www.quiknode.io/guides/infrastructure/how-to-install-and-run-a-geth-node) _Oct 4, 2020 - Sahil Sen_ +- [How To Install & Run a OpenEthereum (fka. Parity) Node](https://www.quiknode.io/guides/infrastructure/how-to-run-a-openethereum-ex-parity-client-node) _Sept 22, 2020 - Sahil Sen_ + +## Alternativen {#alternatives} + +Der Betrieb eines eigenen Nodes kann schwierig sein und du musst nicht immer eine eigene Instanz betreiben. In diesem Fall kannst du einen Drittanbieter wie [Infura](https://infura.io), [Alchemy ](https://alchemyapi.io)oder [QuikNode](https://www.quiknode.io) verwenden. Alternativ dazu ist [ArchiveNode](https://archivenode.io/) ein von der Community finanzierter Archivknoten, der unabhängigen Entwicklern, die sich dies sonst nicht leisten könnten, Archivdaten auf der Ethereum-Blockchain zur Verfügung stellen soll. Einen Überblick über die Verwendung dieser Dienste findest du unter [Nodes als Dienst](/developers/docs/nodes-and-clients/nodes-as-a-service/). + +Wenn jemand in deiner Community einen Ethereum-Node mit einer öffentlichen API betreibt, kannst du deine Light Wallets (wie MetaMask) auf einen Community-Node [via Custom RPC](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node) verweisen lassen und so mehr Privatsphäre erreichen als mit einer zufälligen vertrauenswürdigen Drittpartei. + +Wenn du andererseits einen Client betreibst, kannst du ihn mit deinen Freunden teilen, die ihn vielleicht brauchen. + +## Ausführungs-Clients (früher "Eth1-Clients") {#execution-clients} + +Die Ethereum-Community unterhält mehrere quelloffene Ausführungs-Clients (früher als "Eth1-Clients" oder einfach "Ethereum-Clients" bezeichnet), die von verschiedenen Teams in unterschiedlichen Programmiersprachen entwickelt wurden. Dies macht das Netzwerk stärker und vielfältiger. Das ideale Ziel ist es, Vielfalt zu erreichen, ohne dass ein Client dominiert, um jede Art von Single Point of Failure zu reduzieren. + +Diese Tabelle gibt einen Überblick über die verschiedenen Clients. Sie alle bestehen [Client-Tests](https://github.com/ethereum/tests) und werden aktiv gewartet, um mit Netzwerk-Upgrades auf dem neuesten Stand zu bleiben. + +| Client | Sprache | Betriebssystem | Netzwerke | Sync-Strategien | Zustandsreduzierung | +| ----------------------------------------------------------------------- | -------- | --------------------- | -------------------------------------------- | ------------------- | ------------------- | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, MacOS | Mainnet, Görli, Rinkeby, Ropsten | Snap, Full | Archive, Pruned | +| [Nethermind](http://nethermind.io/) | C#, .NET | Linux, Windows, MacOS | Mainnet, Görli, Ropsten, Rinkeby und weitere | Fast, Beam, Archive | Archive, Pruned | +| [Besu](https://pegasys.tech/solutions/hyperledger-besu/) | Java | Linux, Windows, MacOS | Mainnet, Rinkeby, Ropsten, Görli und weitere | Fast, Full | Archive, Pruned | +| [Erigon](https://github.com/ledgerwatch/erigon) | Los | Linux, Windows, MacOS | Mainnet, Görli, Rinkeby, Ropsten | Full | Archive, Pruned | +| [OpenEthereum (veraltet)](https://github.com/openethereum/openethereum) | Rust | Linux, Windows, MacOS | Mainnet, Kovan, Ropsten und weitere | Warp, Full | Archive, Pruned | + +**Beachte, dass OpenEthereum [veraltet](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) ist und nicht mehr gewartet wird.** Verwende es mit Vorsicht und wechsle lieber zu einer anderen Client-Implementierung. + +Weitere Informationen zu unterstützten Netzwerken findest du unter [Ethereum-Netzwerke](/developers/docs/networks/). + +### Vorteile verschiedener Implementierungen {#advantages-of-different-implementations} + +Jeder Client hat einzigartige Anwendungsfälle und Vorteile, daher solltest du einen auf deinen eigenen Präferenzen basierenden wählen. Die Client-Vielfalt ermöglicht die Fokussierung der Implementierungen auf verschiedene Funktionen und Benutzergruppen. Du kannst einen Client basierend auf Features, Support, Programmiersprache oder Lizenzen auswählen. + +#### Go Ethereum {#geth} + +Go Ethereum (kurz Geth) ist eine der ursprünglichen Implementierungen des Ethereum-Protokolls. Derzeit ist es der am weitesten verbreitete Client mit der größten Benutzerbasis und der größten Vielfalt an Tools für Benutzer und Entwickler. Es ist in Go geschrieben, vollständig Open Source und unter der GNU LGPL v3 lizenziert. + +#### OpenEthereum {#openethereum} + +OpenEthereum ist ein schneller, funktionsreicher und fortgeschrittener CLI-basierter Ethereum-Client. Es wurde entwickelt, um die notwendige Infrastruktur für schnelle und zuverlässige Dienste bereitzustellen, die eine schnelle Synchronisierung und maximale Laufzeit erfordern. Das Ziel von OpenEthereum ist es, der schnellste, leichteste und sicherste Ethereum-Client zu sein. Es bietet eine saubere, modulare Codebase für + +- eine einfache Anpassung, +- eine leichte Integration in Dienstleistungen oder Produkte, +- einen minimalen Arbeitsspeicher und Speicherfußabdruck. + +OpenEthereum wird unter Verwendung der neuesten Rust-Programmiersprache entwickelt und unter GPLv3 lizenziert. + +**Beachte, dass OpenEthereum [veraltet](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) ist und nicht mehr gewartet wird.** Verwende es mit Vorsicht und wechsle lieber zu einer anderen Client-Implementierung. + +#### Nethermind {#nethermind} + +Nethermind ist eine Ethereum-Implementierung, die mit dem C# .NET Technologie-Stack erstellt wurde, der auf allen wichtigen Plattformen, einschließlich ARM, läuft. Es bietet eine großartige Leistung mit + +- einer optimierten virtuellen Maschine, +- Zustandszugriff, +- Netzwerken und reichhaltigen Funktionen wie Prometheus/Grafana-Dashboards, Seq Enterprise Logging Support, JSON RPC Tracing und Analytics-Plugins. + +Nethermind bietet auch eine [detaillierte Dokumentation](https://docs.nethermind.io), starke Entwicklerunterstützung, eine Online-Community und 24/7-Support für Premiumnutzer. + +#### Besu {#besu} + +Hyperledger Besu ist ein unternehmensorientierter Ethereum-Client für öffentliche und private Netzwerke. Er bietet alle Funktionen des Ethereum-Mainnets, von Tracing bis GraphQL, hat ein umfangreiches Monitoring und wird von ConsenSys unterstützt, sowohl in offenen Community-Kanälen als auch durch kommerzielle SLAs für Unternehmen. Er ist in Java geschrieben und ist durch Apache 2.0 lizenziert. + +#### Erigon {#erigon} + +Erigon, früher bekannt als Turbo-Geth, ist eine Abspaltung von Go Ethereum, die auf Geschwindigkeit und Speicherplatzeffizienz ausgerichtet ist. Erigon ist eine komplett neu entwickelte Implementierung von Ethereum, die derzeit in Go geschrieben ist, aber auch in anderen Sprachen implementiert werden soll. Das Ziel von Erigon ist es, eine schnellere, modularere und optimierte Implementierung von Ethereum anzubieten. Es kann eine vollständige Synchronisierung des Archiv-Nodes mit weniger als 2 Tb Speicherplatz in weniger als 3 Tagen durchführen + +### Synchronisationsmodi {#sync-modes} + +Um die aktuellen Daten im Netzwerk zu verfolgen und zu überprüfen, muss sich der Ethereum-Client mit dem neuesten Netzwerkstatus synchronisieren. Dazu werden Daten von Peers heruntergeladen, ihre Integrität kryptographisch verifiziert und eine lokale Blockchain-Datenbank aufgebaut. + +Die Synchronisationsmodi stellen verschiedene Ansätze für diesen Prozess mit unterschiedlichen Kompromissen dar. Die Clients unterscheiden sich auch in der Implementierung von Synchronisationsalgorithmen. Beziehe dich immer auf die offizielle Dokumentation des von dir gewählten Clients, um Einzelheiten zur Implementierung zu erfahren. + +#### Überblick über die Strategien {#overview-of-strategies} + +Allgemeiner Überblick über die Synchronisierungsansätze, die in Mainnet-Ready-Clients verwendet werden: + +##### Full sync {#full-sync} + +Bei full sync werden alle Blöcke (einschließlich Headern, Transaktionen und Quittungen) heruntergeladen und der Zustand der Blockchain inkrementell generiert, indem jeder Block ab Genesis ausgeführt wird. + +- Minimiert das Vertrauen und bietet höchste Sicherheit, indem jede Transaktion verifiziert wird. +- Bei einer steigenden Anzahl von Transaktionen kann es Tage bis Wochen dauern, alle Transaktionen zu bearbeiten. + +##### Fast sync + +Die schnelle Synchronisierung lädt alle Blöcke herunter (einschließlich Headern, Transaktionen und Quittungen), überprüft alle Header, lädt den Zustand herunter und vergleicht ihn mit den Headern. + +- Verlässt sich auf die Sicherheit des Konsensmechanismus. +- Die Synchronisierung dauert nur ein paar Stunden. + +##### Light sync + +Der Light-Client-Modus lädt alle Block-Header und Blockdaten herunter und prüft einige zufällig. Synchronisiert nur die Spitze der Kette vom vertrauenswürdigen Kontrollpunkt. + +- Ruft nur den neuesten Zustand ab und verlässt sich dabei auf das Vertrauen in die Entwickler und den Konsensmechanismus. +- Der Client ist in wenigen Minuten mit dem aktuellen Netzwerkstatus einsatzbereit. + +[Mehr über Light-Clients](https://www.parity.io/blog/what-is-a-light-client/) + +##### Snap sync + +Eingeführt von Geth. Durch die Verwendung von dynamischen Snapshots, die von Peers bereitgestellt werden, werden alle Konto- und Speicherdaten abgerufen, ohne dass zwischengeschaltete Trie-Nodes heruntergeladen werden müssen, und der Merkle-Trie wird dann lokal rekonstruiert. + +- Schnellste von Geth entwickelte Synchronisierungsstrategie, derzeit die Standardstrategie +- Spart eine Menge Festplattenkapazität und Netzwerkbandbreite, ohne die Sicherheit zu beeinträchtigen. + +[Mehr über Snap](https://github.com/ethereum/devp2p/blob/master/caps/snap.md) + +##### Warp-Sync + +Implementiert durch OpenEthereum. Nodes generieren in regelmäßigen Abständen einen konsenskritischen Zustands-Snapshot, den jeder Peer über das Netzwerk abrufen kann, was eine schnelle Synchronisation von diesem Punkt aus ermöglicht. + +- Der schnellste und auch standardmäßige Synchronisationsmodus von OpenEthereum basiert auf den statischen Snapshots, die von Peers generiert werden. +- Das ist eine ähnliche Strategie wie bei Snap-Sync, aber ohne bestimmte Sicherheitsvorteile. + +[Mehr über Warp](https://openethereum.github.io/Beginner-Introduction#warping---no-warp) + +##### Beam-Sync + +Implementiert von Nethermind und Trinity. Beam-Sync funktioniert wie Fast-Sync, lädt aber auch die Daten herunter, die zum Ausführen der neusten Blocks benötigt wird. Dies ermöglicht dir, die Chain schon innerhalb der ersten paar Minuten nach dem Start abzufragen. + +- Synchronisiert den Zustand zuerst und ermöglicht die Abfrage von RPC in wenigen Minuten. +- Noch in der Entwicklung und nicht vollständig zuverlässig. Die Hintergrundsynchronisierung ist verlangsamt und RPC-Antworten könnten fehlschlagen. + +[Mehr zu Beam](https://medium.com/@jason.carver/intro-to-beam-sync-a0fd168be14a) + +#### Setup im Client {#client-setup} + +Clients bieten umfangreiche Konfigurationsmöglichkeiten für deine Bedürfnisse an. Wähle einfach einen aus, der am besten zu dir passt, basierend auf dem Niveau der Sicherheit, verfügbaren Daten und Kosten. Neben dem Synchronisations-Algorithmus kannst du auch verschiedene Arten von alten Daten automatisch reduzieren lassen (Pruning). Pruning ermöglicht das Löschen veralteter Daten (z. B. das Entfernen von Zustands-Trie-Nodes), die von den letzten Blocks unerreichbar sind. + +Beachte die Dokumentation oder die Hilfeseite des Clients, um herauszufinden, welcher Synchronisationsmodus als Standard festgelegt ist. Du kannst beim Einrichten die standardmäßige Synchronisationsart bestimmen, in etwa so: + +**Light-Sync in [GETH](https://geth.ethereum.org/) oder [ERIGON](https://github.com/ledgerwatch/erigon) einrichten** + +`geth --syncmode "light"` + +Für mehr Informationen, lies die Anleitung dazu, [wie man einen Geth-Light-Node ausführt](/developers/tutorials/run-light-node-geth/). + +**Einrichtung von Full-Sync mit Archive in [Besu](https://besu.hyperledger.org/)** + +`besu --sync-mode=FULL` + +Genau wie jede andere Konfiguration kann es mit der Startup-Flag oder in der Konfigurationsdatei definiert werden. Ein weiteres Beispiel ist [Nethermind](https://docs.nethermind.io/nethermind/), welches dich dazu auffordert, während der ersten Initialisierung eine Konfiguration auszuwählen, und danach eine Konfigurationsdatei erstellt. + +## Konsens-Clients (früher als Eth2-Clients bekannt) {#consensus-clients} + +Es gibt mehrere Konsens-Clients (früher als Eth2-Clients bekannt), die dazu da sind, die [Konsens-Upgrades](/upgrades/beacon-chain/) zu unterstützen. Sie betreiben die Beacon Chain und werden den Ausführungen nach [The Merge](/upgrades/merge/) einen Proof-of-Stake-Konsensmechanismus zur Verfügung stellen. + +[Konsens-Clients anschauen](/upgrades/get-involved/#clients) + +| Client | Sprache | Betriebssysteme | Netzwerke | +| ----------------------------------------------------------- | ---------- | --------------------- | ------------------------------------- | +| [Teku](https://pegasys.tech/teku) | Java | Linux, Windows, MacOS | Beacon Chain, Prater | +| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, MacOS | Beacon Chain, Prater | +| [Lighthouse](https://lighthouse-book.sigmaprime.io/) | Rust | Linux, Windows, MacOS | Beacon Chain, Prater, Pyrmont | +| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, MacOS | Beacon Chain, Prater | +| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Los | Linux, Windows, MacOS | Beacon Chain, Gnosis, Prater, Pyrmont | + +## Hardware {#hardware} + +Die Hardwareanforderungen sind je nach Client unterschiedlich, aber im Allgemeinen nicht besonders hoch, da der Node nur synchronisiert bleiben muss. Verwechsle es nicht mit dem Mining, das viel mehr Rechenleistung erfordert. Die Synchronisation von Zeit und Leistung verbessert sich jedoch mit leistungsstärkerer Hardware. Je nach Bedarf und Wunsch kann Ethereum auf deinem Computer, Home-Server, Single-Board-Computer oder virtuellen privaten Servern in der Cloud ausgeführt werden. + +Eine einfache Möglichkeit, deinen eigenen Node zu betreiben, ist die Verwendung von Plug-and-play-Boxen wie [dAppNode](https://dappnode.io/). Es stellt Hardware für laufende Clients und Anwendungen mit einer einfachen Benutzeroberfläche zur Verfügung. + +### Voraussetzungen {#requirements} + +Bevor du einen Client installierst, stelle bitte sicher, dass dein Computer über genügend Ressourcen verfügt, um ihn auszuführen. Die Mindestanforderungen und die empfohlenen Anforderungen findest du weiter unten. Der wichtigste Teil ist jedoch der Festplattenplatz. Die Synchronisation der Ethereum-Blockchain ist Datentechnisch sehr ein-/ausgangsintensiv. Es ist am besten, ein SSD einzusetzen. Um einen Ethereum-Client auf HDD laufen zu lassen, benötigst du mindestens 8 GB RAM für den Cache. + +#### Mindestanforderungen {#recommended-specifications} + +- CPU mit 2+ Kernen +- Mindestens 4 GB RAM mit SSD, 8 GB+, wenn du eine HDD-Festplatte verwendest +- 8 MBit/s Bandbreite + +#### Empfohlene Spezifikationen {#recommended-specifications} + +- Schnelle CPU mit 4+ Kernen +- 16 GB+ RAM +- Schnelle SSD mit mindestens 500 GB freiem Speicherplatz +- 25+ MBit/s Bandbreite + +Der Sync-Modus, den du auswählst, wird einen Einfluss auf den benötigten Speicherplatz haben, deswegen haben wir schon einmal den notwendigen Speicherplatz für jeden Client abgeschätzt. + +| Client | Festplattengröße (Fast Sync) | Festplattengröße (Full Archive) | +| ------------ | ---------------------------- | ------------------------------- | +| Geth | 400 GB+ | 6 TB+ | +| OpenEthereum | 280 GB+ | 6 TB+ | +| Nethermind | 200 GB+ | 5 TB+ | +| Besu | 750 GB+ | 5 TB+ | +| Erigon | N/A | 1 TB+ | + +- Hinweis: Erigon kann keinen Fast-Sync durchführen, aber Full-Pruning ist möglich (~500 GB) + +![Ein Diagramm, das aufzeigt, dass die Gigabytes für eine Full-Synchronisation ansteigen](./full-sync.png) + +![Ein Diagramm, das aufzeigt, dass die Gigabytes für eine Archive-Synchronisation ansteigen](./archive-sync.png) + +Diese Diagramme zeigen, wie sich die Speicheranforderungen fortwährend ändern. Die aktuellsten Daten für Geth und OpenEthereum findest du auf [Full-Sync-Daten](https://etherscan.io/chartsync/chaindefault) und [Archive-Sync-Daten](https://etherscan.io/chartsync/chainarchive). + +### Ethereum auf einem Einzelplatinen-Computer {#ethereum-on-a-single-board-computer} + +Die bequemste und günstigste Art, Ethereum-Nodes zu betreiben, ist die Benutzung eines Einzelboard-Computers mit ARM-Architektur wie den Raspberry Pi. [Ethereum auf ARM](https://twitter.com/EthereumOnARM) bietet Bilder von Geth-, OpenEthereum-, Nethermind- und Besu-Clients. Hier ist ein einfaches Tutorial dazu, [wie man einen ARM-Client aufsetzt und einrichtet](/developers/tutorials/run-node-raspberry-pi/). + +Kleine, erschwingliche und effiziente Geräte wie diese sind ideal für den Betrieb eines Nodes zu Hause. + +## Weiterführende Informationen {#further-reading} + +Es gibt eine große Menge an Informationen über Ethereum-Clients im Internet. Hier sind ein paar Anhaltspunkte, die bei der Suche hilfreich sein könnten. + +- [Ethereum 101 - Part 2 - Understanding Nodes](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes, 13 February 2019_ +- [Running Ethereum Full Nodes: A Guide for the Barely Motivated](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 November 2019_ +- [Running an Ethereum Node](https://docs.ethhub.io/using-ethereum/running-an-ethereum-node/) _– ETHHub, updated often_ +- [Analyzing the hardware requirements to be an Ethereum full validated node](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 September 2018_ +- [Running a Hyperledger Besu Node on the Ethereum Mainnet: Benefits, Requirements, and Setup](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– Felipe Faraggi, 7 May 2020_ + +## Verwandte Themen {#related-topics} + +- [Blöcke](/developers/docs/blocks/) +- [Netzwerke](/developers/docs/networks/) + +## Verwandte Tutorials {#related-tutorials} + +- [Running a Node with Geth](/developers/tutorials/run-light-node-geth/) _– How to download, install and run Geth. Covering syncmodes, the JavaScript console, and more._ +- [Turn your Raspberry Pi 4 into a validator node just by flashing the MicroSD card – Installation guide](/developers/tutorials/run-node-raspberry-pi/) _– Flash your Raspberry Pi 4, plug in an ethernet cable, connect the SSD disk and power up the device to turn the Raspberry Pi 4 into a full Ethereum node running the execution layer (Mainnet) and / or the consensus layer (Beacon Chain / validator)._ diff --git a/src/content/translations/de/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/de/developers/docs/nodes-and-clients/nodes-as-a-service/index.md new file mode 100644 index 00000000000..cdb16fe86a1 --- /dev/null +++ b/src/content/translations/de/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -0,0 +1,218 @@ +--- +title: Nodes als Dienstleistung +description: Eine Einstiegsübersicht über Node-Dienste, die Vor- und Nachteile und beliebte Anbieter. +lang: de +sidebar: true +sidebarDepth: 2 +--- + +## Einführung {#Introduction} + +Deinen eigenen [Ethereum-Node](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) zu betreiben kann eine Herausforderung sein, vor allem wenn du gerade beginnst oder während du schnell skalierst. Es gibt eine [Anzahl von Diensten](#popular-node-services), die optimierte Nodeinfrastrukturen für dich ausführen, damit du dich stattdessen auf die Entwicklung deiner Applikation oder deines Produkts konzentrieren kannst. Wir erklären dir, wie Node-Dienste funktionieren, welche Vor- und Nachteile sie haben und listen Anbieter auf, falls du anfangen willst, sie zu verwenden. + +## Voraussetzungen {#prerequisites} + +Wenn du noch nicht weißt, was Nodes und Clients sind, schaue dir [Nodes und Clients](/developers/docs/nodes-and-clients/) an. + +## Wie funktionieren Node-Dienste? {#how-do-node-services-work} + +Node-Dienste betreiben im Hintergrund dezentralisierte Node-Clients für dich, so dass du dich um den Aufbau der Infrastruktur nicht zu kümmern brauchst. + +Diese Dienste bieten in der Regel einen API-Schlüssel an, den du verwenden kannst, um in der Blockchain zu schreiben und zu lesen. Sie beinhalten oft den Zugriff auf [Ethereum-Testnetze](/developers/docs/networks/#testnets) zusätzlich zum Mainnet. + +Einige Dienste bieten dir Ihren eigenen dedizierten Node, den sie für dich verwalten, während andere Load Balancer nutzen, um die Aktivität auf mehrere Nodes zu verteilen. + +Fast alle Node-Dienste sind extrem einfach mit einer Zeilenänderung in deinen Code zu integrieren, um deinen selbst gehosteten Node auszutauschen oder sogar zwischen den Diensten selbst zu wechseln. + +Oft laufen Node-Dienste mit einer Vielzahl von [Node-Clients](/developers/docs/nodes-and-clients/#execution-clients) und [Typen](/developers/docs/nodes-and-clients/#node-types), so dass du in einer API zusätzlich zu Client-spezifischen Methoden auf Voll- und Archivierungsnodes zugreifen kannst. + +Es ist wichtig zu beachten, dass Node-Dienste keinesfalls deine privaten Schlüssel oder Informationen speichern können und sollten. + +## Was sind die Vorteile bei der Verwendung eines Node-Dienstes? {#benefits-of-using-a-node-service} + +Der Hauptvorteil bei der Nutzung eines Node-Dienstes besteht darin, die technische Zeit nicht zu benötigen, um die Nodes selbst aufzusetzen und zu verwalten. So kannst du dich auf den Aufbau deines Produkts konzentrieren, anstatt dich um die Wartung der Infrastruktur kümmern zu müssen. + +Der Betrieb eigener Nodes kann sehr kostspielig sein, vom Speicherplatz über die Bandbreite bis hin zu wertvoller Entwicklungszeit. Dinge wie das Starten weiterer Nodes bei der Skalierung, das Aufrüsten von Nodes auf die neueste Version und die Sicherstellung der Zustandskonsistenz können von der Entwicklung und dem Einsatz von Ressourcen für dein gewünschtes Web3-Produkt ablenken. + +## Was sind die Nachteile eines Node-Dienstes? {#cons-of-using-a-node-service} + +Durch den Einsatz eines Node-Dienstes zentralisierst du den Infrastrukturaspekt deines Produkts. Aus diesem Grund bevorzugen Projekte, für die Dezentralisierung die oberste Priorität hat, eher selbst bereitgestellte Nodes gegenüber Outsourcing an Dritte. + +Erfahre mehr über die [Vorteile des Betriebs deines eigenen Nodes](/developers/docs/nodes-and-clients/#benefits-to-you). + +## Beliebte Node-Dienste {#popular-node-services} + +Hier ist eine Liste der beliebtesten Ethereum-Nodeanbieter. Du bist eingeladen, fehlende hinzuzufügen! Jeder Node-Dienst bietet zusätzlich zu kostenlosen oder bezahlten Stufen verschiedene Vorteile und Funktionen. Bevor du dich entscheidest, solltest du untersuchen, welcher am besten zu deinen Bedürfnissen passt. + +- [**Alchemy**](https://www.alchemy.com/) + - [Dokumentation](https://docs.alchemyapi.io/) + - Eigenschaften + - Kostenlose Tier-Option + - Skalierung nach Belieben + - Kostenlose Archivdaten + - Analysetools + - Dashboard + - Einzigartige API-Endpunkte + - Webhooks + - Direkter Support +- [**Ankr**](https://www.ankr.com/) + - [Dokumentation](https://docs.ankr.com/) + - Eigenschaften + - Ankr-Protokoll – offener Zugang zu öffentlichen RPC-API-Endpunkten für 8+ Ketten + - Lastausgleich und Überwachung der Node-Gesundheit für ein schnelles und zuverlässiges Gateway zum nächstgelegenen verfügbaren Node + - Premium-Tier mit WSS-Endpunkt und unbegrenzter Tarifgrenze + - Bereitstellung von vollständigen Nodes und Validierungs-Nodes für 40+ Ketten mit einem Klick + - Skalierung nach Belieben + - Analysetools + - Dashboard + - RPC-, HTTPS- und WSS-Endpunkte + - Direkter Support +- [**BlockDaemon**](https://blockdaemon.com/) + - [Dokumentation](https://ubiquity.docs.blockdaemon.com/) + - Vorteile + - Dashboard + - Pro-Node-Basis + - Analyse +- [**Chainstack**](https://chainstack.com/) + - [Dokumentation](https://docs.chainstack.com/) + - Eigenschaften + - Kostenloses Teilen von Nodes + - Gemeinsam genutzte Archiv-Nodes + - GraphQL-Support + - RPC- und WSS-Endpunkte + - Dedizierte Voll- und Archiv-Nodes + - Schnelle Synchronisierungszeit für gezielte Einsätze + - Bring deine Cloud mit + - Bezahlung pro Stunde + - Direkter 24/7-Support +- [**GetBlock**](https://getblock.io/) + - [Dokumentation](https://getblock.io/docs/get-started/authentication-with-api-key/) + - Eigenschaften + - Zugang zu 40+ Blockchain-Nodes + - 40.000 kostenlose und tägliche Anfragen + - Unbegrenzte Anzahl von API-Schlüsseln + - Hohe Verbindungsgeschwindigkeit mit 1GB/sec + - Verfolgen+Archivieren + - Erweiterte Analyse + - Automatisierte Updates + - Technischer Support +- [**InfStones**](https://infstones.com/) + - Eigenschaften + - Kostenlose Tier-Option + - Skalierung nach Belieben + - Analyse + - Dashboard + - Einzigartige API-Endpunkte + - Dedizierte vollständige Nodes + - Schnelle Synchronisierungszeit für gezielte Einsätze + - Direkter 24/7-Support + - Zugang zu mehr als 50 Blockchain-Nodes +- [**Infura**](https://infura.io/) + - [Dokumentation](https://infura.io/docs) + - Eigenschaften + - Kostenlose Tier-Option + - Skalierung nach Belieben + - Kostenlose Archivierungsdaten + - Direkter Support + - Dashboard +- [**Kaleido**](https://kaleido.io/) + - [Dokumentation](https://docs.kaleido.io/) + - Eigenschaften + - Kostenloser Starter + - Bereitstellung von Ethereum-Nodes mit einem Klick + - Anpassbare Clients und Algorithmen (Geth, Quorum & Besu || PoA, IBFT & Raft) + - 500+ Verwaltungs- und Service-APIs + - RESTful-Schnittstelle für die Übermittlung von Ethereum-Transaktionen (unterstützt von Apache Kafka) + - Ausgehende Streams für die Zustellung von Ereignissen (unterstützt von Apache Kafka) + - Umfassende Sammlung von "Off-Chain"- und Zusatzdiensten (z. B. bilateraler verschlüsselter Nachrichtenverkehr) + - Unkompliziertes Netzwerk-Onboarding mit Governance und rollenbasierter Zugriffskontrolle + - Ausgefeilte Benutzerverwaltung für Administratoren und Endbenutzer + - Hochgradig skalierbare, belastbare, unternehmensgerechte Infrastruktur + - Verwaltung privater HSM-Schlüssel in der Cloud + - Ethereum Mainnet-Anbindung + - ISO 27000 und SOC 2, Typ-2-Zertifizierungen + - Dynamische Laufzeitkonfiguration (z. B. Hinzufügen von Cloud-Integrationen, Änderung von Knoteneingängen usw.) + - Unterstützung für Multi-Cloud-, Multi-Region- und Hybrid-Einsatz-Orchestrierungen + - Einfache SaaS-Preise auf Stundenbasis + - SLAs- und 24/7-Support +- [**Moralis**](https://moralis.io/) + - [Dokumentation](https://docs.moralis.io/) + - Eigenschaften + - Kostenloses Teilen von Nodes + - Kostenlose gemeinsam genutzte Archiv-Nodes + - Datenschutzfokussiert (keine Logs-Politik) + - Kettenübergreifender Support + - Skalierung nach Belieben + - Dashboard + - Einzigartiges Ethereum-SDK + - Einzigartige API-Endpunkte + - Direkter, technischer Support +- [**Pocket Network**](https://www.pokt.network/) + - [Dokumentation](https://docs.pokt.network/home/) + - Eigenschaften + - Dezentrales RPC-Protokoll und Marktplatz + - 1 Mio. Anfragen pro Tag für kostenlose Tiers (pro Endpunkt, max. 2) + - [Öffentliche Endpunkte](https://docs.pokt.network/home/resources/public-rpc-endpoints) + - Pre-Stake+-Programm (wenn du mehr als 1 Mio. Anfragen pro Tag benötigst) + - Unterstützung von 15+ Blockchains + - 6400+ Nodes verdienen POKT für die Bedienung von Anwendungen + - Archivierungs- und Archivierungsnodes mit Rückverfolgung und Testnetz-Node-Unterstützung + - Ethereum Mainnet Node-Client-Diversität + - Kein einzelner Ausfallpunkt + - Keine Ausfallzeit + - Kosteneffiziente Near-Zero Tokenomics (POKT einmal für Netzwerkbandbreite einsetzen) + - Keine monatlichen versunkenen Kosten: Verwandle deine Infrastruktur in einen Vermögenswert + - Load-Balancing im Protokoll integriert + - Unendliche Skalierung der Anzahl von Anfragen pro Tag und der Nodes pro Stunde + - Die privatste und zensurresistenteste Option + - Praktische Unterstützung für Entwickler + - [Pocket Portal](https://bit.ly/ETHorg_POKTportal)-Dashboard und Analysen +- [**QuikNode**](https://www.quiknode.io/) + - Eigenschaften + - 7 Tage kostenlos + - Vielseitiger Support + - Webhooks + - Dashboard + - Analyse +- [**Rivet**](https://rivet.cloud/) + - [Dokumentation](https://rivet.readthedocs.io/en/latest/) + - Eigenschaften + - Kostenlose Tier-Option + - Skalierung nach Belieben +- [**SettleMint**](https://console.settlemint.com/) + - [Dokumentation](https://docs.settlemint.com/) + - Eigenschaften + - Kostenlose Testphase + - Skalierung nach Belieben + - GraphQL-Support + - RPC- und WSS-Endpunkte + - Dedizierte vollständige Nodes + - Bring deine Cloud mit + - Analysetools + - Dashboard + - Bezahlung pro Stunde + - Direkter Support +- [**Watchdata**](https://watchdata.io/) + - [Dokumentation](https://docs.watchdata.io/) + - Eigenschaften + - Zuverlässigkeit der Daten + - Ununterbrochene Verbindung ohne Ausfallzeiten + - Prozessautomatisierung + - Kostenlose Tarife + - Hohe Limits, für jeden Benutzer geeignet + - Unterstützung für unterschiedliche Nodes + - Ressourcenskalierung + - Hohe Verarbeitungsgeschwindigkeit + +## Weiterführende Informationen {#further-reading} + +- [Liste der Ethereum-Nodedienste](https://ethereumnodes.com/) + +## Verwandte Themen {#related-topics} + +- [Nodes und Clients](/developers/docs/nodes-and-clients/) + +## Verwandte Tutorials {#related-tutorials} + +- [Erste Schritte in der Ethereum-Entwicklung mit Alchemy](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) +- [Leitfaden zum Versenden von Transaktionen über web3 und Alchemy](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git a/src/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md b/src/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md new file mode 100644 index 00000000000..3b87a2a49a8 --- /dev/null +++ b/src/content/translations/de/developers/docs/nodes-and-clients/run-a-node/index.md @@ -0,0 +1,166 @@ +--- +title: Errichte deinen eigenen Ethereum-Node +description: Allgemeine Einführung in den Betrieb einer eigenen Ethereum-Client-Instanz. +lang: de +sidebar: true +sidebarDepth: 2 +--- + +Der Betrieb einer eigener Node bietet dir verschiedene Vorteile, eröffnet neue Möglichkeiten und trägt zur Unterstützung des Ökosystems bei. Diese Seite führt dich durch die Einrichtung deines eigenen Nodes und die Teilnahme an der Validierung von Ethereum-Transaktionen. + +## Voraussetzungen {#prerequisites} + +Du solltest verstehen, was ein Ethereum-Node ist und warum du möglicherweise einen Client betreiben solltest. Dies wird in [Nodes und Clients](/developers/docs/nodes-and-clients/) behandelt. + +Wenn das Thema neu für dich ist oder du nach einem weniger technischen Weg suchst, empfehlen wir dir, zunächst unsere benutzerfreundliche Einführung zum [Betrieb eines Ethereum-Nodes](/run-a-node) zu lesen. + +## Herangehensweise bestimmen {#choosing-approach} + +Der erste Schritt beim Einrichten deines Nodes besteht in der Wahl der Herangehensweise. Du musst den Client (die Software), die Umgebung und die Parameter auswählen, mit denen du beginnen möchtest. >Hier sind alle verfügbaren [Mainnet-Clients](/developers/docs/nodes-and-clients/#advantages-of-different-implementations). + +#### Client-Einstellungen {#client-settings} + +Client-Implementierungen ermöglichen unterschiedliche Synchronisierungsmodi und verschiedene andere Optionen. [Synchronisierungsmodi](/developers/docs/nodes-and-clients/#sync-modes) stellen verschiedene Methoden zum Herunterladen und Validieren von Blockchain-Daten dar. Bevor du den Node startest, solltest du entscheiden, welchen Netzwerk- und Synchronisierungsmodus du verwenden möchtest. Das Wichtigste sind der Speicherplatz und die Synchronisierungszeit, die der Client benötigt. + +Alle Funktionen und Optionen sind in der Dokumentation des Clients zu finden. Es können verschiedene Client-Konfigurationen eingestellt werden, indem der Client mit den entsprechenden Flags ausgeführt wird. Weitere Informationen zu Flags findest du auf [EthHub](https://docs.ethhub.io/using-ethereum/running-an-ethereum-node/#client-settings) oder in der Client-Dokumentation. Zu Testzwecken kannst du einen Client in einem der Testnetze betreiben. [Übersicht der unterstützten Netzwerke](/developers/docs/nodes-and-clients/#execution-clients) + +### Umgebung und Hardware {#environment-and-hardware} + +#### Lokal oder Cloud {#local-vs-cloud} + +Ethereum-Clients können auf gewöhnlichen Computern laufen und benötigen keine spezielle Hardware, wie zum Beispiel beim Mining. Daher hast du je nach Bedarf verschiedene Optionen für den Einsatz. Zur Vereinfachung stellen wir uns vor, dass ein Node sowohl auf einem lokalen physischen Computer als auch auf einem Cloud-Server läuft: + +- Cloud + - Anbieter bieten eine hohe Serververfügbarkeit, statische öffentliche IP-Adressen + - Ein dedizierter oder virtueller Server kann bequemer sein als ein eigener + - Die Gegenleistung ist das Vertrauen in eine dritte Partei – den Serveranbieter + - Aufgrund der erforderlichen Speichergröße für einen vollständigen Node kann der Preis für einen gemieteten Server hoch werden +- Eigene Hardware + - Vertrauenslosere und souveränere Vorgehensweise + - Einmalige Investition + - Option zum Kauf vorkonfigurierter Maschinen + - Du musst die Maschine physisch vorbereiten, warten und ggf. Fehler beheben + +Beide Optionen haben verschiedene Vorteile, die oben zusammengefasst sind. Wenn du eine Cloudlösung suchst, gibt es neben vielen traditionellen Cloud-Computing-Anbietern auch Dienste, die sich auf die Bereitstellung von Nodes konzentrieren. Beispiel: + +- [QuikNode](https://www.quiknode.io/) +- [Blockdaemon](https://blockdaemon.com) +- [LunaNode](https://www.lunanode.com/) +- [Alchemy](https://www.alchemy.com/) + +#### Hardware {#hardware} + +Ein zensurresistentes, dezentrales Netz sollte sich jedoch nicht auf Cloudanbieter verlassen. Es ist gesünder für das Ökosystem, wenn du deinen eigenen Node auf einer Hardware betreibst. Die einfachsten Optionen sind vorkonfigurierte Geräte, z. B.: + +- [DappNode](https://dappnode.io/) +- [Avado](https://ava.do/) + +Überprüfe die minimalen und empfohlenen [Festplattenspeicherplatzanforderungen für jeden Client und Synchronisierungsmodus](/developers/docs/nodes-and-clients/#requirements). Im Allgemeinen sollte eine bescheidene Rechenleistung ausreichen. Das Problem ist in der Regel die Geschwindigkeit der Datenträger. Während der anfänglichen Synchronisierung führen Ethereum-Clients eine Menge Lese- und Schreibvorgänge durch. Daher wird SSD dringend empfohlen. Ein Client ist möglicherweise nicht einmal [in der Lage, den aktuellen Stand auf der Festplatte zu synchronisieren](https://github.com/ethereum/go-ethereum/issues/16796#issuecomment-391649278), und bleibt ein paar Blöcke hinter dem Mainnet zurück. Du kannst die meisten Clients auf einem [Einplatinencomputer mit ARM](/developers/docs/nodes-and-clients/#ethereum-on-a-single-board-computer/) betreiben. Du kannst auch das [Ethbian](https://ethbian.org/index.html)-Betriebssystem für Raspberry Pi 4 verwenden. Damit können Sie [einen Client durch das Flashen der SD-Karte](/developers/tutorials/run-node-raspberry-pi/) starten. Je nach Software und Hardware können die anfängliche Synchronisierungszeit und die Speicheranforderungen variieren. Achte darauf, [die Synchronisierungszeiten und Speicheranforderungen zu überprüfen](/developers/docs/nodes-and-clients/#recommended-specifications). Vergewissere dich auch, dass deine Internetverbindung nicht durch eine [Bandbreitenbeschränkung](https://wikipedia.org/wiki/Data_cap) begrenzt ist. Es wird empfohlen, eine nicht gebührenpflichtige Verbindung zu verwenden, da die anfängliche Synchronisierung und die an das Netzwerk übertragenen Daten dein Limit überschreiten könnten. + +#### Das Betriebssystem {#operating-system} + +Alle Clients unterstützen die wichtigsten Betriebssysteme: Linux, MacOS, Windows. Das bedeutet, dass deine Nodes auf normalen Desktop- oder Server-Rechnern mit dem Betriebssystem (OS), welches dir am besten passt, betrieben werden können. Stelle sicher, dass dein Betriebssystem auf dem neuesten Stand ist, um mögliche Probleme und Sicherheitslücken zu vermeiden. + +## Hochfahren des Nodes {#spinning-up-node} + +### Abrufen der Client-Software {#getting-the-client} + +Lade zunächst deine bevorzugte [Client-Software](/developers/docs/nodes-and-clients/#execution-clients) herunter. + +Du kannst einfach eine ausführbare Anwendung oder ein Installationspaket herunterladen, das für dein Betriebssystem und deine Architektur geeignet ist. Überprüfe immer die Signaturen und Prüfsummen der heruntergeladenen Pakete. Einige Clients bieten auch Repositorys zur einfacheren Installation und Aktualisierung an. Wenn du es bevorzugst, kannst du diese aus dem Quellcode erstellen. Alle Clients sind quelloffen, so dass du sie mit dem richtigen Compiler aus dem Quellcode erstellen kannst. + +Ausführbare Binärdateien für stabile Mainnet-Client-Implementierungen können von den jeweiligen Release-Seiten heruntergeladen werden: + +- [Geth](https://geth.ethereum.org/downloads/) +- [OpenEthereum](https://github.com/openethereum/openethereum/releases) +- [Nethermind](https://downloads.nethermind.io/) +- [Besu](https://pegasys.tech/solutions/hyperledger-besu/) +- [Erigon](https://github.com/ledgerwatch/erigon) + +**Beachte, dass OpenEthereum [veraltet](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) ist und nicht mehr gewartet wird.** Verwende es mit Vorsicht und wechsle lieber zu einer anderen Client-Implementierung. + +### Starten des Clients {#starting-the-client} + +Bevor du die Ethereum-Client-Software startest, überprüfe noch einmal, ob deine Umgebung bereit ist. Vergewissere dich z. B. + +- dass unter Berücksichtigung des gewählten Netzwerk- und Synchronisationsmodus genügend Speicherplatz vorhanden ist, +- dass Speicher und CPU nicht durch andere Programme angehalten werden, +- dass das Betriebssystem auf die neueste Version aktualisiert wird, +- dass das System die richtige Uhrzeit und das richtige Datum hat, +- dass dein Router und deine Firewall Verbindungen an abhörenden Ports akzeptieren. Standardmäßig verwenden Ethereum-Clients einen Listener(TCP)-Port und einen UDP-Port, beide standardmäßig 30303. + +Führe deinen Client zunächst in einem Testnetz aus, um sicherzustellen, dass alles korrekt funktioniert. [Die Ausführung eines Geth light node](/developers/tutorials/run-light-node-geth/) sollte helfen. Du musst alle Client-Einstellungen, die nicht standardmäßig sind, zu Beginn angeben. Du kannst Flags oder die Konfigurationsdatei verwenden, um deine bevorzugte Konfiguration zu deklarieren. Die Einzelheiten findest du in der Dokumentation deines Clients. Der Client führt seine Kernfunktionen aus, wählt die Endpunkte und beginnt mit der Suche nach Peers. Nach erfolgreicher Erkennung von Peers beginnt der Client mit der Synchronisierung. Die aktuellen Blockchain-Daten sind verfügbar, sobald der Client erfolgreich mit dem aktuellen Zustand synchronisiert wurde. + +### Nutzung des Clients {#using-the-client} + +Clients bieten RPC-API-Endpunkte, mit denen du den Client steuerst und auf verschiedene Weise mit dem Ethereum-Netzwerk interagieren kannst: + +- manueller Aufruf mit einem geeigneten Protokoll (z. B. mit `curl`) +- Anhängen einer bereitgestellten Konsole (z. B. `geth attach`) +- ihre Implementierung in Anwendungen + +Verschiedene Clients haben unterschiedliche Implementierungen der RPC-Endpunkte. Es gibt jedoch einen Standard-JSON-RPC, den du mit jedem Client verwenden kannst. Für einen Überblick, [lies die JSON-RPC-Dokumente](https://eth.wiki/json-rpc/API). Anwendungen, die Informationen aus dem Ethereum-Netzwerk benötigen, können diesen RPC verwenden. Mit der beliebten Wallet MetaMask kannst du zum Beispiel [eine lokale Blockchain-Instanz betreiben und dich mit ihr verbinden](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node). + +#### Erreichen von RPC {#reaching-rpc} + +Der Standard-Port von JSON-RPC ist `8545`, aber du kannst die Ports der lokalen Endpunkte in der Konfigurationsdatei ändern. Standardmäßig ist die RPC-Schnittstelle nur über den localhost deines Computers erreichbar. Um sie aus der Ferne zugänglich zu machen, kannst du sie der Öffentlichkeit präsentieren, indem du die Adresse auf `0.0.0.0` änderst. Dadurch ist sie über lokale und öffentliche IP-Adressen zugänglich. In den meisten Fällen musst du auch eine Portweiterleitung auf deinem Router einrichten. + +Du solltest dies jedoch mit Vorsicht tun, da dadurch jeder im Internet deinen Node kontrollieren kann. Böswillige Akteure könnten auf deinen Node zugreifen, um dein System zum Absturz zu bringen oder dein Geld zu stehlen, wenn du deinen Client als Geldbörse verwendest. + +Eine Möglichkeit, dies zu umgehen, besteht darin, zu verhindern, dass potenziell schädliche RPC-Methoden geändert werden können. Beispielsweise kannst du mit `geth` veränderbare Methoden mit einem Flag deklarieren: `--http.api web3,eth,txpool`. + +Du kannst den Zugriff auf deine RPC-Schnittstelle auch hosten, indem du einen Webserverdienst wie Nginx auf die lokale Adresse und den Port deines Clients verweisen lässt. + +Die datenschutzfreundlichste und einfachste Art, einen öffentlich erreichbaren Endpunkt einzurichten, ist das Hosten auf deinem eigenen [Tor](https://www.torproject.org/)-Onion-Dienst. Auf diese Weise kannst du den RPC außerhalb deines lokalen Netzes erreichen, ohne eine statische öffentliche IP-Adresse oder geöffnete Ports. Du kannst das folgendermaßen tun: + +- Installiere `tor`. +- Bearbeite die `torrc`-Konfiguration, um den versteckten Dienst mit der RPC-Adresse und dem Port deines Clients zu aktivieren. +- Starte den `tor`-Dienst neu. + +Sobald du Tor neu gestartet hast, erhältst du versteckte Dienstschlüssel und einen Hostnamen in deinem gewünschten Verzeichnis. Von diesem Zeitpunkt an wird dein RPC unter einem `.onion`-Hostnamen erreichbar sein. + +### Betreiben des Nodes {#operating-the-node} + +Du solltest deinen Node regelmäßig überwachen, um sicherzustellen, dass er ordnungsgemäß funktioniert. Möglicherweise musst du gelegentlich Wartungsarbeiten durchführen. + +#### Den Node online halten {#keeping-node-online} + +Dein Node muss nicht ununterbrochen online sein, aber du solltest ihn so oft wie möglich online halten, um ihn mit dem Netzwerk zu synchronisieren. Du könntest ihn ausschalten, um ihn neu zu starten, aber bedenke, dass + +- das Herunterfahren einige Minuten dauern kann, wenn der aktuelle Zustand noch auf die Festplatte geschrieben wird, +- erzwungene Abschaltungen die Datenbank beschädigen können, +- Dein Client wird nicht mehr mit dem Netzwerk synchronisiert und muss neu synchronisiert werden, wenn du ihn neu startest. + +_Dies gilt nicht für Konsensschicht-Validierungs-Nodes._ Wenn du deinen Node offline schaltest, wirkt sich dies auf alle von ihm abhängigen Dienste aus. Wenn du einen Node für _Sicherungszwecke_ betreibst, solltest du versuchen, die Ausfallzeiten so gering wie möglich zu halten. + +#### Erstellung eines Client-Dienstes {#creating-client-service} + +Ziehe in Erwägung, einen Dienst zu erstellen, der deinen Client beim Start automatisch ausführt. Auf Linux-Servern wäre es beispielsweise eine gute Praxis, einen Dienst zu erstellen, der den Client mit der richtigen Konfiguration und unter einem Benutzer mit begrenzten Rechten ausführt und automatisch neu startet. + +#### Aktualisieren des Clients {#updating-client} + +Du müsstest deine Client-Software mit den neuesten Sicherheitspatches, Funktionen und [EIPs](/eips/) auf dem neuesten Stand halten. Besonders vor [hard forks](/history/) solltest du sicherstellen, dass du die richtige Client-Version verwendest. + +Jede Client-Implementierung hat eine von Menschen lesbare Versionszeichenfolge, die im Peer-to-Peer-Protokoll verwendet wird, aber auch über die Befehlszeile zugänglich ist. Anhand dieses Versionsstrings können die Benutzer überprüfen, ob sie die richtige Version verwenden. Außerdem ermöglicht er es Blockexplorern und anderen Analysewerkzeugen eine quantitative Analyse der Verteilung bestimmter Clients im Netz. Weitere Informationen zu den Versionsstrings finden Sie in der jeweiligen Client-Dokumentation. + +#### Durchführung zusätzlicher Dienste {#running-additional-services} + +Wenn du deinen eigenen Node betreibst, kannst du Dienste nutzen, die einen direkten Zugang zum Ethereum-Client-RPC erfordern. Dies sind Dienste, die auf Ethereum aufbauen, wie [Layer-2-Lösungen](/developers/docs/scaling/#layer-2-scaling), [Konsens-Clients](/upgrades/get-involved/#clients) und andere Ethereum-Infrastruktur. + +#### Überwachung des Nodes {#monitoring-the-node} + +"Um deine Node richtig zu überwachen, solltest du Metriken sammeln. Clients stellen Metrik-Endpunkte bereit, damit du umfassende Daten über deinen Node erhalten kannst. Verwende Tools wie [InfluxDB](https://www.influxdata.com/get-influxdb/) oder [Prometheus](https://prometheus.io/) um Datenbanken zu erstellen, die du in Software wie [Grafana](https://grafana.com/) in Visualisierungen und Diagramme umwandeln kannst. Es gibt viele Setups für die Verwendung dieser Software und verschiedene Grafana-Dashboards, mit denen du deine Nodes und das Netzwerk als Ganzes visualisieren kannst. Behalte im Rahmen der Überwachung auch die Leistung deiner Maschine im Auge. Während der ersten Synchronisierung deiner Node kann die Client-Software sehr viel CPU und RAM beanspruchen. Zusätzlich zu Grafana kannst du die Tools deines Betriebssystems wie `htop` oder `uptime` verwenden, um dies zu tun. + +## Weiterführende Informationen {#further-reading} + +- [Analyzing the hardware requirements to be an Ethereum full validated node](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 September 2018_ +- [Running Ethereum Full Nodes: A Guide for the Barely Motivated](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 November 2019_ +- [Running an Ethereum Node](https://docs.ethhub.io/using-ethereum/running-an-ethereum-node/) _– ETHHub, updated often_ +- [Running a Hyperledger Besu Node on the Ethereum Mainnet: Benefits, Requirements, and Setup](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– Felipe Faraggi, 7 May 2020_ +- [Deploying Nethermind Ethereum Client with Monitoring Stack](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _– Nethermind.eth, 8 July 2020_ + +## Verwandte Themen {#related-topics} + +- [Nodes und Clients](/developers/docs/nodes-and-clients/) +- [Blöcke](/developers/docs/blocks/) +- [Netzwerke](/developers/docs/networks/) diff --git a/src/content/translations/de/developers/docs/transactions/index.md b/src/content/translations/de/developers/docs/transactions/index.md new file mode 100644 index 00000000000..1444902b747 --- /dev/null +++ b/src/content/translations/de/developers/docs/transactions/index.md @@ -0,0 +1,209 @@ +--- +title: Transaktionen +description: Eine Übersicht über die Transaktionen von Ethereum – wie sie arbeiten, ihre Datenstruktur und wie sie über eine App gesendet werden. +lang: de +sidebar: true +--- + +Transaktionen sind kryptographisch signierte Anweisungen von Konten. Ein Konto wird eine Transaktion starten, um den Zustand des Ethereum-Netzwerks zu aktualisieren. Die einfachste Transaktion ist die Übertragung von ETH von einem Konto auf ein anderes. + +## Voraussetzungen {#prerequisites} + +Um dir zu helfen, diese Seite besser zu verstehen, empfehlen wir dir, zuerst [ Konten](/developers/docs/accounts/), [Transaktionen](/en/developers/docs/transactions/) und unsere [Einführung in Ethereum](/developers/docs/intro-to-ethereum/) zu lesen. + +## Was ist eine Transaktion? {#whats-a-transaction} + +Eine Transaktion von Ethereum bezieht sich auf eine Aktion, die von einem externen Konto initiiert wird; mit anderen Worten auf ein Konto, das von einem Menschen verwaltet wird und nicht von einem Vertrag. Wenn zum Beispiel Bob Alice 1 ETH sendet, muss Bobs Konto belastet werden und das von Alice muss eine Gutschrift erhalten. Diese zustandsverändernde Aktion findet innerhalb einer Transaktion statt. + +![Diagramm mit einer Zustandsänderung aus einer Transaktion](./tx.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Transaktionen, die den Zustand der EVM verändern, müssen auf das gesamte Netzwerk übertragen werden. Jede Node kann eine Anfrage für eine Transaktion auf der EVM senden. Dann wird ein Miner/Validator die Transaktion ausführen und die daraus resultierende Zustandsänderung an den Rest des Netzwerks weiterleiten. + +Transaktionen erfordern eine Gebühr und müssen gemint werden, um Gültigkeit zu erlangen. Um diese Übersicht zu vereinfachen, werden wir die Gasgebühren und das Mining an anderer Stelle abdecken. + +Eine abgeschlossene Transaktion enthält folgende Informationen: + +- `recipient` – die Empfangsadresse (im Fall eines externen Kontos wird die Transaktion den Wert übertragen. Bei einem Smart-Contract-Konto wird die Transaktion den Vertragscode ausführen.) +- `signature` – der Identifikator des Absenders. Dies wird generiert, wenn der private Schlüssel des Absenders die Transaktion signiert und bestätigt, dass der Absender diese Transaktion autorisiert hat. +- `value` – Betrag der ETH zum Übertragen vom Absender zum Empfänger (in WEI, einer Stückelung von ETH) +- `data` – optionales Feld, um beliebige Daten einzubinden +- `gasLimit` – Die maximale Menge an Gaseinheiten, die von der Transaktion verbraucht werden können. Gaseinheiten stellen Berechnungsschritte dar. +- `maxPriorityFeePerGas` – die maximale Menge an Gas, die für den Miner als Trinkgeld enhalten sein soll +- `maxFeePerGas` – die maximale Menge an Gas, die für die Transaktion gezahlt werden soll (einschließlich `baseFeePerGas` und `maxPriorityFeePerGas`) + +Gas ist eine Referenz auf die Berechnung, die erforderlich ist, um die Transaktion durch einen Miner/Validator zu verarbeiten. Benutzer müssen für diese Berechnung eine Gebühr bezahlen. Das `gasLimit` und `maxPriorityFeePerGas` bestimmen die maximale Transaktionsgebühr, die an den Miner gezahlt wird. [Mehr zu Gas](/developers/docs/gas/). + +Das Transaktionsobjekt wird in etwa wie folgt aussehen: + +```js +{ + from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", + to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a", + gasLimit: "21000", + maxFeePerGas: "300", + maxPriorityFeePerGas: "10", + nonce: "0", + value: "10000000000" +} +``` + +Aber ein Transaktionsobjekt muss mit dem privaten Schlüssel des Absenders signiert werden. Dies beweist, dass die Transaktion nur vom Absender hätte kommen können und nicht betrügerisch verschickt wurde. + +Ein Ethereum-Client wie Geth wird diesen Signaturprozess bearbeiten. + +Beispiel-[JSON-RPC](https://eth.wiki/json-rpc/API)-Aufruf: + +```json +{ + "id": 2, + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db", + "gas": "0x55555", + "maxFeePerGas": "0x1234", + "maxPriorityFeePerGas": "0x1234", + "input": "0xabcd", + "nonce": "0x0", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x1234" + } + ] +} +``` + +Beispielantwort: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": { + "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "tx": { + "nonce": "0x0", + "maxFeePerGas": "0x1234", + "maxPriorityFeePerGas": "0x1234", + "gas": "0x55555", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x1234", + "input": "0xabcd", + "v": "0x26", + "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e", + "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e" + } + } +} +``` + +- Das `raw` ist die signierte Transaktion in rekursivem Längenpräfix (RLP) kodiertem Format. +- Das `tx` ist die signierte Transaktion im JSON-Format. + +Mit dem Signatur-Hash kann für die Transaktion kryptographisch nachgewiesen werden, dass sie vom Absender stammt und dem Netzwerk übermittelt wurde. + +### Das Datenfeld {#the-data-field} + +Die überwiegende Mehrheit der Transaktionen greift auf einen Vertrag über ein externes Konto zu. Die meisten Verträge sind in Solidity geschrieben und interpretieren ihr Datenfeld entsprechedn dem [application binary interface (ABI)](/glossary/#abi/). + +Die ersten vier Bytes geben an, welche Funktion aufgerufen werden soll, wobei der Hash des Funktionsnamens und der Argumente verwendet wird. Manchmal kannst du die Funktion anhand des Selektors aus [dieser Datenbank](https://www.4byte.directory/signatures/) identifizieren. + +Der Rest der Aufrufdaten sind die Argumente, [codiert wie in den ABI-Spezifikationen angegeben](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding). + +Betrachten wir zum Beispiel [diese Transaktion](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1). Verwende **Für mehr hier klicken**, um die Aufrufdaten zu sehen. + +Der Funktions-Selektor ist `0xa9059cbb`. Es gibt mehrere [bekannte Funktionen mit dieser Signatur](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb). In diesem Fall wurde [der Contract-Quellcode](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code) auf Etherscan hochgeladen, so dass wir wissen, dass die Funktion `transfer(address,uint256)` ist. + +Der Rest der Daten lautet: + +``` +0000000000000000000000004f6742badb049791cd9a37ea913f2bac38d01279 +000000000000000000000000000000000000000000000000000000003b0559f4 +``` + +Entsprechend den ABI-Spezifikationen erscheinen Ganzzahlwerte (wie Adressen, die 20-Byte-Ganzzahlen sind) in ABI als 32-Byte-Wörter, die vorne mit Nullen aufgefüllt werden. Also wissen wir, dass die Adresse von `to` [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279) ist. Der Wert ist `value` 0x3b0559f4 = 990206452. + +## Arten von Transaktionen {#types-of-transactions} + +Bei Ethereum gibt es unterschiedliche Arten von Transaktionen: + +- Reguläre Transaktionen: eine Transaktion von einer Wallet zur anderen. +- Vertragseinsatz-Transaktionen: eine Transaktion ohne "An"-Adresse, bei der das Datenfeld für den Vertragscode verwendet wird. +- Ausführung eines Vertrags: eine Transaktion, die mit einem bereitgestellten Smart Contract interagiert. In diesem Fall ist die Adresse von "to" die des Smart Contracts. + +### Über Gas {#on-gas} + +Wie bereits erwähnt, kosten das Ausführen von Transaktionen [gas](/developers/docs/gas/). Einfache Überweisungstransaktionen erfordern 21000 Gas. + +Damit Bob also Alice 1 ETH zu einer `BasisgebührPerGas` von 190 gwei und einer `maximalenPrioritätsgebührPerGas` von 10 gwei schicken kann, muss er folgende Gebühr bezahlen: + +``` +(190 + 10) * 21000 = 4.200.000 gwei +--oder-- +0,0042 ETH +``` + +Bobs Konto wird belastet mit **-1,0042 ETH** + +Alices Konto wird **+1,0 ETH** gutgeschrieben + +Die Grundgebühr wird **-0,00399 ETH** verbrannt + +Miner behält das Trinkgeld **+0,000210 ETH** + +Gas ist auch für alle Smart Contracts erforderlich. + +![Diagramm zeigt, wie ungenutztes Gas zurückerstattet wird](./gas-tx.png) _Diagramm angepasst von [Ethereum EVM illustriert](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Jedes Gas, das nicht in einer Transaktion verwendet wird, wird auf das Benutzerkonto zurückerstattet. + +## Transaktions-Lebenszyklus {#transaction-lifecycle} + +Sobald die Transaktion abgeschickt wurde, passiert Folgendes: + +1. Sobald du eine Transaktion gesendet hast, erzeugt die Kryptographie einen Transaktions-Hash: `0x97d99bc77292111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` +2. Die Transaktion wird dann in das Netzwerk übertragen und in einen Pool mit vielen anderen Transaktionen aufgenommen. +3. Ein Miner/Validator muss deine Transaktion auswählen und in einen Block einbinden, um die Transaktion zu überprüfen und sie als "erfolgreich" einzustufen. + - Du musst eventuell warten, wenn das Netzwerk beschäftigt ist und Miner/Validatoren nicht in der Lage sind, mit der Menge zu validierender Transaktionen mitzuhalten. +4. Deine Transaktion wird "Bestätigungen" erhalten. Die Anzahl der Bestätigungen ist die Anzahl der Blöcke, die seit dem Block, der deine Transaktion enthielt, erstellt wurde. Je höher die Zahl, desto größer ist die Gewissheit, dass das Netzwerk die Transaktion verarbeitet und anerkannt hat. + - Neuere Blöcke können umorganisiert werden, was den Eindruck erweckt, dass die Transaktion nicht erfolgreich war; die Transaktion kann jedoch noch gültig, aber in einem anderen Block enthalten sein. + - Die Wahrscheinlichkeit einer Reorganisation sinkt mit jedem weiteren geminten Block, d. h., je größer die Anzahl der Bestätigungen ist, desto unveränderlicher ist die Transaktion. + +## Eine visuelle Demo {#a-visual-demo} + +Schaue Austin bei einer Führung durch Transaktionen, Gas und Mining zu. + + + +## Typisierter Transaktionsumschlag {#typed-transaction-envelope} + +Ursprünglich hatte Ethereum ein einziges Format für Transaktionen. Jede Transaktion enthielt eine Nonce, einen Gaspreis, ein Gaslimit, eine Zieladresse, einen Wert, Daten, v, r und s. Diese Felder sind RLP-codiert und sehen in etwa so aus: + +`RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` + +Ethereum hat sich so entwickelt, dass es mehrere Transaktionsarten unterstützt, damit neue Funktionen wie Zugriffslisten und [EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md) implementiert werden können, ohne die alten Transaktionsformate zu beeinflussen. + +[EIP-2718: Typisierter Transaktionsumschlag](https://eips.ethereum.org/EIPS/eip-2718) definiert einen Transaktionstyp, der ein Umschlag für zukünftige Transaktionstypen ist. + +EIP-2718 ist ein neuer allgemeiner Umschlag für typisierte Transaktionen. In dem neuen Standard werden Transaktionen wie folgt interpretiert: + +`TransactionType || TransactionPayload` + +Die Felder sind wie folgt definiert: + +- `TransactionType` – eine Zahl zwischen 0 und 0x7f, für insgesamt 128 mögliche Transaktionsarten. +- `TransactionPayload` – ein beliebiges Byte-Array, das durch den Transaktionstyp definiert wird. + +## Weiterführende Informationen {#further-reading} + +- [EIP-2718: Typisierter Transaktionsumschlag](https://eips.ethereum.org/EIPS/eip-2718) + +_Kennst du eine Community-Ressource, die dir geholfen hat? Bearbeite diese Seite und füge sie hinzu!_ + +## Verwandte Themen {#related-topics} + +- [Konten](/developers/docs/accounts/) +- [Ethereum Virtual Machine (EVM)](/developers/docs/evm/) +- [Gas](/developers/docs/gas/) +- [Mining](/developers/docs/consensus-mechanisms/pow/mining/) diff --git a/src/content/translations/de/developers/docs/web2-vs-web3/index.md b/src/content/translations/de/developers/docs/web2-vs-web3/index.md new file mode 100644 index 00000000000..595dcb12213 --- /dev/null +++ b/src/content/translations/de/developers/docs/web2-vs-web3/index.md @@ -0,0 +1,62 @@ +--- +title: Web2 vs Web3 +description: +lang: de +sidebar: true +--- + +Web2 bezieht sich auf die Version des Internets, die die meisten von uns heute kennen. Ein Internet dominiert von Unternehmen, die im Austausch für deine persönlichen Daten Dienstleistungen erbringen. Web3 bezieht sich im Kontext von Ethereum auf dezentrale Apps, die auf der Blockchain laufen. Dies sind Apps, mit denen jeder teilnehmen kann, ohne seine persönlichen Daten zu monetarisieren. + +Suchen Sie nach einer anfängerfreundlicheren Einführung? Siehe unsere [Einführung in web3](/web3/). + +## Web3 – Vorteile {#web3-benefits} + +Viele Web3-Entwickler haben aufgrund der inhärenten Dezentralisierung von Ethereum beschlossen, dApps zu erstellen: + +- Jeder, der im Netzwerk ist, hat die Erlaubnis, den Dienst zu nutzen – oder anders ausgedrückt, es ist keine Erlaubnis erforderlich. +- Niemand kann dich blockieren oder dir den Zugang zum Dienst verweigern. +- Zahlungen sind über den nativen Token, Ether (ETH), eingebaut. +- Ethereum ist turing-vollständig, was bedeutet, dass du fast alles programmieren kannst. + +## Praktische Vergleiche {#practical-comparisons} + +| Web2 | Web3 | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | +| Twitter kann jeden Account oder Tweet zensieren | Web3-Tweets wären unzensierbar, da die Kontrolle dezentral ist | +| Ein Zahlungsservice kann beschließen, keine Zahlungen für bestimmte Arbeitsarten zuzulassen | Web3-Zahlungs-Apps erfordern keine persönlichen Daten und können Zahlungen nicht verhindern | +| Server für Gig-Economy-Apps könnten ausfallen und die Einkommen der Arbeitnehmer beeinträchtigen | Web3-Server können nicht ausfallen – sie verwenden Ethereum, ein dezentralisiertes Netzwerk von tausenden Computern als Backend | + +Dies bedeutet nicht, dass alle Dienste in eine dApp umgewandelt werden müssen. Diese Beispiele zeigen die wichtigsten Unterschiede zwischen Web2- und Web3-Dienstleistungen. + +## Web3 – Einschränkungen {#web3-limitations} + +Web3 hat momentan einige Einschränkungen: + +- Skalierbarkeit – Transaktionen sind auf Web3 langsamer, da sie dezentral sind. Änderungen am Zustand, wie eine Zahlung, müssen von einem Miner/Validator bearbeitet und über das gesamte Netzwerk verbreitet werden. +- UX – Eine Interaktion mit Web3-Anwendungen kann zusätzliche Schritte, Software und Ausbildung erfordern. Dies kann eine Hürde für die Adoption sein. +- Barrierefreiheit – Die fehlende Integration in moderne Webbrowser macht Web3 für die meisten Benutzer weniger zugänglich. +- Kosten – Die erfolgreichsten dApps legen sehr kleine Teile ihres Codes auf die Blockchain, da dies teuer ist. + +## Zentralisierung vs. Dezentralisierung {#centralization-vs-decentralization} + +In der unten stehenden Tabelle findest du einige Vor- und Nachteile zentralisierter und dezentralisierter digitaler Netzwerke. + +| Zentralisierte Systeme | Dezentralisierte Systeme | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Niedriger Netzwerkdurchmesser (alle Teilnehmer sind mit einer zentralen Behörde verbunden); Informationen werden schnell verbreitet, da die Verbreitung durch eine zentrale Autorität mit vielen rechnerischen Ressourcen gehandhabt wird. | Die am weitesten entfernten Teilnehmer im Netzwerk können möglicherweise viele Abstände voneinander entfernt sein. Von einer Seite des Netzwerks ausgestrahlte Informationen können lange brauchen, bis sie die andere Seite erreichen. | +| In der Regel leistungsfähiger (höherer Durchsatz, weniger gesamte Rechenressourcen nötig) und leichter implementierbar. | In der Regel niedrigere Leistung (niedrigerer Durchsatz, mehr gesamte Rechenressourcen nötig) und komplexer zu implementieren. | +| Im Falle widersprüchlicher Daten ist die Auflösung klar und einfach: Die ultimative Quelle der Wahrheit ist die zentrale Autorität. | Ein Protokoll (oft komplex) wird für die Streitbeilegung benötigt , wenn Peers widersprüchliche Ansprüche auf den Zustand der Daten erheben, auf die die Teilnehmer synchronisiert werden sollen. | +| Single Point of Failure: Böswillige Akteure können das Netzwerk möglicherweise durch gezielte Angriffe auf die zentrale Autorität ausschalten. | No Single Point of Failure: Das Netzwerk kann immer noch funktionieren, auch wenn ein großer Teil der Teilnehmer angegriffen bzw. ausgeschaltet wird. | +| Die Koordination zwischen den Netzwerkteilnehmern ist viel einfacher und wird von einer zentralen Autorität verwaltet. Die zentrale Autorität kann Netzwerkteilnehmer dazu zwingen, Upgrades, Protokoll-Updates etc. mit sehr wenig Widerstand zu übernehmen. | Die Koordinierung ist oft schwierig, da kein einziger Agent das letzte Wort bei Entscheidungen auf Netzwerkebene, Protokoll-Upgrades usw. hat. Im schlimmsten Fall neigt das Netzwerk zur Zersplitterung, wenn es Meinungsverschiedenheiten über Änderungen des Protokolls gibt. | +| Die zentrale Autorität kann Daten zensieren, wodurch Teile des Netzwerks von der Interaktion mit dem Rest des Netzes abgeschnitten werden könnten. | Zensur ist viel schwieriger, da Informationen viele Möglichkeiten haben, sich über das Netzwerk zu verbreiten. | +| Die Teilnahme am Netzwerk wird von der zentralen Autorität kontrolliert. | Jeder kann am Netzwerk teilnehmen; es gibt keine „Gatekeeper“. Idealerweise sind die Teilnahmekosten sehr niedrig. | + +Beachte, dass dies allgemeine Muster sind, die nicht in jedem Netzwerk zutreffend sind. Darüber hinaus liegt in Wirklichkeit der Grad der Zentralisierung bzw. Dezentralisierung eines Netzwerks auf einem Spektrum; kein Netzwerk ist vollständig zentralisiert oder vollständig dezentralisiert. + +## Weiterführende Informationen {#further-reading} + +- [Was ist Web3?](/web3/) – _ethereum.org_ +- [Die Architektur einer Web 3.0 Anwendung](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) – _Preethi Kasireddy_ +- [Die Bedeutung der Dezentralisierung](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _Feb 6, 2017 – Vitalik Buterin_ +- [Why Decentralization Matters](https://medium.com/s/story/why-decentralization-matters-5e3f79f7638e) _Feb 18, 2018 – Chris Dixon_ +- [Was ist Web 3.0 & Warum es wichtig ist](https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b) _Dez 31, 2019 – Max Mersch und Richard Muirhead_ diff --git a/src/intl/de/page-developers-docs.json b/src/intl/de/page-developers-docs.json index efba1bca982..33eceb268be 100644 --- a/src/intl/de/page-developers-docs.json +++ b/src/intl/de/page-developers-docs.json @@ -1,60 +1,99 @@ { "docs-nav-accounts": "Konten", + "docs-nav-accounts-description": "Entitäten im Netzwerk, die ein Guthaben halten und Transaktionen senden können", "docs-nav-advanced": "Fortgeschritten", "docs-nav-backend-apis": "Backend-APIs", "docs-nav-block-explorers": "Block-Explorer", "docs-nav-blocks": "Blöcke", + "docs-nav-blocks-description": "Die Art und Weise, wie Transaktionen zusammengefasst werden, um sicherzustellen, dass der Zustand über alle Akteure hinweg synchronisiert wird", "docs-nav-compiling-smart-contracts": "Kompilieren von Smart Contracts", "docs-nav-composability": "Zusammensetzbarkeit", "docs-nav-consensus-mechanisms": "Konsensmechanismus", + "docs-nav-consensus-mechanisms-description": "Wie sich die einzelnen Nodes eines verteilten Netzwerks auf den aktuellen Zustand des Systems einigen", "docs-nav-data-and-analytics": "Daten und Analysen", + "docs-nav-data-and-analytics-description": "Wie Blockchain-Daten aggregiert, organisiert und in dApps implementiert werden", "docs-nav-dart": "Dart", "docs-nav-delphi": "Delphi", "docs-nav-deploying-smart-contracts": "Einsetzen von Smart Contracts", "docs-nav-development-frameworks": "Entwicklungs-Frameworks", + "docs-nav-development-frameworks-description": "Werkzeuge, die das Entwickeln mit Ethereum erleichtern", "docs-nav-development-networks": "Entwicklungsnetzwerke", + "docs-nav-development-networks-description": "Lokale Blockchain-Umgebungen zum Testen von dApps vor dem Deployment", "docs-nav-dot-net": ".NET", - "docs-nav-erc-20": "ERC-20", - "docs-nav-erc-721": "ERC-721", + "docs-nav-erc-20": "ERC-20: Fungible Tokens", + "docs-nav-erc-721": "ERC-721: NFTs", "docs-nav-erc-777": "ERC-777", "docs-nav-erc-1155": "ERC-1155", "docs-nav-ethereum-client-apis": "Ethereum-Client-APIs", + "docs-nav-ethereum-client-apis-description": "Bequeme Bibliotheken, die es deiner Webapplikation erlauben, mit Ethereum und Smart Contracts zu interagieren", "docs-nav-ethereum-stack": "Ethereum-Stack", "docs-nav-evm": "Ethereum Virtual Machine (EVM)", + "docs-nav-evm-description": "Die EVM übernimmt die gesamte Transaktionsabwicklung im Ethereum-Netzwerk", "docs-nav-foundational-topics": "Grundsätzliche Themen", "docs-nav-gas": "Gas", + "docs-nav-gas-description": "Rechenleistung, die benötigt wird, um Transaktionen zu bearbeiten, die von Transaktionsabsendern in ETH bezahlt werden", "docs-nav-golang": "Golang", "docs-nav-integrated-development-environments-ides": "Integrierte Entwicklungsumgebungen (IDEs)", + "docs-nav-integrated-development-environments-ides-description": "Die besten Umgebungen zum Schreiben von dApp-Code", "docs-nav-intro-to-dapps": "Einführung in dApps", + "docs-nav-intro-to-dapps-description": "Eine Einführung in dezentralisierte Anwendungen", + "docs-nav-intro-to-ether": "Einführung in Ether", + "docs-nav-intro-to-ether-description": "Eine kurze Übersicht über Ether", "docs-nav-intro-to-ethereum": "Einführung in Ethereum", + "docs-nav-intro-to-ethereum-description": "Eine kurze Übersicht über Ethereum", "docs-nav-intro-to-the-stack": "Einführung in den Stack", + "docs-nav-intro-to-the-stack-description": "Eine Übersicht des Ethereum-/web3-Stacks", "docs-nav-java": "Java", "docs-nav-java-script-apis": "JavaScript-APIs", "docs-nav-javascript": "JavaScript", + "docs-nav-json-rpc": "JSON-RPC", + "docs-nav-mev": "Miner extrahierbarer Wert (MEV)", + "docs-nav-mev-description": "Wie der Wert aus der Ethereum-Blockchain über die Blockbelohnung hinaus gewonnen wird", "docs-nav-mining": "Mining", "docs-nav-networks": "Netzwerke", + "docs-nav-networks-description": "Implementierung von Ethereum inklusive Testnetzen", "docs-nav-nodes-and-clients": "Nodes und Clients", + "docs-nav-nodes-and-clients-description": "Die Personen, die am Netzwerk teilnehmen, und die Software, die sie zur Überprüfung von Transaktionen verwenden", + "docs-nav-opcodes": "Operationscodes", + "docs-nav-run-a-node": "Einen Node ausführen", + "docs-nav-client-diversity": "Client-Diversität", "docs-nav-nodes-as-a-service": "Nodes als Dienstleistung", "docs-nav-oracles": "Oracles", + "docs-nav-oracles-description": "Wie Informationen in die Ethereum-Blockchain eingefügt werden", "docs-nav-programming-languages": "Programmiersprachen", - "docs-nav-proof-of-stake": "Proof-of-stake", - "docs-nav-proof-of-work": "Proof-of-work", + "docs-nav-programming-languages-description": "Wie man mit Ethereum mit Sprachen beginnt, die man vielleicht schon kennt", + "docs-nav-proof-of-stake": "Proof-of-Stake", + "docs-nav-proof-of-work": "Proof-of-Work", "docs-nav-python": "Python", - "docs-nav-readme": "README", + "docs-nav-readme": "Übersicht", + "docs-nav-ruby": "Ruby", "docs-nav-rust": "Rust", "docs-nav-scaling": "Skalierung", - "docs-nav-smart-contract-security": "Sicherheit", + "docs-nav-scaling-description": "Methoden zur Erhaltung der Dezentralisierung und Sicherheit während des Wachstums von Ethereum", + "docs-nav-scaling-optimistic-rollups": "Optimistic Rollups", + "docs-nav-scaling-zk-rollups": "Zero-Knowledge Rollups", + "docs-nav-scaling-channels": "State Channels", + "docs-nav-scaling-sidechains": "Sidechains", + "docs-nav-scaling-plasma": "Plasma", + "docs-nav-scaling-validium": "Validium", + "docs-nav-smart-contract-security": "Smart-Contract-Sicherheit", + "docs-nav-smart-contract-security-description": "Best Practices für das Management von Smart-Contract-Angriffen und Schwachstellen", "docs-nav-smart-contract-anatomy": "Anatomie von Smart Contracts", "docs-nav-smart-contract-languages": "Sprachen von Smart Contracts", "docs-nav-smart-contracts": "Smart Contracts", + "docs-nav-smart-contracts-description": "Programme, die sich an einer Ethereum-Adresse befinden und Funktionen ausführen, wenn sie durch Transaktionen ausgelöst werden", "docs-nav-smart-contracts-libraries": "Sammlungen von Smart Contracts", "docs-nav-standards": "Standards", + "docs-nav-standards-description": "Einvernehmen über Protokolle zur Erhaltung der Effizienz und Zugänglichkeit von Projekten für die Community", "docs-nav-storage": "Speicher", + "docs-nav-storage-description": "Dezentralisierte Speicherstrukturen und -mechanismen", "docs-nav-testing-smart-contracts": "Testen von Smart Contracts", "docs-nav-token-standards": "Tokenstandards", "docs-nav-transactions": "Transaktionen", + "docs-nav-transactions-description": "Transfers und andere Aktionen, die Ethereums Zustand ändern", "docs-nav-web2-vs-web3": "Web2 vs Web3", - "page-calltocontribute-desc-1": "Wenn du in diesem Bereich ein Experte bist und gerne etwas beitragen möchtest, editiere diese Seite und versprühe dein Wissen.", + "docs-nav-web2-vs-web3-description": "Die grundlegenden Unterschiede, die blockchain-basierte Anwendungen bieten", + "page-calltocontribute-desc-1": "Wenn du in diesem Bereich ein Experte bist und gerne etwas beitragen möchtest, editiere diese Seite und verbreite dein Wissen.", "page-calltocontribute-desc-2": "Dies wird dir angerechnet und du wirst der Ethereum-Community helfen!", "page-calltocontribute-desc-3": "Verwende dies flexibel", "page-calltocontribute-desc-4": "Fragen? Frag uns im #content-Kanal auf unserem Discord-Server", From b2c04f0381e8bb29bf3b04cedfb2c12dada0d530 Mon Sep 17 00:00:00 2001 From: luminoir-dustin <93941381+luminoir-dustin@users.noreply.github.com> Date: Mon, 9 May 2022 22:36:36 +0800 Subject: [PATCH 012/298] Update index.md Update index.md Update index.md Revert "Update index.md" This reverts commit 752bacc1ed767218968a8a1056ea6250e28f43c3. Revert "Update index.md" This reverts commit c419dd6496c02d79c1bd720f9935c79d2588b0ab. Revert "Update index.md" This reverts commit 05a931a382c7989a138bb506c900b75405a25790. Revert "Revert "Update index.md"" This reverts commit c7f3c3e3298190cb24c0750a38cfbccd8238caed. Revert "Revert "Update index.md"" This reverts commit 8f253d024513502ffb12a02be40cf7e214127bf0. Revert "Revert "Update index.md"" This reverts commit e4f673980d702f6586844bef94e6b8d3d83f81b1. --- .../get-involved/open-research/index.md | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 5ec80ea2a5e..af73d7c6eef 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -14,7 +14,46 @@ Do you have a background in mathematics, cryptography, or economics? You might b - [x] Create basic page - [ ] Talk to researchers - what are the open questions? What are topics & resources? - [ ] Decide how topics should be categorized - what's the hierarchy? - +## Page Content Structure +- There should be as few categories as possible needed to achieve the following: + - encompass the full gamut of research topics + - differentiated enough from each other to minimise sub-category redundancy and duplication + - sub-categories may qualify in multiple Parent Categories, but this should be minimised to reduce confusion +- Ideally, less than [10 main categories, with less than 12 sub-categories within each](https://www.researchgate.net/publication/303676802_HICK%27S_LAW_IS_MIRRORED_IN_THE_BRAIN_AN_FMRI_STUDY_OF_THE_CHOICE_REACTION_TIME). + - This is to reduce the cognitive load of parsing too many categories if they are all displayed at once + - There should be an AJAX style search bar that allows users to search categories, with some intelligent matching of synonyms + - The Parent Categories should be sufficiently broad, yet clearly delineated so the location of Sub-Categories are obvious to the average user familiar with the Topic. +- Researchers should weigh in on whether the categories are redundant/incomplete/contradictory. +- Sub-Categories as tags, not folders. + - In some cases, sub-categories may appear across multiple main categories based on application + - eg: Zero Knowledge Proofs can appear in Privacy, Security AND Scalability, depending on the context ZKPs are being used or applied. + - Or should ZKPs be their own Parent Category? + - These are the kinds of discussions/arguments we need to have around the organisational hierarchy of the information + +## Sample: ESP’s [Parent Categories](https://esp.ethereum.foundation/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fabout.9c9105a9.png&w=828&q=75) + +> ESP's categories are very clear and have good delineation, many topics would fall very clearly into one Category exclusively. One area to improve would be to make “Research” less broad, and to specify more discrete Topics which require Research. +> +- Community & Education +- Consensus Layer +- Cryptography & zkp +- Execution Layer +- Layer 2 +- Libraries & Tooling +- Research + +## Metadata displayed under Content/Research Topic + +- Title (Header would be the name of the area of research) + - Outline (Brief writeup of the Scope or Research Topic within larger Area of Research) [sample](https://blog.ethereum.org/2022/02/24/japan-local-grants-round/) + - List of Teams/Researchers/People working on Research Topic +- Additional Information (optional/good to have) + - Existing funding and grants + +### Open Source Submission Inputs + +- Allow user submission of Areas of Research +- Allow user submission of Teams/Researchers/People under Area of Research ## Community List general communities / resources for general topics? From 3e5fddbb5042ec3b905617813797d0ef9e2a144e Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Fri, 13 May 2022 14:37:39 +0100 Subject: [PATCH 013/298] Update src/content/developers/docs/smart-contracts/composability/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .../developers/docs/smart-contracts/composability/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/smart-contracts/composability/index.md b/src/content/developers/docs/smart-contracts/composability/index.md index f1b12a38a83..f324f625e06 100644 --- a/src/content/developers/docs/smart-contracts/composability/index.md +++ b/src/content/developers/docs/smart-contracts/composability/index.md @@ -20,7 +20,7 @@ In Ethereum, every smart contract is a Lego of sorts—you can use smart contrac Ethereum smart contracts are like public APIs, so anyone can interact with the contract or integrate them into dapps for added functionality. Smart contract composability generally works off three principles: modularity, autonomy, and discoverability: -**1. Modularity**: This is the ability of individual components to perform a specific task. In Ethereum, every smart contract has specific use-case (as shown in the Uniswap example). +**1. Modularity**: This is the ability of individual components to perform a specific task. In Ethereum, every smart contract has a specific use case (as shown in the Uniswap example). **2. Autonomy**: Composable components must be able to operate independently. Each smart contract in Ethereum is self-executing and can function without relying on other parts of the system. From 3383545a0b74de09f4557475daf3136109b6edf9 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Fri, 13 May 2022 14:51:49 +0100 Subject: [PATCH 014/298] Update index.md Added an example under "Better user experience" section to illustrate how composability allows users to use complex features. --- .../docs/smart-contracts/composability/index.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/smart-contracts/composability/index.md b/src/content/developers/docs/smart-contracts/composability/index.md index f324f625e06..3adb58c5097 100644 --- a/src/content/developers/docs/smart-contracts/composability/index.md +++ b/src/content/developers/docs/smart-contracts/composability/index.md @@ -38,11 +38,18 @@ If there is a smart contract that solves one problem, other developers can reuse Composability encourages innovation and experimentation because developers are free to reuse, modify, duplicate, or integrate open-source code to create desired results. As a result, development teams spend less time on basic functionality and can allocate more time experimenting with new features. - ### Better user experience {#better-user-experience} Interoperability between components of the Ethereum ecosystem improves the user experience. Users can access greater functionality when dapps integrate external smart contracts than in a fragmented ecosystem where applications cannot communicate. +We'll use an example from arbitrage trading to illustrate the benefits of interoperability: + +If a token is trading higher on `exchange A` than `exchange B`, you can take advantage of the price difference to make profit. However, you can only do that if you have enough capital to fund the transaction (i.e., buying the token from `exchange B` and selling it on `exchange A`). + +In a scenario where you don't have enough funds to cover the trade, a flash loan might be ideal. [Flash loans](/defi/#flash-loans) are highly technical, but the basic idea is that you can borrow assets (without collateral) and return same within *one* transaction. + +Going back to our initial example, an arbitrage trader can take out a large flash loan, buy tokens from `exchange B`, sell them on `exchange A`, pay back the capital + interest, and keep the profit, within the same transaction. This complex logic requires combining calls to multiple contracts, which wouldn't be possible if smart contracts lacked interoperability. + ## Examples of composability in Ethereum {#composability-in-ethereum} ### Token swaps {#token-swaps} From a2b170224f1be0f36296eb0067774557fd2f2aa1 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:16:34 -0600 Subject: [PATCH 015/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 0332fd9c3d2..c3a5d9be698 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -21,7 +21,7 @@ Bridges offer a way for isolated blockchain environments to connect with each ot Put simply, bridges unlock developer potential by allowing blockchain networks to exchange data and move assets between them. -Different blockchains and communities have unique strengths, weaknesses, and approaches to building applications (such as speed, throughput, costliness, etc.). Bridges help the development of the overall crypto ecosystem by enabling blockchains to leverage the innovations of each other. +Blockchains have unique strengths, weaknesses, and approaches to building applications (such as speed, throughput, costliness, etc.). Bridges help the development of the overall crypto ecosystem by enabling blockchains to leverage the innovations of each other. Moreover, bridges unlock new use cases and possibilities for both users and developers. For example, users can now move assets across different ecosystems, making them more productive. For developers and protocols, bridges open up an almost limitless amount of possibilities by expanding the design space for [dApps](/developers/docs/dapps/) across multiple crypto ecosystems. From 04efb0805a5adaba14198018e88d9818842dde38 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:17:16 -0600 Subject: [PATCH 016/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index c3a5d9be698..afe62a385f4 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -35,7 +35,7 @@ While there are many [types of bridge designs](https://blog.li.fi/what-are-block ## Bridge types {#bridge-types} -Bridges come in different types and flavors. Broadly, bridges can usually be classified into one of the following buckets: +Bridges can usually be classified into one of the following buckets: - **Native Bridges –** These bridges are typically built to bootstrap liquidity on a particular blockchain, making it easier for users to move funds to the ecosystem. For example, the Avalanche Bridge is built to make it convenient for users to bridge from [Ethereum](/developers/docs/intro-to-ethereum/) to Avalanche. Other such bridges include Polygon PoS Bridge, Arbitrum Bridge, etc. - **Validator or Oracle Based Bridges –** These bridges rely on an external validator set or oracles to validate cross-chain transfers. Examples: Multichain and Across. From 5e661396846555a3a6754e9a2c4be481b0ee208a Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:18:23 -0600 Subject: [PATCH 017/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index afe62a385f4..1487765e0be 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -With the proliferation of L1 blockchains and L2 [scaling](/developers/docs/scaling/) solutions, alongside an ever-growing number of decentralized applications going cross-chain, the need for communication and asset movement across chains has never been more important. +With the proliferation of L1 blockchains and L2 [scaling](/developers/docs/scaling/) solutions, alongside an ever-growing number of decentralized applications going cross-chain, the need for communication and asset movement across chains has become an essential part of network infrastructure. Different types of bridges exist to help make this possible. This is where blockchain bridges come in. From f79380d54d7ad465ecd12927bf9b6309c2bcf247 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:19:25 -0600 Subject: [PATCH 018/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 1487765e0be..dbb777c31ed 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -55,7 +55,10 @@ With bridges, there are no perfect solutions. Rather, there are only trade-offs At a high level, bridges can be categorized as trusted and trustless. - **Trusted –** Trusted bridges are externally verified. They use an external set of verifiers (Federations with multi-sig, multi-party computation systems, oracle network) to send data across chains. As a result, they can offer great connectivity and enable fully generalized message passing across chains. They also tend to perform well with speed and cost-effectiveness. This comes at the cost of security, as users have to rely on the security of the bridge. -- **Trustless –** These bridges rely on the blockchains they are connecting and their validators to transfer messages and tokens. They are 'trustless' because they do not add new trust assumptions (in addition to the blockchains). As a result, trustless bridges are considered to be more secure than trusted bridges. To evaluate trustless bridges based on other factors, we must break them down into generalized message passing bridges and liquidity networks. +- **Trustless –** These bridges rely on the blockchains they are connecting and their validators to transfer messages and tokens. They are 'trustless' because they do not add new trust assumptions (in addition to the blockchains). As a result, trustless bridges are considered to be more secure than trusted bridges. + +To evaluate trustless bridges based on other factors, we must break them down into generalized message passing bridges and liquidity networks. + - **Generalized Message Passing Bridges –** These bridges excel with security and the ability to transfer more complex data across chains. Typically, they are also good with cost-effectiveness. However, these strengths generally come at the cost of connectivity for light client bridges (ex: IBC) and speed drawbacks for optimistic bridges (ex: Nomad) that use fraud proofs. - **Liquidity Networks –** These bridges use atomic swaps for transferring assets and are locally verified systems (i.e., they use the underlying blockchains’ validators to verify transactions). As a result, they excel with security and speed. Moreover, they are considered comparatively cost-effective and offer good connectivity. However, the major tradeoff is their ability to pass more complex data – as they don’t support cross-chain message passing. From 8260ff1e1e32db7fc511f64d0e4a857bb0513dfd Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:22:29 -0600 Subject: [PATCH 019/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index dbb777c31ed..d6b8df6af59 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -42,7 +42,7 @@ Bridges can usually be classified into one of the following buckets: - **Generalized Message Passing Bridges –** These bridges can transfer assets, along with messages and arbitrary data across chains. Examples: Nomad and LayerZero. - **Liquidity Networks –** These bridges primarily focus on transferring assets from one chain to another via atomic swaps. Generally, they don’t support cross-chain message passing. Examples: Connext and Hop. -## Evolution of bridges {#evolution-of-bridges} +## Trade-offs to consider {#trade-offs} With bridges, there are no perfect solutions. Rather, there are only trade-offs made to fulfill a purpose. Developers and users can evaluate bridges based on the following factors: From d9ebde8f4b2963fd7004ab1c865ab9175fe1138b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:22:42 -0600 Subject: [PATCH 020/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index d6b8df6af59..23fedc9527d 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -64,7 +64,7 @@ To evaluate trustless bridges based on other factors, we must break them down in ## Risk with bridges {#risk-with-bridges} -Bridges account for the top 3 [biggest hacks in DeFi](https://rekt.news/leaderboard/) and are still in the early stages of development. Using any bridge carries the following risks: +Bridges account for the top three [biggest hacks in DeFi](https://rekt.news/leaderboard/) and are still in the early stages of development. Using any bridge carries the following risks: - **Smart Contract Risk –** While many bridges have successfully passed audits, all it takes is one flaw in a smart contract for assets to be exposed to hacks (ex: [Solana’s Wormhole Bridge](https://rekt.news/wormhole-rekt/)). - **Technology Risk –** Given the complexity of bridge operations, there is a possibility of technology risks like software failure, buggy code, human error, spam, and malicious attacks. From 187898feb36f053430d2f3bcf7cf47410a89f65e Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:22:57 -0600 Subject: [PATCH 021/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 23fedc9527d..98f7942f635 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -69,7 +69,7 @@ Bridges account for the top three [biggest hacks in DeFi](https://rekt.news/lead - **Smart Contract Risk –** While many bridges have successfully passed audits, all it takes is one flaw in a smart contract for assets to be exposed to hacks (ex: [Solana’s Wormhole Bridge](https://rekt.news/wormhole-rekt/)). - **Technology Risk –** Given the complexity of bridge operations, there is a possibility of technology risks like software failure, buggy code, human error, spam, and malicious attacks. - **Systematic Financial Risks** – Many bridges use wrapped assets to mint canonical versions of the original asset on a new chain. This exposes the ecosystem to systematic risk, as we have seen wrapped versions of tokens exploited. -- **Trusted Third-Party Risk –** Some bridges utilize a trusted design that requires users to rely on the assumption that validators will not collude to steal user funds. The need for users to trust these third-party actors exposes them to risks such as rugs, censorship, and other malicious activities. +- **Trusted Third-Party Risk –** Some bridges utilize a trusted design that requires users to rely on the assumption that validators will not collude to steal user funds. The need for users to trust these third-party actors exposes them to risks such as rug pulls, censorship, and other malicious activities. - **Open Issues –** Given that bridges are in the nascent stages of development, there are many unanswered questions related to how bridges will perform in different market conditions, like times of network congestion and during unforeseen events such as network-level attacks or state rollbacks. This uncertainty poses certain risks, the degree of which is still unknown. ## How can dapps use bridges? {#how-can-dapps-use-bridges} From e7d18b33ac53519cefca9de6f9b2965a5a3e502b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:24:52 -0600 Subject: [PATCH 022/298] change dApp -> dapp --- src/content/developers/docs/bridges/index.md | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 98f7942f635..8cd4b9b88cd 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -23,7 +23,7 @@ Put simply, bridges unlock developer potential by allowing blockchain networks t Blockchains have unique strengths, weaknesses, and approaches to building applications (such as speed, throughput, costliness, etc.). Bridges help the development of the overall crypto ecosystem by enabling blockchains to leverage the innovations of each other. -Moreover, bridges unlock new use cases and possibilities for both users and developers. For example, users can now move assets across different ecosystems, making them more productive. For developers and protocols, bridges open up an almost limitless amount of possibilities by expanding the design space for [dApps](/developers/docs/dapps/) across multiple crypto ecosystems. +Moreover, bridges unlock new use cases and possibilities for both users and developers. For example, users can now move assets across different ecosystems, making them more productive. For developers and protocols, bridges open up an almost limitless amount of possibilities by expanding the design space for [dapps](/developers/docs/dapps/) across multiple crypto ecosystems. ## How do bridges work? {#how-do-bridges-work} @@ -55,12 +55,12 @@ With bridges, there are no perfect solutions. Rather, there are only trade-offs At a high level, bridges can be categorized as trusted and trustless. - **Trusted –** Trusted bridges are externally verified. They use an external set of verifiers (Federations with multi-sig, multi-party computation systems, oracle network) to send data across chains. As a result, they can offer great connectivity and enable fully generalized message passing across chains. They also tend to perform well with speed and cost-effectiveness. This comes at the cost of security, as users have to rely on the security of the bridge. -- **Trustless –** These bridges rely on the blockchains they are connecting and their validators to transfer messages and tokens. They are 'trustless' because they do not add new trust assumptions (in addition to the blockchains). As a result, trustless bridges are considered to be more secure than trusted bridges. +- **Trustless –** These bridges rely on the blockchains they are connecting and their validators to transfer messages and tokens. They are 'trustless' because they do not add new trust assumptions (in addition to the blockchains). As a result, trustless bridges are considered to be more secure than trusted bridges. To evaluate trustless bridges based on other factors, we must break them down into generalized message passing bridges and liquidity networks. - - **Generalized Message Passing Bridges –** These bridges excel with security and the ability to transfer more complex data across chains. Typically, they are also good with cost-effectiveness. However, these strengths generally come at the cost of connectivity for light client bridges (ex: IBC) and speed drawbacks for optimistic bridges (ex: Nomad) that use fraud proofs. - - **Liquidity Networks –** These bridges use atomic swaps for transferring assets and are locally verified systems (i.e., they use the underlying blockchains’ validators to verify transactions). As a result, they excel with security and speed. Moreover, they are considered comparatively cost-effective and offer good connectivity. However, the major tradeoff is their ability to pass more complex data – as they don’t support cross-chain message passing. +- **Generalized Message Passing Bridges –** These bridges excel with security and the ability to transfer more complex data across chains. Typically, they are also good with cost-effectiveness. However, these strengths generally come at the cost of connectivity for light client bridges (ex: IBC) and speed drawbacks for optimistic bridges (ex: Nomad) that use fraud proofs. +- **Liquidity Networks –** These bridges use atomic swaps for transferring assets and are locally verified systems (i.e., they use the underlying blockchains’ validators to verify transactions). As a result, they excel with security and speed. Moreover, they are considered comparatively cost-effective and offer good connectivity. However, the major tradeoff is their ability to pass more complex data – as they don’t support cross-chain message passing. ## Risk with bridges {#risk-with-bridges} @@ -74,29 +74,29 @@ Bridges account for the top three [biggest hacks in DeFi](https://rekt.news/lead ## How can dapps use bridges? {#how-can-dapps-use-bridges} -Here are some practical applications that developers can consider about bridges and taking their dApp cross-chain: +Here are some practical applications that developers can consider about bridges and taking their dapp cross-chain: ### Integrating bridges {#integrating-bridges} For developers, there are many ways to add support for bridges: 1. **Building your own bridge –** Building a secure and reliable bridge is not easy, especially if you take a more trust-minimized route. Moreover, it requires years of experience and technical expertise related to scalability and interoperability studies. Additionally, it would require a hands-on team to maintain a bridge and attract sufficient liquidity to make it feasible. -2. **Showing users multiple bridge options –** Many dApps require users to have their native token to interact with them. To enable users to access their tokens, they offer different bridge options on their website. However, this method is a quick fix to the problem as it takes the user away from the dApp interface and still requires them to interact with other dApps and bridges. This is a cumbersome onboarding experience with the increased scope of making mistakes. -3. **Integrating a bridge –** This solution doesn’t require the dApp to send users to the external bridge and DEX interfaces. It allows dApps to improve the user onboarding experience. However, this approach has its limitations: +2. **Showing users multiple bridge options –** Many dapps require users to have their native token to interact with them. To enable users to access their tokens, they offer different bridge options on their website. However, this method is a quick fix to the problem as it takes the user away from the dapp interface and still requires them to interact with other dapps and bridges. This is a cumbersome onboarding experience with the increased scope of making mistakes. +3. **Integrating a bridge –** This solution doesn’t require the dapp to send users to the external bridge and DEX interfaces. It allows dapps to improve the user onboarding experience. However, this approach has its limitations: - Assessment and maintenance of bridges are hard and time-consuming. - Selecting one bridge creates a single point of failure and dependency. - - The dApp is limited by the bridge’s capabilities. - - Bridges alone might not be enough. dApps might need DEXs to offer more functionality such as cross-chain swaps. + - The dapp is limited by the bridge’s capabilities. + - Bridges alone might not be enough. dapps might need DEXs to offer more functionality such as cross-chain swaps. 4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers – the scarcest resource in crypto. -5. **Integrating a bridge aggregator –** Another option for dApps is integrating a bridge aggregation solution that gives them access to multiple bridges. Bridge aggregators inherit the strengths of all the bridges and thus are not limited by any single bridge’s capabilities. Notably, the bridge aggregators typically maintain the bridge integrations, which saves the dApp from the hassle of staying on top of the technical and operational aspects of a bridge integration. +5. **Integrating a bridge aggregator –** Another option for dapps is integrating a bridge aggregation solution that gives them access to multiple bridges. Bridge aggregators inherit the strengths of all the bridges and thus are not limited by any single bridge’s capabilities. Notably, the bridge aggregators typically maintain the bridge integrations, which saves the dapp from the hassle of staying on top of the technical and operational aspects of a bridge integration. That being said, bridge aggregators also have their limitations. For instance, while they can offer more bridge options, many more bridges are typically available in the market other than those offered on the aggregator's platform. Moreover, just like bridges, bridge aggregators are also exposed to smart contracts and technology risks (more smart contracts = more risks). -If a dApp goes down the route of integrating a bridge or an aggregator, there are different options based on how deep the integration is meant to be. For instance, if it’s only a front-end integration to improve the user onboarding experience, a dApp would integrate the widget. However, if the integration is to explore deeper cross-chain strategies like staking, yield farming, etc., the dApp integrates the SDK or API. +If a dapp goes down the route of integrating a bridge or an aggregator, there are different options based on how deep the integration is meant to be. For instance, if it’s only a front-end integration to improve the user onboarding experience, a dapp would integrate the widget. However, if the integration is to explore deeper cross-chain strategies like staking, yield farming, etc., the dapp integrates the SDK or API. ### Deploying a dapp on multiple chains {#deploying-a-dapp-on-multiple-chains} -To deploy a dApp on multiple chains, developers can use development platforms like Alchemy, Hardhat, Truffle, etc. Typically, these platforms come with composable plugins that can enable dApps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the hardhat-deploy plugin. +To deploy a dapp on multiple chains, developers can use development platforms like Alchemy, Hardhat, Truffle, etc. Typically, these platforms come with composable plugins that can enable dapps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the hardhat-deploy plugin. ### Monitoring contract activity across chains {#monitoring-contract-activity-across-chains} From be1a4b175072eeed5a2af6c391f561bcdb3f70f0 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Sun, 15 May 2022 23:25:22 -0600 Subject: [PATCH 023/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 8cd4b9b88cd..e7233a686aa 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -90,7 +90,7 @@ For developers, there are many ways to add support for bridges: 4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers – the scarcest resource in crypto. 5. **Integrating a bridge aggregator –** Another option for dapps is integrating a bridge aggregation solution that gives them access to multiple bridges. Bridge aggregators inherit the strengths of all the bridges and thus are not limited by any single bridge’s capabilities. Notably, the bridge aggregators typically maintain the bridge integrations, which saves the dapp from the hassle of staying on top of the technical and operational aspects of a bridge integration. - That being said, bridge aggregators also have their limitations. For instance, while they can offer more bridge options, many more bridges are typically available in the market other than those offered on the aggregator's platform. Moreover, just like bridges, bridge aggregators are also exposed to smart contracts and technology risks (more smart contracts = more risks). + That being said, bridge aggregators also have their limitations. For instance, while they can offer more bridge options, many more bridges are typically available in the market other than those offered on the aggregator's platform. Moreover, just like bridges, bridge aggregators are also exposed to smart contract and technology risks (more smart contracts = more risks). If a dapp goes down the route of integrating a bridge or an aggregator, there are different options based on how deep the integration is meant to be. For instance, if it’s only a front-end integration to improve the user onboarding experience, a dapp would integrate the widget. However, if the integration is to explore deeper cross-chain strategies like staking, yield farming, etc., the dapp integrates the SDK or API. From 87ff6193aceeb68949da6f93f9652656e368ebec Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 16 May 2022 21:29:16 -0600 Subject: [PATCH 024/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index e7233a686aa..1b713bb2597 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -7,7 +7,6 @@ sidebar: true With the proliferation of L1 blockchains and L2 [scaling](/developers/docs/scaling/) solutions, alongside an ever-growing number of decentralized applications going cross-chain, the need for communication and asset movement across chains has become an essential part of network infrastructure. Different types of bridges exist to help make this possible. -This is where blockchain bridges come in. ## Need for bridges {#need-for-bridges} From a5c35ca8d03eed6160e0daef27d259592b236dc3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 16 May 2022 21:34:05 -0600 Subject: [PATCH 025/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 1b713bb2597..bf7824ff26f 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -30,7 +30,7 @@ While there are many [types of bridge designs](https://blog.li.fi/what-are-block - **Lock and Mint –** Lock assets on the source chain and mint assets on the destination chain. - **Burn and Mint –** Burn assets on the source chain and mint assets on the destination chain. -- **Atomic Swaps –** Swap assets on the source chain for assets on the destination chain. +- **Atomic Swaps –** Swap assets on the source chain for assets on the destination chain with another party. ## Bridge types {#bridge-types} From 5c3a742e68bcd4904d903e1e098d48a6dd21b3b6 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Tue, 17 May 2022 11:13:59 +0100 Subject: [PATCH 026/298] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/scaling/plasma/index.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/content/developers/docs/scaling/plasma/index.md b/src/content/developers/docs/scaling/plasma/index.md index f205187d5c5..d04abe56db6 100644 --- a/src/content/developers/docs/scaling/plasma/index.md +++ b/src/content/developers/docs/scaling/plasma/index.md @@ -27,18 +27,15 @@ You should have a good understanding of all the foundational topics and a high-l Plasma, sidechains, and sharding all follow a similar pattern where a collection of "child chains" rely on a "main chain" for consensus. At intervals, cryptographic proofs of transaction validity (hashes) are submitted to the main chain to prevent fraudulent activity on child chains. -However, the three scaling solutions have slight differences. Here is a quick comparison of Plasma chains, sidechains, and shard chains: +However, the three scaling solutions have slight differences. Here is a quick comparison of plasma chains, sidechains, and shard chains: ### Plasma vs sidechains -A [sidechain](https://ethereum.org/en/developers/docs/scaling/sidechains/) is a blockchain operating independently but connects to the main blockchain (Ethereum Mainnet) via a two-way bridge. [Bridges](https://ethereum.org/en/bridges/) allow users to exchange tokens between both blockchains, so they can transact on the sidechain—reducing congestion on the base layer and improving scalability. -With sidechains, there's the risk of losing your funds. Sidechains use a separate consensus mechanism and, ergo, cannot rely on the security of Ethereum Mainnet (Layer 1). +A [sidechain](/developers/docs/scaling/sidechains/) is an independently operated blockchain connected to the Ethereum Mainnet via a two-way bridge. [Bridges](/bridges/) allow users to exchange tokens between the two blockchains, so they can transact on the sidechain, reducing congestion on the base layer and improving scalability. +Since sidechains use a separate consensus mechanism, and because these chains are typically much smaller than Ethereum Mainnet, bridging assets to these chains involves increased risk to your funds. Given the lack of security guarantees inherited from Mainnet in the sidechain model, users risk total loss of funds in the event of an attack on the sidechain.``` -Conversely, Plasma chains are somewhat safer than sidechains because they derive their security from Ethereum's base layer. Like sidechains, Plasma chains can have a different consensus protocol. +Conversely, plasma chains derive their security from Mainnet are somewhat safer than sidechains. Both sidechains and plasma chains can have different consensus protocols, but the difference is that plasma chains publishes Merkle roots for each block on Ethereum Mainnet. Block roots are small pieces of information we can use to verify information about transactions that happen on a plasma chain. If an attack happens on a plasma chain, users can safely exit to Mainnet and withdraw their funds using the appropriate proofs. -The difference is that Plasma publishes Merkle roots for each block on the Ethereum main chain. Block roots are small pieces of information we can use to verify information about transactions that happen on a Plasma chain. If an attack happens on a Plasma chain, users can safely exit to the main chain and withdraw their funds using the appropriate proofs. - -A simple way to differentiate between Plasma and sidechains is that Plasma chains are non-custodial, while sidechains are custodial. ### Plasma vs sharding @@ -62,6 +59,7 @@ Multiple projects provide implementations of Plasma that you can integrate into - [EthHub on Plasma](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/plasma/) - [Learn Plasma](https://www.learnplasma.org/en/) +- [A quick reminder of what "shared security" means and why it's so important](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) - [Sidechains vs Plasma vs Sharding](https://vitalik.ca/general/2019/06/12/plasma_vs_sharding.html) _Know of a community resource that helped you? Edit this page and add it!_ From a2044a9637aff0ae36ea2ff3d5513ea13b63febe Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Tue, 17 May 2022 13:50:18 +0100 Subject: [PATCH 027/298] Update index.md Edits to incorporate feedback. --- src/content/developers/docs/scaling/plasma/index.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/content/developers/docs/scaling/plasma/index.md b/src/content/developers/docs/scaling/plasma/index.md index d04abe56db6..8cce5db8f1e 100644 --- a/src/content/developers/docs/scaling/plasma/index.md +++ b/src/content/developers/docs/scaling/plasma/index.md @@ -36,15 +36,13 @@ Since sidechains use a separate consensus mechanism, and because these chains ar Conversely, plasma chains derive their security from Mainnet are somewhat safer than sidechains. Both sidechains and plasma chains can have different consensus protocols, but the difference is that plasma chains publishes Merkle roots for each block on Ethereum Mainnet. Block roots are small pieces of information we can use to verify information about transactions that happen on a plasma chain. If an attack happens on a plasma chain, users can safely exit to Mainnet and withdraw their funds using the appropriate proofs. - ### Plasma vs sharding -Both Plasma chains and [shard chains](https://ethereum.org/en/upgrades/shard-chains/) periodically publish cryptographic proofs on the main chain. However, both have different security properties. -Shard chains are tightly coupled to the main chain, but plasma chains are not. Even if one shard block is invalid, the entire chain will reorganize and discard the invalid block. Thus, shard chains can be as safe as the main chain. +Both plasma chains and [shard chains](/upgrades/shard-chains/) periodically publish cryptographic proofs on the main chain. However, both have different security properties. -While Plasma chains can benefit from Layer 1 security, they are not as tightly linked to the main chain as shard chains. It's possible to commit an invalid Plasma block header to the main chain since the larger network has little information about the state of the Plasma chain. +Shard chains commit "collation headers" to Mainnet, which contain detailed information about each data shard. As such, nodes on the main chain verify and enforce the validity of data shards. This reduces the possibility of invalid shard transitions and protects the network against malicious activity. -With sharding, the main chain knows how sharded sub-chains should operate and can reject an invalid shard transition. The upside to Plasma is the effects of a malicious activity can be restricted to the child chain, while the effect on malicious activity on shard chains would affect the entire network. +Plasma is different because Mainnet only receives minimal information about the state of child chains. This means Mainnet cannot effectively verify transactions conducted on child chains, making the latter less secure. ### Use Plasma {#use-plasma} From 06345a6d122e3c88d473df1ef1b49b8dd9a9b728 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Wed, 18 May 2022 14:58:10 +0100 Subject: [PATCH 028/298] Update index.md Slight edits to incorporate feedback. --- src/content/developers/docs/scaling/plasma/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/scaling/plasma/index.md b/src/content/developers/docs/scaling/plasma/index.md index 8cce5db8f1e..745a8fef9a3 100644 --- a/src/content/developers/docs/scaling/plasma/index.md +++ b/src/content/developers/docs/scaling/plasma/index.md @@ -23,11 +23,11 @@ You should have a good understanding of all the foundational topics and a high-l | | Withdrawals are delayed by several days to allow for challenges. For fungible assets this can be mitigated by liquidity providers, but there is an associated capital cost. | | | If too many users try to exit their Plasma chain simultaneously (due to malicious activity or network failure), they could flood the root chain and congest the network. | -## How does Plasma differ from sidechains and sharding? +## How does Plasma differ from sidechains and sharding? -Plasma, sidechains, and sharding all follow a similar pattern where a collection of "child chains" rely on a "main chain" for consensus. At intervals, cryptographic proofs of transaction validity (hashes) are submitted to the main chain to prevent fraudulent activity on child chains. +Plasma, sidechains, and sharding are fairly similar because they all connect to Ethereum Mainnet in some way. However, the level and strength of these connections vary, which affects the security properties of each scaling solution. -However, the three scaling solutions have slight differences. Here is a quick comparison of plasma chains, sidechains, and shard chains: +Here's a quick comparison of plasma chains, sidechains, and shard chains: ### Plasma vs sidechains From 658c3cfc5d79ced1c74709e585308102b3b13f51 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Thu, 19 May 2022 13:01:27 +0100 Subject: [PATCH 029/298] create index-temp.md Adds MVP page (`index-temp.md`) as draft for `index.md` --- .../get-involved/open-research/index-temp.md | 178 ++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 src/content/community/get-involved/open-research/index-temp.md diff --git a/src/content/community/get-involved/open-research/index-temp.md b/src/content/community/get-involved/open-research/index-temp.md new file mode 100644 index 00000000000..9d6338ad659 --- /dev/null +++ b/src/content/community/get-involved/open-research/index-temp.md @@ -0,0 +1,178 @@ +--- +title: Active areas of Ethereum research +description: Explore different areas of open research and learn how to get involved. +sidebar: true +lang: en +--- + +# Ethereum open areas of research + +One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline some of the key areas of active research as a rough guide to Ethereum's cutting edge. + +## General research resources + +Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. + + +## Scaling and Performance + +### Layer 2 + +There are now several Layer 2 protocols that scale Ethereum using different techniques for batching transactions and securing them on Ethereum layer 1. This is a very rapidly growing topic with a lot of research and development potential. + +### Bridges + +One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. + +### Sharding + +Sharding Ethereums blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. + +### Hardware + +Running nodes on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. + +### Links to current research + +[Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) + +[Ethresear.ch Scaling](https://ethresear.ch/c/sharding/6) + +[Ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) + +[Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) + +[Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) + + + +## Security + +Security is a broad topic that might include spam/scam prevention, wallet security, hardware security, crypto-economic security, bug hunting and testing of applications and client software and key-management. Contributing to knowledge in these areas will help stimulate mainstream adoption. + +### Cryptography & zkp + +Zero-knowledge proofs and crytopgraphy are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. + +### Wallets + +User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. + +### Links to current research + +[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) + +[ethresear.ch Security](https://ethresear.ch/tag/security) + +[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) + +[zkp.science](https://zkp.science/) + +[Zero Knowledge podcast](https://zeroknowledge.fm/) + + +## Community, Education and Outreach + +Onboarding new users onto Ethereum requires new educational resources and approaches to outreach. This might include blog posts and articles, books, podcasts, memes, teaching resources events and anything else that builds communities, welcomes new starters and educates people about Ethereum. + +### UX/UI + +For Ethereum to onboard more people the UX/UI must be improved. This requires designers and UI and product experts to re-examine the design of wallets and apps. + +### Links to current research + +[Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) +[Ethereum.org community page](https://ethereum.org/en/learn/) + + +## Economics + +There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). + +### PoS incentives + +When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this + +### Liquid staking and derivatives + +Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks, ) + +### DeFi + +Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. + +### Taxation and accounting + +Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. + +### Payment systems + +Using Ethereum for everyday purchases is not common right now. This is because of accessibility and cost issues. These are probably resolvable with additional R&D especially on top of Layer 2 infrastructure. + + +### Links to current research + +[Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) + +[Ethresear.ch Economics](https://ethresear.ch/c/economics/16) + +[Rotki crypto accounting](https://rotki.com/) + + +## Clients and Protocol Development + +### Consensus Clients + +The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. + +### Execution Clients + +The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). + +### Data Science and Analytics + +There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. + +### Links to current research + +[Ethresear.ch The Merge](https://ethresear.ch/c/the-merge/38) + +[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) + +[Ethresear.ch Networking](https://ethresear.ch/c/networking/27) + +[Dune Analytics](https://dune.com/browse/dashboards) + +[Client diversity dashboard](https://clientdiversity.org/) + + +## Apps and Tooling + +### DAOs + +DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. + +### Developer tools + +Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. + +### App security + +Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. + +### Technology stack + +Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. + +### Composability + +Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practises in interoperability and data standards. This is an area that would benefit from more ongoing research and development. + + +### Links to current research + +[ethresear.ch Applications](https://ethresear.ch/c/applications/18) + + + + From 4bcfd8fc0d81984bef2e6a584b27d6f4251d9257 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Thu, 19 May 2022 14:13:34 +0200 Subject: [PATCH 030/298] Consolidate drafts into index.md --- .../get-involved/open-research/index-temp.md | 178 ----------------- .../get-involved/open-research/index.md | 187 +++++++++++------- 2 files changed, 119 insertions(+), 246 deletions(-) delete mode 100644 src/content/community/get-involved/open-research/index-temp.md diff --git a/src/content/community/get-involved/open-research/index-temp.md b/src/content/community/get-involved/open-research/index-temp.md deleted file mode 100644 index 9d6338ad659..00000000000 --- a/src/content/community/get-involved/open-research/index-temp.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -title: Active areas of Ethereum research -description: Explore different areas of open research and learn how to get involved. -sidebar: true -lang: en ---- - -# Ethereum open areas of research - -One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline some of the key areas of active research as a rough guide to Ethereum's cutting edge. - -## General research resources - -Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. - - -## Scaling and Performance - -### Layer 2 - -There are now several Layer 2 protocols that scale Ethereum using different techniques for batching transactions and securing them on Ethereum layer 1. This is a very rapidly growing topic with a lot of research and development potential. - -### Bridges - -One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. - -### Sharding - -Sharding Ethereums blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. - -### Hardware - -Running nodes on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. - -### Links to current research - -[Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) - -[Ethresear.ch Scaling](https://ethresear.ch/c/sharding/6) - -[Ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) - -[Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) - -[Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) - - - -## Security - -Security is a broad topic that might include spam/scam prevention, wallet security, hardware security, crypto-economic security, bug hunting and testing of applications and client software and key-management. Contributing to knowledge in these areas will help stimulate mainstream adoption. - -### Cryptography & zkp - -Zero-knowledge proofs and crytopgraphy are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. - -### Wallets - -User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. - -### Links to current research - -[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) - -[ethresear.ch Security](https://ethresear.ch/tag/security) - -[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) - -[zkp.science](https://zkp.science/) - -[Zero Knowledge podcast](https://zeroknowledge.fm/) - - -## Community, Education and Outreach - -Onboarding new users onto Ethereum requires new educational resources and approaches to outreach. This might include blog posts and articles, books, podcasts, memes, teaching resources events and anything else that builds communities, welcomes new starters and educates people about Ethereum. - -### UX/UI - -For Ethereum to onboard more people the UX/UI must be improved. This requires designers and UI and product experts to re-examine the design of wallets and apps. - -### Links to current research - -[Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) -[Ethereum.org community page](https://ethereum.org/en/learn/) - - -## Economics - -There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). - -### PoS incentives - -When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this - -### Liquid staking and derivatives - -Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks, ) - -### DeFi - -Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. - -### Taxation and accounting - -Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. - -### Payment systems - -Using Ethereum for everyday purchases is not common right now. This is because of accessibility and cost issues. These are probably resolvable with additional R&D especially on top of Layer 2 infrastructure. - - -### Links to current research - -[Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) - -[Ethresear.ch Economics](https://ethresear.ch/c/economics/16) - -[Rotki crypto accounting](https://rotki.com/) - - -## Clients and Protocol Development - -### Consensus Clients - -The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. - -### Execution Clients - -The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). - -### Data Science and Analytics - -There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. - -### Links to current research - -[Ethresear.ch The Merge](https://ethresear.ch/c/the-merge/38) - -[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) - -[Ethresear.ch Networking](https://ethresear.ch/c/networking/27) - -[Dune Analytics](https://dune.com/browse/dashboards) - -[Client diversity dashboard](https://clientdiversity.org/) - - -## Apps and Tooling - -### DAOs - -DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. - -### Developer tools - -Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. - -### App security - -Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. - -### Technology stack - -Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. - -### Composability - -Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practises in interoperability and data standards. This is an area that would benefit from more ongoing research and development. - - -### Links to current research - -[ethresear.ch Applications](https://ethresear.ch/c/applications/18) - - - - diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index af73d7c6eef..16365a4883d 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -7,108 +7,159 @@ lang: en # Ethereum open areas of research -Do you have a background in mathematics, cryptography, or economics? You might be interested in some of the cutting-edge work being done within the Ethereum ecosystem. +One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline some of the key areas of active research as a rough guide to Ethereum's cutting edge. -**TODOs** +## General research resources -- [x] Create basic page -- [ ] Talk to researchers - what are the open questions? What are topics & resources? -- [ ] Decide how topics should be categorized - what's the hierarchy? -## Page Content Structure -- There should be as few categories as possible needed to achieve the following: - - encompass the full gamut of research topics - - differentiated enough from each other to minimise sub-category redundancy and duplication - - sub-categories may qualify in multiple Parent Categories, but this should be minimised to reduce confusion -- Ideally, less than [10 main categories, with less than 12 sub-categories within each](https://www.researchgate.net/publication/303676802_HICK%27S_LAW_IS_MIRRORED_IN_THE_BRAIN_AN_FMRI_STUDY_OF_THE_CHOICE_REACTION_TIME). - - This is to reduce the cognitive load of parsing too many categories if they are all displayed at once - - There should be an AJAX style search bar that allows users to search categories, with some intelligent matching of synonyms - - The Parent Categories should be sufficiently broad, yet clearly delineated so the location of Sub-Categories are obvious to the average user familiar with the Topic. -- Researchers should weigh in on whether the categories are redundant/incomplete/contradictory. -- Sub-Categories as tags, not folders. - - In some cases, sub-categories may appear across multiple main categories based on application - - eg: Zero Knowledge Proofs can appear in Privacy, Security AND Scalability, depending on the context ZKPs are being used or applied. - - Or should ZKPs be their own Parent Category? - - These are the kinds of discussions/arguments we need to have around the organisational hierarchy of the information +Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. -## Sample: ESP’s [Parent Categories](https://esp.ethereum.foundation/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fabout.9c9105a9.png&w=828&q=75) +## Scaling and Performance -> ESP's categories are very clear and have good delineation, many topics would fall very clearly into one Category exclusively. One area to improve would be to make “Research” less broad, and to specify more discrete Topics which require Research. -> -- Community & Education -- Consensus Layer -- Cryptography & zkp -- Execution Layer -- Layer 2 -- Libraries & Tooling -- Research +### Layer 2 -## Metadata displayed under Content/Research Topic +There are now several Layer 2 protocols that scale Ethereum using different techniques for batching transactions and securing them on Ethereum layer 1. This is a very rapidly growing topic with a lot of research and development potential. -- Title (Header would be the name of the area of research) - - Outline (Brief writeup of the Scope or Research Topic within larger Area of Research) [sample](https://blog.ethereum.org/2022/02/24/japan-local-grants-round/) - - List of Teams/Researchers/People working on Research Topic -- Additional Information (optional/good to have) - - Existing funding and grants +### Bridges -### Open Source Submission Inputs +One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. -- Allow user submission of Areas of Research -- Allow user submission of Teams/Researchers/People under Area of Research -## Community +### Sharding -List general communities / resources for general topics? +Sharding Ethereums blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. -- [Ethresear.ch](https://ethresear.ch) - Ethereum’s primary forum for research +### Hardware -List different categories of research... +Running nodes on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. -## Protocol +### Links to current research -Is this a valid category? What best captures these topics? -e.g. various upgrades https://ethereum.org/en/upgrades/ +[Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) -### Consensus +[Ethresear.ch Scaling](https://ethresear.ch/c/sharding/6) -Should this just be "proof-of-stake" at this point? Or other relevant areas of consensus research? +[Ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) -Separate consensus layer & execution layer as top-level categories? +[Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) -Derp derp derp +[Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) -### Sharding +## Security + +Security is a broad topic that might include spam/scam prevention, wallet security, hardware security, crypto-economic security, bug hunting and testing of applications and client software and key-management. Contributing to knowledge in these areas will help stimulate mainstream adoption. + +### Cryptography & zkp + +Zero-knowledge proofs and crytopgraphy are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. + +### Wallets + +User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. + +### Links to current research + +[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) + +[ethresear.ch Security](https://ethresear.ch/tag/security) + +[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) -Derp derp derp +[zkp.science](https://zkp.science/) + +[Zero Knowledge podcast](https://zeroknowledge.fm/) + +## Community, Education and Outreach + +Onboarding new users onto Ethereum requires new educational resources and approaches to outreach. This might include blog posts and articles, books, podcasts, memes, teaching resources events and anything else that builds communities, welcomes new starters and educates people about Ethereum. + +### UX/UI + +For Ethereum to onboard more people the UX/UI must be improved. This requires designers and UI and product experts to re-examine the design of wallets and apps. + +### Links to current research + +[Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) +[Ethereum.org community page](https://ethereum.org/en/learn/) ## Economics -## Cryptography +There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). + +### PoS incentives + +When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this + +### Liquid staking and derivatives + +Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks, ) + +### DeFi + +Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. + +### Taxation and accounting + +Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. + +### Payment systems + +Using Ethereum for everyday purchases is not common right now. This is because of accessibility and cost issues. These are probably resolvable with additional R&D especially on top of Layer 2 infrastructure. + +### Links to current research + +[Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) + +[Ethresear.ch Economics](https://ethresear.ch/c/economics/16) + +[Rotki crypto accounting](https://rotki.com/) + +## Clients and Protocol Development + +### Consensus Clients + +The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. + +### Execution Clients + +The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). + +### Data Science and Analytics + +There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. + +### Links to current research + +[Ethresear.ch The Merge](https://ethresear.ch/c/the-merge/38) + +[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) + +[Ethresear.ch Networking](https://ethresear.ch/c/networking/27) -e.g. topics on https://crypto.ethereum.org/research +[Dune Analytics](https://dune.com/browse/dashboards) -### Hash Functions +[Client diversity dashboard](https://clientdiversity.org/) -Derp derp derp +## Apps and Tooling -### Polynomial and vector commitments +### DAOs -Derp derp derp +DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. -### Verifiable delay functions and random beacons +### Developer tools -Derp derp derp +Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. -### Zero-Knowledge Proofs +### App security -Derp derp derp +Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. -## Layer 2 +### Technology stack -## Privacy +Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. -## Data Science +### Composability -Include miscellaneous places to find areas of opportunity/investment? +Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practises in interoperability and data standards. This is an area that would benefit from more ongoing research and development. -- [Challenges.ethereum.org](https://challenges.ethereum.org/) - a series of high-value research bounties, where you can earn >$100,000 USD +### Links to current research -- [Ecosystem Support Program's wishlist](https://esp.ethereum.foundation/wishlist/) - research areas where the Ethereum Ecosystem Support Program is actively seeking grant applications +[ethresear.ch Applications](https://ethresear.ch/c/applications/18) From a2239ad011b406dcec2ef05170e401dc7d120ece Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Thu, 19 May 2022 17:51:29 +0200 Subject: [PATCH 031/298] Typo fixes --- .../community/get-involved/open-research/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 16365a4883d..a4560b846ae 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -11,7 +11,7 @@ One of the primary strengths of Ethereum is that it is constantly being improved ## General research resources -Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. +Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. ## Scaling and Performance @@ -25,7 +25,7 @@ One particular area of Layer-2 that requires more research and development is sa ### Sharding -Sharding Ethereums blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. +Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. ### Hardware @@ -47,9 +47,9 @@ Running nodes on modest hardware is fundamental to keeping Ethereum decentralize Security is a broad topic that might include spam/scam prevention, wallet security, hardware security, crypto-economic security, bug hunting and testing of applications and client software and key-management. Contributing to knowledge in these areas will help stimulate mainstream adoption. -### Cryptography & zkp +### Cryptography & ZKP -Zero-knowledge proofs and crytopgraphy are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. +Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. ### Wallets @@ -158,7 +158,7 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra ### Composability -Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practises in interoperability and data standards. This is an area that would benefit from more ongoing research and development. +Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practices in interoperability and data standards. This is an area that would benefit from more ongoing research and development. ### Links to current research From 57024124191c0ed3125b1ee8b7daa976c6eed46d Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 20 May 2022 11:36:47 +0100 Subject: [PATCH 032/298] apply changes from @samajammin review --- .../get-involved/open-research/index.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index a4560b846ae..198ed957e55 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -15,21 +15,23 @@ Regardless of the specific topic, there is a wealth of information on Ethereum r ## Scaling and Performance +There are ongoing efforts to scale Ethereum using a variety of techniques including sharding the blockchain, danksharding and using rollups. Introductory information on scaling Ethereum is available on our [scaling page](https://ethereum.org/en/developers/docs/scaling). + ### Layer 2 There are now several Layer 2 protocols that scale Ethereum using different techniques for batching transactions and securing them on Ethereum layer 1. This is a very rapidly growing topic with a lot of research and development potential. ### Bridges -One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. +One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. Introductory information on bridges is available at our [bridges page](https://ethereum.org/en/developers/docs/bridges). ### Sharding -Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. +Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. Introductory information on sharding the Ethereum blockchain can be found on our [sharding page](https://ethereum.org/en/develoeprs/docs/shard-chains). ### Hardware -Running nodes on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. +Running nodes (see our [nodes page](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node)) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. ### Links to current research @@ -51,6 +53,9 @@ Security is a broad topic that might include spam/scam prevention, wallet securi Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. +#### Links +[0xparc blog](https://0xparc.org/blog) + ### Wallets User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. @@ -84,6 +89,9 @@ For Ethereum to onboard more people the UX/UI must be improved. This requires de There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). +#### Links +[Robust Incentives Group](https://ethereum.github.io/rig/) + ### PoS incentives When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this @@ -110,8 +118,6 @@ Using Ethereum for everyday purchases is not common right now. This is because o [Ethresear.ch Economics](https://ethresear.ch/c/economics/16) -[Rotki crypto accounting](https://rotki.com/) - ## Clients and Protocol Development ### Consensus Clients From 1c3c72441b6fb1835fd9c861c45bc8db00d31118 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 20 May 2022 12:27:40 +0100 Subject: [PATCH 033/298] reorganize links links for every subheading --- .../get-involved/open-research/index.md | 111 ++++++++++++++---- 1 file changed, 90 insertions(+), 21 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 198ed957e55..5d906937904 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -21,19 +21,43 @@ There are ongoing efforts to scale Ethereum using a variety of techniques includ There are now several Layer 2 protocols that scale Ethereum using different techniques for batching transactions and securing them on Ethereum layer 1. This is a very rapidly growing topic with a lot of research and development potential. +#### Links + +[Our Layer-2 page](https://ethereum.org/en/layer-2/) + +[EthHub Layer-2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) + +[ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) + + ### Bridges -One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. Introductory information on bridges is available at our [bridges page](https://ethereum.org/en/developers/docs/bridges). +One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of researchg because bridges are commonly targeted by hackers. + +#### Links + +[Our Bridges page](https://ethereum.org/en/developers/docs/bridges) + +[Vitalik on bridges](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) + ### Sharding -Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. Introductory information on sharding the Ethereum blockchain can be found on our [sharding page](https://ethereum.org/en/develoeprs/docs/shard-chains). +Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. + +#### Links + +[Our Sharding page](https://ethereum.org/en/develoeprs/docs/shard-chains) + +[Proto-Danksharding notes](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) + +[Bankless Danksharding video](https://www.youtube.com/watch?v=N5p0TB77flM) ### Hardware Running nodes (see our [nodes page](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node)) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. -### Links to current research +#### Links [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) @@ -54,23 +78,27 @@ Security is a broad topic that might include spam/scam prevention, wallet securi Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. #### Links + [0xparc blog](https://0xparc.org/blog) +[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) + +[zkp.science](https://zkp.science/) + +[Zero Knowledge podcast](https://zeroknowledge.fm/) + + ### Wallets User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. -### Links to current research +#### Links -[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) +[Our Security page](https://ethereum.org/en/security/) [ethresear.ch Security](https://ethresear.ch/tag/security) -[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) -[zkp.science](https://zkp.science/) - -[Zero Knowledge podcast](https://zeroknowledge.fm/) ## Community, Education and Outreach @@ -80,7 +108,7 @@ Onboarding new users onto Ethereum requires new educational resources and approa For Ethereum to onboard more people the UX/UI must be improved. This requires designers and UI and product experts to re-examine the design of wallets and apps. -### Links to current research +#### Links [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) [Ethereum.org community page](https://ethereum.org/en/learn/) @@ -90,33 +118,46 @@ For Ethereum to onboard more people the UX/UI must be improved. This requires de There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). #### Links + [Robust Incentives Group](https://ethereum.github.io/rig/) ### PoS incentives When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this +#### Links + + ### Liquid staking and derivatives Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks, ) +#### Links + +[Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) + ### DeFi Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. +#### Links + + ### Taxation and accounting Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. + +#### Links + + ### Payment systems Using Ethereum for everyday purchases is not common right now. This is because of accessibility and cost issues. These are probably resolvable with additional R&D especially on top of Layer 2 infrastructure. -### Links to current research -[Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) +#### Links -[Ethresear.ch Economics](https://ethresear.ch/c/economics/16) ## Clients and Protocol Development @@ -124,21 +165,39 @@ Using Ethereum for everyday purchases is not common right now. This is because o The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. +#### Links + +[Prysm client](https://docs.prylabs.network/docs/how-prysm-works/beacon-node/) + +[Lighthouse client](https://lighthouse-book.sigmaprime.io/) + +[Lodestar client](https://lodestar.chainsafe.io/) + +[Teku client](https://consensys.net/knowledge-base/ethereum-2/teku/) + +[Nimbus client](https://nimbus.team/) + +[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) + + ### Execution Clients The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). -### Data Science and Analytics +[Geth client](geth.ethereum.org) -There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. +[Nethermind client](nethermind.io) -### Links to current research +[Besu client](https://consensys.net/quorum/developers/) -[Ethresear.ch The Merge](https://ethresear.ch/c/the-merge/38) +[Erigon client](https://github.com/ledgerwatch/erigon) -[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) -[Ethresear.ch Networking](https://ethresear.ch/c/networking/27) +### Data Science and Analytics + +There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. + +### Links [Dune Analytics](https://dune.com/browse/dashboards) @@ -150,22 +209,32 @@ There is a need for more data analysis tools and dashboards that give detailed i DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. +#### Links + ### Developer tools Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. +#### Links + ### App security Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. +#### Links + +[ethresear.ch Applications](https://ethresear.ch/c/applications/18) + + ### Technology stack Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. +#### Links + ### Composability Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practices in interoperability and data standards. This is an area that would benefit from more ongoing research and development. -### Links to current research +#### Links -[ethresear.ch Applications](https://ethresear.ch/c/applications/18) From eeb88cede60aac82c97bdf4b5d1eae2fe61cb0ac Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 20 May 2022 14:35:10 +0100 Subject: [PATCH 034/298] add some more links, add account abstraction info --- .../community/get-involved/open-research/index.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 5d906937904..20c02e92247 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -53,6 +53,10 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho [Bankless Danksharding video](https://www.youtube.com/watch?v=N5p0TB77flM) +[Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) + +[Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) + ### Hardware Running nodes (see our [nodes page](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node)) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. @@ -63,11 +67,6 @@ Running nodes (see our [nodes page](https://ethereum.org/en/developers/docs/node [Ethresear.ch Scaling](https://ethresear.ch/c/sharding/6) -[Ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) - -[Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) - -[Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) ## Security @@ -90,7 +89,7 @@ Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy a ### Wallets -User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. +User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with dveelopment of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. #### Links @@ -98,6 +97,8 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [ethresear.ch Security](https://ethresear.ch/tag/security) +[EIP 2938 Account Abstraction](https://eips.ethereum.org/EIPS/eip-2938) + ## Community, Education and Outreach @@ -111,6 +112,7 @@ For Ethereum to onboard more people the UX/UI must be improved. This requires de #### Links [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) + [Ethereum.org community page](https://ethereum.org/en/learn/) ## Economics From b0ddc170fd0496b6e97f2587035b2fa204698fd9 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 20 May 2022 14:45:27 +0100 Subject: [PATCH 035/298] Apply suggestions from code review Co-authored-by: Sam Richards --- src/content/community/get-involved/open-research/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 20c02e92247..53e2570d03b 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -5,7 +5,7 @@ sidebar: true lang: en --- -# Ethereum open areas of research +# Open areas of Ethereum research One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline some of the key areas of active research as a rough guide to Ethereum's cutting edge. @@ -15,7 +15,7 @@ Regardless of the specific topic, there is a wealth of information on Ethereum r ## Scaling and Performance -There are ongoing efforts to scale Ethereum using a variety of techniques including sharding the blockchain, danksharding and using rollups. Introductory information on scaling Ethereum is available on our [scaling page](https://ethereum.org/en/developers/docs/scaling). +There are ongoing efforts to scale Ethereum using a variety of techniques including sharding the blockchain, danksharding and using rollups. Introductory information on scaling Ethereum is available on our [scaling page](/developers/docs/scaling). ### Layer 2 @@ -47,7 +47,7 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Links -[Our Sharding page](https://ethereum.org/en/develoeprs/docs/shard-chains) +[Our Sharding page](/upgrades/shard-chains/) [Proto-Danksharding notes](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) @@ -59,7 +59,7 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho ### Hardware -Running nodes (see our [nodes page](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node)) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. +[Running nodes](/developers/docs/nodes-and-clients/run-a-node/) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. #### Links From f877cecfe27a8b52e9448e05848292fdbf213b75 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 20 May 2022 14:48:08 +0100 Subject: [PATCH 036/298] add fee markets and eip4337 --- src/content/community/get-involved/open-research/index.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 53e2570d03b..a227c8a55c2 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -65,8 +65,6 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) -[Ethresear.ch Scaling](https://ethresear.ch/c/sharding/6) - ## Security @@ -99,6 +97,8 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [EIP 2938 Account Abstraction](https://eips.ethereum.org/EIPS/eip-2938) +[EIP 4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) + ## Community, Education and Outreach @@ -144,6 +144,9 @@ Decentralized finance (DeFi) is one of the primary classes of application built #### Links +### Fee markets + +#### Links ### Taxation and accounting From 89ce7edcc24e11e98284601550eb16351a5b1512 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 23 May 2022 10:11:06 +0100 Subject: [PATCH 037/298] >=1 link per category --- .../get-involved/open-research/index.md | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index a227c8a55c2..4da49245966 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -129,6 +129,7 @@ When Ethereum transitions to proof of stake, its native asset (ether) will be us #### Links +[Robist Incentives Group: PoS incentives](https://ethereum.github.io/beaconrunner/) ### Liquid staking and derivatives @@ -144,10 +145,19 @@ Decentralized finance (DeFi) is one of the primary classes of application built #### Links +[DeFi](https://ethereum.org/en/defi/) + +[Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) + ### Fee markets +Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user user-experience is an ongoing challenge that requires further research and development. + #### Links +[EIP 1559 (Robust Incentives Group)](https://ethereum.github.io/abm1559/notebooks/eip1559.html) + + ### Taxation and accounting Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. @@ -155,13 +165,8 @@ Crypto taxation is a complicated issue that likely requires a software solution. #### Links +[Example of taxation and accounting research: Cumming et al. 2019](https://www.mdpi.com/1911-8074/12/3/126) -### Payment systems - -Using Ethereum for everyday purchases is not common right now. This is because of accessibility and cost issues. These are probably resolvable with additional R&D especially on top of Layer 2 infrastructure. - - -#### Links ## Clients and Protocol Development @@ -216,12 +221,20 @@ DAOs are one of the key classes of application being built on top of Ethereum. T #### Links +[Dao Collective](https://daocollective.xyz/) + + ### Developer tools Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. #### Links +[Developer Frameworks](https://ethereum.org/en/developers/docs/frameworks/) + +[Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) + + ### App security Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. @@ -237,9 +250,12 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra #### Links +[Coinbase: Intro to Web3 Stack](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) + ### Composability Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practices in interoperability and data standards. This is an area that would benefit from more ongoing research and development. #### Links +[Smart contract composability](https://ethereum.org/en/developers/docs/smart-contracts/composability/) From f3e759152609a6a58d2433f2484357beacefbf53 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika <102589267+emmanuel-awosika@users.noreply.github.com> Date: Mon, 23 May 2022 16:07:31 +0100 Subject: [PATCH 038/298] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../developers/docs/scaling/plasma/index.md | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/content/developers/docs/scaling/plasma/index.md b/src/content/developers/docs/scaling/plasma/index.md index 745a8fef9a3..21a918b4815 100644 --- a/src/content/developers/docs/scaling/plasma/index.md +++ b/src/content/developers/docs/scaling/plasma/index.md @@ -21,28 +21,26 @@ You should have a good understanding of all the foundational topics and a high-l | Good for transactions between arbitrary users (no overhead per user pair if both are established on the plasma chain) | Need to periodically watch the network (liveness requirement) or delegate this responsibility to someone else to ensure the security of your funds. | | Plasma chains can be adapted to specific use-cases that are unrelated to the main chain. Anyone, including businesses, can customize Plasma smart contracts to provide scalable infrastructure that works in different contexts. | Relies on one or more operators to store data and serve it upon request. | | | Withdrawals are delayed by several days to allow for challenges. For fungible assets this can be mitigated by liquidity providers, but there is an associated capital cost. | -| | If too many users try to exit their Plasma chain simultaneously (due to malicious activity or network failure), they could flood the root chain and congest the network. | +| | If too many users try to exit simultaneously, Ethereum Mainnet could get congested. | -## How does Plasma differ from sidechains and sharding? +## How does Plasma differ from sidechains and sharding? {#plasma-sidechains-sharding} Plasma, sidechains, and sharding are fairly similar because they all connect to Ethereum Mainnet in some way. However, the level and strength of these connections vary, which affects the security properties of each scaling solution. -Here's a quick comparison of plasma chains, sidechains, and shard chains: +### Plasma vs sidechains {#plasma-vs-sidechains} -### Plasma vs sidechains - -A [sidechain](/developers/docs/scaling/sidechains/) is an independently operated blockchain connected to the Ethereum Mainnet via a two-way bridge. [Bridges](/bridges/) allow users to exchange tokens between the two blockchains, so they can transact on the sidechain, reducing congestion on the base layer and improving scalability. -Since sidechains use a separate consensus mechanism, and because these chains are typically much smaller than Ethereum Mainnet, bridging assets to these chains involves increased risk to your funds. Given the lack of security guarantees inherited from Mainnet in the sidechain model, users risk total loss of funds in the event of an attack on the sidechain.``` +A [sidechain](/developers/docs/scaling/sidechains/) is an independently operated blockchain connected to Ethereum Mainnet via a two-way bridge. [Bridges](/bridges/) allow users to exchange tokens between the two blockchains to transact on the sidechain, reducing congestion on Ethereum Mainnet and improving scalability. +Sidechains use a separate consensus mechanism and are typically much smaller than Ethereum Mainnet. As a result, bridging assets to these chains involves increased risk; given the lack of security guarantees inherited from Ethereum Mainnet in the sidechain model, users risk the loss of funds in an attack on the sidechain. Conversely, plasma chains derive their security from Mainnet are somewhat safer than sidechains. Both sidechains and plasma chains can have different consensus protocols, but the difference is that plasma chains publishes Merkle roots for each block on Ethereum Mainnet. Block roots are small pieces of information we can use to verify information about transactions that happen on a plasma chain. If an attack happens on a plasma chain, users can safely exit to Mainnet and withdraw their funds using the appropriate proofs. -### Plasma vs sharding +### Plasma vs sharding {#plasma-vs-sharding} -Both plasma chains and [shard chains](/upgrades/shard-chains/) periodically publish cryptographic proofs on the main chain. However, both have different security properties. +Both plasma chains and [shard chains](/upgrades/shard-chains/) periodically publish cryptographic proofs to Ethereum Mainnet. However, both have different security properties. -Shard chains commit "collation headers" to Mainnet, which contain detailed information about each data shard. As such, nodes on the main chain verify and enforce the validity of data shards. This reduces the possibility of invalid shard transitions and protects the network against malicious activity. +Shard chains commit "collation headers" to Mainnet containing detailed information about each data shard. Nodes on Mainnet verify and enforce the validity of data shards, reducing the possibility of invalid shard transitions and protecting the network against malicious activity. -Plasma is different because Mainnet only receives minimal information about the state of child chains. This means Mainnet cannot effectively verify transactions conducted on child chains, making the latter less secure. +Plasma is different because Mainnet only receives minimal information about the state of child chains. This means Mainnet cannot effectively verify transactions conducted on child chains, making them less secure. ### Use Plasma {#use-plasma} From 2882732fbc9fd69b9a456c9ef461638fbfab71d6 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Mon, 23 May 2022 21:03:57 +0200 Subject: [PATCH 039/298] Copy over content from GH issue (#6434) --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 211 +++++++++++++---------- 1 file changed, 116 insertions(+), 95 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 2a8363c7fbe..adede508700 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -6,98 +6,119 @@ labels: "wallet :purse:," assignees: "" --- -_Please note as part of [our Q2 product roadmap](https://github.com/ethereum/ethereum-org-website/issues/6161) we paused adding new wallets until we establish new, expanded criteria._ - -Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). - -Only continue with the issue if your wallet meets the criteria listed there. - -If it does complete the following information which we need to accurately list the wallet. - -**Is your wallet security tested? Please explain security measures i.e. security audit, internal security team or some other method.** - - - -**When did your wallet go live to users?** - - - -**Does your wallet have an active development team?** - - - -**Is your wallet open-source?** - - - -**Is your wallet globally accessible?** - - - -**Is your wallet custodial, non-custodial, or a hardware wallet?** - - - -**Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible** - - - -**Does the wallet support layer 2 networks?** - - - -**Can the wallet be used with arbitrary Ethereum RPC endpoint?** - - - -**Does the wallet have fiat on-ramps?** - - - -**Does the wallet allow users to explore dapps?** - - - -**Does the wallet have integrated defi/financial tools?** - - - -**Can a user withdraw to their card?** - - - -**Does the wallet offer limits protection?** - - - -**Does the wallet allow high-volume purchases?** - - - -**Does the wallet have an integrated token swap?** - - - -**Is the wallet a multi-signature wallet?** - - - -**Wallet title** - - - -**Wallet description** - - - -**Wallet logo** - - - -**Background colour for brand logo** - - - -**URL** - - +Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if your wallet meets the criteria listed there. + +If the wallet does meet our list policy, please complete the following information which we need to accurately list the wallet. + +### Project info + +- Wallet name + - Please provide the official name of the wallet +- Wallet description + - Please provide a short 1-2 sentence description of the wallet without marketing claims. Avoid claims like “the best Ethereum wallet”. We will ask for revisions if this comes across as marketing-focused. +- Wallet logo + - Please provide a hi-res SVG or transparent PNG +- Background color for brand logo + - Please provide a hex code for the brand color. This will be added to the background of the wallet card. +- URL to the project + - Please provide a URL (e.g. to the website of the wallet) +- URL to the documentation + - Please provide a URL to the documentation +- Is your wallet security tested? Please explain security measures i.e. security audit, internal security team, or some other method. + - Please explain any security measures you have taken to ensure your wallet is secure +- When did your wallet go live to users? + - Please provide a date when your wallet was usable by the public. Please provide some user metrics for how many users are using this wallet. +- Does your wallet have an active development team? + - Are developers actively working on the wallet? Provide proof that the wallet is actively being worked on (ex. GitHub repo link). +- Is your wallet globally accessible? + - Please list any KYC requirements or geographic limitations of your wallet, if any exist. +- Is there internationalization support for your wallet? + - Please list languages that the wallet actively supports +- What is the repository for your codebase? + - If you’re project is open source, please provide a link to the codebase. +- What social links are there for the project? + - Please provide social links for the wallet (Discord, Twitter, etc.) +- What is your wallet's onboarding experience? + - Please provide an explanation of where to find the user onboarding experience (links, is it built into the app, etc.), and what the onboarding experience is. + +### Device + +- Does the wallet have a mobile app? If yes, which operating systems are supported (iOS, Android)? + - If the wallet has a mobile interface, please provide information and links to the app store for the operating systems supported. +- Does the wallet have a desktop app? If yes, which operating systems are supported (Windows, Mac, Linux)? + - If the wallet has a desktop interface, please provide links and information for the operating systems supported. +- Does the wallet have a browser extension? If yes, which browsers are supported (Chromium, Firefox, Safari)? + - If the wallet has a browser extension, please provide links and information for the browsers that are supported. +- Is it a hardware wallet? + - How is it used / how does it connect (e.g. USB)? What software wallets does it integrate with (e.g. MetaMask)? + +### Security + +- Is the wallet code open-sourced? + - If yes, please provide a direct link to the repository. +- What license was the wallet software released under? + - Please provide information on the software license used for the wallet. +- Is your wallet custodial, or non-custodial? + - Do users have access to their public and/or private keys? If your company/project were to disappear, would users still be able to access their funds? + - Custodial - users don't own keys + - Non-custodial - users own keys +- Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible + - Please provide a link to any security audits or code reports. If you haven't been audited but think your wallet should be listed anyway, explain here. +- Spam protection? + - Does the wallet employ any practices to warn users against potential spam (e.g. when interacting with suspicious accounts/contracts)? + +### Features + +- Does the wallet have hardware wallet support? + - Please provide information on how a user can connect a hardware wallet to this wallet. +- Does the wallet support WalletConnect? + - Please provide information on if the wallet supports WalletConnect. +- Does the wallet support importing Ethereum RPC endpoints? + - Please provide documentation on how a user can import an Ethereum RPC into the wallet. +- Does the wallet support viewing and interacting with NFTs? + - Please provide information on the experience of NFTs in the wallet. +- Does the wallet support connecting to Ethereum applications? + - Please provide documentation for how users connect to applications. List examples (ie. connect wallet to dapp, in wallet browser, etc.) +- Does the wallet support staking directly? + - Please provide documentation on direct staking this wallet supports. +- Does the wallet support swaps directly? + - Please provide documentation on swaps. +- Does the wallet support multi-chain networks? + - Please provide documentation on multi-chain networks this wallet supports. +- Does the wallet allow the user to customize gas fees? + - Please provide documentation on how users can customize gas fees for transactions. +- Does the wallet support ENS? + - Please provide information on ENS support. +- Does the wallet support importing or automatically querying and displaying ERC-20 tokens? + - Please provide documentation on how to import tokens into the wallet. +- Does the wallet support EIP-1559 style transactions? + - Please provide information on how the type of transactions this wallet supports. + +### Finance + +- Does the wallet have fiat on-ramps through credit/debit cards or wire transfers, or Bank transfers (ACH)? + - Please provide documentation on how a user is able to onboard and purchase crypto in the wallet. + - Credit/debit cards + - Wire transfer + - Bank Transfer (ACH) +- Does the wallet support withdrawals to fiat? + - Can a user cash out their crypto assets directly to a card or bank account? Please provide documentation. + +### Smart Contract + +- Is the wallet a multi-signature wallet? + - Please provide documentation on how users set up and use the multisig functionality for the wallet. +- Does the wallet support social recovery? + - Please provide documentation on how users set up guardians and use social recovery for the wallet. + +### Support + +- Does your wallet have a dedicated support team? + - Where should we send users that are having issues? + - How fast is your support? +- What educational resources/documentation do you provide to users? + +### Extra + +- Does the wallet have any integrated tools not mentioned above? + - Please provide any information about extra features this wallet has that we may have missed in the above criteria. (e.g. privacy features, transaction batching, etc). From 8499ca549f02084b0ea208acdac5c2428ee9e044 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Mon, 23 May 2022 21:08:49 +0200 Subject: [PATCH 040/298] Format template --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 251 +++++++++++++++-------- 1 file changed, 162 insertions(+), 89 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index adede508700..9d73ccc85a4 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -12,113 +12,186 @@ If the wallet does meet our list policy, please complete the following informati ### Project info -- Wallet name - - Please provide the official name of the wallet -- Wallet description - - Please provide a short 1-2 sentence description of the wallet without marketing claims. Avoid claims like “the best Ethereum wallet”. We will ask for revisions if this comes across as marketing-focused. -- Wallet logo - - Please provide a hi-res SVG or transparent PNG -- Background color for brand logo - - Please provide a hex code for the brand color. This will be added to the background of the wallet card. -- URL to the project - - Please provide a URL (e.g. to the website of the wallet) -- URL to the documentation - - Please provide a URL to the documentation -- Is your wallet security tested? Please explain security measures i.e. security audit, internal security team, or some other method. - - Please explain any security measures you have taken to ensure your wallet is secure -- When did your wallet go live to users? - - Please provide a date when your wallet was usable by the public. Please provide some user metrics for how many users are using this wallet. -- Does your wallet have an active development team? - - Are developers actively working on the wallet? Provide proof that the wallet is actively being worked on (ex. GitHub repo link). -- Is your wallet globally accessible? - - Please list any KYC requirements or geographic limitations of your wallet, if any exist. -- Is there internationalization support for your wallet? - - Please list languages that the wallet actively supports -- What is the repository for your codebase? - - If you’re project is open source, please provide a link to the codebase. -- What social links are there for the project? - - Please provide social links for the wallet (Discord, Twitter, etc.) -- What is your wallet's onboarding experience? - - Please provide an explanation of where to find the user onboarding experience (links, is it built into the app, etc.), and what the onboarding experience is. +**Wallet name** + + + +**Wallet description** + + + +**Wallet logo** + + + +**Background color for brand logo** + + + +**URL to the project** + + + +**URL to the documentation** + + + +**Is your wallet security tested? Please explain security measures i.e. security audit, internal security team, or some other method.** + + + +**When did your wallet go live to users?** + + + +**Does your wallet have an active development team?** + + + +**Is your wallet globally accessible?** + + + +**Is there internationalization support for your wallet?** + + + +**What is the repository for your codebase?** + + + +**What social links are there for the project?** + + + +**What is your wallet's onboarding experience?** + + ### Device -- Does the wallet have a mobile app? If yes, which operating systems are supported (iOS, Android)? - - If the wallet has a mobile interface, please provide information and links to the app store for the operating systems supported. -- Does the wallet have a desktop app? If yes, which operating systems are supported (Windows, Mac, Linux)? - - If the wallet has a desktop interface, please provide links and information for the operating systems supported. -- Does the wallet have a browser extension? If yes, which browsers are supported (Chromium, Firefox, Safari)? - - If the wallet has a browser extension, please provide links and information for the browsers that are supported. -- Is it a hardware wallet? - - How is it used / how does it connect (e.g. USB)? What software wallets does it integrate with (e.g. MetaMask)? +**Does the wallet have a mobile app? If yes, which operating systems are supported (iOS, Android)?** + + + +**Does the wallet have a desktop app? If yes, which operating systems are supported (Windows, Mac, Linux)?** + + + +**Does the wallet have a browser extension? If yes, which browsers are supported (Chromium, Firefox, Safari)?** + + + +**Is it a hardware wallet?** + + ### Security -- Is the wallet code open-sourced? - - If yes, please provide a direct link to the repository. -- What license was the wallet software released under? - - Please provide information on the software license used for the wallet. -- Is your wallet custodial, or non-custodial? - - Do users have access to their public and/or private keys? If your company/project were to disappear, would users still be able to access their funds? - - Custodial - users don't own keys - - Non-custodial - users own keys -- Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible - - Please provide a link to any security audits or code reports. If you haven't been audited but think your wallet should be listed anyway, explain here. -- Spam protection? - - Does the wallet employ any practices to warn users against potential spam (e.g. when interacting with suspicious accounts/contracts)? +**Is the wallet code open-sourced?** + + + +**What license was the wallet software released under?** + + + +**Is your wallet custodial, or non-custodial?** + + + +**Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible** + + + +**Spam protection?** + + ### Features -- Does the wallet have hardware wallet support? - - Please provide information on how a user can connect a hardware wallet to this wallet. -- Does the wallet support WalletConnect? - - Please provide information on if the wallet supports WalletConnect. -- Does the wallet support importing Ethereum RPC endpoints? - - Please provide documentation on how a user can import an Ethereum RPC into the wallet. -- Does the wallet support viewing and interacting with NFTs? - - Please provide information on the experience of NFTs in the wallet. -- Does the wallet support connecting to Ethereum applications? - - Please provide documentation for how users connect to applications. List examples (ie. connect wallet to dapp, in wallet browser, etc.) -- Does the wallet support staking directly? - - Please provide documentation on direct staking this wallet supports. -- Does the wallet support swaps directly? - - Please provide documentation on swaps. -- Does the wallet support multi-chain networks? - - Please provide documentation on multi-chain networks this wallet supports. -- Does the wallet allow the user to customize gas fees? - - Please provide documentation on how users can customize gas fees for transactions. -- Does the wallet support ENS? - - Please provide information on ENS support. -- Does the wallet support importing or automatically querying and displaying ERC-20 tokens? - - Please provide documentation on how to import tokens into the wallet. -- Does the wallet support EIP-1559 style transactions? - - Please provide information on how the type of transactions this wallet supports. +**Does the wallet have hardware wallet support?** + + + +**Does the wallet support WalletConnect?** + + + +**Does the wallet support importing Ethereum RPC endpoints?** + + + +**Does the wallet support viewing and interacting with NFTs?** + + + +**Does the wallet support connecting to Ethereum applications?** + + + +**Does the wallet support staking directly?** + + + +**Does the wallet support swaps directly?** + + + +**Does the wallet support multi-chain networks?** + + + +**Does the wallet allow the user to customize gas fees?** + + + +**Does the wallet support ENS?** + + + +**Does the wallet support importing or automatically querying and displaying ERC-20 tokens?** + + + +**Does the wallet support EIP-1559 style transactions?** + + ### Finance -- Does the wallet have fiat on-ramps through credit/debit cards or wire transfers, or Bank transfers (ACH)? - - Please provide documentation on how a user is able to onboard and purchase crypto in the wallet. - - Credit/debit cards - - Wire transfer - - Bank Transfer (ACH) -- Does the wallet support withdrawals to fiat? - - Can a user cash out their crypto assets directly to a card or bank account? Please provide documentation. +**Does the wallet have fiat on-ramps through credit/debit cards or wire transfers, or Bank transfers (ACH)?** + + + + + + +**Does the wallet support withdrawals to fiat?** + + ### Smart Contract -- Is the wallet a multi-signature wallet? - - Please provide documentation on how users set up and use the multisig functionality for the wallet. -- Does the wallet support social recovery? - - Please provide documentation on how users set up guardians and use social recovery for the wallet. +**Is the wallet a multi-signature wallet?** + + + +**Does the wallet support social recovery?** + + ### Support -- Does your wallet have a dedicated support team? - - Where should we send users that are having issues? - - How fast is your support? -- What educational resources/documentation do you provide to users? +**Does your wallet have a dedicated support team?** + + + + +**What educational resources/documentation do you provide to users?** ### Extra -- Does the wallet have any integrated tools not mentioned above? - - Please provide any information about extra features this wallet has that we may have missed in the above criteria. (e.g. privacy features, transaction batching, etc). +**Does the wallet have any integrated tools not mentioned above?** + + From 0f3c16324089b0b60271e9095480eff413061e16 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 23 May 2022 18:57:32 -0600 Subject: [PATCH 041/298] setup l2 page for translation --- src/components/Layer2/Layer2Onboard.js | 67 ++++--- src/intl/en/page-layer-2.json | 60 ++++++- src/pages/layer-2.js | 236 +++++++++---------------- 3 files changed, 190 insertions(+), 173 deletions(-) diff --git a/src/components/Layer2/Layer2Onboard.js b/src/components/Layer2/Layer2Onboard.js index e7c28b209d2..19f70fc4baa 100644 --- a/src/components/Layer2/Layer2Onboard.js +++ b/src/components/Layer2/Layer2Onboard.js @@ -2,10 +2,12 @@ import { GatsbyImage } from "gatsby-plugin-image" import React, { useState } from "react" import styled from "styled-components" +import { useIntl } from "gatsby-plugin-intl" // Components import ButtonLink from "../../components/ButtonLink" import Link from "../../components/Link" +import Translation from "../../components/Translation" import { StyledSelect as Select } from "../SharedStyledComponents" // Data @@ -13,6 +15,7 @@ import cexSupport from "../../data/layer-2/cex-layer-2-support.json" //Utils import { trackCustomEvent } from "../../utils/matomo" +import { translateMessageId } from "../../utils/translations" // Styles const Content = styled.div` @@ -162,26 +165,28 @@ const RightSelected = styled.div` ` const Layer2Onboard = ({ layer2DataCombined, ethIcon }) => { + const intl = useIntl() + const [selectedExchange, setSelectedExchange] = useState(undefined) const [selectedL2, setSelectedL2] = useState(undefined) return ( -

How to get onto a layer 2

+

+ +

- There are two primary ways to get your assets onto a layer 2: bridge - funds from Ethereum via a smart contract or withdraw your funds on an - exchange directly onto the layer 2 network. +

-

Funds in your wallet?

+

+ +

- If you've already got your ETH in your wallet, you'll need to use a - bridge to move it from Ethereum Mainnet to a layer 2.{" "} - More on bridges. +

@@ -202,32 +207,43 @@ const Layer2Onboard = ({ layer2DataCombined, ethIcon }) => { }) setSelectedL2(selectedOption) }} - placeholder={"Select L2 you want to bridge to"} + placeholder={translateMessageId( + "layer-2-onboard-wallet-input-placeholder", + intl + )} /> {selectedL2 && (

- You can connect to {selectedL2.name} using these wallets: + {`${translateMessageId( + "layer-2-onboard-wallet-selected-1", + intl + )} ${selectedL2.name} ${translateMessageId( + "layer-2-onboard-wallet-selected-2", + intl + )}`}

{selectedL2.bridgeWallets.join(", ")}

- {selectedL2.name} Bridge + {`${selectedL2.name} ${translateMessageId( + "layer-2-bridge", + intl + )}`}
)} -

Funds on an exchange?

+

+ +

- Some centralized exchanges now offer direct withdrawals and deposits - to layer 2s. Check which exchanges support layer 2 withdrawals and - which layer 2s they support. +

- You'll also need a wallet to withdraw your funds to.{" "} - Find an Ethereum wallet. +

@@ -248,7 +264,10 @@ const Layer2Onboard = ({ layer2DataCombined, ethIcon }) => { }) setSelectedExchange(selectedOption) }} - placeholder={"Check exchanges that support L2"} + placeholder={translateMessageId( + "layer-2-onboard-exchange-input-placeholder", + intl + )} /> @@ -259,7 +278,9 @@ const Layer2Onboard = ({ layer2DataCombined, ethIcon }) => { -

Deposits

+

+ +

    {selectedExchange.supports_deposits.map((l2) => (
  • {l2}
  • @@ -267,7 +288,9 @@ const Layer2Onboard = ({ layer2DataCombined, ethIcon }) => {
-

Withdrawals

+

+ +

    {selectedExchange.supports_withdrawals.map((l2) => (
  • {l2}
  • @@ -276,7 +299,9 @@ const Layer2Onboard = ({ layer2DataCombined, ethIcon }) => { - Go to {selectedExchange.name} + {`${translateMessageId("layer-2-go-to", intl)} ${ + selectedExchange.name + }`} diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index af5a48808b9..a1941acc5a8 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -54,5 +54,63 @@ "layer-2-dyor-title": "Do your own research: risks of layer 2", "layer-2-dyor-1": "Since layer 2 chains inherit security from Ethereum, in an ideal world, they are as safe as L1 Ethereum. However, many of the projects are still young and somewhat experimental. After years of research and development, many of the L2 technologies that will scale Ethereum launched in 2021. Many projects still have additional trust assumptions as they work to decentralize their networks. Always do your own research to decide if you're comfortable with any risks involved.", "layer-2-dyor-2": "For more information on the technology, risks, and trust assumptions of layer 2s, we recommend checking out L2BEAT, which provides a comprehensive risk assessment framework of each project.", - "layer-2-dyor-3": "Go to L2BEAT" + "layer-2-dyor-3": "Go to L2BEAT", + "layer-2-use-layer-2-title": "Use layer 2", + "layer-2-use-layer-2-1": "Now that you understand why layer 2 exists and how it works, let's get you up and running!", + "layer-2-use-layer-2-generalized-title": "Generalized layer 2s", + "layer-2-use-layer-2-generalized-1": "Generalized layer 2s behave just like Ethereum — but cheaper. Anything that you can do on Ethereum layer 1, you can also do on layer 2. Many dapps have already begun to migrate to these networks or have skipped Mainnet altogether to deploy straight on a layer 2.", + "layer-2-use-layer-2-application-specific-title": "Application specific layer 2s", + "layer-2-use-layer-2-application-specific-1": "Application specific layer 2s are projects that specialize in optimizing for a specific application space, bringing improved performance.", + "layer-2-sidechains-title": "A note on sidechains, validiums, and alternative blockchains", + "layer-2-sidechains-1": "Sidechains and validiums are blockchains that allow assets from Ethereum to be bridged over and used on another blockchain. Sidechains and validiums run in parallel with Ethereum, and interact with Ethereum through bridges, but they do not derive their security or data availability from Ethereum.", + "layer-2-sidechains-2": "Both scale similarly to layer 2s - they offer lower transaction fees and higher transaction throughput - but have different trust assumptions.", + "layer-2-sidechains-3": "More on sidechains and validiums", + "layer-2-sidechains-4": "Some layer 1 blockchains have higher throughput and lower transaction fees than Ethereum. These alternative layer 1s have had to sacrifice on security or decentralization in order to achieve higher transactions per second and lower transaction fees.", + "layer-2-sidechains-5": "The Ethereum ecosystem is firmly aligned that layer 2 scaling is the only way to solve the scalability trilemma while remaining decentralized and secure.", + "layer-2-onboard-title": "How to get onto a layer 2", + "layer-2-onboard-1": "There are two primary ways to get your assets onto a layer 2: bridge funds from Ethereum via a smart contract or withdraw your funds on an exchange directly onto the layer 2 network.", + "layer-2-onboard-wallet-title": "Funds in your wallet?", + "layer-2-onboard-wallet-1": "If you've already got your ETH in your wallet, you'll need to use a bridge to move it from Ethereum Mainnet to a layer 2. More on bridges.", + "layer-2-onboard-wallet-input-placeholder": "Select L2 you want to bridge to", + "layer-2-onboard-wallet-selected-1": "You can connect to", + "layer-2-onboard-wallet-selected-2": "using these wallets:", + "layer-2-bridge": "Bridge", + "layer-2-onboard-exchange-title": "Funds on an exchange?", + "layer-2-onboard-exchange-1": "Some centralized exchanges now offer direct withdrawals and deposits to layer 2s. Check which exchanges support layer 2 withdrawals and which layer 2s they support.", + "layer-2-onboard-exchange-2": "You'll also need a wallet to withdraw your funds to. Find an Ethereum wallet.", + "layer-2-onboard-exchange-input-placeholder": "Check exchanges that support L2", + "layer-2-deposits": "Deposits", + "layer-2-withdrawals": "Withdrawals", + "layer-2-go-to": "Go to", + "layer-2-tools-title": "Tools to be effective on layer 2", + "layer-2-tools-l2beat-title": "L2BEAT", + "layer-2-tools-l2beat-description": "L2BEAT is a great resource for looking at technical risk assessments of layer 2 projects. We recommend checking out their resources when researching specific layer 2 projects.", + "layer-2-tools-l2fees-title": "L2 Fees", + "layer-2-tools-l2fees-description": "L2 Fees lets you see the current cost (denominated in USD) for doing transactions on different layer 2s.", + "layer-2-tools-chainlist-title": "Chainlist", + "layer-2-tools-chainlist-description": "Chainlist is a great resource for importing network RPC's into supporting wallets. You will find RPC's for layer 2 projects here to help get you connected.", + "layer-2-tools-zapper-title": "Zapper", + "layer-2-tools-zapper-description": "Manage your entire web3 portfolio from DeFi to NFTs and whatever comes next. Invest in the latest opportunities from one convenient place.", + "layer-2-tools-zerion-title": "Zerion", + "layer-2-tools-zerion-description": "Build and manage your entire DeFi portfolio from one place. Discover the world of decentralized finance today.", + "layer-2-tools-debank-title": "DeBank", + "layer-2-tools-debank-description": "Keep up with all the important happenings in the web3 world", + "layer-2-faq-title": "FAQ", + "layer-2-faq-question-1-title": "Why is there no 'official' Ethereum L2?", + "layer-2-faq-question-1-description-1": "Just as there is no 'official' Ethereum client, there is no 'official' Ethereum layer 2. Ethereum is permissionless - technically anyone can create a layer 2! Multiple teams will implement their version of a layer 2, and the ecosystem as a whole will benefit from a diversity of design approaches that are optimized for different use cases. Much like we have multiple Ethereum clients developed by multiple teams in order to have diversity in the network, this too will be how layer 2s develop in the future.", + "layer-2-faq-question-2-title": "What is the difference between optimistic and zero-knowledge rollups?", + "layer-2-faq-question-2-description-1": "Both optimistic and zero-knowledge rollups bundle (or ’roll up’) hundreds of transactions into a single transaction on layer 1. Rollup transactions get executed outside of layer 1 but transaction data gets posted to layer 1.", + "layer-2-faq-question-2-description-2": "The primary difference is what data is posted to the layer 1 and how the data is verified. Validity proofs (used by zero-knowledge rollups) run the computations off-chain and post a proof, whereas fault proofs (used by optimistic rollups) only run the computations on-chain when fault is suspected and must be checked.", + "layer-2-faq-question-2-description-3": "At the moment, most zk-rollups are application specific, in contrast with optimistic rollups which have largely been generalizable.", + "layer-2-faq-question-2-description-4": "More info on optimistic rollups and zero-knowledge rollups.", + "layer-2-faq-question-3-title": "Is scaling at layer 1 possible?", + "layer-2-faq-question-3-description-1": "Yes. Currently in the Ethereum roadmap there are plans for shard chains. While these are in the roadmap, further scaling through layer 2 networks is still necessary. More info on sharding.", + "layer-2-faq-question-4-title": "What are the risks with layer 2?", + "layer-2-faq-question-4-description-1": "Layer 2 projects contain additional risks compared to holding funds and transacting directly on Ethereum Mainnet. For instance, sequencers may go down, leading you to have to wait to access funds.", + "layer-2-faq-question-4-description-2": "We encourage you to do your own research before transferring significant funds to a layer 2. For more information on the technology, risks, and trust assumptions of layer 2s, we recommend checking out L2BEAT, which provides a comprehensive risk assessment framework of each project.", + "layer-2-faq-question-4-description-3": "Blockchain bridges, which facilitate asset transfers to layer 2, are in their early stages of development and it is likely that the optimal bridge design has not been discovered yet. There have been recent hacks of bridges. More information on bridges.", + "layer-2-faq-question-5-title": "Why aren't some layer 2 projects listed here?", + "layer-2-faq-question-5-description-1": "We want to make sure we list the best resources possible so users can navigate the layer 2 space in a safe and confident manner. We maintain a framework of criteria for how projects are evaluated for inclusion. View our layer 2 listing policy here.", + "layer-2-faq-question-5-description-2": "Anyone is free to suggest adding a layer 2 on ethereum.org. If there's a layer 2 that we have missed, please suggest it.", + "layer-2-further-reading-title": "Further reading" } diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index 4f25a9c419e..4578a33dc5a 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -333,25 +333,31 @@ const Layer2Page = ({ data }) => { const toolsData = { information: [ { - title: "L2BEAT", - description: - "L2BEAT is a great resource for looking at technical risk assessments of layer 2 projects. We recommend checking out their resources when researching specific layer 2 projects.", + title: translateMessageId("layer-2-tools-l2beat-title", intl), + description: translateMessageId( + "layer-2-tools-l2beat-description", + intl + ), link: "https://l2beat.com", image: getImage(data.l2beat), alt: "L2BEAT", }, { - title: "L2 Fees", - description: - "L2 Fees lets you see the current cost (denominated in USD) for doing transactions on different layer 2s.", + title: translateMessageId("layer-2-tools-l2fees-title", intl), + description: translateMessageId( + "layer-2-tools-l2fees-description", + intl + ), link: "https://l2fees.info", image: getImage(data.doge), alt: "L2 Fees", }, { - title: "Chainlist", - description: - "Chainlist is a great resource for importing network RPC's into supporting wallets. You will find RPC's for layer 2 projects here to help get you connected.", + title: translateMessageId("layer-2-tools-chainlist-title", intl), + description: translateMessageId( + "layer-2-tools-chainlist-description", + intl + ), link: "https://chainlist.org", image: getImage(data.doge), alt: "Chainlist", @@ -359,25 +365,31 @@ const Layer2Page = ({ data }) => { ], walletManagers: [ { - title: "Zapper", + title: translateMessageId("layer-2-tools-zapper-title", intl), + description: translateMessageId( + "layer-2-tools-zapper-description", + intl + ), link: "https://zapper.fi/", - description: - "Manage your entire web3 portfolio from DeFi to NFTs and whatever comes next. Invest in the latest opportunities from one convenient place.", image: getImage(data.zapper), alt: "Zapper", }, { - title: "Zerion", - description: - "Build and manage your entire DeFi portfolio from one place. Discover the world of decentralized finance today.", + title: translateMessageId("layer-2-tools-zerion-title", intl), + description: translateMessageId( + "layer-2-tools-zerion-description", + intl + ), link: "https://zerion.io", image: getImage(data.zerion), alt: "Zerion", }, { - title: "DeBank", - description: - "Keep up with all the important happenings in the web3 world", + title: translateMessageId("layer-2-tools-debank-title", intl), + description: translateMessageId( + "layer-2-tools-debank-description", + intl + ), link: "https://debank.com", image: getImage(data.debank), alt: "DeBank", @@ -470,13 +482,6 @@ const Layer2Page = ({ data }) => {

    - Layer 2 (L2) is a collective term to describe a specific set of - Ethereum scaling solutions.{" "} - - A layer 2 is a separate blockchain that extends Ethereum and - inherits the security guarantees of Ethereum - - .

    @@ -499,16 +504,6 @@ const Layer2Page = ({ data }) => {

    - Layer 1 is the base blockchain. Ethereum and Bitcoin are both - layer 1 blockchains because they are the{" "} - - underlying foundation that various layer 2 networks build on top - of - - . Examples of layer 2 projects include "rollups" on Ethereum and - the Lightning Network on top of Bitcoin. All user transaction - activity on these layer 2 projects can ultimately settle back to - the layer 1 blockchain.

    @@ -579,17 +574,6 @@ const Layer2Page = ({ data }) => {

    - The Ethereum community has taken a strong stance that it would not - throw out decentralization or security in order to scale. Until{" "} - sharding, Ethereum - Mainnet (layer 1) is only able to process{" "} - - roughly 15 transactions per second - - . When demand to use Ethereum is high, the network becomes - congested, which increases transaction fees and prices out users - who cannot afford those fees. That is where layer 2 comes in to - scale Ethereum today.

    @@ -688,17 +672,17 @@ const Layer2Page = ({ data }) => { -

    Use layer 2

    +

    + +

    - Now that you understand why layer 2 exists and how it works, let's get - you up and running! +

    -

    Generalized layer 2s

    +

    + +

    - Generalized layer 2s behave just like Ethereum — but cheaper. Anything - that you can do on Ethereum layer 1, you can also do on layer 2. Many - dapps have already begun to migrate to these networks or have skipped - Mainnet altogether to deploy straight on a layer 2. +

    {layer2DataCombined @@ -723,11 +707,11 @@ const Layer2Page = ({ data }) => {
    -

    Application specific layer 2s

    +

    + +

    - Application specific layer 2s are projects that specialize in - optimizing for a specific application space, bringing improved - performance. +

    {layer2DataCombined @@ -756,42 +740,27 @@ const Layer2Page = ({ data }) => {
    -

    A note on sidechains, validiums, and alternative blockchains

    +

    + +

    - Sidechains and validiums are blockchains that allow assets - from Ethereum to be bridged over and used on another blockchain. - Sidechains and validiums run in parallel with Ethereum, and - interact with Ethereum through bridges, but they do not derive - their security or data availability from Ethereum. +

    - Both scale similarly to layer 2s - they offer lower transaction - fees and higher transaction throughput - but have different trust - assumptions. +

    - More on{" "} - sidechains{" "} - and validiums +

    - Some layer 1 blockchains have higher throughput and lower - transaction fees than Ethereum. These alternative layer 1s have - had to sacrifice on security or decentralization in order - to achieve higher transactions per second and lower transaction - fees. +

    - The Ethereum ecosystem is firmly aligned that{" "} - - layer 2 scaling is the only way to solve the scalability - trilemma - {" "} - while remaining decentralized and secure. +

    @@ -805,7 +774,9 @@ const Layer2Page = ({ data }) => {
    -

    Tools to be effective on layer 2

    +

    + +

    {
    -

    FAQ

    - +

    + +

    +

    - Just as there is no 'official' Ethereum client, there is no - 'official' Ethereum layer 2. Ethereum is permissionless - - technically anyone can create a layer 2! Multiple teams will - implement their version of a layer 2, and the ecosystem as a whole - will benefit from a diversity of design approaches that are - optimized for different use cases. Much like we have multiple - Ethereum clients developed by multiple teams in order to have - diversity in the network, this too will be how layer 2s develop in - the future. +

    - +

    - Both optimistic and zero-knowledge rollups bundle (or ’roll up’) - hundreds of transactions into a single transaction on layer 1. - Rollup transactions get executed outside of layer 1 but transaction - data gets posted to layer 1. +

    - The primary difference is what data is posted to the layer 1 and how - the data is verified. Validity proofs (used by zero-knowledge - rollups) run the computations off-chain and post a proof, whereas - fault proofs (used by optimistic rollups) only run the computations - on-chain when fault is suspected and must be checked. +

    - At the moment, most zk-rollups are application specific, in contrast - with optimistic rollups which have largely been generalizable. +

    - More info on{" "} - - optimistic rollups - {" "} - and{" "} - - zero-knowledge rollups - - . +

    - +

    - Yes. Currently in the Ethereum roadmap there are plans for shard - chains. While these are in the roadmap, further scaling through - layer 2 networks is still necessary.{" "} - More info on sharding. +

    - +

    - Layer 2 projects contain additional risks compared to holding funds - and transacting directly on Ethereum Mainnet. For instance, - sequencers may go down, leading you to have to wait to access funds. +

    - We encourage you to do your own research before transferring - significant funds to a layer 2. For more information on the - technology, risks, and trust assumptions of layer 2s, we recommend - checking out L2BEAT, - which provides a comprehensive risk assessment framework of each - project. +

    - Blockchain bridges, which facilitate asset transfers to layer 2, are - in their early stages of development and it is likely that the - optimal bridge design has not been discovered yet. There have been{" "} - - recent hacks of bridges - - . More information on bridges. +

    - +

    - We want to make sure we list the best resources possible so users - can navigate the layer 2 space in a safe and confident manner. We - maintain a framework of criteria for how projects are evaluated for - inclusion.{" "} - - View our layer 2 listing policy here - - . +

    - Anyone is free to suggest adding a layer 2 on ethereum.org. If - there's a layer 2 that we have missed,{" "} - - please suggest it - +

    -

    Further reading

    +

    + +

    • From 2e6aa57f2a17064172bfaf62ff85ce556fbd196d Mon Sep 17 00:00:00 2001 From: byhow Date: Mon, 23 May 2022 23:03:11 -0700 Subject: [PATCH 042/298] docs: update testnet header jumps similar to 84299e7f1da7aabed07b6f3e2995b5141c8adfbe and what was being done in issue #6384, replacing the rest of the links with similar issues as well as references from their translations. --- src/content/glossary/index.md | 6 ++---- src/content/translations/de/glossary/index.md | 10 +++++----- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/es/glossary/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/fr/glossary/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/hu/glossary/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/id/glossary/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/it/glossary/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/pl/glossary/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/ro/glossary/index.md | 2 +- .../docs/nodes-and-clients/nodes-as-a-service/index.md | 2 +- src/content/translations/tr/glossary/index.md | 2 +- src/content/translations/zh/glossary/index.md | 2 +- 21 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/content/glossary/index.md b/src/content/glossary/index.md index d1c134d5f9e..3269ef4230f 100644 --- a/src/content/glossary/index.md +++ b/src/content/glossary/index.md @@ -510,7 +510,6 @@ A [wallet](#wallet) using the hierarchical deterministic (HD) key creation and t A value used to generate the master [private key](#private-key) and master chain code for an HD [wallet](#wallet). The wallet seed can be represented by mnemonic words, making it easier for humans to copy, back up, and restore private keys. - ### homestead {#homestead} The second development stage of Ethereum, launched in March 2016 at block 1,150,000. @@ -575,7 +574,6 @@ Every account’s private key/address pair exists as a single keyfile in an Ethe Cryptographic [hash](#hash) function used in Ethereum. Keccak-256 was standardized as [SHA](#sha)-3. - ## L {#section-l} @@ -749,7 +747,7 @@ A secret number that allows Ethereum users to prove ownership of an account or c ### private chain {#private-chain} -A fully private blockchain is one with permissioned access, not publicly available for use. +A fully private blockchain is one with permissioned access, not publicly available for use. ### proof-of-stake (PoS) {#pos} @@ -955,7 +953,7 @@ A [hard fork](#hard-fork) of the Ethereum blockchain, which occurred at block 2, Short for "test network," a network used to simulate the behavior of the main Ethereum network (see [Mainnet](#mainnet)). - + Testnets diff --git a/src/content/translations/de/glossary/index.md b/src/content/translations/de/glossary/index.md index fdc6038cb6a..b999891f374 100644 --- a/src/content/translations/de/glossary/index.md +++ b/src/content/translations/de/glossary/index.md @@ -130,11 +130,11 @@ Wenn zahlreiche Nodes (meist die Mehrzahl der Nodes im Netzwerk) alle die gleich Konsens-Clients (wie Prysm, Teku, Nimbus, Lighthouse, Lodestar) führen Ethereums [Proof-of-Stake](#pos)-Konsensalgorithmus aus, der es dem Netzwerk ermöglicht, sich bezüglich des Kopfs der Beacon Chain zu einigen. Konsens-Clients beteiligen sich nicht an der Validierung/am Broadcasting von Transaktionen oder der Ausführung von Zustandsübergängen. Dies geschieht durch [Ausführungsclients](#execution-client). -### Consensus Layer (Konsensschicht) {#consensus-layer} +### Consensus Layer (Konsensschicht) {#consensus-layer} Die Konsensschicht von Ethereum ist das Netzwerk der [Konsens-Clients](#consensus-client). -### Consensus Rules (Konsensregeln) {#consensus-rules} +### Consensus Rules (Konsensregeln) {#consensus-rules} Die Block-Validierungsregeln, denen Full-Nodes folgen, um im Konsens mit anderen Nodes zu bleiben. Nicht zu verwechseln mit [Konsens](#consensus). @@ -146,7 +146,7 @@ Der zweite Teil der [Metropolis](#metropolis)-Ausbaustufe, ursprünglich geplant Ein Konto, das Code enthält, welcher ausgeführt wird, wenn es eine [Transaktion](#transaction) von einem anderen [Konto](#account) ([EOA](#eoa) oder [Smart Contract](#contract-account)) erhält. -### Contract Creation Transaction (Vertragserstellungs-Transaktion) {#contract-creation-transaction} +### Contract Creation Transaction (Vertragserstellungs-Transaktion) {#contract-creation-transaction} Eine spezielle [Transaktion](#transaction) mit der [Null-Adresse](#zero-address) als Empfänger, die verwendet wird, um einen [Vertrag](#contract-account) zu registrieren und ihn in der Ethereum-Blockchain aufzuzeichnen. @@ -186,7 +186,7 @@ Eine Art [dApp](#dapp), mit der du Token mit anderen im Netzwerk austauschen kan Dezentralisierte Börsen -### Deed (Beglaubigung) {#deed} +### Deed (Beglaubigung) {#deed} Siehe [non-fungible token (NFT)](#nft) @@ -808,7 +808,7 @@ Eine [Hard-Fork](#hard-fork) der Ethereum-Blockchain, die in Block 2.463.000 auf Kurz für "Testnetzwerk", ein Netzwerk, das dazu dient, das Verhalten des Hauptnetzwerks von Ethereum zu simulieren (siehe [Hauptnetzwerk](#mainnet)). - + Testnetze diff --git a/src/content/translations/es/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/es/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index 943c88e0b52..f85d72c7ad7 100644 --- a/src/content/translations/es/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/es/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ Si aún no entiendes qué son los nodos y los clientes, consulta [Nodos y client Los proveedores de servicios de nodos ejecutan clientes de nodos distribuidos para ti, así que tú no tienes que hacerlo. -Estos servicios suelen proporcionar una clave de API, que puedes usar para escribir y leer desde la blockchain. Además, suelen incluir acceso a [redes de pruebas de Ethereum](/developers/docs/networks/#testnets), además de a la red principal. +Estos servicios suelen proporcionar una clave de API, que puedes usar para escribir y leer desde la blockchain. Además, suelen incluir acceso a [redes de pruebas de Ethereum](/developers/docs/networks/#ethereum-testnets), además de a la red principal. Algunos servicios te ofrecen tu propio nodo que ellos gestionan para ti, mientras que otros usan equilibradores de carga para distribuir la actividad a través de los nodos. diff --git a/src/content/translations/es/glossary/index.md b/src/content/translations/es/glossary/index.md index 61b2a4a4ef5..2f01d517b78 100644 --- a/src/content/translations/es/glossary/index.md +++ b/src/content/translations/es/glossary/index.md @@ -704,7 +704,7 @@ Una [bifurcación dura](#hard-fork) de la blockchain de Ethereum, que se produjo Una red que se utiliza para simular el comportamiento de la red principal de Ethereum (consulta [red principal](#mainnet)). - + Redes de pruebas diff --git a/src/content/translations/fa/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/fa/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index c3f057e7ac3..6b5a913facf 100644 --- a/src/content/translations/fa/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/fa/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ sidebarDepth: 2 ارائه‌دهندگان خدمات گره، کلاینت‌های گره‌ی توزیع شده را در پشت‌صحنه برای شما اجرا می‌کنند، بنابراین نیازی ندارید که خودتان آن‌ها را انجام دهید. -این سرویس‌ها معمولاً یک کلید API ارائه می‌کنند که می‌توانید از آن برای نوشتن و خواندن از زنجیره‌ی بلوکی استفاده کنید. آن‌ها اغلب علاوه بر شبکه‌ی اصلی به [شبکه‌های تست اتریوم](/developers/docs/networks/#testnets) نیز دسترسی دارند. +این سرویس‌ها معمولاً یک کلید API ارائه می‌کنند که می‌توانید از آن برای نوشتن و خواندن از زنجیره‌ی بلوکی استفاده کنید. آن‌ها اغلب علاوه بر شبکه‌ی اصلی به [شبکه‌های تست اتریوم](/developers/docs/networks/#ethereum-testnets) نیز دسترسی دارند. برخی از سرویس‌ها گره‌ی اختصاصی خودشان را به شما ارائه می‌دهند و آن‌ها را برای شما مدیریت می‌کنند، در حالی که برخی دیگر از متعادل‌کننده‌های بار برای توزیع فعالیت در گره‌ها استفاده می‌کنند. diff --git a/src/content/translations/fr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/fr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index b673f4d10a1..63eb67bb70b 100644 --- a/src/content/translations/fr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/fr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ Si vous ne savez pas encore ce que sont les nœuds et les clients, consultez la Les fournisseurs de services de nœuds exécutent les clients de nœuds distribués en arrière-plan pour vous, afin que vous n'ayez pas à le faire. -Ces services fournissent généralement une clé API que vous pouvez utiliser pour écrire sur la blockchain et pour la lire. Ils incluent souvent un accès aux [réseaux de test Ethereum](/developers/docs/networks/#testnets) en plus du réseau principal. +Ces services fournissent généralement une clé API que vous pouvez utiliser pour écrire sur la blockchain et pour la lire. Ils incluent souvent un accès aux [réseaux de test Ethereum](/developers/docs/networks/#ethereum-testnets) en plus du réseau principal. Certains services vous offrent votre propre nœud dédié qu'ils gèrent pour vous, tandis que d'autres utilisent des équilibreurs de charge pour répartir l'activité entre les nœuds. diff --git a/src/content/translations/fr/glossary/index.md b/src/content/translations/fr/glossary/index.md index 258bf72357c..087b66f85c1 100644 --- a/src/content/translations/fr/glossary/index.md +++ b/src/content/translations/fr/glossary/index.md @@ -808,7 +808,7 @@ Unité de l'[ether](#ether). 1 szabo = 1012 [wei](#wei), 106 + Réseaux de test diff --git a/src/content/translations/hu/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/hu/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index d5df8eadad1..f9bdf449441 100644 --- a/src/content/translations/hu/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/hu/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -19,7 +19,7 @@ Ha nem tudod, hogy mik azok a csomópontok és kliensek, akkor nézd meg a [Csom A csomópontszolgáltatók elosztott csomópont klienseket futtatnak a színfalak mögött, így neked nem kell. -Ezek a szolgáltatások általában egy API kulcsot adnak, amivel írhatsz és olvashatsz a blokkláncról. Gyakran biztosítanak hozzáférést az [Ethereum tesztnetekhez](/developers/docs/networks/#testnets) a főhálózat mellett. +Ezek a szolgáltatások általában egy API kulcsot adnak, amivel írhatsz és olvashatsz a blokkláncról. Gyakran biztosítanak hozzáférést az [Ethereum tesztnetekhez](/developers/docs/networks/#ethereum-testnets) a főhálózat mellett. Egyes szolgáltatások saját dedikált csomópontot kínálnak, amelyet a te számodra tartanak fenn, míg mások terheléselosztókkal oszlatják el a tevékenységet a csomópontok között. diff --git a/src/content/translations/hu/glossary/index.md b/src/content/translations/hu/glossary/index.md index a09b895c6e2..ead6e97148a 100644 --- a/src/content/translations/hu/glossary/index.md +++ b/src/content/translations/hu/glossary/index.md @@ -704,7 +704,7 @@ Az Ethereum blokklánc egyik[hard-forkja](#hard-fork), mely az 2,463,000 számú A "test network", (vagyis "teszthálózat") rövidítése. A fő Ethereum hálózat (lásd: [főhálózat](#mainnet)) viselkedésének szimulálására használt hálózat. - + Tesztnetek diff --git a/src/content/translations/id/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/id/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index c1d4821df31..68e7bcb4b57 100644 --- a/src/content/translations/id/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/id/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ Jika Anda belum memahami apa itu node dan klien, bacalah tentang [Node dan klien Penyedia layanan node menjalankan klien node terdistribusi di belakang layar untuk Anda, sehingga Anda tidak perlu melakukannya sendiri. -Layanan ini umumnya menyediakan kunci API yang bisa Anda gunakan untuk menulis pada dan membaca dari blockchain. Layanan ini sering mencakup akses ke [testnet Ethereum](/developers/docs/networks/#testnets) sebagai tambahan pada Jaringan Utama. +Layanan ini umumnya menyediakan kunci API yang bisa Anda gunakan untuk menulis pada dan membaca dari blockchain. Layanan ini sering mencakup akses ke [testnet Ethereum](/developers/docs/networks/#ethereum-testnets) sebagai tambahan pada Jaringan Utama. Beberapa layanan menawarkan node yang didedikasikan sebagai milik Anda sendiri yang dikelola mereka untuk Anda, sementara yang lainnya menggunakan penyeimbang muatan untuk mendistribusikan aktivitas di seluruh node. diff --git a/src/content/translations/id/glossary/index.md b/src/content/translations/id/glossary/index.md index b8620169608..94fb93ee399 100644 --- a/src/content/translations/id/glossary/index.md +++ b/src/content/translations/id/glossary/index.md @@ -808,7 +808,7 @@ Denominasi [ether](#ether). 1 szabo = 1012 [wei](#wei), 106 + Jaringan percobaan diff --git a/src/content/translations/it/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/it/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index 52049396974..801ab9bada2 100644 --- a/src/content/translations/it/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/it/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ Se non hai ancora chiaro cosa siano nodi e client, consulta [Nodi e client](/dev I fornitori di servizi di nodo eseguono client di nodo distribuiti, quindi non è necessario farlo. -Questi servizi in genere forniscono una chiave API utilizzabile per scrivere e leggere sulla blockchain. Spesso includono l'accesso a [reti di test Ethereum](/developers/docs/networks/#testnets) in aggiunta alla rete principale. +Questi servizi in genere forniscono una chiave API utilizzabile per scrivere e leggere sulla blockchain. Spesso includono l'accesso a [reti di test Ethereum](/developers/docs/networks/#ethereum-testnets) in aggiunta alla rete principale. Alcuni servizi offrono un nodo personale dedicato e lo gestiscono, mentre altri usano bilanciatori del carico per distribuire l'attività tra i nodi. diff --git a/src/content/translations/it/glossary/index.md b/src/content/translations/it/glossary/index.md index 51e18034582..77d6d3320c5 100644 --- a/src/content/translations/it/glossary/index.md +++ b/src/content/translations/it/glossary/index.md @@ -736,7 +736,7 @@ Una [diramazione permanente](#hard-fork) della blockchain Ethereum, che si è ve Abbreviazione di "rete di prova", una rete usata per simulare il comportamento della rete principale di Ethereum (vedi [Rete principale](#mainnet)). - + Reti di prova diff --git a/src/content/translations/pl/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/pl/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index 3ec340bdbe2..36537302239 100644 --- a/src/content/translations/pl/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/pl/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -19,7 +19,7 @@ Jeśli nie wiesz jeszcze, czym są węzły i klienci, sprawdź [Węzły i klienc Dostawcy usług węzłów obsługują dla Ciebie klientów węzłów rozproszonych, więc nie musisz tego robić. -Te usługi zazwyczaj zapewniają klucz API, którego możesz użyć do pisania i odczytywania z blockchainu. Często obejmują one dostęp do [sieci testowych Ethereum](/developers/docs/networks/#testnets) oprócz sieci głównej. +Te usługi zazwyczaj zapewniają klucz API, którego możesz użyć do pisania i odczytywania z blockchainu. Często obejmują one dostęp do [sieci testowych Ethereum](/developers/docs/networks/#ethereum-testnets) oprócz sieci głównej. Niektóre usługi oferują własny dedykowany węzeł, którym zarządzają za Ciebie, podczas gdy inne używają systemów równoważenia obciążenia do dystrybucji aktywności między węzłami. diff --git a/src/content/translations/pl/glossary/index.md b/src/content/translations/pl/glossary/index.md index a5af33b3857..614b8bb7166 100644 --- a/src/content/translations/pl/glossary/index.md +++ b/src/content/translations/pl/glossary/index.md @@ -718,7 +718,7 @@ Nazwa [etheru](#ether). 1 szabo = 1012 [wei](#wei), 106 sz Skrót od nazwy „sieć testowa”, służy do symulowania zachowania głównej sieci Ethereum (patrz [sieć główna](#mainnet)). - + Sieci testowe diff --git a/src/content/translations/pt-br/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/pt-br/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index ba88eafb15a..cbe9456bdc2 100644 --- a/src/content/translations/pt-br/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/pt-br/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ Se você ainda não sabe o que são os nós e os clientes e como eles funcinam, Os provedores de nós disponibilizam sua infraestrutura para você não precisar de uma. -Esses serviços são tipicamente disponibilizados via uma chave API que você pode usar para escrever e ler as informações dentro da cadeia de blocos. Muitas vezes, incluindo acesso a [redes de testes Ethereum](/developers/docs/networks/#testnets) além da rede principal. +Esses serviços são tipicamente disponibilizados via uma chave API que você pode usar para escrever e ler as informações dentro da cadeia de blocos. Muitas vezes, incluindo acesso a [redes de testes Ethereum](/developers/docs/networks/#ethereum-testnets) além da rede principal. Alguns serviços oferecem a você o seu próprio nó dedicado que eles gerenciam para você, enquanto outros usam os balanceadores de carga para distribuir atividade entre nós. diff --git a/src/content/translations/ro/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/ro/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index acb0c122f8f..e6058f91c42 100644 --- a/src/content/translations/ro/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/ro/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ Dacă nu aţi înțeles încă ce sunt nodurile și clienții, consultaţi secţ Furnizorii de servicii de noduri rulează în culise clienți de noduri distribuite pentru dvs., ca să nu fiţi nevoit să o faceţi dvs. -Aceste servicii oferă de obicei o cheie API pe care o puteţi utiliza pentru a scrie și a citi din blockchain. Acestea includ adesea și accesul la [testnet-ul Ethereum](/developers/docs/networks/#testnets), în plus față de Mainnet. +Aceste servicii oferă de obicei o cheie API pe care o puteţi utiliza pentru a scrie și a citi din blockchain. Acestea includ adesea și accesul la [testnet-ul Ethereum](/developers/docs/networks/#ethereum-testnets), în plus față de Mainnet. Unele servicii vă oferă propriul nod dedicat, pe care îl gestionează pentru dvs., în timp ce altele folosesc echilibratori de încărcare pentru a distribui activitatea între noduri. diff --git a/src/content/translations/ro/glossary/index.md b/src/content/translations/ro/glossary/index.md index 9d018fe39cd..c54d79c3b7f 100644 --- a/src/content/translations/ro/glossary/index.md +++ b/src/content/translations/ro/glossary/index.md @@ -808,7 +808,7 @@ O [furculiță tare](#hard-fork) a blockchain-ului Ethereum, care a avut loc la Prescurtare de la "rețea de testare", o rețea utilizată pentru a simula comportamentul rețelei principale Ethereum (a se vedea [Rețelei principale](#mainnet)). - + Rețele de testare diff --git a/src/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/src/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index e7e53710855..b9ee7bdb06f 100644 --- a/src/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/src/content/translations/tr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -18,7 +18,7 @@ Düğümlerin ve istemcilerin ne olduğu konusunda henüz bir fikriniz yoksa, [D Düğüm hizmeti sağlayıcıları, siz uğraşmayın diye sahne arkasında sizin için dağıtılmış düğüm istemcileri çalıştırır. -Bu hizmetler tipik olarak blok zincirine yazmak ve blok zincirinden okumak için kullanabileceğiniz bir API anahtarı sağlar. Bunlar genellikle Mainnet'e ek olarak [Ethereum test ağlarına](/developers/docs/networks/#testnets) erişim içerir. +Bu hizmetler tipik olarak blok zincirine yazmak ve blok zincirinden okumak için kullanabileceğiniz bir API anahtarı sağlar. Bunlar genellikle Mainnet'e ek olarak [Ethereum test ağlarına](/developers/docs/networks/#ethereum-testnets) erişim içerir. Bazı hizmetler, sizin için yönettikleri kendi özel düğümünüzü sunarken, diğerleri etkinliği düğümler arasında dağıtmak için yük dengeleyicileri kullanır. diff --git a/src/content/translations/tr/glossary/index.md b/src/content/translations/tr/glossary/index.md index 94750823269..16e19c388ae 100644 --- a/src/content/translations/tr/glossary/index.md +++ b/src/content/translations/tr/glossary/index.md @@ -808,7 +808,7 @@ Belirli G/Ç (Girdi/Çıktı) yoğun işlemler için [gaz](#gas) hesaplamasını "Test network"ün (Test ağı) kısaltması, ana Ethereum ağının (bkz. [Mainnet](#mainnet)). davranışını simüle etmek için kullanılan bir ağ. - + Test Ağları diff --git a/src/content/translations/zh/glossary/index.md b/src/content/translations/zh/glossary/index.md index 77ca83f5e57..cf4e74812d8 100644 --- a/src/content/translations/zh/glossary/index.md +++ b/src/content/translations/zh/glossary/index.md @@ -722,7 +722,7 @@ Gigawei 的缩写,[ether](#ether) 的一个货币单位,通常用于计算 [ "测试网络"的简称,用于模拟以太坊主网行为的网络(参阅 [mainnet 主网](#mainnet))。 - + 测试网 From 3dc9a2aec94cae5fb5f9a8895771c8da9d58b739 Mon Sep 17 00:00:00 2001 From: MonsieurDMA Date: Tue, 24 May 2022 13:38:07 +0200 Subject: [PATCH 043/298] Allowance has to be degressive [Fixes #6443] --- .../index.md | 4 ++-- .../index.md | 4 ++-- .../index.md | 4 ++-- .../index.md | 4 ++-- .../index.md | 4 ++-- .../index.md | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/content/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md b/src/content/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md index de9a7ccd9b3..ecc30b94800 100644 --- a/src/content/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md +++ b/src/content/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md @@ -91,7 +91,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; @@ -273,7 +273,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; diff --git a/src/content/translations/fr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md b/src/content/translations/fr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md index 1ac8358fceb..2b285420298 100644 --- a/src/content/translations/fr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md +++ b/src/content/translations/fr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md @@ -96,7 +96,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; @@ -278,7 +278,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; diff --git a/src/content/translations/id/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md b/src/content/translations/id/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md index ea7833605e3..3b70a03a490 100644 --- a/src/content/translations/id/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md +++ b/src/content/translations/id/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md @@ -96,7 +96,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; @@ -278,7 +278,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; diff --git a/src/content/translations/pt-br/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md b/src/content/translations/pt-br/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md index c584ceade9d..99db3b51e56 100644 --- a/src/content/translations/pt-br/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md +++ b/src/content/translations/pt-br/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md @@ -96,7 +96,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; @@ -278,7 +278,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; diff --git a/src/content/translations/tr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md b/src/content/translations/tr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md index 1422cd47b31..4716a935257 100644 --- a/src/content/translations/tr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md +++ b/src/content/translations/tr/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md @@ -96,7 +96,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; @@ -278,7 +278,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; diff --git a/src/content/translations/zh/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md b/src/content/translations/zh/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md index 5d14eb36436..b29fc98cf18 100644 --- a/src/content/translations/zh/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md +++ b/src/content/translations/zh/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md @@ -96,7 +96,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; @@ -282,7 +282,7 @@ contract ERC20Basic is IERC20 { require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; - allowed[owner][msg.sender] = allowed[owner][msg.sender]+numTokens; + allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; From b5e77913a778027b3c2babf08b1385c5e2f03031 Mon Sep 17 00:00:00 2001 From: zjiekai Date: Tue, 24 May 2022 23:31:01 +0800 Subject: [PATCH 044/298] update uniswap doc link --- .../developers/tutorials/uniswap-v2-annotated-code/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md index 8d6b9a5dc16..9bfe9a032ac 100644 --- a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -23,7 +23,7 @@ _Traders_ send one type of token to the pool and receive the other (for example, When liquidity providers want their assets back they can burn the pool tokens and receive back their tokens, including their share of the rewards. -[Click here for a fuller description](https://uniswap.org/docs/v2/core-concepts/swaps/). +[Click here for a fuller description](https://docs.uniswap.org/protocol/V2/concepts/core-concepts/swaps). ### Why v2? Why not v3? {#why-v2} From e94d0274aaa271bc318ceadc76a6c2f92d7b5fec Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 10:54:08 -0600 Subject: [PATCH 045/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 9d73ccc85a4..f38d90faaec 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -18,7 +18,7 @@ If the wallet does meet our list policy, please complete the following informati **Wallet description** - + **Wallet logo** From a03d908efa1686acff6fd599a05356466ee93d63 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 10:55:11 -0600 Subject: [PATCH 046/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index f38d90faaec..b3c583ebbf0 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -92,7 +92,7 @@ If the wallet does meet our list policy, please complete the following informati -**What license was the wallet software released under?** +**What license is the wallet software released under?** From 82826e12dd8911d50b1f63ecd482f0dbf77ff93b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 10:56:09 -0600 Subject: [PATCH 047/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index b3c583ebbf0..667a928c076 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -36,7 +36,7 @@ If the wallet does meet our list policy, please complete the following informati -**Is your wallet security tested? Please explain security measures i.e. security audit, internal security team, or some other method.** +**Is the wallet security tested? Please explain security measures i.e. security audit, internal security team, or some other method.** From ab182e2b0473b7cbdf773ae24476ac98625f331d Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 10:56:58 -0600 Subject: [PATCH 048/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 667a928c076..df347b4e5e7 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -98,7 +98,7 @@ If the wallet does meet our list policy, please complete the following informati **Is your wallet custodial, or non-custodial?** - + **Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible** From a3b2fc10499d8b23889dd8df2c2f74a3165ffad7 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 20:32:34 -0600 Subject: [PATCH 049/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index df347b4e5e7..da8d135d698 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -8,7 +8,6 @@ assignees: "" Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if your wallet meets the criteria listed there. -If the wallet does meet our list policy, please complete the following information which we need to accurately list the wallet. ### Project info From ac47cc7f82467b815ab987b3606b1985e6255d58 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 20:32:59 -0600 Subject: [PATCH 050/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index da8d135d698..9c08c43060f 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -21,7 +21,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Wallet logo** - + **Background color for brand logo** From 39ddd6ee34692a72fda9d65d2ee39ec998a193d5 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 20:42:00 -0600 Subject: [PATCH 051/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 9c08c43060f..5e571fe216b 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -189,6 +189,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **What educational resources/documentation do you provide to users?** + ### Extra **Does the wallet have any integrated tools not mentioned above?** From 7e053e9ef183abfffb87c891b9336d25d85a64e3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 20:42:50 -0600 Subject: [PATCH 052/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 5e571fe216b..99f143eac79 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -189,7 +189,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **What educational resources/documentation do you provide to users?** - + ### Extra **Does the wallet have any integrated tools not mentioned above?** From 6c37a98d11025811528e5f6ebf274679fd11cbb0 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 20:56:21 -0600 Subject: [PATCH 053/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 99f143eac79..45b18b3d22b 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -41,7 +41,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **When did your wallet go live to users?** - + **Does your wallet have an active development team?** From a5f11e0ea67389db36bb5bb683c68195db75401d Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 20:56:40 -0600 Subject: [PATCH 054/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 45b18b3d22b..37470afbf59 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -51,7 +51,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Is there internationalization support for your wallet?** +**Is the wallet available in multiple languages?** From c9f471a906d068a4fdcaa2bfdd5547e7340d3fc6 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:00:43 -0600 Subject: [PATCH 055/298] Update suggest_wallet.md --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 37470afbf59..0bbabeb0ec7 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -55,10 +55,6 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**What is the repository for your codebase?** - - - **What social links are there for the project?** From 3b6145a023bbb4945b32361afd0ad9e4e725051a Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:01:42 -0600 Subject: [PATCH 056/298] Update suggest_wallet.md --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 0bbabeb0ec7..ee125b3d2e3 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -59,10 +59,6 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**What is your wallet's onboarding experience?** - - - ### Device **Does the wallet have a mobile app? If yes, which operating systems are supported (iOS, Android)?** From 722f04f9bd54860ee53191bcfb0f4079b819646b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:04:19 -0600 Subject: [PATCH 057/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index ee125b3d2e3..2dd3351bc0f 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -63,7 +63,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Does the wallet have a mobile app? If yes, which operating systems are supported (iOS, Android)?** - + **Does the wallet have a desktop app? If yes, which operating systems are supported (Windows, Mac, Linux)?** From 4994d77966be0a7a7a4c5e33cc58c5489c4bc0bf Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:04:32 -0600 Subject: [PATCH 058/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 2dd3351bc0f..d0e5924771c 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -67,7 +67,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Does the wallet have a desktop app? If yes, which operating systems are supported (Windows, Mac, Linux)?** - + **Does the wallet have a browser extension? If yes, which browsers are supported (Chromium, Firefox, Safari)?** From 569fc8534664d3c90df34710fb0e4f79ce201854 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:04:40 -0600 Subject: [PATCH 059/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index d0e5924771c..966f02c21f9 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -71,7 +71,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Does the wallet have a browser extension? If yes, which browsers are supported (Chromium, Firefox, Safari)?** - + **Is it a hardware wallet?** From 09e63fdc0b53c991baa03fe672e4c723cb246a78 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:04:51 -0600 Subject: [PATCH 060/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 966f02c21f9..7fa118a9bd2 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -75,7 +75,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Is it a hardware wallet?** - + ### Security From 293634c9b42c049eaeb2018f8e856fec0fa526d1 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:07:31 -0600 Subject: [PATCH 061/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 7fa118a9bd2..89f143361e7 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -75,7 +75,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Is it a hardware wallet?** - + ### Security From 11f73429deae2ea504941fde008d04d17799e6d7 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:08:09 -0600 Subject: [PATCH 062/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 89f143361e7..efb969b4c54 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -79,7 +79,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w ### Security -**Is the wallet code open-sourced?** +**Is the source code for the wallet fully open-source?** From 0b340cdd8f9723dfc46bd4c95e989ac53637e8e3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:09:39 -0600 Subject: [PATCH 063/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index efb969b4c54..555cba07d7a 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -93,7 +93,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible** - + **Spam protection?** From fa2779cff73fdc06959e72edc192bae810a7ffd3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:10:42 -0600 Subject: [PATCH 064/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 555cba07d7a..a2d180613c1 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -87,7 +87,9 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Is your wallet custodial, or non-custodial?** +**Who holds the private keys?** + + From abf92f87add7cbc64a4396b6e30d7501c02c6d76 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:10:59 -0600 Subject: [PATCH 065/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index a2d180613c1..680e56553c6 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -103,7 +103,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w ### Features -**Does the wallet have hardware wallet support?** +**Does the wallet support connecting to a hardware wallet?** From c2a8183f32e30b90d3df60163453bde41e621e23 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:13:27 -0600 Subject: [PATCH 066/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 680e56553c6..245439ff8f1 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -109,7 +109,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Does the wallet support WalletConnect?** - + **Does the wallet support importing Ethereum RPC endpoints?** From 7494f9f8ce9d6a65eb787900a16d2e583d8eea93 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:18:23 -0600 Subject: [PATCH 067/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 245439ff8f1..cea586fdec1 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -139,7 +139,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Does the wallet support ENS?** +**Does the wallet support sending transactions to ENS addresses?** From 49c6e0a22351b5f6a05e9827df054577a4dabbfd Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:18:33 -0600 Subject: [PATCH 068/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index cea586fdec1..9d89c8ff234 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -147,7 +147,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Does the wallet support EIP-1559 style transactions?** +**Does the wallet support EIP-1559 (type 2) transactions?** From 2814fd41f768bfb07def0defe8bde4d3c4d53459 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:18:43 -0600 Subject: [PATCH 069/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Sam Richards --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 9d89c8ff234..216270122b7 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -153,7 +153,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w ### Finance -**Does the wallet have fiat on-ramps through credit/debit cards or wire transfers, or Bank transfers (ACH)?** +**Does the wallet have fiat on-ramps through credit/debit cards, wire transfers, or bank transfers (ACH)?** From 887c27daa7d9bbe548493a15ded173d6ceb32267 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:19:36 -0600 Subject: [PATCH 070/298] Update suggest_wallet.md --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 216270122b7..05dc0aa5827 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -156,9 +156,6 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Does the wallet have fiat on-ramps through credit/debit cards, wire transfers, or bank transfers (ACH)?** - - - **Does the wallet support withdrawals to fiat?** From 79f0b218095f5483db8d481f1eff55cb6e6929d0 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:19:53 -0600 Subject: [PATCH 071/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 05dc0aa5827..92783d062fa 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -161,7 +161,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -### Smart Contract +### Smart contract **Is the wallet a multi-signature wallet?** From 4acb0592bb8760978748f26122fe5a203fb85e8c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 24 May 2022 21:20:15 -0600 Subject: [PATCH 072/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 92783d062fa..5eef3340fb2 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -173,6 +173,11 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w ### Support +**Does the wallet have a person the ethereum.org team can contact regarding the wallet in future?** + + + + **Does your wallet have a dedicated support team?** From 3a344ed49d0fd053a70935613fad44e665ea0fe8 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Wed, 25 May 2022 15:15:08 +0100 Subject: [PATCH 073/298] Update src/content/community/get-involved/open-research/index.md Co-authored-by: Sam Richards --- src/content/community/get-involved/open-research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 4da49245966..1333a6a33f0 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -23,7 +23,7 @@ There are now several Layer 2 protocols that scale Ethereum using different tech #### Links -[Our Layer-2 page](https://ethereum.org/en/layer-2/) +[Introduction to layer 2](/layer-2/) [EthHub Layer-2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) From 06be659d1f91fd4a61dca11258519baecd6d5b46 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Wed, 25 May 2022 15:19:32 +0100 Subject: [PATCH 074/298] Apply suggestions from code review Co-authored-by: Sam Richards --- src/content/community/get-involved/open-research/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 1333a6a33f0..a54b3dafe02 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -32,11 +32,11 @@ There are now several Layer 2 protocols that scale Ethereum using different tech ### Bridges -One particular area of Layer-2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of researchg because bridges are commonly targeted by hackers. +One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of researchg because bridges are commonly targeted by hackers. #### Links -[Our Bridges page](https://ethereum.org/en/developers/docs/bridges) +[Introduction to blockchain bridges](/bridges/) [Vitalik on bridges](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) @@ -47,7 +47,7 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Links -[Our Sharding page](/upgrades/shard-chains/) +[Introduction to Ethereum sharding](/upgrades/shard-chains/) [Proto-Danksharding notes](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) From 3aaf4dd35fd21ec43dea28cb888303eb4271b7d1 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Wed, 25 May 2022 15:46:47 +0100 Subject: [PATCH 075/298] split links into b/g and recent research, + links --- .../get-involved/open-research/index.md | 112 ++++++++++++++---- 1 file changed, 90 insertions(+), 22 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index a54b3dafe02..fc24fb223a1 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -21,12 +21,14 @@ There are ongoing efforts to scale Ethereum using a variety of techniques includ There are now several Layer 2 protocols that scale Ethereum using different techniques for batching transactions and securing them on Ethereum layer 1. This is a very rapidly growing topic with a lot of research and development potential. -#### Links +#### Background Reading [Introduction to layer 2](/layer-2/) [EthHub Layer-2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) +#### Recent Research + [ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) @@ -34,18 +36,24 @@ There are now several Layer 2 protocols that scale Ethereum using different tech One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of researchg because bridges are commonly targeted by hackers. -#### Links +#### Background Reading [Introduction to blockchain bridges](/bridges/) [Vitalik on bridges](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) +[Blockchain Bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) + +#### Recent Research + +[Validating bridges](https://stonecoldpat.github.io/images/validatingbridges.pdf) + ### Sharding Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. -#### Links +#### Background Reading [Introduction to Ethereum sharding](/upgrades/shard-chains/) @@ -57,15 +65,21 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho [Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) +#### Recent Research + + ### Hardware [Running nodes](/developers/docs/nodes-and-clients/run-a-node/) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. -#### Links +#### Background Reading [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) +#### Recent Research + + ## Security Security is a broad topic that might include spam/scam prevention, wallet security, hardware security, crypto-economic security, bug hunting and testing of applications and client software and key-management. Contributing to knowledge in these areas will help stimulate mainstream adoption. @@ -74,22 +88,26 @@ Security is a broad topic that might include spam/scam prevention, wallet securi Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. -#### Links +#### Background Reading [0xparc blog](https://0xparc.org/blog) -[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) - [zkp.science](https://zkp.science/) [Zero Knowledge podcast](https://zeroknowledge.fm/) +#### Recent Research + + +[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) + + ### Wallets User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with dveelopment of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. -#### Links +#### Background Reading [Our Security page](https://ethereum.org/en/security/) @@ -100,6 +118,8 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [EIP 4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) +#### Recent Research + ## Community, Education and Outreach @@ -109,61 +129,92 @@ Onboarding new users onto Ethereum requires new educational resources and approa For Ethereum to onboard more people the UX/UI must be improved. This requires designers and UI and product experts to re-examine the design of wallets and apps. -#### Links +#### Background Reading [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) [Ethereum.org community page](https://ethereum.org/en/learn/) +#### Recent Research + + ## Economics There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). -#### Links +#### Background Reading + +[Rollup economics from first principles](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) [Robust Incentives Group](https://ethereum.github.io/rig/) + +#### Recent Research + +[Empirical analysis of EIP1559]([https://arxiv.org/abs/2110.04753) + +[MEV auctions](https://ethresear.ch/t/mev-auction-auctioning-transaction-ordering-rights-as-a-solution-to-miner-extractable-value/6788) + +[Circulating supply equilibrium](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954#6-enforcing-minimum-viable-issuance-with-a-variable-base-reward-factor-19) + +[Quantifying MEV: How dark is the forest?](https://arxiv.org/abs/2101.05511) + +[EIP 1559: One month later](https://arxiv.org/abs/2110.04753) + ### PoS incentives When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this -#### Links +#### Background Reading [Robist Incentives Group: PoS incentives](https://ethereum.github.io/beaconrunner/) +#### Recent Research + + ### Liquid staking and derivatives Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks, ) -#### Links +#### Background Reading [Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) + +#### Recent Research + + ### DeFi Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. -#### Links +#### Background Reading [DeFi](https://ethereum.org/en/defi/) [Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) + +#### Recent Research + ### Fee markets Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user user-experience is an ongoing challenge that requires further research and development. -#### Links +#### Background Reading [EIP 1559 (Robust Incentives Group)](https://ethereum.github.io/abm1559/notebooks/eip1559.html) +#### Recent Research + ### Taxation and accounting Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. +#### Background Reading -#### Links +#### Recent Research [Example of taxation and accounting research: Cumming et al. 2019](https://www.mdpi.com/1911-8074/12/3/126) @@ -175,7 +226,7 @@ Crypto taxation is a complicated issue that likely requires a software solution. The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. -#### Links +#### Background Reading [Prysm client](https://docs.prylabs.network/docs/how-prysm-works/beacon-node/) @@ -189,11 +240,14 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe [Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) +#### Recent Research ### Execution Clients The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). +#### Background Reading + [Geth client](geth.ethereum.org) [Nethermind client](nethermind.io) @@ -202,44 +256,53 @@ The execution layer is concerned with executing transactions, running the EVM an [Erigon client](https://github.com/ledgerwatch/erigon) +#### Recent Research ### Data Science and Analytics There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. -### Links +### Background Reading [Dune Analytics](https://dune.com/browse/dashboards) [Client diversity dashboard](https://clientdiversity.org/) +#### Recent Research + ## Apps and Tooling ### DAOs DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. -#### Links +#### Background Reading [Dao Collective](https://daocollective.xyz/) +#### Recent Research + ### Developer tools Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. -#### Links +#### Background Reading [Developer Frameworks](https://ethereum.org/en/developers/docs/frameworks/) [Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) +#### Recent Research + ### App security Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. -#### Links +#### Background Reading + +#### Recent Research [ethresear.ch Applications](https://ethresear.ch/c/applications/18) @@ -248,14 +311,19 @@ Hacks on Ethereum nearly always exploit vulnerabilities in individual applicatio Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. -#### Links +#### Background Reading [Coinbase: Intro to Web3 Stack](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) +#### Recent Research + + ### Composability Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practices in interoperability and data standards. This is an area that would benefit from more ongoing research and development. -#### Links +#### Background Reading [Smart contract composability](https://ethereum.org/en/developers/docs/smart-contracts/composability/) + +#### Recent Research From 1fa4b4f5bd871ccb7aa4ad5660757ac4629d654d Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Wed, 25 May 2022 16:22:47 +0100 Subject: [PATCH 076/298] add info on zkp and formal verification --- .../get-involved/open-research/index.md | 138 +++++++++++------- 1 file changed, 87 insertions(+), 51 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index fc24fb223a1..8b8ba09987f 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -13,7 +13,7 @@ One of the primary strengths of Ethereum is that it is constantly being improved Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. -## Scaling and Performance +## Scaling and performance There are ongoing efforts to scale Ethereum using a variety of techniques including sharding the blockchain, danksharding and using rollups. Introductory information on scaling Ethereum is available on our [scaling page](/developers/docs/scaling). @@ -21,13 +21,13 @@ There are ongoing efforts to scale Ethereum using a variety of techniques includ There are now several Layer 2 protocols that scale Ethereum using different techniques for batching transactions and securing them on Ethereum layer 1. This is a very rapidly growing topic with a lot of research and development potential. -#### Background Reading +#### Background reading [Introduction to layer 2](/layer-2/) [EthHub Layer-2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) -#### Recent Research +#### Recent research [ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) @@ -36,7 +36,7 @@ There are now several Layer 2 protocols that scale Ethereum using different tech One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of researchg because bridges are commonly targeted by hackers. -#### Background Reading +#### Background reading [Introduction to blockchain bridges](/bridges/) @@ -44,7 +44,7 @@ One particular area of layer 2 that requires more research and development is sa [Blockchain Bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) -#### Recent Research +#### Recent research [Validating bridges](https://stonecoldpat.github.io/images/validatingbridges.pdf) @@ -53,7 +53,7 @@ One particular area of layer 2 that requires more research and development is sa Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. -#### Background Reading +#### Background reading [Introduction to Ethereum sharding](/upgrades/shard-chains/) @@ -65,19 +65,19 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho [Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) -#### Recent Research +#### Recent research ### Hardware [Running nodes](/developers/docs/nodes-and-clients/run-a-node/) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. -#### Background Reading +#### Background reading [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) -#### Recent Research +#### Recent research ## Security @@ -86,9 +86,9 @@ Security is a broad topic that might include spam/scam prevention, wallet securi ### Cryptography & ZKP -Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. +Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy and security into Ethereum and its applications. Zero-knowledge is a relatively young but fast-moving space with many open research and development opportunities. Some possibilities include developing more efficient implementations of the [Keccak hashing algorithm](https://hackmd.io/sK7v0lr8Txi1bgION1rRpw?view#Overview), finding better polynomial commitments than currently exist or reducing the cost of ecdsa public key generation and signature verification circuits. -#### Background Reading +#### Background reading [0xparc blog](https://0xparc.org/blog) @@ -97,8 +97,9 @@ Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy a [Zero Knowledge podcast](https://zeroknowledge.fm/) -#### Recent Research +#### Recent research +[Recent advance in elliptic curve cryptography](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) [Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) @@ -107,7 +108,7 @@ Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy a User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with dveelopment of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. -#### Background Reading +#### Background reading [Our Security page](https://ethereum.org/en/security/) @@ -118,10 +119,10 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [EIP 4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) -#### Recent Research +#### Recent research -## Community, Education and Outreach +## Community, education and outreach Onboarding new users onto Ethereum requires new educational resources and approaches to outreach. This might include blog posts and articles, books, podcasts, memes, teaching resources events and anything else that builds communities, welcomes new starters and educates people about Ethereum. @@ -129,27 +130,27 @@ Onboarding new users onto Ethereum requires new educational resources and approa For Ethereum to onboard more people the UX/UI must be improved. This requires designers and UI and product experts to re-examine the design of wallets and apps. -#### Background Reading +#### Background reading [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) [Ethereum.org community page](https://ethereum.org/en/learn/) -#### Recent Research +#### Recent research ## Economics There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). -#### Background Reading +#### Background reading [Rollup economics from first principles](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) [Robust Incentives Group](https://ethereum.github.io/rig/) -#### Recent Research +#### Recent research [Empirical analysis of EIP1559]([https://arxiv.org/abs/2110.04753) @@ -165,68 +166,77 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this -#### Background Reading +#### Background reading [Robist Incentives Group: PoS incentives](https://ethereum.github.io/beaconrunner/) -#### Recent Research +#### Recent research ### Liquid staking and derivatives Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks, ) -#### Background Reading +#### Background reading [Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) -#### Recent Research +#### Recent research ### DeFi Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. -#### Background Reading +#### Background reading [DeFi](https://ethereum.org/en/defi/) [Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) -#### Recent Research +#### Recent research ### Fee markets Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user user-experience is an ongoing challenge that requires further research and development. -#### Background Reading +#### Background reading [EIP 1559 (Robust Incentives Group)](https://ethereum.github.io/abm1559/notebooks/eip1559.html) -#### Recent Research +#### Recent research ### Taxation and accounting Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. -#### Background Reading +#### Background reading -#### Recent Research +#### Recent research [Example of taxation and accounting research: Cumming et al. 2019](https://www.mdpi.com/1911-8074/12/3/126) -## Clients and Protocol Development +## Clients and protocol research -### Consensus Clients +### Consensus clients -The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. +The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. -#### Background Reading +#### Background reading + +[Casper-FFG paper](https://arxiv.org/abs/1710.09437) + +[Casper-FFG Explainer](https://arxiv.org/abs/1710.09437) + +[Gasper paper](https://arxiv.org/abs/2003.03052) + + +##### Client implementations [Prysm client](https://docs.prylabs.network/docs/how-prysm-works/beacon-node/) @@ -238,15 +248,27 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe [Nimbus client](https://nimbus.team/) + +#### Recent research + [Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) -#### Recent Research +[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) + +[Low-cost attacks on Ethereum 2.0 by sub 1/3 stakeholders](https://arxiv.org/abs/2102.02247) + +[Availability/Finality dilemma](https://arxiv.org/abs/2009.04987) + +[Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) -### Execution Clients + +### Execution clients The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). -#### Background Reading +#### Background reading + +#### Client implementations [Geth client](geth.ethereum.org) @@ -256,53 +278,67 @@ The execution layer is concerned with executing transactions, running the EVM an [Erigon client](https://github.com/ledgerwatch/erigon) -#### Recent Research +#### Recent research + +### Formal verification + +Formal verification is writing code to verify that Ethereum's consensus specifications are correct and bug-free. There is an executable version of the specification written in Python that requires maintenance and development. Further research can help to improve the Python implementation of the specification and add tools that can more robustly verify correctness and identify issues. + +#### Background reading + +#### Recent research + +[Formal verification of the deposit contract](https://github.com/runtimeverification/deposit-contract-verification) + +[Formal verification of the Beacon Chain specification](https://github.com/runtimeverification/deposit-contract-verification) + + -### Data Science and Analytics +### Data science and analytics There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. -### Background Reading +### Background reading [Dune Analytics](https://dune.com/browse/dashboards) [Client diversity dashboard](https://clientdiversity.org/) -#### Recent Research +#### Recent research -## Apps and Tooling +## Apps and tooling ### DAOs DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. -#### Background Reading +#### Background reading [Dao Collective](https://daocollective.xyz/) -#### Recent Research +#### Recent research ### Developer tools Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. -#### Background Reading +#### Background reading [Developer Frameworks](https://ethereum.org/en/developers/docs/frameworks/) [Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) -#### Recent Research +#### Recent research ### App security Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. -#### Background Reading +#### Background reading -#### Recent Research +#### Recent research [ethresear.ch Applications](https://ethresear.ch/c/applications/18) @@ -311,19 +347,19 @@ Hacks on Ethereum nearly always exploit vulnerabilities in individual applicatio Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. -#### Background Reading +#### Background reading [Coinbase: Intro to Web3 Stack](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) -#### Recent Research +#### Recent research ### Composability Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practices in interoperability and data standards. This is an area that would benefit from more ongoing research and development. -#### Background Reading +#### Background reading [Smart contract composability](https://ethereum.org/en/developers/docs/smart-contracts/composability/) -#### Recent Research +#### Recent research From c895a2f5d594e52d219d9aad906a36688d83bd54 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Wed, 25 May 2022 14:34:38 -0300 Subject: [PATCH 077/298] add typescript doc --- docs/typescript.md | 92 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 docs/typescript.md diff --git a/docs/typescript.md b/docs/typescript.md new file mode 100644 index 00000000000..26fe1c46d64 --- /dev/null +++ b/docs/typescript.md @@ -0,0 +1,92 @@ +# Typescript + +## General considerations + +As we are progressively migrating the entire codebase to TS, we will have a mix of `.js` and `.ts` files in the process. For this reason and to make the migration easier for beginners, we have disabled the [`noImplicitAny`](https://www.typescriptlang.org/tsconfig#noImplicitAny) option from our `tsconfig.json` which means that you can use the `any` type and you will not get an error from that. +When we reach the moment where the entire codebase is in TS, we will enable `noImplicitAny` and increase the checker’s strictness. + +This is just starting, any suggestion is always welcomed and appreciated. + +## Migration guide & contribution opportunity 🎉 + +1. Run `yarn start` to generate the `src/gatsby-types.d.ts` file. More on this in the "GraphQL Typegen" section. +2. Convert the js file into a `.ts` or `.tsx` file in case the file includes some jsx in it. +3. Try to follow one already migrated file similar to the one you are migrating. + + - For `pages`, + + - Run again `yarn start` in order to update the `src/gatsby-types.d.ts` file with the page's query type. + - Use the Gatsby type `PageProps`, passing the generated GraphQL query type + the context type args. + + ```tsx + import { graphql, PageProps } from "gatsby" + import type { Context } from "src/types" + + const HomePage = ({}: PageProps) => { + ... + } + export const query = graphql` + query HomePage { + ... + } + ` + ``` + + - Always name your queries. + + ```tsx + // BAD + query { + ... + } + + // GOOD + query MyQuery { + ... + } + ``` + + - For `components`, + + - Use `React.FC` prop on function components. + - As a convention, define the component's props types as an interface with the name `IProps`. + - As a convention, export `IProps`. + + ```tsx + import React from "react" + + export interface IProps { + coolProp: string + } + + const Component: React.FC = ({ coolProp }) => { + ... + } + ``` + + - In case you need to extend your component with some other component's interface, import the latter with the following naming convention `I{NameOfTheComponent}Props`. + + ```tsx + import Link, { IProps as ILinkProps } from "./Link" + + export interface IProps extends ILinkProps { + newCoolProp: string + } + ``` + +4. Try to avoid as much as possible the usage of `any` :) + +## GraphQL Typegen + +With the release of Gatsby v4.15.0, [the config option `graphqlTypegen` has been added](https://www.gatsbyjs.com/docs/reference/release-notes/v4.15/#graphql-typegen). + +- This will generate automatically a `src/gatsby-types.d.ts` file which will contain all the GraphQL query types on the codebase. +- This will happen in build time. In other words, when you call `yarn start` or `yarn build`. +- Once you have that file created, a global `Queries` variable will be available which will contain all the query types. +- More information about how this works https://www.gatsbyjs.com/docs/how-to/local-development/graphql-typegen/ + +## Other resources + +- [Official Gatsby Typescript guide](https://www.gatsbyjs.com/docs/how-to/custom-configuration/typescript/) +- [Official Typescript website](https://www.typescriptlang.org/) +- [GraphQL Typegen](https://www.gatsbyjs.com/docs/how-to/local-development/graphql-typegen/) From 362719d6a16da18ceda560f5def98d592e827a9c Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Wed, 25 May 2022 22:25:06 -0300 Subject: [PATCH 078/298] add more resources --- docs/typescript.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/typescript.md b/docs/typescript.md index 26fe1c46d64..6ba6ffc5c41 100644 --- a/docs/typescript.md +++ b/docs/typescript.md @@ -90,3 +90,4 @@ With the release of Gatsby v4.15.0, [the config option `graphqlTypegen` has been - [Official Gatsby Typescript guide](https://www.gatsbyjs.com/docs/how-to/custom-configuration/typescript/) - [Official Typescript website](https://www.typescriptlang.org/) - [GraphQL Typegen](https://www.gatsbyjs.com/docs/how-to/local-development/graphql-typegen/) +- [Typescript Challenges](https://github.com/type-challenges/type-challenges) From 69840b1ddbaa75da5f26f3dffa05103161f46ffc Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Thu, 26 May 2022 10:45:32 +0100 Subject: [PATCH 079/298] add links to execution layer --- .../get-involved/open-research/index.md | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 8b8ba09987f..7562ce3d931 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -114,13 +114,21 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [ethresear.ch Security](https://ethresear.ch/tag/security) -[EIP 2938 Account Abstraction](https://eips.ethereum.org/EIPS/eip-2938) +[EIP-2938 Account Abstraction](https://eips.ethereum.org/EIPS/eip-2938) -[EIP 4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) +[EIP-4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) #### Recent research +[Validation focussed smart contract wallets](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) + +[The future of accounts](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) + +[EIP-3074](https://eips.ethereum.org/EIPS/eip-3074) + +[Publishing code code at EOA addresses](https://github.com/ethereum/EIPs/pull/5003) + ## Community, education and outreach @@ -204,7 +212,7 @@ Ethereum transaction fees protect the network from spam, denial-of-service attac #### Background reading -[EIP 1559 (Robust Incentives Group)](https://ethereum.github.io/abm1559/notebooks/eip1559.html) +[EIP-1559 (Robust Incentives Group)](https://ethereum.github.io/abm1559/notebooks/eip1559.html) #### Recent research @@ -280,6 +288,13 @@ The execution layer is concerned with executing transactions, running the EVM an #### Recent research +[Database optimizations](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) + +[State expiry](https://notes.ethereum.org/@vbuterin/state_expiry_eip) + +[History management](https://eips.ethereum.org/EIPS/eip-4444) + + ### Formal verification Formal verification is writing code to verify that Ethereum's consensus specifications are correct and bug-free. There is an executable version of the specification written in Python that requires maintenance and development. Further research can help to improve the Python implementation of the specification and add tools that can more robustly verify correctness and identify issues. @@ -319,6 +334,8 @@ DAOs are one of the key classes of application being built on top of Ethereum. T #### Recent research +[Mapping the DAO ecosystem](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) + ### Developer tools Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. From 5048bd41bdf23bd9b4d23671443774c3b8f1cb03 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Thu, 26 May 2022 12:09:27 +0100 Subject: [PATCH 080/298] add CL p2p info & links to formal verif. reading --- .../community/get-involved/open-research/index.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 7562ce3d931..62daa3b1ec4 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -233,7 +233,7 @@ Crypto taxation is a complicated issue that likely requires a software solution. ### Consensus clients -The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. +The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. #### Background reading @@ -272,10 +272,12 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe ### Execution clients -The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). +The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). #### Background reading +[Nodes and Clients](https://ethereum.org/developers/docs/nodes-and-clients) + #### Client implementations [Geth client](geth.ethereum.org) @@ -301,6 +303,11 @@ Formal verification is writing code to verify that Ethereum's consensus specific #### Background reading +[Introduction to formal verification](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) + +[Formal Verification (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) + + #### Recent research [Formal verification of the deposit contract](https://github.com/runtimeverification/deposit-contract-verification) From 9a0ac4c17e31fd18b7be7d1c660c5b1938398259 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:29:29 -0600 Subject: [PATCH 081/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 5eef3340fb2..fb9c25195b8 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -173,7 +173,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w ### Support -**Does the wallet have a person the ethereum.org team can contact regarding the wallet in future?** +**Who can the ethereum.org team can contact regarding the wallet in future?** From d26024eaf2224337132c9f3bc5debbf5245e3bf0 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:29:36 -0600 Subject: [PATCH 082/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index fb9c25195b8..f0b19c328d9 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -178,7 +178,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Does your wallet have a dedicated support team?** +**Does the wallet have a dedicated support team?** From b2069603b38d6052517ea974a3883de0efea54cd Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:29:46 -0600 Subject: [PATCH 083/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index f0b19c328d9..fc7e6556107 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -181,7 +181,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Does the wallet have a dedicated support team?** - + **What educational resources/documentation do you provide to users?** From 23bfea0b2d3caf562af741923c574b09f1323c44 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:29:53 -0600 Subject: [PATCH 084/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index fc7e6556107..a4e633e74bf 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -95,7 +95,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible** - + **Spam protection?** From cba7469fd62080c902878d2a06137fa55f39096a Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:30:02 -0600 Subject: [PATCH 085/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index a4e633e74bf..114a80c331e 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -91,7 +91,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w - + **Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible** From fdf119dc81f1339b1a4fd6d5c90701f99cdb92dd Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:41:28 -0600 Subject: [PATCH 086/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 114a80c331e..0533dc11d3a 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -47,7 +47,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Is your wallet globally accessible?** +**Is the wallet globally accessible?** From c1f887637647e0696519b49aa38ea3f76e5faa11 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:41:37 -0600 Subject: [PATCH 087/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 0533dc11d3a..6dab3a51b6f 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -49,7 +49,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Is the wallet globally accessible?** - + **Is the wallet available in multiple languages?** From 0c0b6a32a4a5d4de573eb9850831537741b0da3c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:41:50 -0600 Subject: [PATCH 088/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 6dab3a51b6f..342768c5dc8 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -43,7 +43,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Does your wallet have an active development team?** +**Does the wallet have an active development team?** From a557f4272ae0026c06213fa2085f78b00bc4640e Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:42:00 -0600 Subject: [PATCH 089/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 342768c5dc8..09377c3cc64 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -39,7 +39,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**When did your wallet go live to users?** +**When did the wallet go live to users?** From b4b5654fc3486acd713f5e8fa1c8f05c1222a02a Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:42:14 -0600 Subject: [PATCH 090/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 09377c3cc64..f14fee53e6c 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -6,7 +6,7 @@ labels: "wallet :purse:," assignees: "" --- -Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if your wallet meets the criteria listed there. +Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. ### Project info From c1de7a780a0e2f6a3c8ad582fc5e7ac40f51a4cf Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 09:42:21 -0600 Subject: [PATCH 091/298] Update .github/ISSUE_TEMPLATE/suggest_wallet.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index f14fee53e6c..6275a36f884 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -37,7 +37,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Is the wallet security tested? Please explain security measures i.e. security audit, internal security team, or some other method.** - + **When did the wallet go live to users?** From 5f0bb73d2705de92215ea00c517a2a40e67c4982 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Thu, 26 May 2022 16:43:14 -0300 Subject: [PATCH 092/298] templates migration to ts --- gatsby-node.ts | 4 +- package.json | 2 + src/templates/{docs.js => docs.tsx} | 31 ++++++++----- src/templates/{job.js => job.tsx} | 29 ++++++------ src/templates/{staking.js => staking.tsx} | 39 +++++++--------- src/templates/{static.js => static.tsx} | 44 +++++++++++++------ src/templates/{tutorial.js => tutorial.tsx} | 43 +++++++++++------- src/templates/{upgrade.js => upgrade.tsx} | 41 +++++++++++------ src/templates/{use-cases.js => use-cases.tsx} | 36 ++++++++------- src/utils/getSummaryPoints.js | 11 ----- src/utils/getSummaryPoints.ts | 20 +++++++++ src/utils/{time.js => time.ts} | 3 +- yarn.lock | 12 +++++ 13 files changed, 192 insertions(+), 123 deletions(-) rename src/templates/{docs.js => docs.tsx} (91%) rename src/templates/{job.js => job.tsx} (95%) rename src/templates/{staking.js => staking.tsx} (94%) rename src/templates/{static.js => static.tsx} (84%) rename src/templates/{tutorial.js => tutorial.tsx} (83%) rename src/templates/{upgrade.js => upgrade.tsx} (92%) rename src/templates/{use-cases.js => use-cases.tsx} (95%) delete mode 100644 src/utils/getSummaryPoints.js create mode 100644 src/utils/getSummaryPoints.ts rename src/utils/{time.js => time.ts} (79%) diff --git a/gatsby-node.ts b/gatsby-node.ts index 7f465a03eed..fcf458cdd28 100644 --- a/gatsby-node.ts +++ b/gatsby-node.ts @@ -271,7 +271,7 @@ export const createPages: GatsbyNode["createPages"] = async ({ const langSlug = splitSlug.join("/") createPage({ path: langSlug, - component: path.resolve(`src/templates/${template}.js`), + component: path.resolve(`src/templates/${template}.tsx`), context: { slug: langSlug, ignoreTranslationBanner: isLegal, @@ -298,7 +298,7 @@ export const createPages: GatsbyNode["createPages"] = async ({ createPage({ path: slug, - component: path.resolve(`src/templates/${template}.js`), + component: path.resolve(`src/templates/${template}.tsx`), context: { language, slug, diff --git a/package.json b/package.json index 5d097fe1843..ad354a6c80c 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,8 @@ }, "devDependencies": { "@netlify/functions": "^1.0.0", + "@types/luxon": "^2.3.2", + "@types/mdx-js__react": "^1.5.5", "@types/node": "^17.0.23", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.11", diff --git a/src/templates/docs.js b/src/templates/docs.tsx similarity index 91% rename from src/templates/docs.js rename to src/templates/docs.tsx index 05c40fd534b..a8de7f4f260 100644 --- a/src/templates/docs.js +++ b/src/templates/docs.tsx @@ -1,6 +1,5 @@ import React, { useContext } from "react" -import { graphql } from "gatsby" -import { useIntl } from "gatsby-plugin-intl" +import { graphql, PageProps } from "gatsby" import { MDXProvider } from "@mdx-js/react" import { MDXRenderer } from "gatsby-plugin-mdx" import styled from "styled-components" @@ -25,10 +24,6 @@ import DocsNav from "../components/DocsNav" import DeveloperDocsLinks from "../components/DeveloperDocsLinks" import RollupProductDevDoc from "../components/RollupProductDevDoc" import YouTube from "../components/YouTube" - -import { ZenModeContext } from "../contexts/ZenModeContext.js" - -import { isLangRightToLeft } from "../utils/translations" import { Divider, Paragraph, @@ -39,6 +34,11 @@ import { ListItem, } from "../components/SharedStyledComponents" +import { ZenModeContext } from "../contexts/ZenModeContext.js" +import { isLangRightToLeft } from "../utils/translations" +import { Lang } from "../utils/languages" +import { Context } from "../types" + const Page = styled.div` display: flex; flex-direction: column; @@ -46,7 +46,7 @@ const Page = styled.div` border-bottom: 1px solid ${(props) => props.theme.colors.border}; ` -const ContentContainer = styled.div` +const ContentContainer = styled.div<{ isZenMode: boolean }>` display: flex; justify-content: ${(props) => (props.isZenMode ? "center" : "space-between")}; width: 100%; @@ -165,15 +165,22 @@ const Contributors = styled(FileContributors)` } ` -const DocsPage = ({ data, pageContext }) => { +const DocsPage = ({ + data: { siteData, pageData: mdx }, + pageContext, +}: PageProps) => { const { isZenMode } = useContext(ZenModeContext) - const mdx = data.pageData - const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang) - const tocItems = mdx.tableOfContents.items + if (!siteData || !mdx?.frontmatter) { + throw new Error("Docs page template query does not return expected values") + } + + const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) + + const tocItems = mdx.tableOfContents?.items const isPageIncomplete = mdx.frontmatter.incomplete - const { editContentUrl } = data.siteData.siteMetadata + const { editContentUrl } = siteData.siteMetadata || {} const { relativePath, slug } = pageContext const absoluteEditPath = `${editContentUrl}${relativePath}` diff --git a/src/templates/job.js b/src/templates/job.tsx similarity index 95% rename from src/templates/job.js rename to src/templates/job.tsx index 5ae84c3ea37..a42a4a53522 100644 --- a/src/templates/job.js +++ b/src/templates/job.tsx @@ -1,9 +1,10 @@ import React from "react" -import { graphql } from "gatsby" +import { graphql, PageProps } from "gatsby" import { MDXProvider } from "@mdx-js/react" import { MDXRenderer } from "gatsby-plugin-mdx" import styled from "styled-components" import { GatsbyImage, getImage } from "gatsby-plugin-image" + import ButtonLink from "../components/ButtonLink" import Link from "../components/Link" import PageMetadata from "../components/PageMetadata" @@ -15,6 +16,8 @@ import { ListItem, } from "../components/SharedStyledComponents" +import { Context } from "../types" + const Page = styled.div` display: flex; justify-content: space-between; @@ -307,7 +310,13 @@ const StyledLink = styled(Link)` } ` -const JobPage = ({ data: { mdx } }) => { +const JobPage = ({ + data: { mdx }, +}: PageProps) => { + if (!mdx?.frontmatter) { + throw new Error("Job page template query does not return expected values") + } + return ( @@ -369,7 +378,7 @@ const JobPage = ({ data: { mdx } }) => { Back to jobs - + Apply for job @@ -378,7 +387,7 @@ const JobPage = ({ data: { mdx } }) => { Back to jobs - Apply for job + Apply for job @@ -388,9 +397,6 @@ const JobPage = ({ data: { mdx } }) => { export const JobQuery = graphql` query JobPage($relativePath: String) { mdx(fields: { relativePath: { eq: $relativePath } }) { - fields { - slug - } frontmatter { title description @@ -408,15 +414,6 @@ export const JobQuery = graphql` } } body - tableOfContents - parent { - ... on File { - mtime - fields { - gitLogLatestDate - } - } - } } } ` diff --git a/src/templates/staking.js b/src/templates/staking.tsx similarity index 94% rename from src/templates/staking.js rename to src/templates/staking.tsx index f66645e2f85..18a5d4866df 100644 --- a/src/templates/staking.js +++ b/src/templates/staking.tsx @@ -1,5 +1,5 @@ import React from "react" -import { graphql } from "gatsby" +import { graphql, PageProps } from "gatsby" import { MDXRenderer } from "gatsby-plugin-mdx" import { GatsbyImage, getImage } from "gatsby-plugin-image" import { MDXProvider } from "@mdx-js/react" @@ -45,6 +45,8 @@ import StakingCommunityCallout from "../components/Staking/StakingCommunityCallo import StakingGuides from "../components/Staking/StakingGuides" import { isLangRightToLeft } from "../utils/translations" +import { Context } from "../types" +import { Lang } from "../utils/languages" const Page = styled.div` display: flex; @@ -338,15 +340,19 @@ const components = { StakingGuides, } -const StakingPage = ({ data, pageContext, location }) => { - const mdx = data.pageData - const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang) - const tocItems = mdx.tableOfContents.items - const { summaryPoints } = mdx.frontmatter +const StakingPage = ({ + data: { pageData: mdx }, + location, +}: PageProps) => { + if (!mdx?.frontmatter) { + throw new Error( + "Staking page template query does not return expected values" + ) + } - // const { editContentUrl } = data.siteData.siteMetadata - // const { relativePath } = pageContext - // const absoluteEditPath = `${editContentUrl}${relativePath}` + const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) + const tocItems = mdx.tableOfContents?.items + const { summaryPoints } = mdx.frontmatter const dropdownLinks = { text: "Staking Options", @@ -398,7 +404,7 @@ const StakingPage = ({ data, pageContext, location }) => { {mdx.frontmatter.title}
        - {summaryPoints.map((point, idx) => ( + {(summaryPoints || []).map((point, idx) => ( {point} ))}
      @@ -447,11 +453,6 @@ const StakingPage = ({ data, pageContext, location }) => { export const stakingPageQuery = graphql` query StakingPage($relativePath: String) { - siteData: site { - siteMetadata { - editContentUrl - } - } pageData: mdx(fields: { relativePath: { eq: $relativePath } }) { fields { slug @@ -478,14 +479,6 @@ export const stakingPageQuery = graphql` } body tableOfContents - parent { - ... on File { - mtime - fields { - gitLogLatestDate - } - } - } } } ` diff --git a/src/templates/static.js b/src/templates/static.tsx similarity index 84% rename from src/templates/static.js rename to src/templates/static.tsx index 9e875920ccd..ae5c9edbd7e 100644 --- a/src/templates/static.js +++ b/src/templates/static.tsx @@ -1,9 +1,10 @@ import React from "react" -import { graphql } from "gatsby" +import { graphql, PageProps } from "gatsby" import { useIntl } from "gatsby-plugin-intl" import { MDXProvider } from "@mdx-js/react" import { MDXRenderer } from "gatsby-plugin-mdx" import styled from "styled-components" + import ButtonLink from "../components/ButtonLink" import Breadcrumbs from "../components/Breadcrumbs" import Card from "../components/Card" @@ -27,8 +28,6 @@ import SectionNav from "../components/SectionNav" import DocLink from "../components/DocLink" import GhostCard from "../components/GhostCard" import MatomoOptOut from "../components/MatomoOptOut" -import { getLocaleTimestamp } from "../utils/time" -import { isLangRightToLeft } from "../utils/translations" import { Divider, Paragraph, @@ -45,6 +44,11 @@ import Icon from "../components/Icon" import SocialListItem from "../components/SocialListItem" import YouTube from "../components/YouTube" +import { getLocaleTimestamp } from "../utils/time" +import { isLangRightToLeft } from "../utils/translations" +import { Lang } from "../utils/languages" +import { Context } from "../types" + const Page = styled.div` display: flex; justify-content: space-between; @@ -143,16 +147,28 @@ const components = { YouTube, } -const StaticPage = ({ data: { siteData, pageData: mdx }, pageContext }) => { +const StaticPage = ({ + data: { siteData, pageData: mdx }, + pageContext, +}: PageProps) => { const intl = useIntl() - const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang) - const lastUpdatedDate = mdx.parent.fields - ? mdx.parent.fields.gitLogLatestDate - : mdx.parent.mtime + if (!siteData || !mdx?.frontmatter || !mdx.parent) { + throw new Error( + "Static page template query does not return expected values" + ) + } + + const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) + + // FIXME: remove this any, currently not sure how to fix the ts error + const parent: any = mdx.parent + const lastUpdatedDate = parent.fields + ? parent.fields.gitLogLatestDate + : parent.mtime - const tocItems = mdx.tableOfContents.items - const { editContentUrl } = siteData.siteMetadata + const tocItems = mdx.tableOfContents?.items + const { editContentUrl } = siteData.siteMetadata || {} const { relativePath } = pageContext const absoluteEditPath = relativePath.split("/").includes("whitepaper") || @@ -167,10 +183,12 @@ const StaticPage = ({ data: { siteData, pageData: mdx }, pageContext }) => { description={mdx.frontmatter.description} /> - - + + :{" "} - {getLocaleTimestamp(intl.locale, lastUpdatedDate)} + {getLocaleTimestamp(intl.locale as Lang, lastUpdatedDate)} { - const pageData = data.pageData - const isRightToLeft = isLangRightToLeft(pageData.frontmatter.lang) +const TutorialPage = ({ + data: { siteData, pageData: mdx }, + pageContext, +}: PageProps) => { + if (!siteData || !mdx?.frontmatter) { + throw new Error( + "Tutorial page template query does not return expected values" + ) + } + + const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) - const tocItems = pageData.tableOfContents.items + const tocItems = mdx.tableOfContents?.items - const { editContentUrl } = data.siteData.siteMetadata + const { editContentUrl } = siteData.siteMetadata || {} const { relativePath } = pageContext const absoluteEditPath = `${editContentUrl}${relativePath}` return ( -

      {pageData.frontmatter.title}

      - +

      {mdx.frontmatter.title}

      + - {pageData.body} + {mdx.body}
      - {pageData.frontmatter.sidebar && tocItems && ( + {mdx.frontmatter.sidebar && tocItems && ( )} diff --git a/src/templates/upgrade.js b/src/templates/upgrade.tsx similarity index 92% rename from src/templates/upgrade.js rename to src/templates/upgrade.tsx index 5f6988eff35..2ec66190f45 100644 --- a/src/templates/upgrade.js +++ b/src/templates/upgrade.tsx @@ -1,10 +1,11 @@ import React from "react" -import { graphql } from "gatsby" +import { graphql, PageProps } from "gatsby" import { useIntl } from "gatsby-plugin-intl" import { MDXProvider } from "@mdx-js/react" import { MDXRenderer } from "gatsby-plugin-mdx" import styled from "styled-components" import { GatsbyImage, getImage } from "gatsby-plugin-image" + import ButtonLink from "../components/ButtonLink" import ButtonDropdown from "../components/ButtonDropdown" import Breadcrumbs from "../components/Breadcrumbs" @@ -29,9 +30,6 @@ import UpgradeTableOfContents from "../components/UpgradeTableOfContents" import Translation from "../components/Translation" import TranslationsInProgress from "../components/TranslationsInProgress" import SectionNav from "../components/SectionNav" -import { getLocaleTimestamp } from "../utils/time" -import { isLangRightToLeft } from "../utils/translations" -import { getSummaryPoints } from "../utils/getSummaryPoints" import { Divider, Paragraph, @@ -41,6 +39,12 @@ import { import Emoji from "../components/Emoji" import YouTube from "../components/YouTube" +import { getLocaleTimestamp } from "../utils/time" +import { isLangRightToLeft } from "../utils/translations" +import { getSummaryPoints } from "../utils/getSummaryPoints" +import { Lang } from "../utils/languages" +import { Context } from "../types" + const Page = styled.div` display: flex; justify-content: space-between; @@ -318,15 +322,26 @@ const dropdownLinks = { ], } -const UpgradePage = ({ data: { mdx } }) => { +const UpgradePage = ({ + data: { mdx }, +}: PageProps) => { const intl = useIntl() - const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang) - const tocItems = mdx.tableOfContents.items + if (!mdx?.frontmatter || !mdx.parent) { + throw new Error( + "Upgrade page template query does not return expected values" + ) + } + + const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) + const tocItems = mdx.tableOfContents?.items + + // FIXME: remove this any, currently not sure how to fix the ts error + const parent: any = mdx.parent // TODO some `gitLogLatestDate` are `null` - why? - const lastUpdatedDate = mdx.parent.fields - ? mdx.parent.fields.gitLogLatestDate - : mdx.parent.mtime + const lastUpdatedDate = parent.fields + ? parent.fields.gitLogLatestDate + : parent.mtime const summaryPoints = getSummaryPoints(mdx.frontmatter) @@ -334,8 +349,8 @@ const UpgradePage = ({ data: { mdx } }) => { - - + + {mdx.frontmatter.title}
        @@ -346,7 +361,7 @@ const UpgradePage = ({ data: { mdx } }) => { :{" "} - {getLocaleTimestamp(intl.locale, lastUpdatedDate)} + {getLocaleTimestamp(intl.locale as Lang, lastUpdatedDate)} diff --git a/src/templates/use-cases.js b/src/templates/use-cases.tsx similarity index 95% rename from src/templates/use-cases.js rename to src/templates/use-cases.tsx index 4fdc6f66c53..94acd16abe7 100644 --- a/src/templates/use-cases.js +++ b/src/templates/use-cases.tsx @@ -1,9 +1,10 @@ import React from "react" -import { graphql } from "gatsby" +import { graphql, PageProps } from "gatsby" import { MDXProvider } from "@mdx-js/react" import { MDXRenderer } from "gatsby-plugin-mdx" import styled from "styled-components" import { GatsbyImage, getImage } from "gatsby-plugin-image" + import ButtonLink from "../components/ButtonLink" import ButtonDropdown from "../components/ButtonDropdown" import BannerNotification from "../components/BannerNotification" @@ -27,8 +28,6 @@ import TableOfContents from "../components/TableOfContents" import TranslationsInProgress from "../components/TranslationsInProgress" import Translation from "../components/Translation" import SectionNav from "../components/SectionNav" -import { isLangRightToLeft } from "../utils/translations" -import { getSummaryPoints } from "../utils/getSummaryPoints" import { Divider, Paragraph, @@ -38,6 +37,11 @@ import { import Emoji from "../components/Emoji" import YouTube from "../components/YouTube" +import { isLangRightToLeft } from "../utils/translations" +import { getSummaryPoints } from "../utils/getSummaryPoints" +import { Lang } from "../utils/languages" +import { Context } from "../types" + const Page = styled.div` display: flex; justify-content: space-between; @@ -291,13 +295,21 @@ const TitleCard = styled.div` } ` -const UseCasePage = ({ data, pageContext }) => { - const mdx = data.pageData - const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang) - const tocItems = mdx.tableOfContents.items +const UseCasePage = ({ + data: { siteData, pageData: mdx }, + pageContext, +}: PageProps) => { + if (!siteData || !mdx?.frontmatter) { + throw new Error( + "UseCases page template query does not return expected values" + ) + } + + const isRightToLeft = isLangRightToLeft(mdx.frontmatter.lang as Lang) + const tocItems = mdx.tableOfContents?.items const summaryPoints = getSummaryPoints(mdx.frontmatter) - const { editContentUrl } = data.siteData.siteMetadata + const { editContentUrl } = siteData.siteMetadata || {} const { relativePath } = pageContext const absoluteEditPath = `${editContentUrl}${relativePath}` @@ -429,14 +441,6 @@ export const useCasePageQuery = graphql` } body tableOfContents - parent { - ... on File { - mtime - fields { - gitLogLatestDate - } - } - } } } ` diff --git a/src/utils/getSummaryPoints.js b/src/utils/getSummaryPoints.js deleted file mode 100644 index c19f9671bb6..00000000000 --- a/src/utils/getSummaryPoints.js +++ /dev/null @@ -1,11 +0,0 @@ -export const getSummaryPoints = (frontmatter, count = 4) => { - // Place summary points into an array, guarding for `undefined` values - let summaryPoints = [] - for (let i = 1; i <= count; i++) { - const summaryPoint = frontmatter[`summaryPoint${i}`] - if (summaryPoint) { - summaryPoints.push(summaryPoint) - } - } - return summaryPoints -} diff --git a/src/utils/getSummaryPoints.ts b/src/utils/getSummaryPoints.ts new file mode 100644 index 00000000000..fc48514313e --- /dev/null +++ b/src/utils/getSummaryPoints.ts @@ -0,0 +1,20 @@ +export const getSummaryPoints = ( + frontmatter: Partial< + Pick< + Queries.Frontmatter, + "summaryPoint1" | "summaryPoint2" | "summaryPoint3" | "summaryPoint4" + > + >, + count = 4 +): Array => { + // Place summary points into an array, guarding for `undefined` values + let summaryPoints: Array = [] + for (let i = 1; i <= count; i++) { + // @ts-ignore + const summaryPoint = frontmatter[`summaryPoint${i}`] as string + if (summaryPoint) { + summaryPoints.push(summaryPoint) + } + } + return summaryPoints +} diff --git a/src/utils/time.js b/src/utils/time.ts similarity index 79% rename from src/utils/time.js rename to src/utils/time.ts index e08422b047f..13a77fe71a9 100644 --- a/src/utils/time.js +++ b/src/utils/time.ts @@ -1,8 +1,9 @@ import { DateTime } from "luxon" +import { Lang } from "./languages" export const INVALID_DATETIME = "Invalid DateTime" -export const getLocaleTimestamp = (locale, timestamp) => { +export const getLocaleTimestamp = (locale: Lang, timestamp: string) => { let localeTimestamp = DateTime.fromSQL(timestamp) .setLocale(locale) .toLocaleString(DateTime.DATE_FULL) diff --git a/yarn.lock b/yarn.lock index 5395915ba78..9372ca15c89 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3769,6 +3769,11 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== +"@types/luxon@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.3.2.tgz#8a3f2cdd4858ce698b56cd8597d9243b8e9d3c65" + integrity sha512-WOehptuhKIXukSUUkRgGbj2c997Uv/iUgYgII8U7XLJqq9W2oF0kQ6frEznRQbdurioz+L/cdaIm4GutTQfgmA== + "@types/mdast@^3.0.0", "@types/mdast@^3.0.3": version "3.0.10" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" @@ -3776,6 +3781,13 @@ dependencies: "@types/unist" "*" +"@types/mdx-js__react@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/mdx-js__react/-/mdx-js__react-1.5.5.tgz#fa6daa1a28336d77b6cf071aacc7e497600de9ee" + integrity sha512-k8pnaP6JXVlQh18HgL5X6sYFNC/qZnzO7R2+HsmwrwUd+JnnsU0d9lyyT0RQrHg1anxDU36S98TI/fsGtmYqqg== + dependencies: + "@types/react" "*" + "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" From 50db3ad7566a2e58cbc53e6831f30f6e717db81f Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 14:44:13 -0600 Subject: [PATCH 093/298] update tools titles --- src/intl/en/page-layer-2.json | 6 ------ src/pages/layer-2.js | 12 ++++++------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index a1941acc5a8..a44b89949c1 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -83,17 +83,11 @@ "layer-2-withdrawals": "Withdrawals", "layer-2-go-to": "Go to", "layer-2-tools-title": "Tools to be effective on layer 2", - "layer-2-tools-l2beat-title": "L2BEAT", "layer-2-tools-l2beat-description": "L2BEAT is a great resource for looking at technical risk assessments of layer 2 projects. We recommend checking out their resources when researching specific layer 2 projects.", - "layer-2-tools-l2fees-title": "L2 Fees", "layer-2-tools-l2fees-description": "L2 Fees lets you see the current cost (denominated in USD) for doing transactions on different layer 2s.", - "layer-2-tools-chainlist-title": "Chainlist", "layer-2-tools-chainlist-description": "Chainlist is a great resource for importing network RPC's into supporting wallets. You will find RPC's for layer 2 projects here to help get you connected.", - "layer-2-tools-zapper-title": "Zapper", "layer-2-tools-zapper-description": "Manage your entire web3 portfolio from DeFi to NFTs and whatever comes next. Invest in the latest opportunities from one convenient place.", - "layer-2-tools-zerion-title": "Zerion", "layer-2-tools-zerion-description": "Build and manage your entire DeFi portfolio from one place. Discover the world of decentralized finance today.", - "layer-2-tools-debank-title": "DeBank", "layer-2-tools-debank-description": "Keep up with all the important happenings in the web3 world", "layer-2-faq-title": "FAQ", "layer-2-faq-question-1-title": "Why is there no 'official' Ethereum L2?", diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index a8e4b56f609..d229800a6b5 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -334,7 +334,7 @@ const Layer2Page = ({ data }) => { const toolsData = { information: [ { - title: translateMessageId("layer-2-tools-l2beat-title", intl), + title: "L2BEAT", description: translateMessageId( "layer-2-tools-l2beat-description", intl @@ -344,7 +344,7 @@ const Layer2Page = ({ data }) => { alt: "L2BEAT", }, { - title: translateMessageId("layer-2-tools-l2fees-title", intl), + title: "L2 Fees", description: translateMessageId( "layer-2-tools-l2fees-description", intl @@ -354,7 +354,7 @@ const Layer2Page = ({ data }) => { alt: "L2 Fees", }, { - title: translateMessageId("layer-2-tools-chainlist-title", intl), + title: "Chainlist", description: translateMessageId( "layer-2-tools-chainlist-description", intl @@ -366,7 +366,7 @@ const Layer2Page = ({ data }) => { ], walletManagers: [ { - title: translateMessageId("layer-2-tools-zapper-title", intl), + title: "Zapper", description: translateMessageId( "layer-2-tools-zapper-description", intl @@ -376,7 +376,7 @@ const Layer2Page = ({ data }) => { alt: "Zapper", }, { - title: translateMessageId("layer-2-tools-zerion-title", intl), + title: "Zerion", description: translateMessageId( "layer-2-tools-zerion-description", intl @@ -386,7 +386,7 @@ const Layer2Page = ({ data }) => { alt: "Zerion", }, { - title: translateMessageId("layer-2-tools-debank-title", intl), + title: "DeBank", description: translateMessageId( "layer-2-tools-debank-description", intl From 2002de2e490ee43ebe05030858f19ed8036563bc Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 14:47:20 -0600 Subject: [PATCH 094/298] change requests --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md index 6275a36f884..0f3ec96532a 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.md @@ -8,7 +8,6 @@ assignees: "" Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. - ### Project info **Wallet name** @@ -35,10 +34,6 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w -**Is the wallet security tested? Please explain security measures i.e. security audit, internal security team, or some other method.** - - - **When did the wallet go live to users?** @@ -97,6 +92,18 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w +**Has the wallet's smart contract code been audited?** + + + +**Does the wallet have an internal security team?** + + + +**Any other security testing that should be noted?** + + + **Spam protection?** @@ -176,7 +183,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **Who can the ethereum.org team can contact regarding the wallet in future?** - + **Does the wallet have a dedicated support team?** @@ -186,6 +193,7 @@ Before suggesting a wallet, make sure you've read [our listing policy](https://w **What educational resources/documentation do you provide to users?** + ### Extra **Does the wallet have any integrated tools not mentioned above?** From bec25f3a4ae74ce00959f40c2dda88a1c5e266e5 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 15:02:33 -0600 Subject: [PATCH 095/298] setup yaml --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/suggest_wallet.yaml diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml new file mode 100644 index 00000000000..9226a34df61 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -0,0 +1,9 @@ +name: Suggest a wallet +about: Suggest a new wallet to list on ethereum.org +title: "" +labels: ["wallet :purse:,"] +assignees: "" +body: + - type: markdown + attributes: + value: Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. From f52c997d063ef869f21afb101c2f85b7266fcb31 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 15:09:51 -0600 Subject: [PATCH 096/298] test commit --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 9226a34df61..b67f2af1515 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -1,9 +1,17 @@ name: Suggest a wallet -about: Suggest a new wallet to list on ethereum.org -title: "" +description: Suggest a new wallet to list on ethereum.org +title: Suggest a wallet labels: ["wallet :purse:,"] -assignees: "" body: - type: markdown attributes: - value: Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. + value: | + Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. + - type: input + id: contact + attributes: + label: Contact Details + description: How can we get in touch with you if we need more info? + placeholder: ex. email@example.com + validations: + required: false From 778982dd6d351962dea79e86a8a01645a163a1d4 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 15:13:43 -0600 Subject: [PATCH 097/298] test --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index b67f2af1515..a53e3a1586c 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -7,11 +7,14 @@ body: attributes: value: | Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. - - type: input + - type: markdown id: contact attributes: - label: Contact Details - description: How can we get in touch with you if we need more info? - placeholder: ex. email@example.com + value: "## Project info" + - type: input + id: wallet_name + attributes: + label: Wallet name + placeholder: Please provide the official name of the wallet validations: - required: false + required: true From b615e9bb645332ec268b700aebaa6693816153ae Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 15:27:57 -0600 Subject: [PATCH 098/298] project info form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 67 +++++++++++++++++++++- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index a53e3a1586c..ef620be96bb 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -1,7 +1,7 @@ name: Suggest a wallet description: Suggest a new wallet to list on ethereum.org title: Suggest a wallet -labels: ["wallet :purse:,"] +labels: ["wallet :purse:"] body: - type: markdown attributes: @@ -15,6 +15,69 @@ body: id: wallet_name attributes: label: Wallet name - placeholder: Please provide the official name of the wallet + description: Please provide the official name of the wallet. + validations: + required: true + - type: textarea + id: wallet_description + attributes: + label: Wallet description + description: Please provide a short 1-2 sentence description of the wallet. Avoid unsubstantiated marketing claims like “the best Ethereum wallet”. + validations: + required: true + - type: textarea + id: wallet_logo + attributes: + label: Wallet logo + description: | + Please provide an SVG or hi-res transparent PNG + Tip: You can attach images by clicking this area to highlight it and then dragging files in. + validations: + required: true + - type: input + id: wallet_background + attributes: + label: Background color for brand logo + description: Please provide a hex code for the brand color. This will be added to the background of the wallet card. + validations: + required: true + - type: input + id: wallet_url + attributes: + label: URL to the project + description: Please provide a URL (e.g. to the website of the wallet). + validations: + required: true + - type: input + id: wallet_live_date + attributes: + label: When did the wallet go live to users? + description: Please provide a date when the wallet was usable by the public + validations: + required: true + - type: input + id: wallet_active_development_team + attributes: + label: Does the wallet have an active development team? + description: Are developers actively working on the wallet? Provide proof that the wallet is actively being worked on (ex. GitHub repo link). + validations: + required: true + - type: input + id: wallet_globally_accessible + attributes: + label: Is the wallet globally accessible? + description: Please list any KYC requirements or geographic limitations of the wallet, if any exist. + validations: + required: true + - type: input + id: wallet_languages + attributes: + label: Is the wallet available in multiple languages? + description: Please list languages that the wallet actively supports. + - type: textarea + id: wallet_socials + attributes: + label: What social links are there for the project? + description: Please provide social links for the wallet (Discord, Twitter, etc.) validations: required: true From 39d4a75f48d00d8bc04d9404a27d5f03c804ac68 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 15:38:20 -0600 Subject: [PATCH 099/298] device form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 26 +++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index ef620be96bb..b5d9cd310d3 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -8,7 +8,7 @@ body: value: | Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. - type: markdown - id: contact + id: project_info attributes: value: "## Project info" - type: input @@ -81,3 +81,27 @@ body: description: Please provide social links for the wallet (Discord, Twitter, etc.) validations: required: true + - type: markdown + id: device + attributes: + value: "## Device" + - type: textarea + id: wallet_mobile + attributes: + label: Does the wallet have a mobile app? If yes, which operating systems are supported (iOS, Android)? + description: Please provide app store links for the operating systems supported. + - type: textarea + id: wallets_desktop + attributes: + label: Does the wallet have a desktop app? If yes, which operating systems are supported (Windows, Mac, Linux)? + description: Please provide links and information for the desktop operating systems supported. + - type: textarea + id: wallets_browser + attributes: + label: Does the wallet have a browser extension? If yes, which browsers are supported (Chromium, Firefox, Safari)? + description: Please provide links and information for the browsers that are supported. + - type: textarea + id: wallets_hardware + attributes: + label: Is it a hardware wallet? + description: How does it broadcast signed transactions (e.g. USB, Bluetooth, QR code)? From 0e3f0892cf2564d0f4663eeadb4570061f213dfc Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 16:11:46 -0600 Subject: [PATCH 100/298] security form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index b5d9cd310d3..7ce1e24c6ee 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -105,3 +105,51 @@ body: attributes: label: Is it a hardware wallet? description: How does it broadcast signed transactions (e.g. USB, Bluetooth, QR code)? + - type: markdown + id: security + attributes: + value: "## Security" + - type: input + id: wallet_source_code + attributes: + label: Is the source code for the wallet fully open-source? + description: If yes, please provide a direct link to the repository. + - type: input + id: wallet_license + attributes: + label: What license is the wallet software released under? + description: Please provide information on the software license used for the wallet. + - type: textarea + id: wallet_custodial + attributes: + label: Who holds the private keys? + description: | + Users must have access to private keys without reliance on a company remaining in business to be listed as a wallet. + Do users have access to their public and private keys? Does anyone else? If the company/project were to disappear, would users still be able to access their funds? + validations: + required: true + - type: textarea + id: wallet_security_documentation + attributes: + label: Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible + description: Please provide a link to any security audits, code reports, and bug bounties. If you haven't been audited but think the wallet should be listed anyway, explain here. + - type: input + id: wallet_smart_contract_audit + attributes: + label: Has the wallet's smart contract code been audited? + description: If yes, provide a link to any audits. + - type: input + id: wallet_security_team + attributes: + label: Does the wallet have an internal security team? + description: If yes, please provide details. + - type: textarea + id: wallet_security_testing + attributes: + label: Any other security testing that should be noted? + description: Please note any other security precautions taken. + - type: textarea + id: wallet_spam_protection + attributes: + label: Spam protection? + description: Does the wallet employ any practices to warn users against potential spam (e.g. when interacting with suspicious accounts/contracts)? From 60a5bffa4030e21b1e13c61ea5c01b9e7562d159 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 16:23:49 -0600 Subject: [PATCH 101/298] features form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 7ce1e24c6ee..e7f88ea78ef 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -153,3 +153,79 @@ body: attributes: label: Spam protection? description: Does the wallet employ any practices to warn users against potential spam (e.g. when interacting with suspicious accounts/contracts)? + - type: markdown + id: features + attributes: + value: "## Features" + - type: dropdown + id: wallet_hardware_support + attributes: + label: Does the wallet support connecting to a hardware wallet? + options: + - Yes + - No + validations: + required: true + - type: dropdown + id: wallet_walletconnect + attributes: + label: Does the wallet support WalletConnect? + options: + - Yes + - No + validations: + required: true + - type: input + id: wallet_rpc_importing + attributes: + label: Does the wallet support importing Ethereum RPC endpoints? + description: Please provide documentation on how a user can import an Ethereum RPC into the wallet. + - type: dropdown + id: wallet_nft_viewing + attributes: + label: Does the wallet support viewing and interacting with NFTs? + options: + - Yes + - No + validations: + required: true + - type: input + id: wallet_dapp_support + attributes: + label: Does the wallet support connecting to Ethereum applications? + description: Please provide documentation for how users connect to applications. List examples (ie. connect wallet to dapp, in wallet browser, etc.) + - type: input + id: wallet_direct_staking + attributes: + label: Does the wallet support staking directly? + description: Please provide documentation on direct staking this wallet supports. + - type: input + id: wallet_swaps + attributes: + label: Does the wallet support swaps directly? + description: Please provide documentation on swaps. + - type: input + id: wallet_multi_chain_support + attributes: + label: Does the wallet support multi-chain networks? + description: Please provide documentation on multi-chain networks this wallet supports. + - type: input + id: wallet_customize_gas_fees + attributes: + label: Does the wallet allow the user to customize gas fees? + description: Please provide documentation on how users can customize gas fees for transactions. + - type: input + id: wallet_ens_support + attributes: + label: Does the wallet support sending transactions to ENS addresses? + description: Please provide information on ENS support. + - type: input + id: wallet_erc_20_support + attributes: + label: Does the wallet support importing or automatically querying and displaying ERC-20 tokens? + description: Please provide documentation on how to import tokens into the wallet. + - type: input + id: wallet_eip_1559_support + attributes: + label: Does the wallet support EIP-1559 (type 2) transactions? + description: Please provide information on how the type of transactions this wallet supports. From ee947558c6e041ade69790b19004bda67240136a Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 16:24:56 -0600 Subject: [PATCH 102/298] fix features bugs --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index e7f88ea78ef..e01a2f7a414 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -162,8 +162,8 @@ body: attributes: label: Does the wallet support connecting to a hardware wallet? options: - - Yes - - No + - "Yes" + - "No" validations: required: true - type: dropdown @@ -171,8 +171,8 @@ body: attributes: label: Does the wallet support WalletConnect? options: - - Yes - - No + - "Yes" + - "No" validations: required: true - type: input @@ -185,8 +185,8 @@ body: attributes: label: Does the wallet support viewing and interacting with NFTs? options: - - Yes - - No + - "Yes" + - "No" validations: required: true - type: input From f358eaa6d75560b9994539ce2360634f07ed8b26 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 16:28:23 -0600 Subject: [PATCH 103/298] finance form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index e01a2f7a414..0c0595296ec 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -228,4 +228,18 @@ body: id: wallet_eip_1559_support attributes: label: Does the wallet support EIP-1559 (type 2) transactions? - description: Please provide information on how the type of transactions this wallet supports. + description: Please provide information on the type of transactions this wallet supports. + - type: markdown + id: finance + attributes: + value: "## Finance" + - type: input + id: wallet_fiat_onramp + attributes: + label: Does the wallet have fiat on-ramps through credit/debit cards, wire transfers, or bank transfers (ACH)? + description: Please provide documentation on how a user is able to onboard and purchase crypto in the wallet. + - type: input + id: wallet_fiat_withdrawals + attributes: + label: Does the wallet support withdrawals to fiat? + description: an a user cash out their crypto assets directly to a card or bank account? Please provide documentation. From 1246f99157abc30b27e9e05386e0a893d08bc648 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 16:34:14 -0600 Subject: [PATCH 104/298] smart contract form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 0c0595296ec..636b210bb29 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -243,3 +243,17 @@ body: attributes: label: Does the wallet support withdrawals to fiat? description: an a user cash out their crypto assets directly to a card or bank account? Please provide documentation. + - type: markdown + id: smart_contract + attributes: + value: "## Smart contract" + - type: input + id: wallet_multi_signature + attributes: + label: Is the wallet a multi-signature wallet? + description: Please provide documentation on how users set up and use the multisig functionality for the wallet. + - type: input + id: wallet_social_recovery + attributes: + label: Does the wallet support social recovery? + description: Please provide documentation on how users set up guardians and use social recovery for the wallet. From 1a52f3985938e89c81165fb319b917c46a418759 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 16:37:28 -0600 Subject: [PATCH 105/298] support form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 636b210bb29..46cf0296836 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -257,3 +257,26 @@ body: attributes: label: Does the wallet support social recovery? description: Please provide documentation on how users set up guardians and use social recovery for the wallet. + - type: markdown + id: support + attributes: + value: "## Support" + - type: textarea + id: wallet_contact + attributes: + label: Who can the ethereum.org team can contact regarding the wallet in future? + description: | + If possible, provide a Telegram, Discord, or Twitter username. + Please note that as a result of any future dispute the wallet may be temporarily removed from ethereum.org. Having a contact person allows lets us avoid this situation and resolve issues more quickly. + - type: textarea + id: wallet_support_team + attributes: + label: Does the wallet have a dedicated support team? + description: | + Where should we send users that are having issues? + How fast is the support? + - type: textarea + id: wallet_educational_resources + attributes: + label: What educational resources/documentation do you provide to users? + description: Please provide links to developer documentation, user documentation, and/or educational resources. From 08de2bc8c545217cb771f313581e089891155de4 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 26 May 2022 16:38:40 -0600 Subject: [PATCH 106/298] extra form --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 46cf0296836..ed051c406c4 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -280,3 +280,12 @@ body: attributes: label: What educational resources/documentation do you provide to users? description: Please provide links to developer documentation, user documentation, and/or educational resources. + - type: markdown + id: extra + attributes: + value: "## Extra" + - type: textarea + id: wallet_extra + attributes: + label: Does the wallet have any integrated tools not mentioned above? + description: Please provide any information about extra features this wallet has that we may have missed in the above criteria. (e.g. privacy features, transaction batching, etc). From b170e51f6803c8048a8776ff12b4531d8a253cc3 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 27 May 2022 12:16:17 +0100 Subject: [PATCH 107/298] add more links --- .../get-involved/open-research/index.md | 56 +++++++++++-------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 62daa3b1ec4..72da1a9421b 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -27,8 +27,12 @@ There are now several Layer 2 protocols that scale Ethereum using different tech [EthHub Layer-2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) +[Polynya: Rollups, DA and modular chains](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) + #### Recent research +[Arbitrum's fair-ordering for sequencers](https://eprint.iacr.org/2020/269.pdf) + [ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) @@ -44,6 +48,8 @@ One particular area of layer 2 that requires more research and development is sa [Blockchain Bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) +[L2Beat](https://l2beat.com/) + #### Recent research [Validating bridges](https://stonecoldpat.github.io/images/validatingbridges.pdf) @@ -67,6 +73,10 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Recent research +[EIP-4844](https://github.com/ethereum/EIPs/pull/5088) + +[Vitalik on sharding and data availability sampling](https://hackmd.io/@vbuterin/sharding_proposal) + ### Hardware @@ -79,6 +89,7 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Recent research +[ecdsa on FGPAs](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) ## Security @@ -172,7 +183,7 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e ### PoS incentives -When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this +When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this determines the security of the network. Sophisticated validators may be able to exploit the nuances of the incentive layer to theior own advantage by extracting MEV or launching explicit attacks. #### Background reading @@ -180,10 +191,16 @@ When Ethereum transitions to proof of stake, its native asset (ether) will be us #### Recent research +[Vitalik on PBS](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ#Hybrid-PBS-can-we-use-proposers-only-for-inclusion-of-last-resort) + +[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) + +[Low-cost attacks on Ethereum 2.0 by sub 1/3 stakeholders](https://arxiv.org/abs/2102.02247) + ### Liquid staking and derivatives -Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks, ) +Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks). #### Background reading @@ -192,6 +209,9 @@ Liquid staking allows users with less than 32 ETH to receive staking yields by s #### Recent research +[Handling withdrawals from Lido](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-staking-protocol/8873) + +[Withdrawal credentials](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) ### DeFi @@ -206,6 +226,10 @@ Decentralized finance (DeFi) is one of the primary classes of application built #### Recent research +[Decentralized finance, centralized ownership?](https://arxiv.org/pdf/2012.09306.pdf) + +[Optimism: The road to sub-dollar transactions](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) + ### Fee markets Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user user-experience is an ongoing challenge that requires further research and development. @@ -216,17 +240,11 @@ Ethereum transaction fees protect the network from spam, denial-of-service attac #### Recent research +[EIP-4396](https://eips.ethereum.org/EIPS/eip-4396) -### Taxation and accounting - -Crypto taxation is a complicated issue that likely requires a software solution. There are some nascent crypto accounting project but this area requires much more attention. - -#### Background reading - -#### Recent research - -[Example of taxation and accounting research: Cumming et al. 2019](https://www.mdpi.com/1911-8074/12/3/126) +[Multidimensional EIP-1559](https://ethresear.ch/t/multidimensional-eip-1559/11651) +[Making EIP-1559 more like an AMM curve](https://ethresear.ch/t/make-eip-1559-more-like-an-amm-curve/9082) ## Clients and protocol research @@ -261,10 +279,6 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe [Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) -[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) - -[Low-cost attacks on Ethereum 2.0 by sub 1/3 stakeholders](https://arxiv.org/abs/2102.02247) - [Availability/Finality dilemma](https://arxiv.org/abs/2009.04987) [Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) @@ -328,6 +342,8 @@ There is a need for more data analysis tools and dashboards that give detailed i #### Recent research + + ## Apps and tooling ### DAOs @@ -355,6 +371,7 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res #### Recent research +[Eth R&D Discord Consensus Tooling channel](https://discordapp.com/channels/595666850260713488/746343380900118528) ### App security @@ -377,13 +394,4 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra #### Recent research - -### Composability - -Composability is the ability for different apps to work in parallel or on top of one another so that users are not locked-in to specific protocols. This is something that requires best-practices in interoperability and data standards. This is an area that would benefit from more ongoing research and development. - -#### Background reading - [Smart contract composability](https://ethereum.org/en/developers/docs/smart-contracts/composability/) - -#### Recent research From 2d60db55ae34d791c68f395972fd8720e27d7e5b Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Fri, 27 May 2022 12:23:27 +0100 Subject: [PATCH 108/298] add links to app security section --- src/content/community/get-involved/open-research/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 72da1a9421b..b55dd44156c 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -379,6 +379,12 @@ Hacks on Ethereum nearly always exploit vulnerabilities in individual applicatio #### Background reading +[Wormhole exploit report](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) + +[List of Ethereum contract hack post-mortems](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) + +[Rekt News](https://twitter.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) + #### Recent research [ethresear.ch Applications](https://ethresear.ch/c/applications/18) From fee2a8248ae671b0315bbda1a8c84d5787b5907c Mon Sep 17 00:00:00 2001 From: PatrickAlphac <54278053+PatrickAlphaC@users.noreply.github.com> Date: Fri, 27 May 2022 08:03:55 -0400 Subject: [PATCH 109/298] added patrick mega course & a few others --- src/data/externalTutorials.json | 144 ++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/src/data/externalTutorials.json b/src/data/externalTutorials.json index f08fa90770e..82d3d3ad250 100644 --- a/src/data/externalTutorials.json +++ b/src/data/externalTutorials.json @@ -1,4 +1,46 @@ [ + { + "url": "https://www.youtube.com/watch?v=gyMwXuJrbJQ", + "title": "Learn Blockchain, Solidity, and Full Stack Web3 Development with JavaScript ", + "description": "This course will give you a full introduction into all of the core concepts related to blockchain, smart contracts, Solidity, ERC20s, full-stack Web3 dapps, decentralized finance (DeFi), JavaScript, TypeScript, Chainlink, Ethereum, upgradable smart contracts, DAOs, the graph, moralis, aave, IPFS, and more. Follow along with the videos and you'll be a blockchain wizard in no time! ", + "author": "Patrick Collins", + "authorGithub": "https://github.com/PatrickAlphaC", + "tags": [ + "solidity", + "hardhat", + "ethersjs", + "smart contracts", + "react", + "nextjs", + "blockchain", + "video", + "IPFS", + "oracles", + "NFT", + "ERC-20", + "upgrades", + "javascript", + "mocking", + "testing", + "Aave", + "chainlink", + "openzeppelin", + "slither", + "echidna", + "filecoin", + "web3uikit", + "moralis", + "alchemy", + "the graph", + "pinata", + "metamask", + "etherscan" + ], + "skillLevel": "beginner", + "timeToRead": "1920", + "lang": "en", + "publishDate": "05/26/2022" + }, { "url": "https://www.youtube.com/watch?v=M576WGiDBdQ", "title": "Solidity, Blockchain, and Smart Contract Course", @@ -30,6 +72,108 @@ "lang": "en", "publishDate": "09/09/2021" }, + { + "url": "https://www.youtube.com/watch?v=fNMfMxGxeag", + "title": "Introduction to Foundry", + "description": "We build a minimal foundry project using a staking application. Showing you how to work with foundry. ", + "author": "Patrick Collins", + "authorGithub": "https://github.com/PatrickAlphaC", + "tags": ["solidity", "foundry", "bash", "video"], + "skillLevel": "beginner", + "timeToRead": "19", + "lang": "en", + "publishDate": "03/28/2022" + }, + { + "url": "https://www.youtube.com/watch?v=pdsYCkUWrgQ", + "title": "How to Connect your Smart Contracts to Metamask | Full Stack Web3", + "description": "We learn exactly how web3 / blockchain / smart contract applications work in the front end using HTML and Javascript. We then go through 6 different ways you can connect your Metamask, Phantom, or other blockchain wallet address to your front end. We’ll look at popular Nextjs / React packages to make your development lifecycle 100 times easier. ", + "author": "Patrick Collins", + "authorGithub": "https://github.com/PatrickAlphaC", + "tags": [ + "solidity", + "javascript", + "hardhat", + "metamask", + "html", + "nextjs", + "reactjs", + "moralis", + "web3modal", + "web3-react", + "ethersjs", + "usedapp", + "video" + ], + "skillLevel": "beginner", + "timeToRead": "70", + "lang": "en", + "publishDate": "02/11/2022" + }, + { + "url": "https://www.youtube.com/watch?v=pdsYCkUWrgQ", + "title": "How to build an on-chain DAO", + "description": "Using Compound and Openzeppelin as a basis, we build a 100% on-chain DAO using an ERC20 governance token for votes. ", + "author": "Patrick Collins", + "authorGithub": "https://github.com/PatrickAlphaC", + "tags": [ + "solidity", + "typescript", + "hardhat", + "compound", + "dao", + "governance", + "video" + ], + "skillLevel": "beginner", + "timeToRead": "86", + "lang": "en", + "publishDate": "03/04/2022" + }, + { + "url": "https://betterprogramming.pub/how-to-code-an-on-chain-dao-e525e13a57be", + "title": "How to build an on-chain DAO", + "description": "Using Compound and Openzeppelin as a basis, we build a 100% on-chain DAO using an ERC20 governance token for votes. ", + "author": "Patrick Collins", + "authorGithub": "https://github.com/PatrickAlphaC", + "tags": [ + "solidity", + "typescript", + "hardhat", + "compound", + "dao", + "governance" + ], + "skillLevel": "beginner", + "timeToRead": "6", + "lang": "en", + "publishDate": "02/24/2022" + }, + { + "url": "https://betterprogramming.pub/everything-you-need-to-know-about-fullstack-web3-94c0f1b18019", + "title": "Full Stack Web3 — Everything You Need to Know", + "description": "We learn exactly how web3 / blockchain / smart contract applications work in the front end using HTML and Javascript. We then go through 6 different ways you can connect your Metamask, Phantom, or other blockchain wallet address to your front end. We’ll look at popular Nextjs / React packages to make your development lifecycle 100 times easier. ", + "author": "Patrick Collins", + "authorGithub": "https://github.com/PatrickAlphaC", + "tags": [ + "solidity", + "javascript", + "hardhat", + "metamask", + "html", + "nextjs", + "reactjs", + "moralis", + "web3modal", + "web3-react", + "ethersjs", + "usedapp" + ], + "skillLevel": "beginner", + "timeToRead": "14", + "lang": "en", + "publishDate": "02/07/2022" + }, { "url": "https://www.youtube.com/watch?v=e1N4aWIJMN0", "title": "How to become a blockchain engineer", From 3a7a2b0092553141cbae0b2e38df8d5346731e95 Mon Sep 17 00:00:00 2001 From: Paul Cowgill Date: Fri, 27 May 2022 09:56:15 -0500 Subject: [PATCH 110/298] Add Chicago --- src/data/community-meetups.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/data/community-meetups.json b/src/data/community-meetups.json index 1405c618b38..7d494b72d56 100644 --- a/src/data/community-meetups.json +++ b/src/data/community-meetups.json @@ -274,5 +274,11 @@ "emoji": ":poland:", "location": "Warsaw", "link": "https://www.meetup.com/ethwarsaw-meetup/" + }, + { + "title": "Chicago Ethereum Meetup", + "emoji": ":us:", + "location": "Chicago", + "link": "https://www.meetup.com/Chicago-Ethereum-Meetup/" } ] From 02e79d481db9e154e3fdfbb776ab5bdecf9128be Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Fri, 27 May 2022 14:01:24 -0300 Subject: [PATCH 111/298] Update docs/typescript.md Co-authored-by: Sam Richards --- docs/typescript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/typescript.md b/docs/typescript.md index 6ba6ffc5c41..0fb0feda6ee 100644 --- a/docs/typescript.md +++ b/docs/typescript.md @@ -85,7 +85,7 @@ With the release of Gatsby v4.15.0, [the config option `graphqlTypegen` has been - Once you have that file created, a global `Queries` variable will be available which will contain all the query types. - More information about how this works https://www.gatsbyjs.com/docs/how-to/local-development/graphql-typegen/ -## Other resources +## Learning resources - [Official Gatsby Typescript guide](https://www.gatsbyjs.com/docs/how-to/custom-configuration/typescript/) - [Official Typescript website](https://www.typescriptlang.org/) From 5110f2946ca221e4c2bc41225b09b9d6b8347f1c Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Fri, 27 May 2022 14:42:24 -0300 Subject: [PATCH 112/298] mention epic issue --- docs/typescript.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/typescript.md b/docs/typescript.md index 0fb0feda6ee..64b5c8c2bc0 100644 --- a/docs/typescript.md +++ b/docs/typescript.md @@ -1,5 +1,7 @@ # Typescript +Our codebase is rapidly increasing in size and in contributors. This brings challenges to reliably keep the code organized, avoid code duplication, and review code. To help alleviate these challenges, we’re in the process of to TypeScript across our codebase. We believe having a strongly typed language will reduce bugs, improve code quality, increase productivity and allow us to scale (both our codebase and our developer community) better in the long term. + ## General considerations As we are progressively migrating the entire codebase to TS, we will have a mix of `.js` and `.ts` files in the process. For this reason and to make the migration easier for beginners, we have disabled the [`noImplicitAny`](https://www.typescriptlang.org/tsconfig#noImplicitAny) option from our `tsconfig.json` which means that you can use the `any` type and you will not get an error from that. @@ -9,9 +11,12 @@ This is just starting, any suggestion is always welcomed and appreciated. ## Migration guide & contribution opportunity 🎉 -1. Run `yarn start` to generate the `src/gatsby-types.d.ts` file. More on this in the "GraphQL Typegen" section. -2. Convert the js file into a `.ts` or `.tsx` file in case the file includes some jsx in it. -3. Try to follow one already migrated file similar to the one you are migrating. +We'd love your help in migrating our codebase! + +1. Visit the [Typescript Migration Issue](https://github.com/ethereum/ethereum-org-website/issues/6392) and make a comment to get assigned to a file from the complete list of pending files to be migrated. +2. Run `yarn start` to generate the `src/gatsby-types.d.ts` file. More on this in the "GraphQL Typegen" section. +3. Convert the js file into a `.ts` or `.tsx` file in case the file includes some jsx in it. +4. Try to follow one already migrated file similar to the one you are migrating. - For `pages`, @@ -74,7 +79,7 @@ This is just starting, any suggestion is always welcomed and appreciated. } ``` -4. Try to avoid as much as possible the usage of `any` :) +5. Try to avoid as much as possible the usage of `any` :) ## GraphQL Typegen From 4f32d857dad58bca03311f5d33256d614a03cdf6 Mon Sep 17 00:00:00 2001 From: Joshua <30259508@cityofglacol.ac.uk> Date: Fri, 27 May 2022 18:54:20 +0100 Subject: [PATCH 113/298] Refactor Card component to TS --- src/components/{Card.js => Card.tsx} | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) rename src/components/{Card.js => Card.tsx} (77%) diff --git a/src/components/Card.js b/src/components/Card.tsx similarity index 77% rename from src/components/Card.js rename to src/components/Card.tsx index b43698cc8c0..9d7b325dd19 100644 --- a/src/components/Card.js +++ b/src/components/Card.tsx @@ -17,7 +17,20 @@ const Description = styled.p` const TopContent = styled.div`` -const Card = ({ emoji, title, description, children, className }) => ( +interface IProps { + emoji?: string + title: string + description: string + className?: string +} + +const Card: React.FC = ({ + emoji, + title, + description, + children, + className, +}) => ( {emoji && } From 045c3ada3b7285283206dd76e68cf13b65d19e45 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Fri, 27 May 2022 15:09:40 -0300 Subject: [PATCH 114/298] add suggestion to use yarn type-check --- docs/typescript.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/typescript.md b/docs/typescript.md index 64b5c8c2bc0..474bbe3217b 100644 --- a/docs/typescript.md +++ b/docs/typescript.md @@ -80,6 +80,7 @@ We'd love your help in migrating our codebase! ``` 5. Try to avoid as much as possible the usage of `any` :) +6. Run `yarn type-check` to check if everything looks good and nothing else broke. ## GraphQL Typegen From 3c1d3d8c42f8080c26b463507fd9595dd09f3a1b Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 27 May 2022 19:17:24 +0100 Subject: [PATCH 115/298] export interface Co-authored-by: Pablo Pettinari --- src/components/Card.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Card.tsx b/src/components/Card.tsx index 9d7b325dd19..ed3336950e4 100644 --- a/src/components/Card.tsx +++ b/src/components/Card.tsx @@ -17,7 +17,7 @@ const Description = styled.p` const TopContent = styled.div`` -interface IProps { +export interface IProps { emoji?: string title: string description: string From 0ff95e48abb8bc7a5a9f980c8284b66ce5e3a06c Mon Sep 17 00:00:00 2001 From: beechainfullstack <79773128+beechainfullstack@users.noreply.github.com> Date: Fri, 27 May 2022 13:54:58 -0700 Subject: [PATCH 116/298] Added/Edited Dystopia Labs Community Events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit edited: ETH Seattle from hackathon to summit added: ETH Seoul, HackSummit('SF'), DeFi Bogotá --- src/data/community-events.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index dfce4cf08ef..15ec68043ce 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -229,7 +229,7 @@ "to": "https://2022.ethseattle.org/", "sponsor": null, "location": "Seattle, USA", - "description": "ETHSeattle is a hackathon in Seattle, USA.", + "description": "ETHSeattle is an Ethereum summit in Seattle, USA.", "startDate": "2022-07-08", "endDate": "2022-07-08" }, @@ -269,6 +269,15 @@ "startDate": "2022-07-19", "endDate": "2022-07-21" }, + { + "title": "ETHSeoul", + "to": "https://2022.ethseoul.org/", + "sponsor": null, + "location": "Seoul, South Korea", + "description": "Join Seoul's first Ethereum Hackathon & Summit hosted by KryptoSeoul & Dystopia Labs", + "startDate": "2022-08-05", + "endDate": "2022-08-13" + }, { "title": "ETHLatam", "to": "https://twitter.com/ethlatam", @@ -296,6 +305,15 @@ "startDate": "2022-08-27", "endDate": "2022-08-28" }, + { + "title": "Hack.Summit('SF')", + "to": "https://sf.hacksummit.org/", + "sponsor": null, + "location": "San Francisco, California", + "description": "Hack.Summit('SF') is a 2-day blockchain summit hosted by Hack.VC & Dystopia Labs", + "startDate": "2022-08-27", + "endDate": "2022-08-28" + }, { "title": "Stanford SBC", "to": "https://cbr.stanford.edu/sbc22/", @@ -332,6 +350,15 @@ "startDate": "2022-10-07", "endDate": "2022-10-09" }, + { + "title": "DeFi Bogotá", + "to": "https://2022.defibogota.org/", + "sponsor": null, + "location": "Bogotá, Colombia", + "description": "DeFi Bogotá is a DeFi-focused summit in Colombia.", + "startDate": "2022-10-10", + "endDate": "2022-10-10" + }, { "title": "Devcon", "to": "https://devcon.org/", From 674f0318d5fc45f3feb802cf0b98ab32bab815ed Mon Sep 17 00:00:00 2001 From: Jhonny Vianello <62344609+jhonnyvianello@users.noreply.github.com> Date: Sat, 28 May 2022 23:18:23 +0200 Subject: [PATCH 117/298] Fix a date and add a new event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed date of HackFS event and added ETHVenice event 🎆 I attach the links here of the official events sites. HackFS : https://hackfs.ethglobal.com/ ETHVenice : https://ethvenice.com/ --- src/data/community-events.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index dfce4cf08ef..dc71a9559f9 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -239,8 +239,17 @@ "sponsor": null, "location": "Remote", "description": "ETHGlobal returns with their 3rd iteration of HackFS, a global celebration of storage, data, and building data-full decentralized applications.", - "startDate": "2022-07-01", - "endDate": "2022-07-31" + "startDate": "2022-07-08", + "endDate": "2022-07-29" + }, + { + "title": "ETHVenice", + "to": "https://ethvenice.com/", + "sponsor": null, + "location": "Venice, Italy", + "description": "ETHVenice is an Italian Ethereum Event and Hackathon, simultaneously with The Feast of the Redeemer in Venice.", + "startDate": "2022-07-11", + "endDate": "2022-07-17" }, { "title": "Metaverse Summit", From 70e8ca0c60ccddff0fee4d0268f86c5dcba2bb6e Mon Sep 17 00:00:00 2001 From: avcdsld Date: Sun, 29 May 2022 22:15:05 +0900 Subject: [PATCH 118/298] add `hyphens` settings to tables to prevent layout corruption on small screens --- src/styles/layout.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/styles/layout.css b/src/styles/layout.css index bfb71166db9..40e131c7bfc 100644 --- a/src/styles/layout.css +++ b/src/styles/layout.css @@ -419,6 +419,10 @@ table { border-collapse: collapse; width: 100%; } +th, +td { + hyphens: auto; +} fieldset { margin-left: 0; margin-right: 0; From b4545fdf5793f796b996eedd32e49f9a21aea528 Mon Sep 17 00:00:00 2001 From: skaunov <65976143+skaunov@users.noreply.github.com> Date: Sun, 29 May 2022 18:49:29 +0300 Subject: [PATCH 119/298] Update index.md minor updates to smooth following along the example --- src/content/developers/docs/apis/json-rpc/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/apis/json-rpc/index.md b/src/content/developers/docs/apis/json-rpc/index.md index 336d9088904..22903da58db 100755 --- a/src/content/developers/docs/apis/json-rpc/index.md +++ b/src/content/developers/docs/apis/json-rpc/index.md @@ -117,7 +117,7 @@ web3.fromWei("0x1639e49bba16280000", "ether") // "410" ``` -Now that there is some ether on our private development chain, we can deploy the contract. The first step is to compile the Multiply7 contract to byte code that can be sent to the EVM. To install solc, the Solidity compiler, follow the [Solidity documentation]. +Now that there is some ether on our private development chain, we can deploy the contract. The first step is to compile the Multiply7 contract to byte code that can be sent to the EVM. To install solc, the Solidity compiler, follow the [Solidity documentation](https://docs.soliditylang.org/en/latest/installing-solidity.html). (You might want to use an older `solc` release to match [the version of compiler used for our example](https://github.com/ethereum/solidity/releases/tag/v0.4.20).) The next step is to compile the Multiply7 contract to byte code that can be send to the EVM. @@ -163,8 +163,8 @@ In this example we will be sending a transaction using `eth_sendTransaction` to The bytes of the payload defines which method in the contract is called. This is the first 4 bytes from the Keccak hash over the function name and its argument types, hex encoded. The multiply function accepts an uint which is an alias for uint256. This leaves us with: ```javascript -web3.sha3("multiply(uint256)").substring(0, 8) -// "c6888fa1" +web3.sha3("multiply(uint256)").substring(0, 10) +// "0xc6888fa1" ``` The next step is to encode the arguments. There is only one uint256, say, the value 6. The ABI has a section which specifies how to encode uint256 types. @@ -178,7 +178,7 @@ Combining the function selector and the encoded argument our data will be `0xc68 This can now be sent to the node: ```bash -curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' localhost:8545 +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 {"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} ``` From 9c6fd2c1de597ffed2473d1ddac01266c3e0f27e Mon Sep 17 00:00:00 2001 From: Ikko Ashimine Date: Mon, 30 May 2022 02:35:07 +0900 Subject: [PATCH 120/298] Fix typo in erc-4626/index.md addres -> address Github -> GitHub --- .../developers/docs/standards/tokens/erc-4626/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/standards/tokens/erc-4626/index.md b/src/content/developers/docs/standards/tokens/erc-4626/index.md index a7d06cf622f..0ddf2dc706a 100644 --- a/src/content/developers/docs/standards/tokens/erc-4626/index.md +++ b/src/content/developers/docs/standards/tokens/erc-4626/index.md @@ -110,7 +110,7 @@ The decimal scalar for vault shares and operations involving `exchangeRate()`. **MUST** be emitted when tokens are deposited into the vault ```solidity -event Deposit(address indexed _from, addres indexed _to, uint256 _value) +event Deposit(address indexed _from, address indexed _to, uint256 _value) ``` Where `_from` is the user who triggered the deposit and approved `_value` underlying tokens to the vault, and `_to` is the user who can withdraw the deposited tokens. @@ -128,4 +128,4 @@ _Note_: All batch functions, including the hook, are also available in non-batch ## Further reading {#further-reading} - [EIP-4626: Tokenized vault Standard](https://eips.ethereum.org/EIPS/eip-4626) -- [ERC-4626: Github Repo](https://github.com/Rari-Capital/solmate/blob/main/src/mixins/ERC4626.sol) +- [ERC-4626: GitHub Repo](https://github.com/Rari-Capital/solmate/blob/main/src/mixins/ERC4626.sol) From 9294e820f04e55c809e304fd6c7999e559ea2e20 Mon Sep 17 00:00:00 2001 From: Hursit Tarcan <75273616+hursittarcan@users.noreply.github.com> Date: Sun, 29 May 2022 22:12:18 +0200 Subject: [PATCH 121/298] Update index.md --- src/content/community/get-involved/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/get-involved/index.md b/src/content/community/get-involved/index.md index 51e3a8e44ce..c92826fef6d 100644 --- a/src/content/community/get-involved/index.md +++ b/src/content/community/get-involved/index.md @@ -101,7 +101,7 @@ The Ethereum ecosystem is on a mission to fund public goods and impactful projec "DAOs" are decentralized autonomous organizations. These groups leverage Ethereum technology to facilitate organization and collaboration. For instance, for controlling membership, voting on proposals, or managing pooled assets. While DAOs are still experimental, they offer opportunities for you to find groups that you identify with, find collaborators, and grow your impact on the Ethereum community. [More on DAOs](/dao/) -- [DAOSquare](https://www.daosquare.io) [@DAOSquare](https://twitter.com/DAOSquare) - _Promote the DAO concept in non-tech field and help people create value through DAO._ +- [DAOSquare](https://www.daosquare.io) [@DAOSquare](https://twitter.com/DAOSquare) - _Promote the DAO concept in non-tech field and help people create value through DAO_ - [Developer DAO](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _Community of builders who believe in collective ownership of the internet_ - [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _Freelancer Web3 development collective working as a DAO_ - [DXdao](https://DXdao.eth.link/) [@DXdao](https://twitter.com/DXdao_) - _Decentralized development & governance of dApps & protocols_ From ca41ec0e41999a8a400a2d6a7572198056f03943 Mon Sep 17 00:00:00 2001 From: Nico Date: Mon, 30 May 2022 06:26:38 +0900 Subject: [PATCH 122/298] migrate YouTube component to Typescript --- src/components/{YouTube.js => YouTube.tsx} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/components/{YouTube.js => YouTube.tsx} (96%) diff --git a/src/components/YouTube.js b/src/components/YouTube.tsx similarity index 96% rename from src/components/YouTube.js rename to src/components/YouTube.tsx index bd01d37901d..2ac3266b568 100644 --- a/src/components/YouTube.js +++ b/src/components/YouTube.tsx @@ -25,7 +25,7 @@ const YouTube = ({ id, start, title }) => { width="100%" height="315" src={src} - frameborder="0" + frameBorder="0" title={title || "YouTube"} allow=" accelerometer; @@ -34,7 +34,7 @@ const YouTube = ({ id, start, title }) => { encrypted-media; gyroscope; picture-in-picture" - allowfullscreen + allowFullScreen > ) From 7c50c4f229cf68d67f4c2abdfce2cac67371c554 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 29 May 2022 19:43:53 -0400 Subject: [PATCH 123/298] Migrate src/data/addresses.js --- src/data/{addresses.js => addresses.ts} | 0 src/pages/staking/deposit-contract.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/data/{addresses.js => addresses.ts} (100%) diff --git a/src/data/addresses.js b/src/data/addresses.ts similarity index 100% rename from src/data/addresses.js rename to src/data/addresses.ts diff --git a/src/pages/staking/deposit-contract.js b/src/pages/staking/deposit-contract.js index 415c45f0847..25b4e322697 100644 --- a/src/pages/staking/deposit-contract.js +++ b/src/pages/staking/deposit-contract.js @@ -21,7 +21,7 @@ import { ButtonSecondary, FakeLink, } from "../../components/SharedStyledComponents" -import { DEPOSIT_CONTRACT_ADDRESS } from "../../data/addresses.js" +import { DEPOSIT_CONTRACT_ADDRESS } from "../../data/addresses" import { translateMessageId } from "../../utils/translations" const Page = styled.div` From 588ef0cf4d91c7bfa612cfc633067afe2dc88445 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 29 May 2022 19:46:36 -0400 Subject: [PATCH 124/298] Migrate src/data/eth-upgrade-articles.js --- src/data/{eth-upgrade-articles.js => eth-upgrade-articles.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/data/{eth-upgrade-articles.js => eth-upgrade-articles.ts} (100%) diff --git a/src/data/eth-upgrade-articles.js b/src/data/eth-upgrade-articles.ts similarity index 100% rename from src/data/eth-upgrade-articles.js rename to src/data/eth-upgrade-articles.ts From e5914c4bc430b7970bde47befd9fdfbd934886f4 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 29 May 2022 19:56:04 -0400 Subject: [PATCH 125/298] Migrate src/api js files to ts --- src/api/{etherscan.js => etherscan.ts} | 7 ++++++- src/api/{etherscanBlock.js => etherscanBlock.ts} | 7 ++++++- src/api/{l2beat.js => l2beat.ts} | 7 ++++++- src/api/{roadmap.js => roadmap.ts} | 7 ++++++- src/api/{translations.js => translations.ts} | 7 ++++++- src/api/{txs.js => txs.ts} | 7 ++++++- 6 files changed, 36 insertions(+), 6 deletions(-) rename src/api/{etherscan.js => etherscan.ts} (65%) rename src/api/{etherscanBlock.js => etherscanBlock.ts} (65%) rename src/api/{l2beat.js => l2beat.ts} (63%) rename src/api/{roadmap.js => roadmap.ts} (65%) rename src/api/{translations.js => translations.ts} (65%) rename src/api/{txs.js => txs.ts} (65%) diff --git a/src/api/etherscan.js b/src/api/etherscan.ts similarity index 65% rename from src/api/etherscan.js rename to src/api/etherscan.ts index 4fd1f3ddaf9..9e9b5ee0a44 100644 --- a/src/api/etherscan.js +++ b/src/api/etherscan.ts @@ -1,6 +1,11 @@ +import { GatsbyFunctionRequest, GatsbyFunctionResponse } from "gatsby" + import { lambda } from "../lambda/etherscan" -async function handler(__req, res) { +async function handler( + __req: GatsbyFunctionRequest, + res: GatsbyFunctionResponse +) { // passing env vars as arguments due to a bug on GC functions where env vars // can not be accessed by imported functions const { statusCode, body } = await lambda(process.env.ETHERSCAN_API_KEY) diff --git a/src/api/etherscanBlock.js b/src/api/etherscanBlock.ts similarity index 65% rename from src/api/etherscanBlock.js rename to src/api/etherscanBlock.ts index 5e7db9ef8cc..79fa3fb5295 100644 --- a/src/api/etherscanBlock.js +++ b/src/api/etherscanBlock.ts @@ -1,6 +1,11 @@ +import { GatsbyFunctionRequest, GatsbyFunctionResponse } from "gatsby" + import { lambda } from "../lambda/etherscanBlock" -async function handler(__req, res) { +async function handler( + __req: GatsbyFunctionRequest, + res: GatsbyFunctionResponse +) { // passing env vars as arguments due to a bug on GC functions where env vars // can not be accessed by imported functions const { statusCode, body } = await lambda(process.env.ETHERSCAN_API_KEY) diff --git a/src/api/l2beat.js b/src/api/l2beat.ts similarity index 63% rename from src/api/l2beat.js rename to src/api/l2beat.ts index 0f345c32ea6..eaa78d58c3a 100644 --- a/src/api/l2beat.js +++ b/src/api/l2beat.ts @@ -1,6 +1,11 @@ +import { GatsbyFunctionRequest, GatsbyFunctionResponse } from "gatsby" + import { lambda } from "../lambda/l2beat" -async function handler(__req, res) { +async function handler( + __req: GatsbyFunctionRequest, + res: GatsbyFunctionResponse +) { // passing env vars as arguments due to a bug on GC functions where env vars // can not be accessed by imported functions const { statusCode, body } = await lambda() diff --git a/src/api/roadmap.js b/src/api/roadmap.ts similarity index 65% rename from src/api/roadmap.js rename to src/api/roadmap.ts index 9e713827dcf..2180c4e29c7 100644 --- a/src/api/roadmap.js +++ b/src/api/roadmap.ts @@ -1,6 +1,11 @@ +import { GatsbyFunctionRequest, GatsbyFunctionResponse } from "gatsby" + import { lambda } from "../lambda/roadmap" -async function handler(__req, res) { +async function handler( + __req: GatsbyFunctionRequest, + res: GatsbyFunctionResponse +) { // passing env vars as arguments due to a bug on GC functions where env vars // can not be accessed by imported functions const { statusCode, body } = await lambda(process.env.GITHUB_TOKEN) diff --git a/src/api/translations.js b/src/api/translations.ts similarity index 65% rename from src/api/translations.js rename to src/api/translations.ts index 2f38e363b0c..116f3e0ecc3 100644 --- a/src/api/translations.js +++ b/src/api/translations.ts @@ -1,6 +1,11 @@ +import { GatsbyFunctionRequest, GatsbyFunctionResponse } from "gatsby" + import { lambda } from "../lambda/translations" -async function handler(__req, res) { +async function handler( + __req: GatsbyFunctionRequest, + res: GatsbyFunctionResponse +) { // passing env vars as arguments due to a bug on GC functions where env vars // can not be accessed by imported functions const { statusCode, body } = await lambda(process.env.CROWDIN_API_KEY) diff --git a/src/api/txs.js b/src/api/txs.ts similarity index 65% rename from src/api/txs.js rename to src/api/txs.ts index 085dd6e8320..49aa0224928 100644 --- a/src/api/txs.js +++ b/src/api/txs.ts @@ -1,6 +1,11 @@ +import { GatsbyFunctionRequest, GatsbyFunctionResponse } from "gatsby" + import { lambda } from "../lambda/txs" -async function handler(__req, res) { +async function handler( + __req: GatsbyFunctionRequest, + res: GatsbyFunctionResponse +) { // passing env vars as arguments due to a bug on GC functions where env vars // can not be accessed by imported functions const { statusCode, body } = await lambda(process.env.ETHERSCAN_API_KEY) From e0ad89dede99665a114b1002639f8afc4a432acb Mon Sep 17 00:00:00 2001 From: William Date: Sun, 29 May 2022 20:34:09 -0400 Subject: [PATCH 126/298] Migrate the rest of src/lambda --- src/lambda/{etherscan.js => etherscan.ts} | 11 ++++++++--- .../{etherscanBlock.js => etherscanBlock.ts} | 11 ++++++++--- src/lambda/{l2beat.js => l2beat.ts} | 13 +++++++++---- src/lambda/{roadmap.js => roadmap.ts} | 16 ++++++++++------ ...translation-build.js => translation-build.ts} | 0 src/lambda/{translations.js => translations.ts} | 14 ++++++++------ src/lambda/{txs.js => txs.ts} | 13 +++++++++---- 7 files changed, 52 insertions(+), 26 deletions(-) rename src/lambda/{etherscan.js => etherscan.ts} (75%) rename src/lambda/{etherscanBlock.js => etherscanBlock.ts} (68%) rename src/lambda/{l2beat.js => l2beat.ts} (60%) rename src/lambda/{roadmap.js => roadmap.ts} (64%) rename src/lambda/{translation-build.js => translation-build.ts} (100%) rename src/lambda/{translations.js => translations.ts} (60%) rename src/lambda/{txs.js => txs.ts} (73%) diff --git a/src/lambda/etherscan.js b/src/lambda/etherscan.ts similarity index 75% rename from src/lambda/etherscan.js rename to src/lambda/etherscan.ts index 3002ac08226..b10d7dc9642 100644 --- a/src/lambda/etherscan.js +++ b/src/lambda/etherscan.ts @@ -1,6 +1,8 @@ -const axios = require("axios") +import axios from "axios" -const lambda = async (apiKey) => { +import type { HandlerResponse } from "@netlify/functions" + +const lambda = async (apiKey: string | undefined): Promise => { const daysToFetch = 90 const now = new Date() const endDate = now.toISOString().split("T")[0] // YYYY-MM-DD @@ -18,7 +20,10 @@ const lambda = async (apiKey) => { return { statusCode: 200, body: JSON.stringify(data) } } catch (error) { console.error(error) - return { statusCode: 500, body: JSON.stringify({ msg: error.message }) } + return { + statusCode: 500, + body: JSON.stringify({ msg: (error as Error).message }), + } } } diff --git a/src/lambda/etherscanBlock.js b/src/lambda/etherscanBlock.ts similarity index 68% rename from src/lambda/etherscanBlock.js rename to src/lambda/etherscanBlock.ts index 7070be60d65..aeb15bbb3ea 100644 --- a/src/lambda/etherscanBlock.js +++ b/src/lambda/etherscanBlock.ts @@ -1,6 +1,8 @@ -const axios = require("axios") +import axios from "axios" -const lambda = async (apiKey) => { +import type { HandlerResponse } from "@netlify/functions" + +const lambda = async (apiKey: string | undefined): Promise => { try { const response = await axios.get( `https://api.etherscan.io/api?module=block&action=getblockcountdown&blockno=12965000&apikey=${apiKey}` @@ -16,7 +18,10 @@ const lambda = async (apiKey) => { } } catch (error) { console.error(error) - return { statusCode: 500, body: JSON.stringify({ msg: error.message }) } + return { + statusCode: 500, + body: JSON.stringify({ msg: (error as Error).message }), + } } } diff --git a/src/lambda/l2beat.js b/src/lambda/l2beat.ts similarity index 60% rename from src/lambda/l2beat.js rename to src/lambda/l2beat.ts index 631eb3bf802..8a144bc93d9 100644 --- a/src/lambda/l2beat.js +++ b/src/lambda/l2beat.ts @@ -1,6 +1,8 @@ -const axios = require("axios") +import axios from "axios" -const lambda = async () => { +import type { HandlerResponse } from "@netlify/functions" + +const lambda = async (): Promise => { try { const response = await axios.get(`https://l2beat.com/api/tvl.json`) if (response.status < 200 || response.status >= 300) { @@ -14,7 +16,10 @@ const lambda = async () => { } } catch (error) { console.error(error) - return { statusCode: 500, body: JSON.stringify({ msg: error.message }) } + return { + statusCode: 500, + body: JSON.stringify({ msg: (error as Error).message }), + } } } @@ -22,4 +27,4 @@ const handler = () => { return lambda() } -module.exports = { handler, lambda } +export { handler, lambda } diff --git a/src/lambda/roadmap.js b/src/lambda/roadmap.ts similarity index 64% rename from src/lambda/roadmap.js rename to src/lambda/roadmap.ts index 0a782f46ac1..eb7865ec15c 100644 --- a/src/lambda/roadmap.js +++ b/src/lambda/roadmap.ts @@ -1,6 +1,10 @@ -const axios = require("axios") +import axios from "axios" -const lambda = async function (githubToken) { +import type { HandlerResponse } from "@netlify/functions" + +const lambda = async ( + githubToken: string | undefined +): Promise => { try { const baseURL = "https://api.github.com/repos/ethereum/ethereum-org-website/issues?per_page=100&state=all" @@ -20,11 +24,11 @@ const lambda = async function (githubToken) { statusCode: 200, body: JSON.stringify({ data }), } - } catch (err) { - console.log(err) // output to netlify function log + } catch (error) { + console.log(error) // output to netlify function log return { statusCode: 500, - body: JSON.stringify({ msg: err.message }), + body: JSON.stringify({ msg: (error as Error).message }), } } } @@ -33,4 +37,4 @@ const handler = () => { return lambda(process.env.GITHUB_TOKEN) } -module.exports = { handler, lambda } +export { handler, lambda } diff --git a/src/lambda/translation-build.js b/src/lambda/translation-build.ts similarity index 100% rename from src/lambda/translation-build.js rename to src/lambda/translation-build.ts diff --git a/src/lambda/translations.js b/src/lambda/translations.ts similarity index 60% rename from src/lambda/translations.js rename to src/lambda/translations.ts index a1fa4b3c44e..cd684d4ea32 100644 --- a/src/lambda/translations.js +++ b/src/lambda/translations.ts @@ -1,6 +1,8 @@ -const axios = require("axios") +import axios from "axios" -const lambda = async function (apiKey) { +import type { HandlerResponse } from "@netlify/functions" + +const lambda = async (apiKey: string | undefined): Promise => { try { const baseURL = "https://api.crowdin.com/api/project/ethereum-org/status" @@ -15,11 +17,11 @@ const lambda = async function (apiKey) { statusCode: 200, body: JSON.stringify({ data }), } - } catch (err) { - console.log(err) // output to netlify function log + } catch (error) { + console.log(error) // output to netlify function log return { statusCode: 500, - body: JSON.stringify({ msg: err.message }), + body: JSON.stringify({ msg: (error as Error).message }), } } } @@ -28,4 +30,4 @@ const handler = () => { return lambda(process.env.CROWDIN_API_KEY) } -module.exports = { handler, lambda } +export { handler, lambda } diff --git a/src/lambda/txs.js b/src/lambda/txs.ts similarity index 73% rename from src/lambda/txs.js rename to src/lambda/txs.ts index 1710aab68fd..610cc250d38 100644 --- a/src/lambda/txs.js +++ b/src/lambda/txs.ts @@ -1,6 +1,8 @@ -const axios = require("axios") +import axios from "axios" -const lambda = async (apiKey) => { +import type { HandlerResponse } from "@netlify/functions" + +const lambda = async (apiKey: string | undefined): Promise => { try { const daysToFetch = 90 const now = new Date() @@ -21,7 +23,10 @@ const lambda = async (apiKey) => { } } catch (error) { console.error(error) - return { statusCode: 500, body: JSON.stringify({ msg: error.message }) } + return { + statusCode: 500, + body: JSON.stringify({ msg: (error as Error).message }), + } } } @@ -29,4 +34,4 @@ const handler = () => { return lambda(process.env.ETHERSCAN_API_KEY) } -module.exports = { handler, lambda } +export { handler, lambda } From 37612415e31d798ed4cb8091f1e1ce5525c3b559 Mon Sep 17 00:00:00 2001 From: William Date: Sun, 29 May 2022 20:42:24 -0400 Subject: [PATCH 127/298] Migrate src/utils/calculateStakingRewards.js --- .../{calculateStakingRewards.js => calculateStakingRewards.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/utils/{calculateStakingRewards.js => calculateStakingRewards.ts} (96%) diff --git a/src/utils/calculateStakingRewards.js b/src/utils/calculateStakingRewards.ts similarity index 96% rename from src/utils/calculateStakingRewards.js rename to src/utils/calculateStakingRewards.ts index 479edab1e63..13af22b5e77 100644 --- a/src/utils/calculateStakingRewards.js +++ b/src/utils/calculateStakingRewards.ts @@ -1,4 +1,4 @@ -const calculateStakingRewards = (totalAtStake) => { +const calculateStakingRewards = (totalAtStake: number) => { const slotTimeInSec = 12 const slotsInEpoch = 32 const baseRewardFactor = 64 From 3e352857bed4750e9544e4fcf6bc680cac2acfa1 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 30 May 2022 10:35:39 +0100 Subject: [PATCH 128/298] add a couple of links --- .../community/get-involved/open-research/index.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index b55dd44156c..f4f6fc9fe25 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -11,7 +11,7 @@ One of the primary strengths of Ethereum is that it is constantly being improved ## General research resources -Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. +Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). This report from [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) also covers a lot of ground. These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. ## Scaling and performance @@ -35,6 +35,8 @@ There are now several Layer 2 protocols that scale Ethereum using different tech [ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) +[Rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) + ### Bridges @@ -246,6 +248,8 @@ Ethereum transaction fees protect the network from spam, denial-of-service attac [Making EIP-1559 more like an AMM curve](https://ethresear.ch/t/make-eip-1559-more-like-an-amm-curve/9082) +[Cross domain MEV](http://arxiv.org/abs/2112.01472) + ## Clients and protocol research @@ -283,6 +287,8 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe [Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) +[Proposer-builder separation](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) + ### Execution clients @@ -310,6 +316,10 @@ The execution layer is concerned with executing transactions, running the EVM an [History management](https://eips.ethereum.org/EIPS/eip-4444) +[Verkle Trees](https://vitalik.ca/general/2021/06/18/verkle.html) + +[Data availability sampling](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) + ### Formal verification From f6c36d81300db4c650b139edd4d5ca0daada8629 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Mon, 30 May 2022 11:07:21 +0100 Subject: [PATCH 129/298] Add new information to Validium page I added a detailed description of the Validium scaling solution and briefly explained the differences between validiums and ZK-rollups. The update also contains an explanation of volitions (scaling solutions that allow users to choose between a validium and a ZK-rollup). --- .../developers/docs/scaling/validium/index.md | 54 +++++++++++++++---- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index bcd6f0270ec..89f78332993 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -7,30 +7,64 @@ incomplete: true sidebarDepth: 3 --- -Uses validity proofs like [ZK-rollups](/developers/docs/scaling/zk-rollups/) but data is not stored on the main layer 1 Ethereum chain. This can lead to 10k transactions per second per validium chain and multiple chains can be run in parallel. +Validium is a [scaling solution](/developers/docs/scaling/) that enforces integrity of transactions using validity proofs like [ZK-rollups](/developers/docs/scaling/zk-rollups/), but doesn’t store transaction data on the main Ethereum layer. While off-chain data availability introduces trade-offs, it can lead to massive improvements in scalability (validiums can process ~ 9,000 transactions, or more, per second). ## Prerequisites {#prerequisites} You should have a good understanding of all the foundational topics and a high-level understanding of [Ethereum scaling](/developers/docs/scaling/). Implementing scaling solutions such as Validium is an advanced topic as the technology is less battle-tested, and continues to be researched and developed. -## Pros and cons {#pros-and-cons} +## How does validium work? {#how-does-validium work} +Validiums are a type of “rollup”: a [Layer 2](/layer-2/) scaling protocol designed to improve throughput by processing transactions off the main Ethereum chain. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs. This can be either a SNARK (Succinct Non-Interactive Argument of Knowledge) or SNARK (Scalable Transparent Argument of Knowledge). + +As with ZK-rollups, validity proofs prevent invalid state transitions on validium chains and enhance security guarantees available to users. For instance, a malicious operator cannot steal funds since users can always withdraw funds directly from the on-chain contract [using Merkle proofs](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). + +The major difference between validiums and ZK-rollups concerns their positions on the data availability spectrum. Both solutions approach data storage differently, which has implications for security and trustlessness. + +### Off-chain vs on-chain data availability {#off-chain-vs-on-chain-data-availability} + +ZK-rollups post information about off-transactions to Ethereum Mainnet as `calldata`. This information can be used to recreate the state of the rollup, if necessary, to prove the validity (or lack thereof) of a specific state transition. As the data is anchored on Ethereum (on-chain data availability), ZK-rollups can directly benefit from Ethereum’s security guarantees—funds are always secure if Mainnet is operational. + +Validiums keep all data relating to transactions off the Ethereum chain (off-chain data availability). This improves throughput on validium chains since less data needs to be posted to Mainnet. It also reduces rollup costs by eliminating the need to publish calldata and increases privacy for users (transaction information doesn't make it to Mainnet). + +Off-chain data availability does present a problem: data necessary for creating Merkle proofs may be unavailable. This means users may be unable to withdraw funds from the rollup contract if operators should act maliciously. + +To guarantee the availability of off-chain data, some validium solutions use a group of trusted entities to store copies of the state and provide proof of data availability. Of course, this presents another problem: users must trust these entities to make the data available when needed. There's also the possibility of members of data availability committees [getting compromised by a malicious actor](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) who can then withhold off-chain data. + +Other validiums require participants charged with storing offline data to provide a “bond” to reduce trust assumptions. If these participants fail to prove data availability, the bond is slashed. This approach relies on cryptoeconomic incentives and is considerably more secure than appointing trusted parties to secure offline data in the validium. + +## Volitions and validium + +Validiums offer many benefits, but come with trade-offs (most notably, data availability). But, as with many scaling solutions, validiums are suited to specific use-cases—which is why volitions were created. + +Volitions combine a ZK-rollups and validium chain and allow users to switch between the two scaling solutions. With volitions, users can take advantage of validium's off-chain data availability for certain transactions, while retaining the freedom to switch to an on-chain data availability solution (ZK-rollup) if needed. This essentially gives users freedom to choose trade-offs as dictated by their unique circumstances. + +A decentralized exchange (DEX) may prefer using a validium’s scalable and private infrastructure for high-value trades. It can also use a ZK-rollup for users who want a ZK-rollup's higher security guarantees and trustlessness. + +## Pros and cons of validium {#pros-and-cons-of-validium} | Pros | Cons | | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | No withdrawal delay (no latency to on-chain/cross-chain tx); consequent greater capital efficiency. | Limited support for general computation/smart contracts; specialized languages required. | | Not vulnerable to certain economic attacks faced by fraud-proof based systems in high-value applications. | High computational power required to generate ZK proofs; not cost effective for low throughput applications. | -| | Slower subjective finality time (10-30 min to generate a ZK proof) (but faster to full finality because there is no dispute time delay). | -| | Generating a proof requires off-chain data to be available at all times. | +| Reduces rollup fees for users by shrinking costs of publishing data on Ethereum. | Slower subjective finality time (10-30 min to generate a ZK proof) (but faster to full finality because there is no dispute time delay). | +| Suitable for specific use-cases, like trading or blockchain gaming that prioritize transaction privacy and scalability. | Generating a proof requires off-chain data to be available at all times. | +| | Security relies on trust assumptions and cryptoeconomic incentives, unlike ZK-rollups which rely on cryptographic security mechanisms. + +### Use Validium/Volitions {#use-validium-and-volitions} -### Use Validium {#use-validium} +Multiple projects provide implementations of Validium and volitions that you can integrate into your dapps: -Multiple projects provide implementations of Validium that you can integrate into your dapps: +**StarkWare StarkEx** - _StarkEx is an Ethereum Layer 2 (L2) scalability solution that is based on validity proofs. It can operate in either ZK-Rollup or Validium data-availability modes._ +- [Documentation](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) +- [Website](https://starkware.co/starkex/) -- [Starkware](https://starkware.co/) -- [Matter Labs zkPorter](https://matter-labs.io/) +**Matter Labs zkPorter**- _zkPorter is a Layer 2 scaling protocol tackling data availability with a hybrid approach that combines the ideas of zkRollup and sharding. It can support arbitrarily many shards, each with its own data availability policy._ +- [Documentation](https://docs.zksync.io/zkevm/#what-is-zkporter) +- [Website](https://zksync.io/) ## Further reading {#further-reading} - [Validium And The Layer 2 Two-By-Two — Issue No. 99](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) - -_Know of a community resource that helped you? Edit this page and add it!_ +- [ZK-rollups vs Validium](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) +- [Volition and the Emerging Data Availability spectrum](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) +- [Rollups, Validiums and Volitions: Learn About the Hottest Ethereum Scaling Solutions](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) From 697ee2bc69ce0d4227441900f149e7cfbdb01921 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 10:53:22 +0000 Subject: [PATCH 130/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8427308c924..f753c56fb50 100644 --- a/README.md +++ b/README.md @@ -1230,6 +1230,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
        Justyna Broniszewska

        📖
        Elyanil Liranzo-Castro

        📖
        Lichu Acuña

        📖 +
        Takamasa Arakawa

        💻 🐛 From 55c2234bb13f28c91a84b8bf5484be7d8ed08650 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 10:53:23 +0000 Subject: [PATCH 131/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 11cd5559648..0fff3c6246d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7589,6 +7589,16 @@ "contributions": [ "doc" ] + }, + { + "login": "avcdsld", + "name": "Takamasa Arakawa", + "avatar_url": "https://avatars.githubusercontent.com/u/10495516?v=4", + "profile": "https://github.com/avcdsld", + "contributions": [ + "code", + "bug" + ] } ], "contributorsPerLine": 7, From 662ce2d671490f912127eb0e1b18da9e49bb9ba9 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 30 May 2022 12:18:59 +0100 Subject: [PATCH 132/298] Apply suggestions from code review --- src/data/externalTutorials.json | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/data/externalTutorials.json b/src/data/externalTutorials.json index 82d3d3ad250..41effae1e1a 100644 --- a/src/data/externalTutorials.json +++ b/src/data/externalTutorials.json @@ -2,7 +2,7 @@ { "url": "https://www.youtube.com/watch?v=gyMwXuJrbJQ", "title": "Learn Blockchain, Solidity, and Full Stack Web3 Development with JavaScript ", - "description": "This course will give you a full introduction into all of the core concepts related to blockchain, smart contracts, Solidity, ERC20s, full-stack Web3 dapps, decentralized finance (DeFi), JavaScript, TypeScript, Chainlink, Ethereum, upgradable smart contracts, DAOs, the graph, moralis, aave, IPFS, and more. Follow along with the videos and you'll be a blockchain wizard in no time! ", + "description": "This course will give you a full introduction to all of the core concepts related to blockchain, smart contracts, Solidity, ERC20s, full-stack Web3 dapps, DeFi, JavaScript, TypeScript, Chainlink, Ethereum, upgradable smart contracts, DAOs, the graph, Moralis, Aave, IPFS, and more. Follow along with the videos and you'll be a blockchain wizard in no time!", "author": "Patrick Collins", "authorGithub": "https://github.com/PatrickAlphaC", "tags": [ @@ -28,7 +28,6 @@ "slither", "echidna", "filecoin", - "web3uikit", "moralis", "alchemy", "the graph", @@ -75,10 +74,10 @@ { "url": "https://www.youtube.com/watch?v=fNMfMxGxeag", "title": "Introduction to Foundry", - "description": "We build a minimal foundry project using a staking application. Showing you how to work with foundry. ", + "description": "We build a minimal Foundry project using a staking application to show you how to work with Foundry.", "author": "Patrick Collins", "authorGithub": "https://github.com/PatrickAlphaC", - "tags": ["solidity", "foundry", "bash", "video"], + "tags": ["solidity", "foundry", "video"], "skillLevel": "beginner", "timeToRead": "19", "lang": "en", @@ -86,8 +85,8 @@ }, { "url": "https://www.youtube.com/watch?v=pdsYCkUWrgQ", - "title": "How to Connect your Smart Contracts to Metamask | Full Stack Web3", - "description": "We learn exactly how web3 / blockchain / smart contract applications work in the front end using HTML and Javascript. We then go through 6 different ways you can connect your Metamask, Phantom, or other blockchain wallet address to your front end. We’ll look at popular Nextjs / React packages to make your development lifecycle 100 times easier. ", + "title": "How to Connect your Smart Contracts to Metamask", + "description": "We learn exactly how web3 / blockchain / smart contract applications work in the front end using HTML and Javascript. We then go through 6 different ways you can connect your Metamask, Phantom, or other blockchain wallet address to your front end. We’ll look at popular Nextjs / React packages to make your development lifecycle 100 times easier.", "author": "Patrick Collins", "authorGithub": "https://github.com/PatrickAlphaC", "tags": [ @@ -95,14 +94,11 @@ "javascript", "hardhat", "metamask", - "html", "nextjs", "reactjs", "moralis", - "web3modal", "web3-react", "ethersjs", - "usedapp", "video" ], "skillLevel": "beginner", @@ -113,7 +109,7 @@ { "url": "https://www.youtube.com/watch?v=pdsYCkUWrgQ", "title": "How to build an on-chain DAO", - "description": "Using Compound and Openzeppelin as a basis, we build a 100% on-chain DAO using an ERC20 governance token for votes. ", + "description": "Using Compound and Openzeppelin as a basis, we build a 100% on-chain DAO using an ERC20 governance token for votes.", "author": "Patrick Collins", "authorGithub": "https://github.com/PatrickAlphaC", "tags": [ @@ -133,7 +129,7 @@ { "url": "https://betterprogramming.pub/how-to-code-an-on-chain-dao-e525e13a57be", "title": "How to build an on-chain DAO", - "description": "Using Compound and Openzeppelin as a basis, we build a 100% on-chain DAO using an ERC20 governance token for votes. ", + "description": "Using Compound and Openzeppelin as a basis, we build a 100% on-chain DAO using an ERC20 governance token for votes.", "author": "Patrick Collins", "authorGithub": "https://github.com/PatrickAlphaC", "tags": [ @@ -160,14 +156,12 @@ "javascript", "hardhat", "metamask", - "html", "nextjs", "reactjs", "moralis", "web3modal", "web3-react", "ethersjs", - "usedapp" ], "skillLevel": "beginner", "timeToRead": "14", From e094267ee5ebe25b5156e4d3fc241158474e18b2 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 30 May 2022 12:20:13 +0100 Subject: [PATCH 133/298] Update src/content/developers/docs/scaling/plasma/index.md --- src/content/developers/docs/scaling/plasma/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/plasma/index.md b/src/content/developers/docs/scaling/plasma/index.md index 21a918b4815..b0b9dd5be68 100644 --- a/src/content/developers/docs/scaling/plasma/index.md +++ b/src/content/developers/docs/scaling/plasma/index.md @@ -32,7 +32,7 @@ Plasma, sidechains, and sharding are fairly similar because they all connect to A [sidechain](/developers/docs/scaling/sidechains/) is an independently operated blockchain connected to Ethereum Mainnet via a two-way bridge. [Bridges](/bridges/) allow users to exchange tokens between the two blockchains to transact on the sidechain, reducing congestion on Ethereum Mainnet and improving scalability. Sidechains use a separate consensus mechanism and are typically much smaller than Ethereum Mainnet. As a result, bridging assets to these chains involves increased risk; given the lack of security guarantees inherited from Ethereum Mainnet in the sidechain model, users risk the loss of funds in an attack on the sidechain. -Conversely, plasma chains derive their security from Mainnet are somewhat safer than sidechains. Both sidechains and plasma chains can have different consensus protocols, but the difference is that plasma chains publishes Merkle roots for each block on Ethereum Mainnet. Block roots are small pieces of information we can use to verify information about transactions that happen on a plasma chain. If an attack happens on a plasma chain, users can safely exit to Mainnet and withdraw their funds using the appropriate proofs. +Conversely, plasma chains derive their security from Mainnet. This makes them measurably more secure than sidechains. Both sidechains and plasma chains can have different consensus protocols, but the difference is that plasma chains publish Merkle roots for each block on Ethereum Mainnet. Block roots are small pieces of information we can use to verify information about transactions that happen on a plasma chain. If an attack happens on a plasma chain, users can safely withdraw their funds back to Mainnet using the appropriate proofs. ### Plasma vs sharding {#plasma-vs-sharding} From 729d8ac9d65cdcef0ce2dfb808c781569340b025 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 12:53:06 +0000 Subject: [PATCH 134/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f753c56fb50..9a71b2348af 100644 --- a/README.md +++ b/README.md @@ -1231,6 +1231,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
        Elyanil Liranzo-Castro

        📖
        Lichu Acuña

        📖
        Takamasa Arakawa

        💻 🐛 +
        skaunov

        📖 From 8b55e7cee72109d551e5c568ab3622190d936114 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 12:53:07 +0000 Subject: [PATCH 135/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0fff3c6246d..26ca3900fb5 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7599,6 +7599,15 @@ "code", "bug" ] + }, + { + "login": "skaunov", + "name": "skaunov", + "avatar_url": "https://avatars.githubusercontent.com/u/65976143?v=4", + "profile": "https://github.com/skaunov", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From d018c32d14a7bba9d5c9e37b70fdd5a7a5bb8953 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 12:58:06 +0000 Subject: [PATCH 136/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9a71b2348af..3cd2da55c8a 100644 --- a/README.md +++ b/README.md @@ -1232,6 +1232,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
        Lichu Acuña

        📖
        Takamasa Arakawa

        💻 🐛
        skaunov

        📖 +
        Paul Cowgill

        📖 From 252e310866ddd32aeee3187d6730a7155286990e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 12:58:07 +0000 Subject: [PATCH 137/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 26ca3900fb5..dbe2ac0f152 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7608,6 +7608,15 @@ "contributions": [ "doc" ] + }, + { + "login": "pcowgill", + "name": "Paul Cowgill", + "avatar_url": "https://avatars.githubusercontent.com/u/2731712?v=4", + "profile": "https://paulcowgill.com", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 5ab3b0e29b0d1942498b3a8ce73dd214aa03014a Mon Sep 17 00:00:00 2001 From: Joshua <30259508@cityofglacol.ac.uk> Date: Mon, 30 May 2022 14:27:59 +0100 Subject: [PATCH 138/298] Fix uniswap docs link --- .../uniswap-v2-annotated-code/index.md | 4 +- .../uniswap-v2-annotated-code/index.md | 2 +- .../uniswap-v2-annotated-code/index.md | 2 +- .../uniswap-v2-annotated-code/index.md | 2 +- .../uniswap-v2-annotated-code/index.md | 44 +++++++++---------- .../uniswap-v2-annotated-code/index.md | 2 +- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md index 8d6b9a5dc16..b30ec19e106 100644 --- a/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -23,7 +23,7 @@ _Traders_ send one type of token to the pool and receive the other (for example, When liquidity providers want their assets back they can burn the pool tokens and receive back their tokens, including their share of the rewards. -[Click here for a fuller description](https://uniswap.org/docs/v2/core-concepts/swaps/). +[Click here for a fuller description](https://docs.uniswap.org/protocol/V2/concepts/core-concepts/swaps/). ### Why v2? Why not v3? {#why-v2} @@ -50,7 +50,7 @@ This is most common flow, used by traders: 1. Provide the periphery account with an allowance in the amount to be swapped. 2. Call one of the periphery contract's many swap functions (which one depends on whether ETH is involved or not, whether the trader specifies the amount of tokens to deposit or the amount of tokens to get back, etc). -Every swap function accepts a `path`, an array of exchanges to go through. + Every swap function accepts a `path`, an array of exchanges to go through. #### In the periphery contract (UniswapV2Router02.sol) {#in-the-periphery-contract-uniswapv2router02-sol} diff --git a/src/content/translations/id/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/translations/id/developers/tutorials/uniswap-v2-annotated-code/index.md index c6472d25c70..26d62bdcee4 100644 --- a/src/content/translations/id/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/translations/id/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -25,7 +25,7 @@ _Pedagang_ mengirimkan satu jenis token ke pool dan menerima token lainnya (cont Ketika penyedia likuiditas menginginkan kembali aset mereka, mereka dapat membakar token pool dan menerima kembali token mereka, termasuk bagian imbalan mereka. -[Klik di sini untuk deskripsi lengkapnya](https://uniswap.org/docs/v2/core-concepts/swaps/). +[Klik di sini untuk deskripsi lengkapnya](https://docs.uniswap.org/protocol/V2/concepts/core-concepts/swaps/). ### Mengapa v2? Mengapa bukan v3? {#why-v2} diff --git a/src/content/translations/it/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/translations/it/developers/tutorials/uniswap-v2-annotated-code/index.md index 23072dfe949..384da9ec60a 100644 --- a/src/content/translations/it/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/translations/it/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -25,7 +25,7 @@ I _trader_ inviano un tipo di token al pool e ricevono l'altro (ad esempio, invi Quando i fornitori di liquidità rivogliono indietro le loro risorse, possono bruciare i token del pool e ricevere i token, compresa la quota di ricompense. -[Clicca qui per una descrizione completa](https://uniswap.org/docs/v2/core-concepts/swaps/). +[Clicca qui per una descrizione completa](https://docs.uniswap.org/protocol/V2/concepts/core-concepts/swaps/). ### Perché v2? Perché non v3? {#why-v2} diff --git a/src/content/translations/ro/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/translations/ro/developers/tutorials/uniswap-v2-annotated-code/index.md index b67f95361d5..4fc9c8b0a8e 100644 --- a/src/content/translations/ro/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/translations/ro/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -25,7 +25,7 @@ _Comercianții_ trimit un tip de token la fondul comun și îl primesc pe celăl Când furnizorii de lichidităţi își vor înapoi activele, aceștia pot arde tokenurile fondului comun și îşi pot primi înapoi tokenurile, inclusiv partea lor de recompense. -[Faceți clic aici pentru a vedea o descriere completă](https://uniswap.org/docs/v2/core-concepts/swaps/). +[Faceți clic aici pentru a vedea o descriere completă](https://docs.uniswap.org/protocol/V2/concepts/core-concepts/swaps/). ### De ce v2? De ce nu v3? {#why-v2} diff --git a/src/content/translations/tr/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/translations/tr/developers/tutorials/uniswap-v2-annotated-code/index.md index 13681170eff..828fc0ff42a 100644 --- a/src/content/translations/tr/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/translations/tr/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -25,7 +25,7 @@ _Ticaret yapanlar_, havuza bir tür token gönderir ve (örneğin, **Token0** g Likidite sağlayıcıları varlıklarını geri istediklerinde havuz token'larını yakabilir ve ödül payları da dahil olmak üzere token'larını geri alabilirler. -[Daha geniş çaplı bir açıklama için buraya tıklayın](https://uniswap.org/docs/v2/core-concepts/swaps/). +[Daha geniş çaplı bir açıklama için buraya tıklayın](https://docs.uniswap.org/protocol/V2/concepts/core-concepts/swaps/). ### Neden v2? Neden v3 değil? {#why-v2} @@ -204,13 +204,13 @@ Eş takasının token0 ve token1 arasındaki takas oranına karar verme yöntemi İşte basit bir örnek. Basitlik adına, tablonun ondalık kısmından sonra yalnızca üç haneye sahip olduğunu ve sayıların doğru olmaması için %0,3 işlem ücretini göz ardı ettiğimizi unutmayın. | Olay | reserve0 | reserve1 | reserve0 \* reserve1 | Ortalama takas oranı (token1 / token0) | -| --------------------------------------------------------------- | ---------:| ---------:| ----------------------:| -------------------------------------- | -| İlk kurulum | 1,000.000 | 1,000.000 | 1,000,000 | | -| Ticaret Yapan A, 50 tane token0'ı 47.619 token1 ile takas eder | 1,050.000 | 952.381 | 1,000,000 | 0.952 | -| Ticaret Yapan B, 10 tane token0'ı 8.984 token1 ile takas eder | 1,060.000 | 943.396 | 1,000,000 | 0.898 | -| Ticaret Yapan C, 40 tane token0'ı 34.305 token1 ile takas eder | 1,100.000 | 909.090 | 1,000,000 | 0.858 | -| Ticaret Yapan D, 109.01 tane token0'ı 100 token1 ile takas eder | 990.990 | 1,009.090 | 1,000,000 | 0.917 | -| Ticaret Yapan E, 10 tane token0'ı 10.079 token1 ile takas eder | 1,000.990 | 999.010 | 1,000,000 | 1.008 | +| --------------------------------------------------------------- | --------: | --------: | -------------------: | -------------------------------------- | +| İlk kurulum | 1,000.000 | 1,000.000 | 1,000,000 | | +| Ticaret Yapan A, 50 tane token0'ı 47.619 token1 ile takas eder | 1,050.000 | 952.381 | 1,000,000 | 0.952 | +| Ticaret Yapan B, 10 tane token0'ı 8.984 token1 ile takas eder | 1,060.000 | 943.396 | 1,000,000 | 0.898 | +| Ticaret Yapan C, 40 tane token0'ı 34.305 token1 ile takas eder | 1,100.000 | 909.090 | 1,000,000 | 0.858 | +| Ticaret Yapan D, 109.01 tane token0'ı 100 token1 ile takas eder | 990.990 | 1,009.090 | 1,000,000 | 0.917 | +| Ticaret Yapan E, 10 tane token0'ı 10.079 token1 ile takas eder | 1,000.990 | 999.010 | 1,000,000 | 1.008 | Ticaret yapanlar daha fazla token0 sağladıkça, arz ve talebe bağlı olarak token1'in göreceli değeri artar ve bunun tersi de aynı şekilde işler. @@ -366,10 +366,10 @@ Geçen süre sıfır değilse, bu bloktaki ilk takas işlemi biziz demektir. Bu Her maliyet biriktirici, son ücret ve (diğer token'ın rezervi/bu token'ın rezervi) saniye cinsinden geçen sürenin çarpımı ile güncellenir. Ortalama bir fiyat elde etmek için kümülatif fiyatın zaman içinde iki nokta olduğunu okursunuz ve aralarındaki zaman farkına bölersiniz. Örneğin, bu olay dizisini varsayalım: -| Olay | reserve0 | reserve1 | zaman damgası | Marjinal takas oranı (reserve1 / reserve0) | price0CumulativeLast | -| -------------------------------------------------------------- | ---------:| ---------:| ------------- | ------------------------------------------:| ----------------------------:| -| İlk kurulum | 1,000.000 | 1,000.000 | 5,000 | 1.000 | 0 | -| Ticaret Yapan A, 50 token0 yatırır ve 47.619 token1 geri alır | 1,050.000 | 952.381 | 5,020 | 0.907 | 20 | +| Olay | reserve0 | reserve1 | zaman damgası | Marjinal takas oranı (reserve1 / reserve0) | price0CumulativeLast | +| -------------------------------------------------------------- | --------: | --------: | ------------- | -----------------------------------------: | -------------------------: | +| İlk kurulum | 1,000.000 | 1,000.000 | 5,000 | 1.000 | 0 | +| Ticaret Yapan A, 50 token0 yatırır ve 47.619 token1 geri alır | 1,050.000 | 952.381 | 5,020 | 0.907 | 20 | | Ticaret Yapan B, 10 token0 yatırır ve 8.984 token1 geri alır | 1,060.000 | 943.396 | 5,030 | 0.890 | 20+10\*0.907 = 29.07 | | Ticaret Yapan C 40 token0 yatırır ve 34.305 token1 geri alır | 1,100.000 | 909.090 | 5,100 | 0.826 | 29.07+70\*0.890 = 91.37 | | Ticaret Yapan D, 100 token1 yatırır ve 109.01 token0 geri alır | 990.990 | 1,009.090 | 5,110 | 1.018 | 91.37+10\*0.826 = 99.63 | @@ -501,9 +501,9 @@ Eğer bu ilk yatırma ise, `MINIMUM_LIQUIDITY` tane token yaratın ve onları ki Arbitrajda değer kaybetmemek için eşit değer sağlamak para yatıran kişinin çıkarına olduğu için buna güvenebiliriz. Diyelim ki iki token'ın değeri aynı, ancak yatıran kişimiz **Token0**'a göre dört kat daha fazla **Token1** yatırdı. Ticaret yapan bir kişi, eş takasının **Token0**'ın daha değerli olduğunu düşündüğü gerçeğini ondan değer yaratmak için kullanabilir. | Olay | reserve0 | reserve1 | reserve0 \* reserve1 | Havuzun değeri (reserve0 + reserve1) | -| ------------------------------------------------------------------ | --------:| --------:| ----------------------:| ------------------------------------:| -| İlk kurulum | 8 | 32 | 256 | 40 | -| Ticaret yapan kişi 8 **Token0** tokeni yatırır, 16 **Token1** alır | 16 | 16 | 256 | 32 | +| ------------------------------------------------------------------ | -------: | -------: | -------------------: | -----------------------------------: | +| İlk kurulum | 8 | 32 | 256 | 40 | +| Ticaret yapan kişi 8 **Token0** tokeni yatırır, 16 **Token1** alır | 16 | 16 | 256 | 32 | Gördüğünüz gibi, ticaret yapan kişi havuzun değerindeki bir düşüşten gelen 8 token kazanarak ona sahip olan yatırım yapan kişiye zarar verdi. @@ -517,12 +517,12 @@ Sonraki her yatırmada, iki varlık arasındaki takas oranını zaten biliyoruz İster ilk yatırma ister sonraki bir yatırma olsun, sağladığımız likidite token'larının sayısı `reserve0*reserve1`'deki değişikliğin kareköküne eşittir ve likidite token'ının değeri değişmez (her iki tür için de eşit değerlere sahip olmayan bir yatırım almadığı sürece böyledir, aksi hâlde "para cezası" dağıtılır). İşte aynı değere sahip iki token'lı, üç iyi yatırma ve bir kötü yatırma bulunan başka bir örnek (yalnızca bir token türünden para yatırma, bu nedenle herhangi bir likidite token'ı üretmez). | Olay | reserve0 | reserve1 | reserve0 \* reserve1 | Havuz değeri (reserve0 + reserve1) | Bu yatırma için basılmış likidite token'ları | Toplam likidite token'ları | her bir likidite token'ının değeri | -| -------------------------- | --------:| --------:| ----------------------:| ----------------------------------:| --------------------------------------------:| --------------------------:| ----------------------------------:| -| İlk kurulum | 8.000 | 8.000 | 64 | 16.000 | 8 | 8 | 2.000 | -| Her türden dördünü yatırma | 12.000 | 12.000 | 144 | 24.000 | 4 | 12 | 2.000 | -| Her türden ikisini yatırma | 14.000 | 14.000 | 196 | 28.000 | 2 | 14 | 2.000 | -| Eşit olmayan değer yatırma | 18.000 | 14.000 | 252 | 32.000 | 0 | 14 | ~2.286 | -| Arbitrajdan sonra | ~15.874 | ~15.874 | 252 | ~31.748 | 0 | 14 | ~2.267 | +| -------------------------- | -------: | -------: | -------------------: | ---------------------------------: | -------------------------------------------: | -------------------------: | ---------------------------------: | +| İlk kurulum | 8.000 | 8.000 | 64 | 16.000 | 8 | 8 | 2.000 | +| Her türden dördünü yatırma | 12.000 | 12.000 | 144 | 24.000 | 4 | 12 | 2.000 | +| Her türden ikisini yatırma | 14.000 | 14.000 | 196 | 28.000 | 2 | 14 | 2.000 | +| Eşit olmayan değer yatırma | 18.000 | 14.000 | 252 | 32.000 | 0 | 14 | ~2.286 | +| Arbitrajdan sonra | ~15.874 | ~15.874 | 252 | ~31.748 | 0 | 14 | ~2.267 | ```solidity } @@ -987,7 +987,7 @@ Likidite sağlayıcıları, işlemi mevcut takas oranına yakın bir takas oran Örneğin, takas oranının bire bir olduğu ve likidite sağlayıcısının şu değerleri belirlediği bir durumu hayal edin: | Parametre | Değer | -| -------------- | -----:| +| -------------- | ----: | | amountADesired | 1000 | | amountBDesired | 1000 | | amountAMin | 900 | diff --git a/src/content/translations/zh/developers/tutorials/uniswap-v2-annotated-code/index.md b/src/content/translations/zh/developers/tutorials/uniswap-v2-annotated-code/index.md index 24c8b679f2d..e5242c4f0e7 100644 --- a/src/content/translations/zh/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/src/content/translations/zh/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -25,7 +25,7 @@ lang: zh 当流动资金提供者想要收回他们的代币资产时,他们可以消耗资金池代币并收回他们的代币, 其中包括他们在兑换过程中奖励的份额。 -[点击这里查看更完整的描述](https://uniswap.org/docs/v2/core-concepts/swaps/)。 +[点击这里查看更完整的描述](https://docs.uniswap.org/protocol/V2/concepts/core-concepts/swaps/)。 ### 为什么选择 v2? 而不是 v3? {#why-v2} From 81eac7e864d999c020858b218d9d89c7997dad62 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 13:28:51 +0000 Subject: [PATCH 139/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3cd2da55c8a..f9817620c35 100644 --- a/README.md +++ b/README.md @@ -1233,6 +1233,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
        Takamasa Arakawa

        💻 🐛
        skaunov

        📖
        Paul Cowgill

        📖 +
        zjiekai

        📖 From dd404c6170d9b600eabdb592445672504fc15f51 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 13:28:52 +0000 Subject: [PATCH 140/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index dbe2ac0f152..d83741ada37 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7617,6 +7617,15 @@ "contributions": [ "doc" ] + }, + { + "login": "zjiekai", + "name": "zjiekai", + "avatar_url": "https://avatars.githubusercontent.com/u/1871071?v=4", + "profile": "https://github.com/zjiekai", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 4c8da270bb06139c2436613591c25fe57b5b38c7 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Mon, 30 May 2022 14:51:06 +0100 Subject: [PATCH 141/298] Add new information to sidechains page. Reworked the content to add more structure to the page. Also updated pros/cons and described the architecture of sidechains in detail. --- .../docs/scaling/sidechains/index.md | 59 ++++++++++++++++--- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/src/content/developers/docs/scaling/sidechains/index.md b/src/content/developers/docs/scaling/sidechains/index.md index 5e961750529..b6ba1720216 100644 --- a/src/content/developers/docs/scaling/sidechains/index.md +++ b/src/content/developers/docs/scaling/sidechains/index.md @@ -7,21 +7,61 @@ incomplete: true sidebarDepth: 3 --- -A sidechain is a separate blockchain which runs in parallel to Ethereum Mainnet and operates independently. It has its own [consensus algorithm](/developers/docs/consensus-mechanisms/) (e.g. [proof-of-authority](https://wikipedia.org/wiki/Proof_of_authority), [Delegated proof-of-stake](https://en.bitcoinwiki.org/wiki/DPoS), [Byzantine fault tolerance](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained)). It is connected to Mainnet by a two-way bridge. +A sidechain is a separate blockchain which runs in parallel to Ethereum; it is connected to Mainnet by a two-way bridge. Sidechains have separate [consensus algorithms](/developers/docs/consensus-mechanisms/), which are often designed for faster processing times. Using a sidechain involves trade-offs, though, as they do not inherit Ethereum's security properties, unlike [layer 2 scaling solutions](/layer-2/). -What makes a sidechain particularly exciting is that the chain works the same as the main Ethereum chain because it's based on [the EVM](/developers/docs/evm/). It doesn't use Ethereum, it is Ethereum. This means if you want to use your [dapp](/developers/docs/dapps/) on a sidechain, it's just a matter of deploying your code to this sidechain. It looks, feels, and acts just like Mainnet – you write contracts in Solidity, and interact with the chain via the Web3 API. +## How do sidechains work? {#how-do-sidechains-work} -## Prerequisites {#prerequisites} +### Consensus algorithms {#consensus-algorithms} -You should have a good understanding of all the foundational topics and a high-level understanding of [Ethereum scaling](/developers/docs/scaling/). +As mentioned, sidechains use alternative consensus algorithms that are different from Ethereum's proof-of-work (PoW) or proof-of-stake (PoS). Some examples of consensus algorithms used on sidechains include: -## Pros and cons {#pros-and-cons} +- [Proof-of-authority](https://wikipedia.org/wiki/Proof_of_authority) +- [Delegated proof-of-stake](https://en.bitcoinwiki.org/wiki/DPoS) +- [Byzantine fault tolerance](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained). + +Sidechain nodes (called validators) are responsible for ordering and processing transactions, storing the blockchain state, and securing the network. In some cases, validators may be responsible for approving users' entries and exits between the sidechain and Ethereum Mainnet. + +### EVM compatibility {#evm-compatibility} + +What makes a sidechain particularly exciting is that the chain works the same as the main Ethereum chain because it's based on [the EVM](/developers/docs/evm/). It doesn't merely use Ethereum, it _is_ Ethereum. + +This means if you want to use your [dapp](/developers/docs/dapps/) on a sidechain, it's just a matter of deploying your [smart contract](/developers/docs/smart-contracts/) to this sidechain. It looks, feels, and acts just like Mainnet – you write contracts in Solidity, and interact with the chain via the Web3 API. + +Because sidechains are EVM-compatible, they are considered a useful scaling [scaling solution](/developers/docs/scaling/) for Ethereum-native dapps. With your dapp on a sidechain, users can enjoy lower gas fees and faster transactions (albeit, with certain trade-offs), especially if Mainnet is congested. + +### Asset movement {#asset-movement} + +A crucial feature of sidechains is their ability to facilitate seamless transfer of value from and to Ethereum Mainnet. This interoperability with Ethereum is achieved using a blockchain bridge, which enforces a “two-way peg” between two chains. Bridges use a network of smart contracts deployed on both networks to control transfer of funds between Ethereum and sidechains. + +While bridges help users move funds between Ethereum and the sidechain, the assets are not physically moved across the two chains. Instead, a "lock-mint-burn" mechanism is used for transferring value across chains. Here is a description of the actual process: + +- **Moving funds from Ethereum to a sidechain** + +Bob (an Ethereum user) wishes to use a sidechain. This is what he does to move funds from Mainnet to the sidechain: + +1. Bob sends ERC-20 tokens to a smart contract on the Ethereum chain (e.g. Ethereum) and pays the transaction fee. +2. Bob’s ERC-20 tokens are locked up in the smart contract, with the event being relayed to the smart contract on the sidechain. +3. Once it receives proof of Bob’s deposit, the sidechain’s smart contract triggers the creation or “minting” of an amount of tokens equal to Bob’s initial deposit. +4. Bob receives the new tokens in his wallet address and can use it to execute transactions on the sidechain. + +- **Moving funds from a sidechain to Ethereum Mainnet** + +Having concluded his business on the sidechain, Bob wants to withdraw his remaining funds to Ethereum Mainnet. This is what happens: + +1. Bob sends his remaining tokens to the sidechain’s smart contract for “burning”. Burning is a mechanism for destroying tokens by making them irrecoverable. +2. Information concerning Bob’s deposit transaction and the token burning is relayed to the smart contract on Ethereum. +3. The smart contract then triggers the release of Bob’s ERC-20 tokens on Ethereum, which are sent back to his wallet. + +Note: Bridging funds between Mainnet and sidechains carries its own set of problems (e.g., smart contracts can be hacked), which is another drawback associated with sidechains. More on the [risks of blockchain bridges](/bridges/#bridge-risk). + +## Pros and cons of sidechains {#pros-and-cons-of-sidechains} | Pros | Cons | | ------------------------------------------------ | ---------------------------------------------------------------------------------------------- | -| Established technology. | Less decentralized. | -| Supports general computation, EVM compatibility. | Uses a separate consensus mechanism. Not secured by layer 1 (so technically it’s not layer 2). | -| | A quorum of sidechain validators can commit fraud. | +| The technology underpinning sidechains is well-established and benefits from extensive research and improvements in design. | Sidechains trade off some measure of decentralization and trustlesness for scalability. | +| Sidechains support general computation and offer EVM compatibility (they can run Ethereum-native dapps). | A sidechain uses a separate consensus mechanism and doesn't benefit from Ethereum's security guarantees. | +| Sidechains use different consensus models to efficiently process transactions and lower transaction fees for users. | Sidechains require higher trust assumptions (e.g., a quorum of malicious sidechain validators can commit fraud).| +| EVM-compatible sidechains allow dapps to expand their ecosystem. | | ### Use Sidechains {#use-sidechains} @@ -29,7 +69,8 @@ Multiple projects provide implementations of sidechains that you can integrate i - [Polygon PoS](https://polygon.technology/solutions/polygon-pos) - [Skale](https://skale.network/) -- [Gnosis Chain (formerly xDai)](https://www.xdaichain.com/) +- [Gnosis Chain (formerly xDai)](https://www.gnosischain.com/) +- [Loom Network](https://loomx.io/) ## Further reading {#further-reading} From 9cc8c23cb48f6ce8121c220fa1d36105737af2d8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 14:32:00 +0000 Subject: [PATCH 142/298] docs: update README.md [skip ci] --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index f9817620c35..23c563d54c1 100644 --- a/README.md +++ b/README.md @@ -1235,6 +1235,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
        Paul Cowgill

        📖
        zjiekai

        📖 + +
        wii u

        🤔 + From 52928cd738de35885e912c51ebbb298842742eb3 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 14:32:00 +0000 Subject: [PATCH 143/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index d83741ada37..c314fbafa5a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7626,6 +7626,15 @@ "contributions": [ "doc" ] + }, + { + "login": "WiiCoder", + "name": "wii u", + "avatar_url": "https://avatars.githubusercontent.com/u/65171537?v=4", + "profile": "https://github.com/WiiCoder", + "contributions": [ + "ideas" + ] } ], "contributorsPerLine": 7, From 5ca9e3aba82a1148611fb7bfb247f9f7b6b0b454 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 14:50:08 +0000 Subject: [PATCH 144/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 23c563d54c1..3bead1171e8 100644 --- a/README.md +++ b/README.md @@ -1237,6 +1237,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
        wii u

        🤔 +
        MonsieurDMA

        📖 From ae13fb0efbbf6de75c0a4debbdd7d3d99191ab1d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 30 May 2022 14:50:09 +0000 Subject: [PATCH 145/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index c314fbafa5a..004cece6e2c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7635,6 +7635,15 @@ "contributions": [ "ideas" ] + }, + { + "login": "MonsieurDMA", + "name": "MonsieurDMA", + "avatar_url": "https://avatars.githubusercontent.com/u/92155252?v=4", + "profile": "https://github.com/MonsieurDMA", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 9e4d4c83c2dd8139bb9512326aacf05b2f88d59b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 30 May 2022 09:05:59 -0600 Subject: [PATCH 146/298] Update src/intl/en/page-layer-2.json Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/intl/en/page-layer-2.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index a44b89949c1..fde0709374a 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -6,7 +6,7 @@ "layer-2-hero-title": "Layer 2", "layer-2-hero-header": "Ethereum for everyone", "layer-2-hero-subtitle": "Scaling Ethereum without compromising on security or decentralization.", - "layer-2-hero-alt-text": "Layer 2 diagram", + "layer-2-hero-alt-text": "Illustration of transactions being rolled up on Layer 2 and posted to Ethereum Mainnet", "layer-2-hero-button-1": "What is layer 2", "layer-2-hero-button-2": "Use layer 2", "layer-2-statsbox-1": "TVL locked in layer 2 (USD)", From 7b05cd6221ef86e073d48e107c8155564b9d7de2 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 30 May 2022 11:21:20 -0400 Subject: [PATCH 147/298] Add requested changes --- src/data/eth-upgrade-articles.ts | 18 ++++++++++++------ src/utils/calculateStakingRewards.ts | 3 ++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/data/eth-upgrade-articles.ts b/src/data/eth-upgrade-articles.ts index 36bd86eeaab..881bad3d198 100644 --- a/src/data/eth-upgrade-articles.ts +++ b/src/data/eth-upgrade-articles.ts @@ -1,4 +1,10 @@ -export const dannyArticles = [ +interface Article { + title: string + description: string + link: string +} + +export const dannyArticles: Article[] = [ { title: "Finalized no. 34", description: "23 March 2022", @@ -26,24 +32,24 @@ export const dannyArticles = [ }, ] -export const benArticles = [ +export const benArticles: Article[] = [ { - title: "What’s New in Eth2 – #88", + title: "What’s New in Eth2 – #92", description: "6 May 2022", link: "https://hackmd.io/@benjaminion/eth2_news/https%3A%2F%2Fhackmd.io%2F%40benjaminion%2Fwnie2_220506", }, { - title: "What’s New in Eth2 – #88", + title: "What’s New in Eth2 – #91", description: "8 April 2022", link: "https://hackmd.io/@benjaminion/eth2_news/https%3A%2F%2Fhackmd.io%2F%40benjaminion%2Fwnie2_220408", }, { - title: "What’s New in Eth2 – #88", + title: "What’s New in Eth2 – #90", description: "25 March 2022", link: "https://hackmd.io/@benjaminion/eth2_news/https%3A%2F%2Fhackmd.io%2F%40benjaminion%2Fwnie2_220325", }, { - title: "What’s New in Eth2 – #88", + title: "What’s New in Eth2 – #89", description: "11 March 2022", link: "https://hackmd.io/@benjaminion/eth2_news/https%3A%2F%2Fhackmd.io%2F%40benjaminion%2Fwnie2_220311", }, diff --git a/src/utils/calculateStakingRewards.ts b/src/utils/calculateStakingRewards.ts index 13af22b5e77..789cc94e1f5 100644 --- a/src/utils/calculateStakingRewards.ts +++ b/src/utils/calculateStakingRewards.ts @@ -1,4 +1,5 @@ -const calculateStakingRewards = (totalAtStake: number) => { +/** Calculates the current APR for the staking reward */ +const calculateStakingRewards = (totalAtStake: number): number => { const slotTimeInSec = 12 const slotsInEpoch = 32 const baseRewardFactor = 64 From 7a14252fb3f3f237daeffeca0684d4f85be00a6e Mon Sep 17 00:00:00 2001 From: William Date: Mon, 30 May 2022 11:23:43 -0400 Subject: [PATCH 148/298] Fixes & update comment format for intelliense/docs --- src/data/eth-upgrade-articles.ts | 2 ++ src/lambda/etherscan.ts | 2 +- src/lambda/etherscanBlock.ts | 2 +- src/utils/flattenMessages.ts | 2 +- src/utils/getMessages.ts | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/data/eth-upgrade-articles.ts b/src/data/eth-upgrade-articles.ts index 881bad3d198..0127f5b5165 100644 --- a/src/data/eth-upgrade-articles.ts +++ b/src/data/eth-upgrade-articles.ts @@ -4,6 +4,7 @@ interface Article { link: string } +/** Articles by Danny Ryan (Ethereum Foundation) */ export const dannyArticles: Article[] = [ { title: "Finalized no. 34", @@ -32,6 +33,7 @@ export const dannyArticles: Article[] = [ }, ] +/** Articles by Ben Edgington (PegaSys, ConsenSys) */ export const benArticles: Article[] = [ { title: "What’s New in Eth2 – #92", diff --git a/src/lambda/etherscan.ts b/src/lambda/etherscan.ts index b10d7dc9642..4475b2fabe9 100644 --- a/src/lambda/etherscan.ts +++ b/src/lambda/etherscan.ts @@ -31,4 +31,4 @@ const handler = () => { return lambda(process.env.ETHERSCAN_API_KEY) } -module.exports = { handler, lambda } +export { handler, lambda } diff --git a/src/lambda/etherscanBlock.ts b/src/lambda/etherscanBlock.ts index aeb15bbb3ea..6fbbf750240 100644 --- a/src/lambda/etherscanBlock.ts +++ b/src/lambda/etherscanBlock.ts @@ -29,4 +29,4 @@ const handler = () => { return lambda(process.env.ETHERSCAN_API_KEY) } -module.exports = { handler, lambda } +export { handler, lambda } diff --git a/src/utils/flattenMessages.ts b/src/utils/flattenMessages.ts index a6f9da15f58..3c5af83b41a 100644 --- a/src/utils/flattenMessages.ts +++ b/src/utils/flattenMessages.ts @@ -1,6 +1,6 @@ import type { Messages } from "../interfaces" -// same function from 'gatsby-plugin-intl' +/** same function from 'gatsby-plugin-intl' */ const flattenMessages = (nestedMessages: Messages, prefix = ""): Messages => { return Object.keys(nestedMessages).reduce((messages, key) => { let value = nestedMessages[key] diff --git a/src/utils/getMessages.ts b/src/utils/getMessages.ts index c5499bd2569..3a26fc27524 100644 --- a/src/utils/getMessages.ts +++ b/src/utils/getMessages.ts @@ -5,7 +5,7 @@ import flattenMessages from "./flattenMessages" import type { Messages } from "../interfaces" import type { Lang } from "./languages" -// same function from 'gatsby-plugin-intl' +/** same function from 'gatsby-plugin-intl' */ const getMessages = (path: string, language: Lang): Messages => { try { const messages = JSON.parse( From 4a729a180935d52392f8855009a8d525f1e47582 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Mon, 30 May 2022 16:35:52 +0100 Subject: [PATCH 149/298] Update src/content/developers/docs/scaling/validium/index.md Co-authored-by: Sam Richards --- src/content/developers/docs/scaling/validium/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 89f78332993..88431f27c4a 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -15,7 +15,7 @@ You should have a good understanding of all the foundational topics and a high-l ## How does validium work? {#how-does-validium work} -Validiums are a type of “rollup”: a [Layer 2](/layer-2/) scaling protocol designed to improve throughput by processing transactions off the main Ethereum chain. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs. This can be either a SNARK (Succinct Non-Interactive Argument of Knowledge) or SNARK (Scalable Transparent Argument of Knowledge). +Validiums are a type of “rollup”: a [Layer 2](/layer-2/) scaling protocol designed to improve throughput by processing transactions off the main Ethereum chain. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs. This can be either a SNARK (Succinct Non-Interactive Argument of Knowledge) or STARK (Scalable Transparent ARgument of Knowledge). As with ZK-rollups, validity proofs prevent invalid state transitions on validium chains and enhance security guarantees available to users. For instance, a malicious operator cannot steal funds since users can always withdraw funds directly from the on-chain contract [using Merkle proofs](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). From 5c2be70a4dc8ea5a46f61f2ac75004c2184454f8 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Mon, 30 May 2022 16:39:30 +0100 Subject: [PATCH 150/298] Update index.md Edits to incorporate feedback --- src/content/developers/docs/scaling/validium/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 88431f27c4a..a5032380e68 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -15,7 +15,9 @@ You should have a good understanding of all the foundational topics and a high-l ## How does validium work? {#how-does-validium work} -Validiums are a type of “rollup”: a [Layer 2](/layer-2/) scaling protocol designed to improve throughput by processing transactions off the main Ethereum chain. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs. This can be either a SNARK (Succinct Non-Interactive Argument of Knowledge) or STARK (Scalable Transparent ARgument of Knowledge). +Validiums are a type of “rollup”: a [Layer 2](/layer-2/) scaling protocol designed to improve throughput by processing transactions off the main Ethereum chain. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs, which can be SNARKs (Succinct Non-Interactive Argument of Knowledge) or STARKs (Scalable Transparent ARgument of Knowledge). + +More on [zero-knowledge proofs](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/). As with ZK-rollups, validity proofs prevent invalid state transitions on validium chains and enhance security guarantees available to users. For instance, a malicious operator cannot steal funds since users can always withdraw funds directly from the on-chain contract [using Merkle proofs](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). From c500d56fc61796ad8123f3ff2af1716ebb564707 Mon Sep 17 00:00:00 2001 From: Nico Date: Tue, 31 May 2022 01:16:30 +0900 Subject: [PATCH 151/298] addinterface --- src/components/YouTube.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/YouTube.tsx b/src/components/YouTube.tsx index 2ac3266b568..40da9dd185a 100644 --- a/src/components/YouTube.tsx +++ b/src/components/YouTube.tsx @@ -15,7 +15,14 @@ const Figure = styled.figure` * e.g. For https://www.youtube.com/watch?v=H-O3r2YMWJ4&t=123 the `start` is 123 (which means 123 seconds) * @returns Embedded YouTube video component */ -const YouTube = ({ id, start, title }) => { + +export interface IProps { + id: string + start: string + title: string +} + +const YouTube: React.FC = ({ id, start, title }) => { const startQuery = parseInt(start) > 0 ? `?start=${start}` : "" const baseUrl = "https://www.youtube.com/embed/" const src = baseUrl + id + startQuery From 193a3ebdefe0495e130766d63de96f2b51097790 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 30 May 2022 10:48:27 -0600 Subject: [PATCH 152/298] remove md issue template --- .github/ISSUE_TEMPLATE/suggest_wallet.md | 201 ----------------------- 1 file changed, 201 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/suggest_wallet.md diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.md b/.github/ISSUE_TEMPLATE/suggest_wallet.md deleted file mode 100644 index 0f3ec96532a..00000000000 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -name: Suggest a wallet -about: Suggest a new wallet to list on ethereum.org -title: "" -labels: "wallet :purse:," -assignees: "" ---- - -Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-products/). Only continue with the issue if the wallet meets the criteria listed there. - -### Project info - -**Wallet name** - - - -**Wallet description** - - - -**Wallet logo** - - - -**Background color for brand logo** - - - -**URL to the project** - - - -**URL to the documentation** - - - -**When did the wallet go live to users?** - - - -**Does the wallet have an active development team?** - - - -**Is the wallet globally accessible?** - - - -**Is the wallet available in multiple languages?** - - - -**What social links are there for the project?** - - - -### Device - -**Does the wallet have a mobile app? If yes, which operating systems are supported (iOS, Android)?** - - - -**Does the wallet have a desktop app? If yes, which operating systems are supported (Windows, Mac, Linux)?** - - - -**Does the wallet have a browser extension? If yes, which browsers are supported (Chromium, Firefox, Safari)?** - - - -**Is it a hardware wallet?** - - - -### Security - -**Is the source code for the wallet fully open-source?** - - - -**What license is the wallet software released under?** - - - -**Who holds the private keys?** - - - - - -**Please describe the measures taken to ensure the wallet's security and provide documentation wherever possible** - - - -**Has the wallet's smart contract code been audited?** - - - -**Does the wallet have an internal security team?** - - - -**Any other security testing that should be noted?** - - - -**Spam protection?** - - - -### Features - -**Does the wallet support connecting to a hardware wallet?** - - - -**Does the wallet support WalletConnect?** - - - -**Does the wallet support importing Ethereum RPC endpoints?** - - - -**Does the wallet support viewing and interacting with NFTs?** - - - -**Does the wallet support connecting to Ethereum applications?** - - - -**Does the wallet support staking directly?** - - - -**Does the wallet support swaps directly?** - - - -**Does the wallet support multi-chain networks?** - - - -**Does the wallet allow the user to customize gas fees?** - - - -**Does the wallet support sending transactions to ENS addresses?** - - - -**Does the wallet support importing or automatically querying and displaying ERC-20 tokens?** - - - -**Does the wallet support EIP-1559 (type 2) transactions?** - - - -### Finance - -**Does the wallet have fiat on-ramps through credit/debit cards, wire transfers, or bank transfers (ACH)?** - - - -**Does the wallet support withdrawals to fiat?** - - - -### Smart contract - -**Is the wallet a multi-signature wallet?** - - - -**Does the wallet support social recovery?** - - - -### Support - -**Who can the ethereum.org team can contact regarding the wallet in future?** - - - - -**Does the wallet have a dedicated support team?** - - - - -**What educational resources/documentation do you provide to users?** - - - -### Extra - -**Does the wallet have any integrated tools not mentioned above?** - - From 8680d9543178b0bce706a13095990bf73aaf18b8 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 30 May 2022 11:01:02 -0600 Subject: [PATCH 153/298] update new content changes --- src/content/developers/docs/bridges/index.md | 36 +- src/gatsby-types.d.ts | 10628 +++++++++++++++++ 2 files changed, 10652 insertions(+), 12 deletions(-) create mode 100644 src/gatsby-types.d.ts diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index bf7824ff26f..db4a20a3add 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -7,7 +7,6 @@ sidebar: true With the proliferation of L1 blockchains and L2 [scaling](/developers/docs/scaling/) solutions, alongside an ever-growing number of decentralized applications going cross-chain, the need for communication and asset movement across chains has become an essential part of network infrastructure. Different types of bridges exist to help make this possible. - ## Need for bridges {#need-for-bridges} Bridges exist to connect blockchain networks. They enable connectivity and interoperability between blockchains. @@ -18,11 +17,17 @@ Bridges offer a way for isolated blockchain environments to connect with each ot ## Benefits of bridges {#benefits-of-bridges} -Put simply, bridges unlock developer potential by allowing blockchain networks to exchange data and move assets between them. +Put simply, bridges unlock numerous use cases by allowing blockchain networks to exchange data and move assets between them. Blockchains have unique strengths, weaknesses, and approaches to building applications (such as speed, throughput, costliness, etc.). Bridges help the development of the overall crypto ecosystem by enabling blockchains to leverage the innovations of each other. -Moreover, bridges unlock new use cases and possibilities for both users and developers. For example, users can now move assets across different ecosystems, making them more productive. For developers and protocols, bridges open up an almost limitless amount of possibilities by expanding the design space for [dapps](/developers/docs/dapps/) across multiple crypto ecosystems. +For developers, bridges enable the following: + +- the transfer of any data, information, and assets across chains. +- unlocking new features and use cases for protocols as bridges expand the design space for what protocols can offer. For example, a protocol for yield farming originally deployed on Ethereum Mainnet can offer liquidity pools across all EVM-compatible chains. +- the opportunity to leverage the strengths of different blockchains. For example, developers can benefit from the lower fees offered by the different L2 solutions by deploying their dapps across rollups, and sidechains and users can bridge across them. +- collaboration among developers from various blockchain ecosystems to build new products. +- attracting users and communities from various ecosystems to their dapps. ## How do bridges work? {#how-do-bridges-work} @@ -36,7 +41,7 @@ While there are many [types of bridge designs](https://blog.li.fi/what-are-block Bridges can usually be classified into one of the following buckets: -- **Native Bridges –** These bridges are typically built to bootstrap liquidity on a particular blockchain, making it easier for users to move funds to the ecosystem. For example, the Avalanche Bridge is built to make it convenient for users to bridge from [Ethereum](/developers/docs/intro-to-ethereum/) to Avalanche. Other such bridges include Polygon PoS Bridge, Arbitrum Bridge, etc. +- **Native Bridges –** These bridges are typically built to bootstrap liquidity on a particular blockchain, making it easier for users to move funds to the ecosystem. For example, the [Arbitrum Bridge](https://bridge.arbitrum.io/) is built to make it convenient for users to bridge from Ethereum Mainnet to Arbitrum. Other such bridges include Polygon PoS Bridge, [Optimism Gateway](https://gateway.optimism.io/), etc. - **Validator or Oracle Based Bridges –** These bridges rely on an external validator set or oracles to validate cross-chain transfers. Examples: Multichain and Across. - **Generalized Message Passing Bridges –** These bridges can transfer assets, along with messages and arbitrary data across chains. Examples: Nomad and LayerZero. - **Liquidity Networks –** These bridges primarily focus on transferring assets from one chain to another via atomic swaps. Generally, they don’t support cross-chain message passing. Examples: Connext and Hop. @@ -66,7 +71,6 @@ To evaluate trustless bridges based on other factors, we must break them down in Bridges account for the top three [biggest hacks in DeFi](https://rekt.news/leaderboard/) and are still in the early stages of development. Using any bridge carries the following risks: - **Smart Contract Risk –** While many bridges have successfully passed audits, all it takes is one flaw in a smart contract for assets to be exposed to hacks (ex: [Solana’s Wormhole Bridge](https://rekt.news/wormhole-rekt/)). -- **Technology Risk –** Given the complexity of bridge operations, there is a possibility of technology risks like software failure, buggy code, human error, spam, and malicious attacks. - **Systematic Financial Risks** – Many bridges use wrapped assets to mint canonical versions of the original asset on a new chain. This exposes the ecosystem to systematic risk, as we have seen wrapped versions of tokens exploited. - **Trusted Third-Party Risk –** Some bridges utilize a trusted design that requires users to rely on the assumption that validators will not collude to steal user funds. The need for users to trust these third-party actors exposes them to risks such as rug pulls, censorship, and other malicious activities. - **Open Issues –** Given that bridges are in the nascent stages of development, there are many unanswered questions related to how bridges will perform in different market conditions, like times of network congestion and during unforeseen events such as network-level attacks or state rollbacks. This uncertainty poses certain risks, the degree of which is still unknown. @@ -80,22 +84,30 @@ Here are some practical applications that developers can consider about bridges For developers, there are many ways to add support for bridges: 1. **Building your own bridge –** Building a secure and reliable bridge is not easy, especially if you take a more trust-minimized route. Moreover, it requires years of experience and technical expertise related to scalability and interoperability studies. Additionally, it would require a hands-on team to maintain a bridge and attract sufficient liquidity to make it feasible. -2. **Showing users multiple bridge options –** Many dapps require users to have their native token to interact with them. To enable users to access their tokens, they offer different bridge options on their website. However, this method is a quick fix to the problem as it takes the user away from the dapp interface and still requires them to interact with other dapps and bridges. This is a cumbersome onboarding experience with the increased scope of making mistakes. + +2. **Showing users multiple bridge options –** Many [dapps](https://ethereum.org/en/developers/docs/dapps/) require users to have their native token to interact with them. To enable users to access their tokens, they offer different bridge options on their website. However, this method is a quick fix to the problem as it takes the user away from the dapp interface and still requires them to interact with other dapps and bridges. This is a cumbersome onboarding experience with the increased scope of making mistakes. + 3. **Integrating a bridge –** This solution doesn’t require the dapp to send users to the external bridge and DEX interfaces. It allows dapps to improve the user onboarding experience. However, this approach has its limitations: - - Assessment and maintenance of bridges are hard and time-consuming. - - Selecting one bridge creates a single point of failure and dependency. - - The dapp is limited by the bridge’s capabilities. - - Bridges alone might not be enough. dapps might need DEXs to offer more functionality such as cross-chain swaps. + +- Assessment and maintenance of bridges are hard and time-consuming. + +- Selecting one bridge creates a single point of failure and dependency. + +- The dapp is limited by the bridge’s capabilities. + +- Bridges alone might not be enough. dapps might need DEXs to offer more functionality such as cross-chain swaps. + 4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers – the scarcest resource in crypto. + 5. **Integrating a bridge aggregator –** Another option for dapps is integrating a bridge aggregation solution that gives them access to multiple bridges. Bridge aggregators inherit the strengths of all the bridges and thus are not limited by any single bridge’s capabilities. Notably, the bridge aggregators typically maintain the bridge integrations, which saves the dapp from the hassle of staying on top of the technical and operational aspects of a bridge integration. - That being said, bridge aggregators also have their limitations. For instance, while they can offer more bridge options, many more bridges are typically available in the market other than those offered on the aggregator's platform. Moreover, just like bridges, bridge aggregators are also exposed to smart contract and technology risks (more smart contracts = more risks). +That being said, bridge aggregators also have their limitations. For instance, while they can offer more bridge options, many more bridges are typically available in the market other than those offered on the aggregator's platform. Moreover, just like bridges, bridge aggregators are also exposed to smart contract and technology risks (more smart contracts = more risks). If a dapp goes down the route of integrating a bridge or an aggregator, there are different options based on how deep the integration is meant to be. For instance, if it’s only a front-end integration to improve the user onboarding experience, a dapp would integrate the widget. However, if the integration is to explore deeper cross-chain strategies like staking, yield farming, etc., the dapp integrates the SDK or API. ### Deploying a dapp on multiple chains {#deploying-a-dapp-on-multiple-chains} -To deploy a dapp on multiple chains, developers can use development platforms like Alchemy, Hardhat, Truffle, etc. Typically, these platforms come with composable plugins that can enable dapps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the hardhat-deploy plugin. +To deploy a dapp on multiple chains, developers can use development platforms like Alchemy, Hardhat, Truffle, Moralis, etc. Typically, these platforms come with composable plugins that can enable dapps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the hardhat-deploy plugin. ### Monitoring contract activity across chains {#monitoring-contract-activity-across-chains} diff --git a/src/gatsby-types.d.ts b/src/gatsby-types.d.ts new file mode 100644 index 00000000000..723d2708c56 --- /dev/null +++ b/src/gatsby-types.d.ts @@ -0,0 +1,10628 @@ +/* eslint-disable */ + +/* THIS FILE IS AUTOGENERATED. CHANGES WILL BE LOST ON SUBSEQUENT RUNS. */ + +declare namespace Queries { + type Maybe = T | null + type InputMaybe = T | null + type Exact = { [K in keyof T]: T[K] } + type MakeOptional = Omit & { + [SubKey in K]?: Maybe + } + type MakeMaybe = Omit & { + [SubKey in K]: Maybe + } + /** All built-in and custom scalars, mapped to their actual values */ + type Scalars = { + /** The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID. */ + ID: string + /** The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. */ + String: string + /** The `Boolean` scalar type represents `true` or `false`. */ + Boolean: boolean + /** The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. */ + Int: number + /** The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). */ + Float: number + /** A date string, such as 2007-12-03, compliant with the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ + Date: string + /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ + JSON: Record + } + + type AVIFOptions = { + readonly lossless: InputMaybe + readonly quality: InputMaybe + readonly speed: InputMaybe + } + + type AlltimeJson = Node & { + readonly children: ReadonlyArray + readonly currency: Maybe + readonly data: Maybe>> + readonly dateRange: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly mode: Maybe + readonly name: Maybe + readonly parent: Maybe + readonly totalCosts: Maybe + readonly totalPreTranslated: Maybe + readonly totalTMSavings: Maybe + readonly unit: Maybe + readonly url: Maybe + } + + type AlltimeJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type AlltimeJsonConnection_distinctArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonConnection_groupArgs = { + field: AlltimeJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type AlltimeJsonConnection_maxArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonConnection_minArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonConnection_sumArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonData = { + readonly languages: Maybe>> + readonly user: Maybe + } + + type AlltimeJsonDataFilterInput = { + readonly languages: InputMaybe + readonly user: InputMaybe + } + + type AlltimeJsonDataFilterListInput = { + readonly elemMatch: InputMaybe + } + + type AlltimeJsonDataLanguages = { + readonly approvalCosts: Maybe + readonly approved: Maybe + readonly language: Maybe + readonly targetTranslated: Maybe + readonly translated: Maybe + readonly translatedByMt: Maybe + readonly translationCosts: Maybe + } + + type AlltimeJsonDataLanguagesApprovalCosts = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type AlltimeJsonDataLanguagesApprovalCostsFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type AlltimeJsonDataLanguagesApproved = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type AlltimeJsonDataLanguagesApprovedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type AlltimeJsonDataLanguagesFilterInput = { + readonly approvalCosts: InputMaybe + readonly approved: InputMaybe + readonly language: InputMaybe + readonly targetTranslated: InputMaybe + readonly translated: InputMaybe + readonly translatedByMt: InputMaybe + readonly translationCosts: InputMaybe + } + + type AlltimeJsonDataLanguagesFilterListInput = { + readonly elemMatch: InputMaybe + } + + type AlltimeJsonDataLanguagesLanguage = { + readonly id: Maybe + readonly name: Maybe + readonly preTranslate: Maybe + readonly tmSavings: Maybe + readonly totalCosts: Maybe + } + + type AlltimeJsonDataLanguagesLanguageFilterInput = { + readonly id: InputMaybe + readonly name: InputMaybe + readonly preTranslate: InputMaybe + readonly tmSavings: InputMaybe + readonly totalCosts: InputMaybe + } + + type AlltimeJsonDataLanguagesTargetTranslated = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type AlltimeJsonDataLanguagesTargetTranslatedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type AlltimeJsonDataLanguagesTranslated = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type AlltimeJsonDataLanguagesTranslatedByMt = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type AlltimeJsonDataLanguagesTranslatedByMtFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type AlltimeJsonDataLanguagesTranslatedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type AlltimeJsonDataLanguagesTranslationCosts = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type AlltimeJsonDataLanguagesTranslationCostsFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type AlltimeJsonDataUser = { + readonly avatarUrl: Maybe + readonly fullName: Maybe + readonly id: Maybe + readonly preTranslated: Maybe + readonly totalCosts: Maybe + readonly userRole: Maybe + readonly username: Maybe + } + + type AlltimeJsonDataUserFilterInput = { + readonly avatarUrl: InputMaybe + readonly fullName: InputMaybe + readonly id: InputMaybe + readonly preTranslated: InputMaybe + readonly totalCosts: InputMaybe + readonly userRole: InputMaybe + readonly username: InputMaybe + } + + type AlltimeJsonDateRange = { + readonly from: Maybe + readonly to: Maybe + } + + type AlltimeJsonDateRange_fromArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type AlltimeJsonDateRange_toArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type AlltimeJsonDateRangeFilterInput = { + readonly from: InputMaybe + readonly to: InputMaybe + } + + type AlltimeJsonEdge = { + readonly next: Maybe + readonly node: AlltimeJson + readonly previous: Maybe + } + + type AlltimeJsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "currency" + | "data" + | "data.languages" + | "data.languages.approvalCosts.default" + | "data.languages.approvalCosts.tmMatch" + | "data.languages.approvalCosts.total" + | "data.languages.approved.default" + | "data.languages.approved.tmMatch" + | "data.languages.approved.total" + | "data.languages.language.id" + | "data.languages.language.name" + | "data.languages.language.preTranslate" + | "data.languages.language.tmSavings" + | "data.languages.language.totalCosts" + | "data.languages.targetTranslated.default" + | "data.languages.targetTranslated.tmMatch" + | "data.languages.targetTranslated.total" + | "data.languages.translatedByMt.default" + | "data.languages.translatedByMt.tmMatch" + | "data.languages.translatedByMt.total" + | "data.languages.translated.default" + | "data.languages.translated.tmMatch" + | "data.languages.translated.total" + | "data.languages.translationCosts.default" + | "data.languages.translationCosts.tmMatch" + | "data.languages.translationCosts.total" + | "data.user.avatarUrl" + | "data.user.fullName" + | "data.user.id" + | "data.user.preTranslated" + | "data.user.totalCosts" + | "data.user.userRole" + | "data.user.username" + | "dateRange.from" + | "dateRange.to" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "mode" + | "name" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "totalCosts" + | "totalPreTranslated" + | "totalTMSavings" + | "unit" + | "url" + + type AlltimeJsonFilterInput = { + readonly children: InputMaybe + readonly currency: InputMaybe + readonly data: InputMaybe + readonly dateRange: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly mode: InputMaybe + readonly name: InputMaybe + readonly parent: InputMaybe + readonly totalCosts: InputMaybe + readonly totalPreTranslated: InputMaybe + readonly totalTMSavings: InputMaybe + readonly unit: InputMaybe + readonly url: InputMaybe + } + + type AlltimeJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type AlltimeJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type AlltimeJsonGroupConnection_distinctArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonGroupConnection_groupArgs = { + field: AlltimeJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type AlltimeJsonGroupConnection_maxArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonGroupConnection_minArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonGroupConnection_sumArgs = { + field: AlltimeJsonFieldsEnum + } + + type AlltimeJsonSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type BlurredOptions = { + /** Force the output format for the low-res preview. Default is to use the same format as the input. You should rarely need to change this */ + readonly toFormat: InputMaybe + /** Width of the generated low-res preview. Default is 20px */ + readonly width: InputMaybe + } + + type BooleanQueryOperatorInput = { + readonly eq: InputMaybe + readonly in: InputMaybe>> + readonly ne: InputMaybe + readonly nin: InputMaybe>> + } + + type CexLayer2SupportJson = Node & { + readonly children: ReadonlyArray + readonly id: Scalars["ID"] + readonly internal: Internal + readonly name: Maybe + readonly parent: Maybe + readonly supports_deposits: Maybe>> + readonly supports_withdrawals: Maybe< + ReadonlyArray> + > + readonly url: Maybe + } + + type CexLayer2SupportJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type CexLayer2SupportJsonConnection_distinctArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonConnection_groupArgs = { + field: CexLayer2SupportJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type CexLayer2SupportJsonConnection_maxArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonConnection_minArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonConnection_sumArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonEdge = { + readonly next: Maybe + readonly node: CexLayer2SupportJson + readonly previous: Maybe + } + + type CexLayer2SupportJsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "name" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "supports_deposits" + | "supports_withdrawals" + | "url" + + type CexLayer2SupportJsonFilterInput = { + readonly children: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly name: InputMaybe + readonly parent: InputMaybe + readonly supports_deposits: InputMaybe + readonly supports_withdrawals: InputMaybe + readonly url: InputMaybe + } + + type CexLayer2SupportJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type CexLayer2SupportJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type CexLayer2SupportJsonGroupConnection_distinctArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonGroupConnection_groupArgs = { + field: CexLayer2SupportJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type CexLayer2SupportJsonGroupConnection_maxArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonGroupConnection_minArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonGroupConnection_sumArgs = { + field: CexLayer2SupportJsonFieldsEnum + } + + type CexLayer2SupportJsonSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type CommunityEventsJson = Node & { + readonly children: ReadonlyArray + readonly description: Maybe + readonly endDate: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly location: Maybe + readonly parent: Maybe + readonly sponsor: Maybe + readonly startDate: Maybe + readonly title: Maybe + readonly to: Maybe + } + + type CommunityEventsJson_endDateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type CommunityEventsJson_startDateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type CommunityEventsJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type CommunityEventsJsonConnection_distinctArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonConnection_groupArgs = { + field: CommunityEventsJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type CommunityEventsJsonConnection_maxArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonConnection_minArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonConnection_sumArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonEdge = { + readonly next: Maybe + readonly node: CommunityEventsJson + readonly previous: Maybe + } + + type CommunityEventsJsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "description" + | "endDate" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "location" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "sponsor" + | "startDate" + | "title" + | "to" + + type CommunityEventsJsonFilterInput = { + readonly children: InputMaybe + readonly description: InputMaybe + readonly endDate: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly location: InputMaybe + readonly parent: InputMaybe + readonly sponsor: InputMaybe + readonly startDate: InputMaybe + readonly title: InputMaybe + readonly to: InputMaybe + } + + type CommunityEventsJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type CommunityEventsJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type CommunityEventsJsonGroupConnection_distinctArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonGroupConnection_groupArgs = { + field: CommunityEventsJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type CommunityEventsJsonGroupConnection_maxArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonGroupConnection_minArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonGroupConnection_sumArgs = { + field: CommunityEventsJsonFieldsEnum + } + + type CommunityEventsJsonSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type CommunityMeetupsJson = Node & { + readonly children: ReadonlyArray + readonly emoji: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly link: Maybe + readonly location: Maybe + readonly parent: Maybe + readonly title: Maybe + } + + type CommunityMeetupsJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type CommunityMeetupsJsonConnection_distinctArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonConnection_groupArgs = { + field: CommunityMeetupsJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type CommunityMeetupsJsonConnection_maxArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonConnection_minArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonConnection_sumArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonEdge = { + readonly next: Maybe + readonly node: CommunityMeetupsJson + readonly previous: Maybe + } + + type CommunityMeetupsJsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "emoji" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "link" + | "location" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "title" + + type CommunityMeetupsJsonFilterInput = { + readonly children: InputMaybe + readonly emoji: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly link: InputMaybe + readonly location: InputMaybe + readonly parent: InputMaybe + readonly title: InputMaybe + } + + type CommunityMeetupsJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type CommunityMeetupsJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type CommunityMeetupsJsonGroupConnection_distinctArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonGroupConnection_groupArgs = { + field: CommunityMeetupsJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type CommunityMeetupsJsonGroupConnection_maxArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonGroupConnection_minArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonGroupConnection_sumArgs = { + field: CommunityMeetupsJsonFieldsEnum + } + + type CommunityMeetupsJsonSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type ConsensusBountyHuntersCsv = Node & { + readonly children: ReadonlyArray + readonly id: Scalars["ID"] + readonly internal: Internal + readonly name: Maybe + readonly parent: Maybe + readonly score: Maybe + readonly username: Maybe + } + + type ConsensusBountyHuntersCsvConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ConsensusBountyHuntersCsvConnection_distinctArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvConnection_groupArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ConsensusBountyHuntersCsvConnection_maxArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvConnection_minArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvConnection_sumArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvEdge = { + readonly next: Maybe + readonly node: ConsensusBountyHuntersCsv + readonly previous: Maybe + } + + type ConsensusBountyHuntersCsvFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "name" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "score" + | "username" + + type ConsensusBountyHuntersCsvFilterInput = { + readonly children: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly name: InputMaybe + readonly parent: InputMaybe + readonly score: InputMaybe + readonly username: InputMaybe + } + + type ConsensusBountyHuntersCsvFilterListInput = { + readonly elemMatch: InputMaybe + } + + type ConsensusBountyHuntersCsvGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ConsensusBountyHuntersCsvGroupConnection_distinctArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvGroupConnection_groupArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ConsensusBountyHuntersCsvGroupConnection_maxArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvGroupConnection_minArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvGroupConnection_sumArgs = { + field: ConsensusBountyHuntersCsvFieldsEnum + } + + type ConsensusBountyHuntersCsvSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type DataJson = Node & { + readonly children: ReadonlyArray + readonly commit: Maybe + readonly contributors: Maybe>> + readonly contributorsPerLine: Maybe + readonly files: Maybe>> + readonly id: Scalars["ID"] + readonly imageSize: Maybe + readonly internal: Internal + readonly keyGen: Maybe>> + readonly nodeTools: Maybe>> + readonly parent: Maybe + readonly pools: Maybe>> + readonly projectName: Maybe + readonly projectOwner: Maybe + readonly repoHost: Maybe + readonly repoType: Maybe + readonly saas: Maybe>> + readonly skipCi: Maybe + } + + type DataJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type DataJsonConnection_distinctArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonConnection_groupArgs = { + field: DataJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type DataJsonConnection_maxArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonConnection_minArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonConnection_sumArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonContributors = { + readonly avatar_url: Maybe + readonly contributions: Maybe>> + readonly login: Maybe + readonly name: Maybe + readonly profile: Maybe + } + + type DataJsonContributorsFilterInput = { + readonly avatar_url: InputMaybe + readonly contributions: InputMaybe + readonly login: InputMaybe + readonly name: InputMaybe + readonly profile: InputMaybe + } + + type DataJsonContributorsFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonEdge = { + readonly next: Maybe + readonly node: DataJson + readonly previous: Maybe + } + + type DataJsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "commit" + | "contributors" + | "contributorsPerLine" + | "contributors.avatar_url" + | "contributors.contributions" + | "contributors.login" + | "contributors.name" + | "contributors.profile" + | "files" + | "id" + | "imageSize" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "keyGen" + | "keyGen.audits" + | "keyGen.audits.name" + | "keyGen.audits.url" + | "keyGen.hasBugBounty" + | "keyGen.hue" + | "keyGen.isFoss" + | "keyGen.isPermissionless" + | "keyGen.isSelfCustody" + | "keyGen.isTrustless" + | "keyGen.launchDate" + | "keyGen.matomo.eventAction" + | "keyGen.matomo.eventCategory" + | "keyGen.matomo.eventName" + | "keyGen.name" + | "keyGen.platforms" + | "keyGen.socials.discord" + | "keyGen.socials.github" + | "keyGen.socials.twitter" + | "keyGen.svgPath" + | "keyGen.ui" + | "keyGen.url" + | "nodeTools" + | "nodeTools.additionalStake" + | "nodeTools.additionalStakeUnit" + | "nodeTools.audits" + | "nodeTools.audits.name" + | "nodeTools.audits.url" + | "nodeTools.easyClientSwitching" + | "nodeTools.hasBugBounty" + | "nodeTools.hue" + | "nodeTools.isFoss" + | "nodeTools.isPermissionless" + | "nodeTools.isTrustless" + | "nodeTools.launchDate" + | "nodeTools.matomo.eventAction" + | "nodeTools.matomo.eventCategory" + | "nodeTools.matomo.eventName" + | "nodeTools.minEth" + | "nodeTools.multiClient" + | "nodeTools.name" + | "nodeTools.platforms" + | "nodeTools.socials.discord" + | "nodeTools.socials.github" + | "nodeTools.socials.telegram" + | "nodeTools.socials.twitter" + | "nodeTools.svgPath" + | "nodeTools.tokens" + | "nodeTools.tokens.address" + | "nodeTools.tokens.name" + | "nodeTools.tokens.symbol" + | "nodeTools.ui" + | "nodeTools.url" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "pools" + | "pools.audits" + | "pools.audits.date" + | "pools.audits.name" + | "pools.audits.url" + | "pools.feePercentage" + | "pools.hasBugBounty" + | "pools.hasPermissionlessNodes" + | "pools.hue" + | "pools.isFoss" + | "pools.isTrustless" + | "pools.launchDate" + | "pools.matomo.eventAction" + | "pools.matomo.eventCategory" + | "pools.matomo.eventName" + | "pools.minEth" + | "pools.name" + | "pools.pctMajorityClient" + | "pools.platforms" + | "pools.socials.discord" + | "pools.socials.github" + | "pools.socials.reddit" + | "pools.socials.telegram" + | "pools.socials.twitter" + | "pools.svgPath" + | "pools.telegram" + | "pools.tokens" + | "pools.tokens.address" + | "pools.tokens.name" + | "pools.tokens.symbol" + | "pools.twitter" + | "pools.ui" + | "pools.url" + | "projectName" + | "projectOwner" + | "repoHost" + | "repoType" + | "saas" + | "saas.additionalStake" + | "saas.additionalStakeUnit" + | "saas.audits" + | "saas.audits.name" + | "saas.audits.url" + | "saas.hasBugBounty" + | "saas.hue" + | "saas.isFoss" + | "saas.isPermissionless" + | "saas.isSelfCustody" + | "saas.isTrustless" + | "saas.launchDate" + | "saas.matomo.eventAction" + | "saas.matomo.eventCategory" + | "saas.matomo.eventName" + | "saas.minEth" + | "saas.monthlyFee" + | "saas.monthlyFeeUnit" + | "saas.name" + | "saas.pctMajorityClient" + | "saas.platforms" + | "saas.socials.discord" + | "saas.socials.github" + | "saas.socials.telegram" + | "saas.socials.twitter" + | "saas.svgPath" + | "saas.ui" + | "saas.url" + | "skipCi" + + type DataJsonFilterInput = { + readonly children: InputMaybe + readonly commit: InputMaybe + readonly contributors: InputMaybe + readonly contributorsPerLine: InputMaybe + readonly files: InputMaybe + readonly id: InputMaybe + readonly imageSize: InputMaybe + readonly internal: InputMaybe + readonly keyGen: InputMaybe + readonly nodeTools: InputMaybe + readonly parent: InputMaybe + readonly pools: InputMaybe + readonly projectName: InputMaybe + readonly projectOwner: InputMaybe + readonly repoHost: InputMaybe + readonly repoType: InputMaybe + readonly saas: InputMaybe + readonly skipCi: InputMaybe + } + + type DataJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type DataJsonGroupConnection_distinctArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonGroupConnection_groupArgs = { + field: DataJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type DataJsonGroupConnection_maxArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonGroupConnection_minArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonGroupConnection_sumArgs = { + field: DataJsonFieldsEnum + } + + type DataJsonKeyGen = { + readonly audits: Maybe>> + readonly hasBugBounty: Maybe + readonly hue: Maybe + readonly isFoss: Maybe + readonly isPermissionless: Maybe + readonly isSelfCustody: Maybe + readonly isTrustless: Maybe + readonly launchDate: Maybe + readonly matomo: Maybe + readonly name: Maybe + readonly platforms: Maybe>> + readonly socials: Maybe + readonly svgPath: Maybe + readonly ui: Maybe>> + readonly url: Maybe + } + + type DataJsonKeyGen_launchDateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type DataJsonKeyGenAudits = { + readonly name: Maybe + readonly url: Maybe + } + + type DataJsonKeyGenAuditsFilterInput = { + readonly name: InputMaybe + readonly url: InputMaybe + } + + type DataJsonKeyGenAuditsFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonKeyGenFilterInput = { + readonly audits: InputMaybe + readonly hasBugBounty: InputMaybe + readonly hue: InputMaybe + readonly isFoss: InputMaybe + readonly isPermissionless: InputMaybe + readonly isSelfCustody: InputMaybe + readonly isTrustless: InputMaybe + readonly launchDate: InputMaybe + readonly matomo: InputMaybe + readonly name: InputMaybe + readonly platforms: InputMaybe + readonly socials: InputMaybe + readonly svgPath: InputMaybe + readonly ui: InputMaybe + readonly url: InputMaybe + } + + type DataJsonKeyGenFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonKeyGenMatomo = { + readonly eventAction: Maybe + readonly eventCategory: Maybe + readonly eventName: Maybe + } + + type DataJsonKeyGenMatomoFilterInput = { + readonly eventAction: InputMaybe + readonly eventCategory: InputMaybe + readonly eventName: InputMaybe + } + + type DataJsonKeyGenSocials = { + readonly discord: Maybe + readonly github: Maybe + readonly twitter: Maybe + } + + type DataJsonKeyGenSocialsFilterInput = { + readonly discord: InputMaybe + readonly github: InputMaybe + readonly twitter: InputMaybe + } + + type DataJsonNodeTools = { + readonly additionalStake: Maybe + readonly additionalStakeUnit: Maybe + readonly audits: Maybe>> + readonly easyClientSwitching: Maybe + readonly hasBugBounty: Maybe + readonly hue: Maybe + readonly isFoss: Maybe + readonly isPermissionless: Maybe + readonly isTrustless: Maybe + readonly launchDate: Maybe + readonly matomo: Maybe + readonly minEth: Maybe + readonly multiClient: Maybe + readonly name: Maybe + readonly platforms: Maybe>> + readonly socials: Maybe + readonly svgPath: Maybe + readonly tokens: Maybe>> + readonly ui: Maybe>> + readonly url: Maybe + } + + type DataJsonNodeTools_launchDateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type DataJsonNodeToolsAudits = { + readonly name: Maybe + readonly url: Maybe + } + + type DataJsonNodeToolsAuditsFilterInput = { + readonly name: InputMaybe + readonly url: InputMaybe + } + + type DataJsonNodeToolsAuditsFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonNodeToolsFilterInput = { + readonly additionalStake: InputMaybe + readonly additionalStakeUnit: InputMaybe + readonly audits: InputMaybe + readonly easyClientSwitching: InputMaybe + readonly hasBugBounty: InputMaybe + readonly hue: InputMaybe + readonly isFoss: InputMaybe + readonly isPermissionless: InputMaybe + readonly isTrustless: InputMaybe + readonly launchDate: InputMaybe + readonly matomo: InputMaybe + readonly minEth: InputMaybe + readonly multiClient: InputMaybe + readonly name: InputMaybe + readonly platforms: InputMaybe + readonly socials: InputMaybe + readonly svgPath: InputMaybe + readonly tokens: InputMaybe + readonly ui: InputMaybe + readonly url: InputMaybe + } + + type DataJsonNodeToolsFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonNodeToolsMatomo = { + readonly eventAction: Maybe + readonly eventCategory: Maybe + readonly eventName: Maybe + } + + type DataJsonNodeToolsMatomoFilterInput = { + readonly eventAction: InputMaybe + readonly eventCategory: InputMaybe + readonly eventName: InputMaybe + } + + type DataJsonNodeToolsSocials = { + readonly discord: Maybe + readonly github: Maybe + readonly telegram: Maybe + readonly twitter: Maybe + } + + type DataJsonNodeToolsSocialsFilterInput = { + readonly discord: InputMaybe + readonly github: InputMaybe + readonly telegram: InputMaybe + readonly twitter: InputMaybe + } + + type DataJsonNodeToolsTokens = { + readonly address: Maybe + readonly name: Maybe + readonly symbol: Maybe + } + + type DataJsonNodeToolsTokensFilterInput = { + readonly address: InputMaybe + readonly name: InputMaybe + readonly symbol: InputMaybe + } + + type DataJsonNodeToolsTokensFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonPools = { + readonly audits: Maybe>> + readonly feePercentage: Maybe + readonly hasBugBounty: Maybe + readonly hasPermissionlessNodes: Maybe + readonly hue: Maybe + readonly isFoss: Maybe + readonly isTrustless: Maybe + readonly launchDate: Maybe + readonly matomo: Maybe + readonly minEth: Maybe + readonly name: Maybe + readonly pctMajorityClient: Maybe + readonly platforms: Maybe>> + readonly socials: Maybe + readonly svgPath: Maybe + readonly telegram: Maybe + readonly tokens: Maybe>> + readonly twitter: Maybe + readonly ui: Maybe>> + readonly url: Maybe + } + + type DataJsonPools_launchDateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type DataJsonPoolsAudits = { + readonly date: Maybe + readonly name: Maybe + readonly url: Maybe + } + + type DataJsonPoolsAudits_dateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type DataJsonPoolsAuditsFilterInput = { + readonly date: InputMaybe + readonly name: InputMaybe + readonly url: InputMaybe + } + + type DataJsonPoolsAuditsFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonPoolsFilterInput = { + readonly audits: InputMaybe + readonly feePercentage: InputMaybe + readonly hasBugBounty: InputMaybe + readonly hasPermissionlessNodes: InputMaybe + readonly hue: InputMaybe + readonly isFoss: InputMaybe + readonly isTrustless: InputMaybe + readonly launchDate: InputMaybe + readonly matomo: InputMaybe + readonly minEth: InputMaybe + readonly name: InputMaybe + readonly pctMajorityClient: InputMaybe + readonly platforms: InputMaybe + readonly socials: InputMaybe + readonly svgPath: InputMaybe + readonly telegram: InputMaybe + readonly tokens: InputMaybe + readonly twitter: InputMaybe + readonly ui: InputMaybe + readonly url: InputMaybe + } + + type DataJsonPoolsFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonPoolsMatomo = { + readonly eventAction: Maybe + readonly eventCategory: Maybe + readonly eventName: Maybe + } + + type DataJsonPoolsMatomoFilterInput = { + readonly eventAction: InputMaybe + readonly eventCategory: InputMaybe + readonly eventName: InputMaybe + } + + type DataJsonPoolsSocials = { + readonly discord: Maybe + readonly github: Maybe + readonly reddit: Maybe + readonly telegram: Maybe + readonly twitter: Maybe + } + + type DataJsonPoolsSocialsFilterInput = { + readonly discord: InputMaybe + readonly github: InputMaybe + readonly reddit: InputMaybe + readonly telegram: InputMaybe + readonly twitter: InputMaybe + } + + type DataJsonPoolsTokens = { + readonly address: Maybe + readonly name: Maybe + readonly symbol: Maybe + } + + type DataJsonPoolsTokensFilterInput = { + readonly address: InputMaybe + readonly name: InputMaybe + readonly symbol: InputMaybe + } + + type DataJsonPoolsTokensFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonSaas = { + readonly additionalStake: Maybe + readonly additionalStakeUnit: Maybe + readonly audits: Maybe>> + readonly hasBugBounty: Maybe + readonly hue: Maybe + readonly isFoss: Maybe + readonly isPermissionless: Maybe + readonly isSelfCustody: Maybe + readonly isTrustless: Maybe + readonly launchDate: Maybe + readonly matomo: Maybe + readonly minEth: Maybe + readonly monthlyFee: Maybe + readonly monthlyFeeUnit: Maybe + readonly name: Maybe + readonly pctMajorityClient: Maybe + readonly platforms: Maybe>> + readonly socials: Maybe + readonly svgPath: Maybe + readonly ui: Maybe>> + readonly url: Maybe + } + + type DataJsonSaas_launchDateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type DataJsonSaasAudits = { + readonly name: Maybe + readonly url: Maybe + } + + type DataJsonSaasAuditsFilterInput = { + readonly name: InputMaybe + readonly url: InputMaybe + } + + type DataJsonSaasAuditsFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonSaasFilterInput = { + readonly additionalStake: InputMaybe + readonly additionalStakeUnit: InputMaybe + readonly audits: InputMaybe + readonly hasBugBounty: InputMaybe + readonly hue: InputMaybe + readonly isFoss: InputMaybe + readonly isPermissionless: InputMaybe + readonly isSelfCustody: InputMaybe + readonly isTrustless: InputMaybe + readonly launchDate: InputMaybe + readonly matomo: InputMaybe + readonly minEth: InputMaybe + readonly monthlyFee: InputMaybe + readonly monthlyFeeUnit: InputMaybe + readonly name: InputMaybe + readonly pctMajorityClient: InputMaybe + readonly platforms: InputMaybe + readonly socials: InputMaybe + readonly svgPath: InputMaybe + readonly ui: InputMaybe + readonly url: InputMaybe + } + + type DataJsonSaasFilterListInput = { + readonly elemMatch: InputMaybe + } + + type DataJsonSaasMatomo = { + readonly eventAction: Maybe + readonly eventCategory: Maybe + readonly eventName: Maybe + } + + type DataJsonSaasMatomoFilterInput = { + readonly eventAction: InputMaybe + readonly eventCategory: InputMaybe + readonly eventName: InputMaybe + } + + type DataJsonSaasSocials = { + readonly discord: Maybe + readonly github: Maybe + readonly telegram: Maybe + readonly twitter: Maybe + } + + type DataJsonSaasSocialsFilterInput = { + readonly discord: InputMaybe + readonly github: InputMaybe + readonly telegram: InputMaybe + readonly twitter: InputMaybe + } + + type DataJsonSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type DateQueryOperatorInput = { + readonly eq: InputMaybe + readonly gt: InputMaybe + readonly gte: InputMaybe + readonly in: InputMaybe>> + readonly lt: InputMaybe + readonly lte: InputMaybe + readonly ne: InputMaybe + readonly nin: InputMaybe>> + } + + type Directory = Node & { + readonly absolutePath: Scalars["String"] + readonly accessTime: Scalars["Date"] + readonly atime: Scalars["Date"] + readonly atimeMs: Scalars["Float"] + readonly base: Scalars["String"] + readonly birthTime: Scalars["Date"] + /** @deprecated Use `birthTime` instead */ + readonly birthtime: Maybe + /** @deprecated Use `birthTime` instead */ + readonly birthtimeMs: Maybe + readonly changeTime: Scalars["Date"] + readonly children: ReadonlyArray + readonly ctime: Scalars["Date"] + readonly ctimeMs: Scalars["Float"] + readonly dev: Scalars["Int"] + readonly dir: Scalars["String"] + readonly ext: Scalars["String"] + readonly extension: Scalars["String"] + readonly gid: Scalars["Int"] + readonly id: Scalars["ID"] + readonly ino: Scalars["Float"] + readonly internal: Internal + readonly mode: Scalars["Int"] + readonly modifiedTime: Scalars["Date"] + readonly mtime: Scalars["Date"] + readonly mtimeMs: Scalars["Float"] + readonly name: Scalars["String"] + readonly nlink: Scalars["Int"] + readonly parent: Maybe + readonly prettySize: Scalars["String"] + readonly rdev: Scalars["Int"] + readonly relativeDirectory: Scalars["String"] + readonly relativePath: Scalars["String"] + readonly root: Scalars["String"] + readonly size: Scalars["Int"] + readonly sourceInstanceName: Scalars["String"] + readonly uid: Scalars["Int"] + } + + type Directory_accessTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type Directory_atimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type Directory_birthTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type Directory_changeTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type Directory_ctimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type Directory_modifiedTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type Directory_mtimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type DirectoryConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type DirectoryConnection_distinctArgs = { + field: DirectoryFieldsEnum + } + + type DirectoryConnection_groupArgs = { + field: DirectoryFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type DirectoryConnection_maxArgs = { + field: DirectoryFieldsEnum + } + + type DirectoryConnection_minArgs = { + field: DirectoryFieldsEnum + } + + type DirectoryConnection_sumArgs = { + field: DirectoryFieldsEnum + } + + type DirectoryEdge = { + readonly next: Maybe + readonly node: Directory + readonly previous: Maybe + } + + type DirectoryFieldsEnum = + | "absolutePath" + | "accessTime" + | "atime" + | "atimeMs" + | "base" + | "birthTime" + | "birthtime" + | "birthtimeMs" + | "changeTime" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "ctime" + | "ctimeMs" + | "dev" + | "dir" + | "ext" + | "extension" + | "gid" + | "id" + | "ino" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "mode" + | "modifiedTime" + | "mtime" + | "mtimeMs" + | "name" + | "nlink" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "prettySize" + | "rdev" + | "relativeDirectory" + | "relativePath" + | "root" + | "size" + | "sourceInstanceName" + | "uid" + + type DirectoryFilterInput = { + readonly absolutePath: InputMaybe + readonly accessTime: InputMaybe + readonly atime: InputMaybe + readonly atimeMs: InputMaybe + readonly base: InputMaybe + readonly birthTime: InputMaybe + readonly birthtime: InputMaybe + readonly birthtimeMs: InputMaybe + readonly changeTime: InputMaybe + readonly children: InputMaybe + readonly ctime: InputMaybe + readonly ctimeMs: InputMaybe + readonly dev: InputMaybe + readonly dir: InputMaybe + readonly ext: InputMaybe + readonly extension: InputMaybe + readonly gid: InputMaybe + readonly id: InputMaybe + readonly ino: InputMaybe + readonly internal: InputMaybe + readonly mode: InputMaybe + readonly modifiedTime: InputMaybe + readonly mtime: InputMaybe + readonly mtimeMs: InputMaybe + readonly name: InputMaybe + readonly nlink: InputMaybe + readonly parent: InputMaybe + readonly prettySize: InputMaybe + readonly rdev: InputMaybe + readonly relativeDirectory: InputMaybe + readonly relativePath: InputMaybe + readonly root: InputMaybe + readonly size: InputMaybe + readonly sourceInstanceName: InputMaybe + readonly uid: InputMaybe + } + + type DirectoryGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type DirectoryGroupConnection_distinctArgs = { + field: DirectoryFieldsEnum + } + + type DirectoryGroupConnection_groupArgs = { + field: DirectoryFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type DirectoryGroupConnection_maxArgs = { + field: DirectoryFieldsEnum + } + + type DirectoryGroupConnection_minArgs = { + field: DirectoryFieldsEnum + } + + type DirectoryGroupConnection_sumArgs = { + field: DirectoryFieldsEnum + } + + type DirectorySortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type DuotoneGradient = { + readonly highlight: Scalars["String"] + readonly opacity: InputMaybe + readonly shadow: Scalars["String"] + } + + type ExchangesByCountryCsv = Node & { + readonly binance: Maybe + readonly binanceus: Maybe + readonly bitbuy: Maybe + readonly bitfinex: Maybe + readonly bitflyer: Maybe + readonly bitkub: Maybe + readonly bitso: Maybe + readonly bittrex: Maybe + readonly bitvavo: Maybe + readonly bybit: Maybe + readonly children: ReadonlyArray + readonly coinbase: Maybe + readonly coinmama: Maybe + readonly coinspot: Maybe + readonly country: Maybe + readonly cryptocom: Maybe + readonly easycrypto: Maybe + readonly ftx: Maybe + readonly ftxus: Maybe + readonly gateio: Maybe + readonly gemini: Maybe + readonly huobiglobal: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly itezcom: Maybe + readonly kraken: Maybe + readonly kucoin: Maybe + readonly moonpay: Maybe + readonly mtpelerin: Maybe + readonly okx: Maybe + readonly parent: Maybe + readonly rain: Maybe + readonly simplex: Maybe + readonly wazirx: Maybe + readonly wyre: Maybe + } + + type ExchangesByCountryCsvConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ExchangesByCountryCsvConnection_distinctArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvConnection_groupArgs = { + field: ExchangesByCountryCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ExchangesByCountryCsvConnection_maxArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvConnection_minArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvConnection_sumArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvEdge = { + readonly next: Maybe + readonly node: ExchangesByCountryCsv + readonly previous: Maybe + } + + type ExchangesByCountryCsvFieldsEnum = + | "binance" + | "binanceus" + | "bitbuy" + | "bitfinex" + | "bitflyer" + | "bitkub" + | "bitso" + | "bittrex" + | "bitvavo" + | "bybit" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "coinbase" + | "coinmama" + | "coinspot" + | "country" + | "cryptocom" + | "easycrypto" + | "ftx" + | "ftxus" + | "gateio" + | "gemini" + | "huobiglobal" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "itezcom" + | "kraken" + | "kucoin" + | "moonpay" + | "mtpelerin" + | "okx" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "rain" + | "simplex" + | "wazirx" + | "wyre" + + type ExchangesByCountryCsvFilterInput = { + readonly binance: InputMaybe + readonly binanceus: InputMaybe + readonly bitbuy: InputMaybe + readonly bitfinex: InputMaybe + readonly bitflyer: InputMaybe + readonly bitkub: InputMaybe + readonly bitso: InputMaybe + readonly bittrex: InputMaybe + readonly bitvavo: InputMaybe + readonly bybit: InputMaybe + readonly children: InputMaybe + readonly coinbase: InputMaybe + readonly coinmama: InputMaybe + readonly coinspot: InputMaybe + readonly country: InputMaybe + readonly cryptocom: InputMaybe + readonly easycrypto: InputMaybe + readonly ftx: InputMaybe + readonly ftxus: InputMaybe + readonly gateio: InputMaybe + readonly gemini: InputMaybe + readonly huobiglobal: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly itezcom: InputMaybe + readonly kraken: InputMaybe + readonly kucoin: InputMaybe + readonly moonpay: InputMaybe + readonly mtpelerin: InputMaybe + readonly okx: InputMaybe + readonly parent: InputMaybe + readonly rain: InputMaybe + readonly simplex: InputMaybe + readonly wazirx: InputMaybe + readonly wyre: InputMaybe + } + + type ExchangesByCountryCsvFilterListInput = { + readonly elemMatch: InputMaybe + } + + type ExchangesByCountryCsvGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ExchangesByCountryCsvGroupConnection_distinctArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvGroupConnection_groupArgs = { + field: ExchangesByCountryCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ExchangesByCountryCsvGroupConnection_maxArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvGroupConnection_minArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvGroupConnection_sumArgs = { + field: ExchangesByCountryCsvFieldsEnum + } + + type ExchangesByCountryCsvSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type ExecutionBountyHuntersCsv = Node & { + readonly children: ReadonlyArray + readonly id: Scalars["ID"] + readonly internal: Internal + readonly name: Maybe + readonly parent: Maybe + readonly score: Maybe + readonly username: Maybe + } + + type ExecutionBountyHuntersCsvConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ExecutionBountyHuntersCsvConnection_distinctArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvConnection_groupArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ExecutionBountyHuntersCsvConnection_maxArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvConnection_minArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvConnection_sumArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvEdge = { + readonly next: Maybe + readonly node: ExecutionBountyHuntersCsv + readonly previous: Maybe + } + + type ExecutionBountyHuntersCsvFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "name" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "score" + | "username" + + type ExecutionBountyHuntersCsvFilterInput = { + readonly children: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly name: InputMaybe + readonly parent: InputMaybe + readonly score: InputMaybe + readonly username: InputMaybe + } + + type ExecutionBountyHuntersCsvFilterListInput = { + readonly elemMatch: InputMaybe + } + + type ExecutionBountyHuntersCsvGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ExecutionBountyHuntersCsvGroupConnection_distinctArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvGroupConnection_groupArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ExecutionBountyHuntersCsvGroupConnection_maxArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvGroupConnection_minArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvGroupConnection_sumArgs = { + field: ExecutionBountyHuntersCsvFieldsEnum + } + + type ExecutionBountyHuntersCsvSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type ExternalTutorialsJson = Node & { + readonly author: Maybe + readonly authorGithub: Maybe + readonly children: ReadonlyArray + readonly description: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly lang: Maybe + readonly parent: Maybe + readonly publishDate: Maybe + readonly skillLevel: Maybe + readonly tags: Maybe>> + readonly timeToRead: Maybe + readonly title: Maybe + readonly url: Maybe + } + + type ExternalTutorialsJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ExternalTutorialsJsonConnection_distinctArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonConnection_groupArgs = { + field: ExternalTutorialsJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ExternalTutorialsJsonConnection_maxArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonConnection_minArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonConnection_sumArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonEdge = { + readonly next: Maybe + readonly node: ExternalTutorialsJson + readonly previous: Maybe + } + + type ExternalTutorialsJsonFieldsEnum = + | "author" + | "authorGithub" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "description" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "lang" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "publishDate" + | "skillLevel" + | "tags" + | "timeToRead" + | "title" + | "url" + + type ExternalTutorialsJsonFilterInput = { + readonly author: InputMaybe + readonly authorGithub: InputMaybe + readonly children: InputMaybe + readonly description: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly lang: InputMaybe + readonly parent: InputMaybe + readonly publishDate: InputMaybe + readonly skillLevel: InputMaybe + readonly tags: InputMaybe + readonly timeToRead: InputMaybe + readonly title: InputMaybe + readonly url: InputMaybe + } + + type ExternalTutorialsJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type ExternalTutorialsJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ExternalTutorialsJsonGroupConnection_distinctArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonGroupConnection_groupArgs = { + field: ExternalTutorialsJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ExternalTutorialsJsonGroupConnection_maxArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonGroupConnection_minArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonGroupConnection_sumArgs = { + field: ExternalTutorialsJsonFieldsEnum + } + + type ExternalTutorialsJsonSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type File = Node & { + readonly absolutePath: Scalars["String"] + readonly accessTime: Scalars["Date"] + readonly atime: Scalars["Date"] + readonly atimeMs: Scalars["Float"] + readonly base: Scalars["String"] + readonly birthTime: Scalars["Date"] + /** @deprecated Use `birthTime` instead */ + readonly birthtime: Maybe + /** @deprecated Use `birthTime` instead */ + readonly birthtimeMs: Maybe + readonly blksize: Maybe + readonly blocks: Maybe + readonly changeTime: Scalars["Date"] + /** Returns the first child node of type AlltimeJson or null if there are no children of given type on this node */ + readonly childAlltimeJson: Maybe + /** Returns the first child node of type CexLayer2SupportJson or null if there are no children of given type on this node */ + readonly childCexLayer2SupportJson: Maybe + /** Returns the first child node of type CommunityEventsJson or null if there are no children of given type on this node */ + readonly childCommunityEventsJson: Maybe + /** Returns the first child node of type CommunityMeetupsJson or null if there are no children of given type on this node */ + readonly childCommunityMeetupsJson: Maybe + /** Returns the first child node of type ConsensusBountyHuntersCsv or null if there are no children of given type on this node */ + readonly childConsensusBountyHuntersCsv: Maybe + /** Returns the first child node of type DataJson or null if there are no children of given type on this node */ + readonly childDataJson: Maybe + /** Returns the first child node of type ExchangesByCountryCsv or null if there are no children of given type on this node */ + readonly childExchangesByCountryCsv: Maybe + /** Returns the first child node of type ExecutionBountyHuntersCsv or null if there are no children of given type on this node */ + readonly childExecutionBountyHuntersCsv: Maybe + /** Returns the first child node of type ExternalTutorialsJson or null if there are no children of given type on this node */ + readonly childExternalTutorialsJson: Maybe + /** Returns the first child node of type ImageSharp or null if there are no children of given type on this node */ + readonly childImageSharp: Maybe + /** Returns the first child node of type Layer2Json or null if there are no children of given type on this node */ + readonly childLayer2Json: Maybe + /** Returns the first child node of type Mdx or null if there are no children of given type on this node */ + readonly childMdx: Maybe + /** Returns the first child node of type MonthJson or null if there are no children of given type on this node */ + readonly childMonthJson: Maybe + /** Returns the first child node of type QuarterJson or null if there are no children of given type on this node */ + readonly childQuarterJson: Maybe + /** Returns the first child node of type WalletsCsv or null if there are no children of given type on this node */ + readonly childWalletsCsv: Maybe + readonly children: ReadonlyArray + /** Returns all children nodes filtered by type AlltimeJson */ + readonly childrenAlltimeJson: Maybe>> + /** Returns all children nodes filtered by type CexLayer2SupportJson */ + readonly childrenCexLayer2SupportJson: Maybe< + ReadonlyArray> + > + /** Returns all children nodes filtered by type CommunityEventsJson */ + readonly childrenCommunityEventsJson: Maybe< + ReadonlyArray> + > + /** Returns all children nodes filtered by type CommunityMeetupsJson */ + readonly childrenCommunityMeetupsJson: Maybe< + ReadonlyArray> + > + /** Returns all children nodes filtered by type ConsensusBountyHuntersCsv */ + readonly childrenConsensusBountyHuntersCsv: Maybe< + ReadonlyArray> + > + /** Returns all children nodes filtered by type DataJson */ + readonly childrenDataJson: Maybe>> + /** Returns all children nodes filtered by type ExchangesByCountryCsv */ + readonly childrenExchangesByCountryCsv: Maybe< + ReadonlyArray> + > + /** Returns all children nodes filtered by type ExecutionBountyHuntersCsv */ + readonly childrenExecutionBountyHuntersCsv: Maybe< + ReadonlyArray> + > + /** Returns all children nodes filtered by type ExternalTutorialsJson */ + readonly childrenExternalTutorialsJson: Maybe< + ReadonlyArray> + > + /** Returns all children nodes filtered by type ImageSharp */ + readonly childrenImageSharp: Maybe>> + /** Returns all children nodes filtered by type Layer2Json */ + readonly childrenLayer2Json: Maybe>> + /** Returns all children nodes filtered by type Mdx */ + readonly childrenMdx: Maybe>> + /** Returns all children nodes filtered by type MonthJson */ + readonly childrenMonthJson: Maybe>> + /** Returns all children nodes filtered by type QuarterJson */ + readonly childrenQuarterJson: Maybe>> + /** Returns all children nodes filtered by type WalletsCsv */ + readonly childrenWalletsCsv: Maybe>> + readonly ctime: Scalars["Date"] + readonly ctimeMs: Scalars["Float"] + readonly dev: Scalars["Int"] + readonly dir: Scalars["String"] + readonly ext: Scalars["String"] + readonly extension: Scalars["String"] + readonly fields: Maybe + readonly gid: Scalars["Int"] + readonly id: Scalars["ID"] + readonly ino: Scalars["Float"] + readonly internal: Internal + readonly mode: Scalars["Int"] + readonly modifiedTime: Scalars["Date"] + readonly mtime: Scalars["Date"] + readonly mtimeMs: Scalars["Float"] + readonly name: Scalars["String"] + readonly nlink: Scalars["Int"] + readonly parent: Maybe + readonly prettySize: Scalars["String"] + /** Copy file to static directory and return public url to it */ + readonly publicURL: Maybe + readonly rdev: Scalars["Int"] + readonly relativeDirectory: Scalars["String"] + readonly relativePath: Scalars["String"] + readonly root: Scalars["String"] + readonly size: Scalars["Int"] + readonly sourceInstanceName: Scalars["String"] + readonly uid: Scalars["Int"] + } + + type File_accessTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type File_atimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type File_birthTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type File_changeTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type File_ctimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type File_modifiedTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type File_mtimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type FileConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type FileConnection_distinctArgs = { + field: FileFieldsEnum + } + + type FileConnection_groupArgs = { + field: FileFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type FileConnection_maxArgs = { + field: FileFieldsEnum + } + + type FileConnection_minArgs = { + field: FileFieldsEnum + } + + type FileConnection_sumArgs = { + field: FileFieldsEnum + } + + type FileEdge = { + readonly next: Maybe + readonly node: File + readonly previous: Maybe + } + + type FileFields = { + readonly gitLogLatestAuthorEmail: Maybe + readonly gitLogLatestAuthorName: Maybe + readonly gitLogLatestDate: Maybe + } + + type FileFields_gitLogLatestDateArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type FileFieldsEnum = + | "absolutePath" + | "accessTime" + | "atime" + | "atimeMs" + | "base" + | "birthTime" + | "birthtime" + | "birthtimeMs" + | "blksize" + | "blocks" + | "changeTime" + | "childAlltimeJson.children" + | "childAlltimeJson.children.children" + | "childAlltimeJson.children.children.children" + | "childAlltimeJson.children.children.id" + | "childAlltimeJson.children.id" + | "childAlltimeJson.children.internal.content" + | "childAlltimeJson.children.internal.contentDigest" + | "childAlltimeJson.children.internal.description" + | "childAlltimeJson.children.internal.fieldOwners" + | "childAlltimeJson.children.internal.ignoreType" + | "childAlltimeJson.children.internal.mediaType" + | "childAlltimeJson.children.internal.owner" + | "childAlltimeJson.children.internal.type" + | "childAlltimeJson.children.parent.children" + | "childAlltimeJson.children.parent.id" + | "childAlltimeJson.currency" + | "childAlltimeJson.data" + | "childAlltimeJson.data.languages" + | "childAlltimeJson.data.user.avatarUrl" + | "childAlltimeJson.data.user.fullName" + | "childAlltimeJson.data.user.id" + | "childAlltimeJson.data.user.preTranslated" + | "childAlltimeJson.data.user.totalCosts" + | "childAlltimeJson.data.user.userRole" + | "childAlltimeJson.data.user.username" + | "childAlltimeJson.dateRange.from" + | "childAlltimeJson.dateRange.to" + | "childAlltimeJson.id" + | "childAlltimeJson.internal.content" + | "childAlltimeJson.internal.contentDigest" + | "childAlltimeJson.internal.description" + | "childAlltimeJson.internal.fieldOwners" + | "childAlltimeJson.internal.ignoreType" + | "childAlltimeJson.internal.mediaType" + | "childAlltimeJson.internal.owner" + | "childAlltimeJson.internal.type" + | "childAlltimeJson.mode" + | "childAlltimeJson.name" + | "childAlltimeJson.parent.children" + | "childAlltimeJson.parent.children.children" + | "childAlltimeJson.parent.children.id" + | "childAlltimeJson.parent.id" + | "childAlltimeJson.parent.internal.content" + | "childAlltimeJson.parent.internal.contentDigest" + | "childAlltimeJson.parent.internal.description" + | "childAlltimeJson.parent.internal.fieldOwners" + | "childAlltimeJson.parent.internal.ignoreType" + | "childAlltimeJson.parent.internal.mediaType" + | "childAlltimeJson.parent.internal.owner" + | "childAlltimeJson.parent.internal.type" + | "childAlltimeJson.parent.parent.children" + | "childAlltimeJson.parent.parent.id" + | "childAlltimeJson.totalCosts" + | "childAlltimeJson.totalPreTranslated" + | "childAlltimeJson.totalTMSavings" + | "childAlltimeJson.unit" + | "childAlltimeJson.url" + | "childCexLayer2SupportJson.children" + | "childCexLayer2SupportJson.children.children" + | "childCexLayer2SupportJson.children.children.children" + | "childCexLayer2SupportJson.children.children.id" + | "childCexLayer2SupportJson.children.id" + | "childCexLayer2SupportJson.children.internal.content" + | "childCexLayer2SupportJson.children.internal.contentDigest" + | "childCexLayer2SupportJson.children.internal.description" + | "childCexLayer2SupportJson.children.internal.fieldOwners" + | "childCexLayer2SupportJson.children.internal.ignoreType" + | "childCexLayer2SupportJson.children.internal.mediaType" + | "childCexLayer2SupportJson.children.internal.owner" + | "childCexLayer2SupportJson.children.internal.type" + | "childCexLayer2SupportJson.children.parent.children" + | "childCexLayer2SupportJson.children.parent.id" + | "childCexLayer2SupportJson.id" + | "childCexLayer2SupportJson.internal.content" + | "childCexLayer2SupportJson.internal.contentDigest" + | "childCexLayer2SupportJson.internal.description" + | "childCexLayer2SupportJson.internal.fieldOwners" + | "childCexLayer2SupportJson.internal.ignoreType" + | "childCexLayer2SupportJson.internal.mediaType" + | "childCexLayer2SupportJson.internal.owner" + | "childCexLayer2SupportJson.internal.type" + | "childCexLayer2SupportJson.name" + | "childCexLayer2SupportJson.parent.children" + | "childCexLayer2SupportJson.parent.children.children" + | "childCexLayer2SupportJson.parent.children.id" + | "childCexLayer2SupportJson.parent.id" + | "childCexLayer2SupportJson.parent.internal.content" + | "childCexLayer2SupportJson.parent.internal.contentDigest" + | "childCexLayer2SupportJson.parent.internal.description" + | "childCexLayer2SupportJson.parent.internal.fieldOwners" + | "childCexLayer2SupportJson.parent.internal.ignoreType" + | "childCexLayer2SupportJson.parent.internal.mediaType" + | "childCexLayer2SupportJson.parent.internal.owner" + | "childCexLayer2SupportJson.parent.internal.type" + | "childCexLayer2SupportJson.parent.parent.children" + | "childCexLayer2SupportJson.parent.parent.id" + | "childCexLayer2SupportJson.supports_deposits" + | "childCexLayer2SupportJson.supports_withdrawals" + | "childCexLayer2SupportJson.url" + | "childCommunityEventsJson.children" + | "childCommunityEventsJson.children.children" + | "childCommunityEventsJson.children.children.children" + | "childCommunityEventsJson.children.children.id" + | "childCommunityEventsJson.children.id" + | "childCommunityEventsJson.children.internal.content" + | "childCommunityEventsJson.children.internal.contentDigest" + | "childCommunityEventsJson.children.internal.description" + | "childCommunityEventsJson.children.internal.fieldOwners" + | "childCommunityEventsJson.children.internal.ignoreType" + | "childCommunityEventsJson.children.internal.mediaType" + | "childCommunityEventsJson.children.internal.owner" + | "childCommunityEventsJson.children.internal.type" + | "childCommunityEventsJson.children.parent.children" + | "childCommunityEventsJson.children.parent.id" + | "childCommunityEventsJson.description" + | "childCommunityEventsJson.endDate" + | "childCommunityEventsJson.id" + | "childCommunityEventsJson.internal.content" + | "childCommunityEventsJson.internal.contentDigest" + | "childCommunityEventsJson.internal.description" + | "childCommunityEventsJson.internal.fieldOwners" + | "childCommunityEventsJson.internal.ignoreType" + | "childCommunityEventsJson.internal.mediaType" + | "childCommunityEventsJson.internal.owner" + | "childCommunityEventsJson.internal.type" + | "childCommunityEventsJson.location" + | "childCommunityEventsJson.parent.children" + | "childCommunityEventsJson.parent.children.children" + | "childCommunityEventsJson.parent.children.id" + | "childCommunityEventsJson.parent.id" + | "childCommunityEventsJson.parent.internal.content" + | "childCommunityEventsJson.parent.internal.contentDigest" + | "childCommunityEventsJson.parent.internal.description" + | "childCommunityEventsJson.parent.internal.fieldOwners" + | "childCommunityEventsJson.parent.internal.ignoreType" + | "childCommunityEventsJson.parent.internal.mediaType" + | "childCommunityEventsJson.parent.internal.owner" + | "childCommunityEventsJson.parent.internal.type" + | "childCommunityEventsJson.parent.parent.children" + | "childCommunityEventsJson.parent.parent.id" + | "childCommunityEventsJson.sponsor" + | "childCommunityEventsJson.startDate" + | "childCommunityEventsJson.title" + | "childCommunityEventsJson.to" + | "childCommunityMeetupsJson.children" + | "childCommunityMeetupsJson.children.children" + | "childCommunityMeetupsJson.children.children.children" + | "childCommunityMeetupsJson.children.children.id" + | "childCommunityMeetupsJson.children.id" + | "childCommunityMeetupsJson.children.internal.content" + | "childCommunityMeetupsJson.children.internal.contentDigest" + | "childCommunityMeetupsJson.children.internal.description" + | "childCommunityMeetupsJson.children.internal.fieldOwners" + | "childCommunityMeetupsJson.children.internal.ignoreType" + | "childCommunityMeetupsJson.children.internal.mediaType" + | "childCommunityMeetupsJson.children.internal.owner" + | "childCommunityMeetupsJson.children.internal.type" + | "childCommunityMeetupsJson.children.parent.children" + | "childCommunityMeetupsJson.children.parent.id" + | "childCommunityMeetupsJson.emoji" + | "childCommunityMeetupsJson.id" + | "childCommunityMeetupsJson.internal.content" + | "childCommunityMeetupsJson.internal.contentDigest" + | "childCommunityMeetupsJson.internal.description" + | "childCommunityMeetupsJson.internal.fieldOwners" + | "childCommunityMeetupsJson.internal.ignoreType" + | "childCommunityMeetupsJson.internal.mediaType" + | "childCommunityMeetupsJson.internal.owner" + | "childCommunityMeetupsJson.internal.type" + | "childCommunityMeetupsJson.link" + | "childCommunityMeetupsJson.location" + | "childCommunityMeetupsJson.parent.children" + | "childCommunityMeetupsJson.parent.children.children" + | "childCommunityMeetupsJson.parent.children.id" + | "childCommunityMeetupsJson.parent.id" + | "childCommunityMeetupsJson.parent.internal.content" + | "childCommunityMeetupsJson.parent.internal.contentDigest" + | "childCommunityMeetupsJson.parent.internal.description" + | "childCommunityMeetupsJson.parent.internal.fieldOwners" + | "childCommunityMeetupsJson.parent.internal.ignoreType" + | "childCommunityMeetupsJson.parent.internal.mediaType" + | "childCommunityMeetupsJson.parent.internal.owner" + | "childCommunityMeetupsJson.parent.internal.type" + | "childCommunityMeetupsJson.parent.parent.children" + | "childCommunityMeetupsJson.parent.parent.id" + | "childCommunityMeetupsJson.title" + | "childConsensusBountyHuntersCsv.children" + | "childConsensusBountyHuntersCsv.children.children" + | "childConsensusBountyHuntersCsv.children.children.children" + | "childConsensusBountyHuntersCsv.children.children.id" + | "childConsensusBountyHuntersCsv.children.id" + | "childConsensusBountyHuntersCsv.children.internal.content" + | "childConsensusBountyHuntersCsv.children.internal.contentDigest" + | "childConsensusBountyHuntersCsv.children.internal.description" + | "childConsensusBountyHuntersCsv.children.internal.fieldOwners" + | "childConsensusBountyHuntersCsv.children.internal.ignoreType" + | "childConsensusBountyHuntersCsv.children.internal.mediaType" + | "childConsensusBountyHuntersCsv.children.internal.owner" + | "childConsensusBountyHuntersCsv.children.internal.type" + | "childConsensusBountyHuntersCsv.children.parent.children" + | "childConsensusBountyHuntersCsv.children.parent.id" + | "childConsensusBountyHuntersCsv.id" + | "childConsensusBountyHuntersCsv.internal.content" + | "childConsensusBountyHuntersCsv.internal.contentDigest" + | "childConsensusBountyHuntersCsv.internal.description" + | "childConsensusBountyHuntersCsv.internal.fieldOwners" + | "childConsensusBountyHuntersCsv.internal.ignoreType" + | "childConsensusBountyHuntersCsv.internal.mediaType" + | "childConsensusBountyHuntersCsv.internal.owner" + | "childConsensusBountyHuntersCsv.internal.type" + | "childConsensusBountyHuntersCsv.name" + | "childConsensusBountyHuntersCsv.parent.children" + | "childConsensusBountyHuntersCsv.parent.children.children" + | "childConsensusBountyHuntersCsv.parent.children.id" + | "childConsensusBountyHuntersCsv.parent.id" + | "childConsensusBountyHuntersCsv.parent.internal.content" + | "childConsensusBountyHuntersCsv.parent.internal.contentDigest" + | "childConsensusBountyHuntersCsv.parent.internal.description" + | "childConsensusBountyHuntersCsv.parent.internal.fieldOwners" + | "childConsensusBountyHuntersCsv.parent.internal.ignoreType" + | "childConsensusBountyHuntersCsv.parent.internal.mediaType" + | "childConsensusBountyHuntersCsv.parent.internal.owner" + | "childConsensusBountyHuntersCsv.parent.internal.type" + | "childConsensusBountyHuntersCsv.parent.parent.children" + | "childConsensusBountyHuntersCsv.parent.parent.id" + | "childConsensusBountyHuntersCsv.score" + | "childConsensusBountyHuntersCsv.username" + | "childDataJson.children" + | "childDataJson.children.children" + | "childDataJson.children.children.children" + | "childDataJson.children.children.id" + | "childDataJson.children.id" + | "childDataJson.children.internal.content" + | "childDataJson.children.internal.contentDigest" + | "childDataJson.children.internal.description" + | "childDataJson.children.internal.fieldOwners" + | "childDataJson.children.internal.ignoreType" + | "childDataJson.children.internal.mediaType" + | "childDataJson.children.internal.owner" + | "childDataJson.children.internal.type" + | "childDataJson.children.parent.children" + | "childDataJson.children.parent.id" + | "childDataJson.commit" + | "childDataJson.contributors" + | "childDataJson.contributorsPerLine" + | "childDataJson.contributors.avatar_url" + | "childDataJson.contributors.contributions" + | "childDataJson.contributors.login" + | "childDataJson.contributors.name" + | "childDataJson.contributors.profile" + | "childDataJson.files" + | "childDataJson.id" + | "childDataJson.imageSize" + | "childDataJson.internal.content" + | "childDataJson.internal.contentDigest" + | "childDataJson.internal.description" + | "childDataJson.internal.fieldOwners" + | "childDataJson.internal.ignoreType" + | "childDataJson.internal.mediaType" + | "childDataJson.internal.owner" + | "childDataJson.internal.type" + | "childDataJson.keyGen" + | "childDataJson.keyGen.audits" + | "childDataJson.keyGen.audits.name" + | "childDataJson.keyGen.audits.url" + | "childDataJson.keyGen.hasBugBounty" + | "childDataJson.keyGen.hue" + | "childDataJson.keyGen.isFoss" + | "childDataJson.keyGen.isPermissionless" + | "childDataJson.keyGen.isSelfCustody" + | "childDataJson.keyGen.isTrustless" + | "childDataJson.keyGen.launchDate" + | "childDataJson.keyGen.matomo.eventAction" + | "childDataJson.keyGen.matomo.eventCategory" + | "childDataJson.keyGen.matomo.eventName" + | "childDataJson.keyGen.name" + | "childDataJson.keyGen.platforms" + | "childDataJson.keyGen.socials.discord" + | "childDataJson.keyGen.socials.github" + | "childDataJson.keyGen.socials.twitter" + | "childDataJson.keyGen.svgPath" + | "childDataJson.keyGen.ui" + | "childDataJson.keyGen.url" + | "childDataJson.nodeTools" + | "childDataJson.nodeTools.additionalStake" + | "childDataJson.nodeTools.additionalStakeUnit" + | "childDataJson.nodeTools.audits" + | "childDataJson.nodeTools.audits.name" + | "childDataJson.nodeTools.audits.url" + | "childDataJson.nodeTools.easyClientSwitching" + | "childDataJson.nodeTools.hasBugBounty" + | "childDataJson.nodeTools.hue" + | "childDataJson.nodeTools.isFoss" + | "childDataJson.nodeTools.isPermissionless" + | "childDataJson.nodeTools.isTrustless" + | "childDataJson.nodeTools.launchDate" + | "childDataJson.nodeTools.matomo.eventAction" + | "childDataJson.nodeTools.matomo.eventCategory" + | "childDataJson.nodeTools.matomo.eventName" + | "childDataJson.nodeTools.minEth" + | "childDataJson.nodeTools.multiClient" + | "childDataJson.nodeTools.name" + | "childDataJson.nodeTools.platforms" + | "childDataJson.nodeTools.socials.discord" + | "childDataJson.nodeTools.socials.github" + | "childDataJson.nodeTools.socials.telegram" + | "childDataJson.nodeTools.socials.twitter" + | "childDataJson.nodeTools.svgPath" + | "childDataJson.nodeTools.tokens" + | "childDataJson.nodeTools.tokens.address" + | "childDataJson.nodeTools.tokens.name" + | "childDataJson.nodeTools.tokens.symbol" + | "childDataJson.nodeTools.ui" + | "childDataJson.nodeTools.url" + | "childDataJson.parent.children" + | "childDataJson.parent.children.children" + | "childDataJson.parent.children.id" + | "childDataJson.parent.id" + | "childDataJson.parent.internal.content" + | "childDataJson.parent.internal.contentDigest" + | "childDataJson.parent.internal.description" + | "childDataJson.parent.internal.fieldOwners" + | "childDataJson.parent.internal.ignoreType" + | "childDataJson.parent.internal.mediaType" + | "childDataJson.parent.internal.owner" + | "childDataJson.parent.internal.type" + | "childDataJson.parent.parent.children" + | "childDataJson.parent.parent.id" + | "childDataJson.pools" + | "childDataJson.pools.audits" + | "childDataJson.pools.audits.date" + | "childDataJson.pools.audits.name" + | "childDataJson.pools.audits.url" + | "childDataJson.pools.feePercentage" + | "childDataJson.pools.hasBugBounty" + | "childDataJson.pools.hasPermissionlessNodes" + | "childDataJson.pools.hue" + | "childDataJson.pools.isFoss" + | "childDataJson.pools.isTrustless" + | "childDataJson.pools.launchDate" + | "childDataJson.pools.matomo.eventAction" + | "childDataJson.pools.matomo.eventCategory" + | "childDataJson.pools.matomo.eventName" + | "childDataJson.pools.minEth" + | "childDataJson.pools.name" + | "childDataJson.pools.pctMajorityClient" + | "childDataJson.pools.platforms" + | "childDataJson.pools.socials.discord" + | "childDataJson.pools.socials.github" + | "childDataJson.pools.socials.reddit" + | "childDataJson.pools.socials.telegram" + | "childDataJson.pools.socials.twitter" + | "childDataJson.pools.svgPath" + | "childDataJson.pools.telegram" + | "childDataJson.pools.tokens" + | "childDataJson.pools.tokens.address" + | "childDataJson.pools.tokens.name" + | "childDataJson.pools.tokens.symbol" + | "childDataJson.pools.twitter" + | "childDataJson.pools.ui" + | "childDataJson.pools.url" + | "childDataJson.projectName" + | "childDataJson.projectOwner" + | "childDataJson.repoHost" + | "childDataJson.repoType" + | "childDataJson.saas" + | "childDataJson.saas.additionalStake" + | "childDataJson.saas.additionalStakeUnit" + | "childDataJson.saas.audits" + | "childDataJson.saas.audits.name" + | "childDataJson.saas.audits.url" + | "childDataJson.saas.hasBugBounty" + | "childDataJson.saas.hue" + | "childDataJson.saas.isFoss" + | "childDataJson.saas.isPermissionless" + | "childDataJson.saas.isSelfCustody" + | "childDataJson.saas.isTrustless" + | "childDataJson.saas.launchDate" + | "childDataJson.saas.matomo.eventAction" + | "childDataJson.saas.matomo.eventCategory" + | "childDataJson.saas.matomo.eventName" + | "childDataJson.saas.minEth" + | "childDataJson.saas.monthlyFee" + | "childDataJson.saas.monthlyFeeUnit" + | "childDataJson.saas.name" + | "childDataJson.saas.pctMajorityClient" + | "childDataJson.saas.platforms" + | "childDataJson.saas.socials.discord" + | "childDataJson.saas.socials.github" + | "childDataJson.saas.socials.telegram" + | "childDataJson.saas.socials.twitter" + | "childDataJson.saas.svgPath" + | "childDataJson.saas.ui" + | "childDataJson.saas.url" + | "childDataJson.skipCi" + | "childExchangesByCountryCsv.binance" + | "childExchangesByCountryCsv.binanceus" + | "childExchangesByCountryCsv.bitbuy" + | "childExchangesByCountryCsv.bitfinex" + | "childExchangesByCountryCsv.bitflyer" + | "childExchangesByCountryCsv.bitkub" + | "childExchangesByCountryCsv.bitso" + | "childExchangesByCountryCsv.bittrex" + | "childExchangesByCountryCsv.bitvavo" + | "childExchangesByCountryCsv.bybit" + | "childExchangesByCountryCsv.children" + | "childExchangesByCountryCsv.children.children" + | "childExchangesByCountryCsv.children.children.children" + | "childExchangesByCountryCsv.children.children.id" + | "childExchangesByCountryCsv.children.id" + | "childExchangesByCountryCsv.children.internal.content" + | "childExchangesByCountryCsv.children.internal.contentDigest" + | "childExchangesByCountryCsv.children.internal.description" + | "childExchangesByCountryCsv.children.internal.fieldOwners" + | "childExchangesByCountryCsv.children.internal.ignoreType" + | "childExchangesByCountryCsv.children.internal.mediaType" + | "childExchangesByCountryCsv.children.internal.owner" + | "childExchangesByCountryCsv.children.internal.type" + | "childExchangesByCountryCsv.children.parent.children" + | "childExchangesByCountryCsv.children.parent.id" + | "childExchangesByCountryCsv.coinbase" + | "childExchangesByCountryCsv.coinmama" + | "childExchangesByCountryCsv.coinspot" + | "childExchangesByCountryCsv.country" + | "childExchangesByCountryCsv.cryptocom" + | "childExchangesByCountryCsv.easycrypto" + | "childExchangesByCountryCsv.ftx" + | "childExchangesByCountryCsv.ftxus" + | "childExchangesByCountryCsv.gateio" + | "childExchangesByCountryCsv.gemini" + | "childExchangesByCountryCsv.huobiglobal" + | "childExchangesByCountryCsv.id" + | "childExchangesByCountryCsv.internal.content" + | "childExchangesByCountryCsv.internal.contentDigest" + | "childExchangesByCountryCsv.internal.description" + | "childExchangesByCountryCsv.internal.fieldOwners" + | "childExchangesByCountryCsv.internal.ignoreType" + | "childExchangesByCountryCsv.internal.mediaType" + | "childExchangesByCountryCsv.internal.owner" + | "childExchangesByCountryCsv.internal.type" + | "childExchangesByCountryCsv.itezcom" + | "childExchangesByCountryCsv.kraken" + | "childExchangesByCountryCsv.kucoin" + | "childExchangesByCountryCsv.moonpay" + | "childExchangesByCountryCsv.mtpelerin" + | "childExchangesByCountryCsv.okx" + | "childExchangesByCountryCsv.parent.children" + | "childExchangesByCountryCsv.parent.children.children" + | "childExchangesByCountryCsv.parent.children.id" + | "childExchangesByCountryCsv.parent.id" + | "childExchangesByCountryCsv.parent.internal.content" + | "childExchangesByCountryCsv.parent.internal.contentDigest" + | "childExchangesByCountryCsv.parent.internal.description" + | "childExchangesByCountryCsv.parent.internal.fieldOwners" + | "childExchangesByCountryCsv.parent.internal.ignoreType" + | "childExchangesByCountryCsv.parent.internal.mediaType" + | "childExchangesByCountryCsv.parent.internal.owner" + | "childExchangesByCountryCsv.parent.internal.type" + | "childExchangesByCountryCsv.parent.parent.children" + | "childExchangesByCountryCsv.parent.parent.id" + | "childExchangesByCountryCsv.rain" + | "childExchangesByCountryCsv.simplex" + | "childExchangesByCountryCsv.wazirx" + | "childExchangesByCountryCsv.wyre" + | "childExecutionBountyHuntersCsv.children" + | "childExecutionBountyHuntersCsv.children.children" + | "childExecutionBountyHuntersCsv.children.children.children" + | "childExecutionBountyHuntersCsv.children.children.id" + | "childExecutionBountyHuntersCsv.children.id" + | "childExecutionBountyHuntersCsv.children.internal.content" + | "childExecutionBountyHuntersCsv.children.internal.contentDigest" + | "childExecutionBountyHuntersCsv.children.internal.description" + | "childExecutionBountyHuntersCsv.children.internal.fieldOwners" + | "childExecutionBountyHuntersCsv.children.internal.ignoreType" + | "childExecutionBountyHuntersCsv.children.internal.mediaType" + | "childExecutionBountyHuntersCsv.children.internal.owner" + | "childExecutionBountyHuntersCsv.children.internal.type" + | "childExecutionBountyHuntersCsv.children.parent.children" + | "childExecutionBountyHuntersCsv.children.parent.id" + | "childExecutionBountyHuntersCsv.id" + | "childExecutionBountyHuntersCsv.internal.content" + | "childExecutionBountyHuntersCsv.internal.contentDigest" + | "childExecutionBountyHuntersCsv.internal.description" + | "childExecutionBountyHuntersCsv.internal.fieldOwners" + | "childExecutionBountyHuntersCsv.internal.ignoreType" + | "childExecutionBountyHuntersCsv.internal.mediaType" + | "childExecutionBountyHuntersCsv.internal.owner" + | "childExecutionBountyHuntersCsv.internal.type" + | "childExecutionBountyHuntersCsv.name" + | "childExecutionBountyHuntersCsv.parent.children" + | "childExecutionBountyHuntersCsv.parent.children.children" + | "childExecutionBountyHuntersCsv.parent.children.id" + | "childExecutionBountyHuntersCsv.parent.id" + | "childExecutionBountyHuntersCsv.parent.internal.content" + | "childExecutionBountyHuntersCsv.parent.internal.contentDigest" + | "childExecutionBountyHuntersCsv.parent.internal.description" + | "childExecutionBountyHuntersCsv.parent.internal.fieldOwners" + | "childExecutionBountyHuntersCsv.parent.internal.ignoreType" + | "childExecutionBountyHuntersCsv.parent.internal.mediaType" + | "childExecutionBountyHuntersCsv.parent.internal.owner" + | "childExecutionBountyHuntersCsv.parent.internal.type" + | "childExecutionBountyHuntersCsv.parent.parent.children" + | "childExecutionBountyHuntersCsv.parent.parent.id" + | "childExecutionBountyHuntersCsv.score" + | "childExecutionBountyHuntersCsv.username" + | "childExternalTutorialsJson.author" + | "childExternalTutorialsJson.authorGithub" + | "childExternalTutorialsJson.children" + | "childExternalTutorialsJson.children.children" + | "childExternalTutorialsJson.children.children.children" + | "childExternalTutorialsJson.children.children.id" + | "childExternalTutorialsJson.children.id" + | "childExternalTutorialsJson.children.internal.content" + | "childExternalTutorialsJson.children.internal.contentDigest" + | "childExternalTutorialsJson.children.internal.description" + | "childExternalTutorialsJson.children.internal.fieldOwners" + | "childExternalTutorialsJson.children.internal.ignoreType" + | "childExternalTutorialsJson.children.internal.mediaType" + | "childExternalTutorialsJson.children.internal.owner" + | "childExternalTutorialsJson.children.internal.type" + | "childExternalTutorialsJson.children.parent.children" + | "childExternalTutorialsJson.children.parent.id" + | "childExternalTutorialsJson.description" + | "childExternalTutorialsJson.id" + | "childExternalTutorialsJson.internal.content" + | "childExternalTutorialsJson.internal.contentDigest" + | "childExternalTutorialsJson.internal.description" + | "childExternalTutorialsJson.internal.fieldOwners" + | "childExternalTutorialsJson.internal.ignoreType" + | "childExternalTutorialsJson.internal.mediaType" + | "childExternalTutorialsJson.internal.owner" + | "childExternalTutorialsJson.internal.type" + | "childExternalTutorialsJson.lang" + | "childExternalTutorialsJson.parent.children" + | "childExternalTutorialsJson.parent.children.children" + | "childExternalTutorialsJson.parent.children.id" + | "childExternalTutorialsJson.parent.id" + | "childExternalTutorialsJson.parent.internal.content" + | "childExternalTutorialsJson.parent.internal.contentDigest" + | "childExternalTutorialsJson.parent.internal.description" + | "childExternalTutorialsJson.parent.internal.fieldOwners" + | "childExternalTutorialsJson.parent.internal.ignoreType" + | "childExternalTutorialsJson.parent.internal.mediaType" + | "childExternalTutorialsJson.parent.internal.owner" + | "childExternalTutorialsJson.parent.internal.type" + | "childExternalTutorialsJson.parent.parent.children" + | "childExternalTutorialsJson.parent.parent.id" + | "childExternalTutorialsJson.publishDate" + | "childExternalTutorialsJson.skillLevel" + | "childExternalTutorialsJson.tags" + | "childExternalTutorialsJson.timeToRead" + | "childExternalTutorialsJson.title" + | "childExternalTutorialsJson.url" + | "childImageSharp.children" + | "childImageSharp.children.children" + | "childImageSharp.children.children.children" + | "childImageSharp.children.children.id" + | "childImageSharp.children.id" + | "childImageSharp.children.internal.content" + | "childImageSharp.children.internal.contentDigest" + | "childImageSharp.children.internal.description" + | "childImageSharp.children.internal.fieldOwners" + | "childImageSharp.children.internal.ignoreType" + | "childImageSharp.children.internal.mediaType" + | "childImageSharp.children.internal.owner" + | "childImageSharp.children.internal.type" + | "childImageSharp.children.parent.children" + | "childImageSharp.children.parent.id" + | "childImageSharp.fixed.aspectRatio" + | "childImageSharp.fixed.base64" + | "childImageSharp.fixed.height" + | "childImageSharp.fixed.originalName" + | "childImageSharp.fixed.src" + | "childImageSharp.fixed.srcSet" + | "childImageSharp.fixed.srcSetWebp" + | "childImageSharp.fixed.srcWebp" + | "childImageSharp.fixed.tracedSVG" + | "childImageSharp.fixed.width" + | "childImageSharp.fluid.aspectRatio" + | "childImageSharp.fluid.base64" + | "childImageSharp.fluid.originalImg" + | "childImageSharp.fluid.originalName" + | "childImageSharp.fluid.presentationHeight" + | "childImageSharp.fluid.presentationWidth" + | "childImageSharp.fluid.sizes" + | "childImageSharp.fluid.src" + | "childImageSharp.fluid.srcSet" + | "childImageSharp.fluid.srcSetWebp" + | "childImageSharp.fluid.srcWebp" + | "childImageSharp.fluid.tracedSVG" + | "childImageSharp.gatsbyImageData" + | "childImageSharp.id" + | "childImageSharp.internal.content" + | "childImageSharp.internal.contentDigest" + | "childImageSharp.internal.description" + | "childImageSharp.internal.fieldOwners" + | "childImageSharp.internal.ignoreType" + | "childImageSharp.internal.mediaType" + | "childImageSharp.internal.owner" + | "childImageSharp.internal.type" + | "childImageSharp.original.height" + | "childImageSharp.original.src" + | "childImageSharp.original.width" + | "childImageSharp.parent.children" + | "childImageSharp.parent.children.children" + | "childImageSharp.parent.children.id" + | "childImageSharp.parent.id" + | "childImageSharp.parent.internal.content" + | "childImageSharp.parent.internal.contentDigest" + | "childImageSharp.parent.internal.description" + | "childImageSharp.parent.internal.fieldOwners" + | "childImageSharp.parent.internal.ignoreType" + | "childImageSharp.parent.internal.mediaType" + | "childImageSharp.parent.internal.owner" + | "childImageSharp.parent.internal.type" + | "childImageSharp.parent.parent.children" + | "childImageSharp.parent.parent.id" + | "childImageSharp.resize.aspectRatio" + | "childImageSharp.resize.height" + | "childImageSharp.resize.originalName" + | "childImageSharp.resize.src" + | "childImageSharp.resize.tracedSVG" + | "childImageSharp.resize.width" + | "childLayer2Json.children" + | "childLayer2Json.children.children" + | "childLayer2Json.children.children.children" + | "childLayer2Json.children.children.id" + | "childLayer2Json.children.id" + | "childLayer2Json.children.internal.content" + | "childLayer2Json.children.internal.contentDigest" + | "childLayer2Json.children.internal.description" + | "childLayer2Json.children.internal.fieldOwners" + | "childLayer2Json.children.internal.ignoreType" + | "childLayer2Json.children.internal.mediaType" + | "childLayer2Json.children.internal.owner" + | "childLayer2Json.children.internal.type" + | "childLayer2Json.children.parent.children" + | "childLayer2Json.children.parent.id" + | "childLayer2Json.id" + | "childLayer2Json.internal.content" + | "childLayer2Json.internal.contentDigest" + | "childLayer2Json.internal.description" + | "childLayer2Json.internal.fieldOwners" + | "childLayer2Json.internal.ignoreType" + | "childLayer2Json.internal.mediaType" + | "childLayer2Json.internal.owner" + | "childLayer2Json.internal.type" + | "childLayer2Json.optimistic" + | "childLayer2Json.optimistic.background" + | "childLayer2Json.optimistic.blockExplorer" + | "childLayer2Json.optimistic.bridge" + | "childLayer2Json.optimistic.bridgeWallets" + | "childLayer2Json.optimistic.description" + | "childLayer2Json.optimistic.developerDocs" + | "childLayer2Json.optimistic.ecosystemPortal" + | "childLayer2Json.optimistic.imageKey" + | "childLayer2Json.optimistic.l2beat" + | "childLayer2Json.optimistic.name" + | "childLayer2Json.optimistic.noteKey" + | "childLayer2Json.optimistic.purpose" + | "childLayer2Json.optimistic.tokenLists" + | "childLayer2Json.optimistic.website" + | "childLayer2Json.parent.children" + | "childLayer2Json.parent.children.children" + | "childLayer2Json.parent.children.id" + | "childLayer2Json.parent.id" + | "childLayer2Json.parent.internal.content" + | "childLayer2Json.parent.internal.contentDigest" + | "childLayer2Json.parent.internal.description" + | "childLayer2Json.parent.internal.fieldOwners" + | "childLayer2Json.parent.internal.ignoreType" + | "childLayer2Json.parent.internal.mediaType" + | "childLayer2Json.parent.internal.owner" + | "childLayer2Json.parent.internal.type" + | "childLayer2Json.parent.parent.children" + | "childLayer2Json.parent.parent.id" + | "childLayer2Json.zk" + | "childLayer2Json.zk.background" + | "childLayer2Json.zk.blockExplorer" + | "childLayer2Json.zk.bridge" + | "childLayer2Json.zk.bridgeWallets" + | "childLayer2Json.zk.description" + | "childLayer2Json.zk.developerDocs" + | "childLayer2Json.zk.ecosystemPortal" + | "childLayer2Json.zk.imageKey" + | "childLayer2Json.zk.l2beat" + | "childLayer2Json.zk.name" + | "childLayer2Json.zk.noteKey" + | "childLayer2Json.zk.purpose" + | "childLayer2Json.zk.tokenLists" + | "childLayer2Json.zk.website" + | "childMdx.body" + | "childMdx.children" + | "childMdx.children.children" + | "childMdx.children.children.children" + | "childMdx.children.children.id" + | "childMdx.children.id" + | "childMdx.children.internal.content" + | "childMdx.children.internal.contentDigest" + | "childMdx.children.internal.description" + | "childMdx.children.internal.fieldOwners" + | "childMdx.children.internal.ignoreType" + | "childMdx.children.internal.mediaType" + | "childMdx.children.internal.owner" + | "childMdx.children.internal.type" + | "childMdx.children.parent.children" + | "childMdx.children.parent.id" + | "childMdx.excerpt" + | "childMdx.fields.isOutdated" + | "childMdx.fields.readingTime.minutes" + | "childMdx.fields.readingTime.text" + | "childMdx.fields.readingTime.time" + | "childMdx.fields.readingTime.words" + | "childMdx.fields.relativePath" + | "childMdx.fields.slug" + | "childMdx.fileAbsolutePath" + | "childMdx.frontmatter.address" + | "childMdx.frontmatter.alt" + | "childMdx.frontmatter.author" + | "childMdx.frontmatter.authors" + | "childMdx.frontmatter.compensation" + | "childMdx.frontmatter.description" + | "childMdx.frontmatter.emoji" + | "childMdx.frontmatter.image.absolutePath" + | "childMdx.frontmatter.image.accessTime" + | "childMdx.frontmatter.image.atime" + | "childMdx.frontmatter.image.atimeMs" + | "childMdx.frontmatter.image.base" + | "childMdx.frontmatter.image.birthTime" + | "childMdx.frontmatter.image.birthtime" + | "childMdx.frontmatter.image.birthtimeMs" + | "childMdx.frontmatter.image.blksize" + | "childMdx.frontmatter.image.blocks" + | "childMdx.frontmatter.image.changeTime" + | "childMdx.frontmatter.image.children" + | "childMdx.frontmatter.image.childrenAlltimeJson" + | "childMdx.frontmatter.image.childrenCexLayer2SupportJson" + | "childMdx.frontmatter.image.childrenCommunityEventsJson" + | "childMdx.frontmatter.image.childrenCommunityMeetupsJson" + | "childMdx.frontmatter.image.childrenConsensusBountyHuntersCsv" + | "childMdx.frontmatter.image.childrenDataJson" + | "childMdx.frontmatter.image.childrenExchangesByCountryCsv" + | "childMdx.frontmatter.image.childrenExecutionBountyHuntersCsv" + | "childMdx.frontmatter.image.childrenExternalTutorialsJson" + | "childMdx.frontmatter.image.childrenImageSharp" + | "childMdx.frontmatter.image.childrenLayer2Json" + | "childMdx.frontmatter.image.childrenMdx" + | "childMdx.frontmatter.image.childrenMonthJson" + | "childMdx.frontmatter.image.childrenQuarterJson" + | "childMdx.frontmatter.image.childrenWalletsCsv" + | "childMdx.frontmatter.image.ctime" + | "childMdx.frontmatter.image.ctimeMs" + | "childMdx.frontmatter.image.dev" + | "childMdx.frontmatter.image.dir" + | "childMdx.frontmatter.image.ext" + | "childMdx.frontmatter.image.extension" + | "childMdx.frontmatter.image.gid" + | "childMdx.frontmatter.image.id" + | "childMdx.frontmatter.image.ino" + | "childMdx.frontmatter.image.mode" + | "childMdx.frontmatter.image.modifiedTime" + | "childMdx.frontmatter.image.mtime" + | "childMdx.frontmatter.image.mtimeMs" + | "childMdx.frontmatter.image.name" + | "childMdx.frontmatter.image.nlink" + | "childMdx.frontmatter.image.prettySize" + | "childMdx.frontmatter.image.publicURL" + | "childMdx.frontmatter.image.rdev" + | "childMdx.frontmatter.image.relativeDirectory" + | "childMdx.frontmatter.image.relativePath" + | "childMdx.frontmatter.image.root" + | "childMdx.frontmatter.image.size" + | "childMdx.frontmatter.image.sourceInstanceName" + | "childMdx.frontmatter.image.uid" + | "childMdx.frontmatter.incomplete" + | "childMdx.frontmatter.isOutdated" + | "childMdx.frontmatter.lang" + | "childMdx.frontmatter.link" + | "childMdx.frontmatter.location" + | "childMdx.frontmatter.position" + | "childMdx.frontmatter.published" + | "childMdx.frontmatter.sidebar" + | "childMdx.frontmatter.sidebarDepth" + | "childMdx.frontmatter.skill" + | "childMdx.frontmatter.source" + | "childMdx.frontmatter.sourceUrl" + | "childMdx.frontmatter.summaryPoint1" + | "childMdx.frontmatter.summaryPoint2" + | "childMdx.frontmatter.summaryPoint3" + | "childMdx.frontmatter.summaryPoint4" + | "childMdx.frontmatter.summaryPoints" + | "childMdx.frontmatter.tags" + | "childMdx.frontmatter.template" + | "childMdx.frontmatter.title" + | "childMdx.frontmatter.type" + | "childMdx.headings" + | "childMdx.headings.depth" + | "childMdx.headings.value" + | "childMdx.html" + | "childMdx.id" + | "childMdx.internal.content" + | "childMdx.internal.contentDigest" + | "childMdx.internal.description" + | "childMdx.internal.fieldOwners" + | "childMdx.internal.ignoreType" + | "childMdx.internal.mediaType" + | "childMdx.internal.owner" + | "childMdx.internal.type" + | "childMdx.mdxAST" + | "childMdx.parent.children" + | "childMdx.parent.children.children" + | "childMdx.parent.children.id" + | "childMdx.parent.id" + | "childMdx.parent.internal.content" + | "childMdx.parent.internal.contentDigest" + | "childMdx.parent.internal.description" + | "childMdx.parent.internal.fieldOwners" + | "childMdx.parent.internal.ignoreType" + | "childMdx.parent.internal.mediaType" + | "childMdx.parent.internal.owner" + | "childMdx.parent.internal.type" + | "childMdx.parent.parent.children" + | "childMdx.parent.parent.id" + | "childMdx.rawBody" + | "childMdx.slug" + | "childMdx.tableOfContents" + | "childMdx.timeToRead" + | "childMdx.wordCount.paragraphs" + | "childMdx.wordCount.sentences" + | "childMdx.wordCount.words" + | "childMonthJson.children" + | "childMonthJson.children.children" + | "childMonthJson.children.children.children" + | "childMonthJson.children.children.id" + | "childMonthJson.children.id" + | "childMonthJson.children.internal.content" + | "childMonthJson.children.internal.contentDigest" + | "childMonthJson.children.internal.description" + | "childMonthJson.children.internal.fieldOwners" + | "childMonthJson.children.internal.ignoreType" + | "childMonthJson.children.internal.mediaType" + | "childMonthJson.children.internal.owner" + | "childMonthJson.children.internal.type" + | "childMonthJson.children.parent.children" + | "childMonthJson.children.parent.id" + | "childMonthJson.currency" + | "childMonthJson.data" + | "childMonthJson.data.languages" + | "childMonthJson.data.user.avatarUrl" + | "childMonthJson.data.user.fullName" + | "childMonthJson.data.user.id" + | "childMonthJson.data.user.preTranslated" + | "childMonthJson.data.user.totalCosts" + | "childMonthJson.data.user.userRole" + | "childMonthJson.data.user.username" + | "childMonthJson.dateRange.from" + | "childMonthJson.dateRange.to" + | "childMonthJson.id" + | "childMonthJson.internal.content" + | "childMonthJson.internal.contentDigest" + | "childMonthJson.internal.description" + | "childMonthJson.internal.fieldOwners" + | "childMonthJson.internal.ignoreType" + | "childMonthJson.internal.mediaType" + | "childMonthJson.internal.owner" + | "childMonthJson.internal.type" + | "childMonthJson.mode" + | "childMonthJson.name" + | "childMonthJson.parent.children" + | "childMonthJson.parent.children.children" + | "childMonthJson.parent.children.id" + | "childMonthJson.parent.id" + | "childMonthJson.parent.internal.content" + | "childMonthJson.parent.internal.contentDigest" + | "childMonthJson.parent.internal.description" + | "childMonthJson.parent.internal.fieldOwners" + | "childMonthJson.parent.internal.ignoreType" + | "childMonthJson.parent.internal.mediaType" + | "childMonthJson.parent.internal.owner" + | "childMonthJson.parent.internal.type" + | "childMonthJson.parent.parent.children" + | "childMonthJson.parent.parent.id" + | "childMonthJson.totalCosts" + | "childMonthJson.totalPreTranslated" + | "childMonthJson.totalTMSavings" + | "childMonthJson.unit" + | "childMonthJson.url" + | "childQuarterJson.children" + | "childQuarterJson.children.children" + | "childQuarterJson.children.children.children" + | "childQuarterJson.children.children.id" + | "childQuarterJson.children.id" + | "childQuarterJson.children.internal.content" + | "childQuarterJson.children.internal.contentDigest" + | "childQuarterJson.children.internal.description" + | "childQuarterJson.children.internal.fieldOwners" + | "childQuarterJson.children.internal.ignoreType" + | "childQuarterJson.children.internal.mediaType" + | "childQuarterJson.children.internal.owner" + | "childQuarterJson.children.internal.type" + | "childQuarterJson.children.parent.children" + | "childQuarterJson.children.parent.id" + | "childQuarterJson.currency" + | "childQuarterJson.data" + | "childQuarterJson.data.languages" + | "childQuarterJson.data.user.avatarUrl" + | "childQuarterJson.data.user.fullName" + | "childQuarterJson.data.user.id" + | "childQuarterJson.data.user.preTranslated" + | "childQuarterJson.data.user.totalCosts" + | "childQuarterJson.data.user.userRole" + | "childQuarterJson.data.user.username" + | "childQuarterJson.dateRange.from" + | "childQuarterJson.dateRange.to" + | "childQuarterJson.id" + | "childQuarterJson.internal.content" + | "childQuarterJson.internal.contentDigest" + | "childQuarterJson.internal.description" + | "childQuarterJson.internal.fieldOwners" + | "childQuarterJson.internal.ignoreType" + | "childQuarterJson.internal.mediaType" + | "childQuarterJson.internal.owner" + | "childQuarterJson.internal.type" + | "childQuarterJson.mode" + | "childQuarterJson.name" + | "childQuarterJson.parent.children" + | "childQuarterJson.parent.children.children" + | "childQuarterJson.parent.children.id" + | "childQuarterJson.parent.id" + | "childQuarterJson.parent.internal.content" + | "childQuarterJson.parent.internal.contentDigest" + | "childQuarterJson.parent.internal.description" + | "childQuarterJson.parent.internal.fieldOwners" + | "childQuarterJson.parent.internal.ignoreType" + | "childQuarterJson.parent.internal.mediaType" + | "childQuarterJson.parent.internal.owner" + | "childQuarterJson.parent.internal.type" + | "childQuarterJson.parent.parent.children" + | "childQuarterJson.parent.parent.id" + | "childQuarterJson.totalCosts" + | "childQuarterJson.totalPreTranslated" + | "childQuarterJson.totalTMSavings" + | "childQuarterJson.unit" + | "childQuarterJson.url" + | "childWalletsCsv.brand_color" + | "childWalletsCsv.children" + | "childWalletsCsv.children.children" + | "childWalletsCsv.children.children.children" + | "childWalletsCsv.children.children.id" + | "childWalletsCsv.children.id" + | "childWalletsCsv.children.internal.content" + | "childWalletsCsv.children.internal.contentDigest" + | "childWalletsCsv.children.internal.description" + | "childWalletsCsv.children.internal.fieldOwners" + | "childWalletsCsv.children.internal.ignoreType" + | "childWalletsCsv.children.internal.mediaType" + | "childWalletsCsv.children.internal.owner" + | "childWalletsCsv.children.internal.type" + | "childWalletsCsv.children.parent.children" + | "childWalletsCsv.children.parent.id" + | "childWalletsCsv.has_bank_withdrawals" + | "childWalletsCsv.has_card_deposits" + | "childWalletsCsv.has_defi_integrations" + | "childWalletsCsv.has_desktop" + | "childWalletsCsv.has_dex_integrations" + | "childWalletsCsv.has_explore_dapps" + | "childWalletsCsv.has_hardware" + | "childWalletsCsv.has_high_volume_purchases" + | "childWalletsCsv.has_limits_protection" + | "childWalletsCsv.has_mobile" + | "childWalletsCsv.has_multisig" + | "childWalletsCsv.has_web" + | "childWalletsCsv.id" + | "childWalletsCsv.internal.content" + | "childWalletsCsv.internal.contentDigest" + | "childWalletsCsv.internal.description" + | "childWalletsCsv.internal.fieldOwners" + | "childWalletsCsv.internal.ignoreType" + | "childWalletsCsv.internal.mediaType" + | "childWalletsCsv.internal.owner" + | "childWalletsCsv.internal.type" + | "childWalletsCsv.name" + | "childWalletsCsv.parent.children" + | "childWalletsCsv.parent.children.children" + | "childWalletsCsv.parent.children.id" + | "childWalletsCsv.parent.id" + | "childWalletsCsv.parent.internal.content" + | "childWalletsCsv.parent.internal.contentDigest" + | "childWalletsCsv.parent.internal.description" + | "childWalletsCsv.parent.internal.fieldOwners" + | "childWalletsCsv.parent.internal.ignoreType" + | "childWalletsCsv.parent.internal.mediaType" + | "childWalletsCsv.parent.internal.owner" + | "childWalletsCsv.parent.internal.type" + | "childWalletsCsv.parent.parent.children" + | "childWalletsCsv.parent.parent.id" + | "childWalletsCsv.url" + | "children" + | "childrenAlltimeJson" + | "childrenAlltimeJson.children" + | "childrenAlltimeJson.children.children" + | "childrenAlltimeJson.children.children.children" + | "childrenAlltimeJson.children.children.id" + | "childrenAlltimeJson.children.id" + | "childrenAlltimeJson.children.internal.content" + | "childrenAlltimeJson.children.internal.contentDigest" + | "childrenAlltimeJson.children.internal.description" + | "childrenAlltimeJson.children.internal.fieldOwners" + | "childrenAlltimeJson.children.internal.ignoreType" + | "childrenAlltimeJson.children.internal.mediaType" + | "childrenAlltimeJson.children.internal.owner" + | "childrenAlltimeJson.children.internal.type" + | "childrenAlltimeJson.children.parent.children" + | "childrenAlltimeJson.children.parent.id" + | "childrenAlltimeJson.currency" + | "childrenAlltimeJson.data" + | "childrenAlltimeJson.data.languages" + | "childrenAlltimeJson.data.user.avatarUrl" + | "childrenAlltimeJson.data.user.fullName" + | "childrenAlltimeJson.data.user.id" + | "childrenAlltimeJson.data.user.preTranslated" + | "childrenAlltimeJson.data.user.totalCosts" + | "childrenAlltimeJson.data.user.userRole" + | "childrenAlltimeJson.data.user.username" + | "childrenAlltimeJson.dateRange.from" + | "childrenAlltimeJson.dateRange.to" + | "childrenAlltimeJson.id" + | "childrenAlltimeJson.internal.content" + | "childrenAlltimeJson.internal.contentDigest" + | "childrenAlltimeJson.internal.description" + | "childrenAlltimeJson.internal.fieldOwners" + | "childrenAlltimeJson.internal.ignoreType" + | "childrenAlltimeJson.internal.mediaType" + | "childrenAlltimeJson.internal.owner" + | "childrenAlltimeJson.internal.type" + | "childrenAlltimeJson.mode" + | "childrenAlltimeJson.name" + | "childrenAlltimeJson.parent.children" + | "childrenAlltimeJson.parent.children.children" + | "childrenAlltimeJson.parent.children.id" + | "childrenAlltimeJson.parent.id" + | "childrenAlltimeJson.parent.internal.content" + | "childrenAlltimeJson.parent.internal.contentDigest" + | "childrenAlltimeJson.parent.internal.description" + | "childrenAlltimeJson.parent.internal.fieldOwners" + | "childrenAlltimeJson.parent.internal.ignoreType" + | "childrenAlltimeJson.parent.internal.mediaType" + | "childrenAlltimeJson.parent.internal.owner" + | "childrenAlltimeJson.parent.internal.type" + | "childrenAlltimeJson.parent.parent.children" + | "childrenAlltimeJson.parent.parent.id" + | "childrenAlltimeJson.totalCosts" + | "childrenAlltimeJson.totalPreTranslated" + | "childrenAlltimeJson.totalTMSavings" + | "childrenAlltimeJson.unit" + | "childrenAlltimeJson.url" + | "childrenCexLayer2SupportJson" + | "childrenCexLayer2SupportJson.children" + | "childrenCexLayer2SupportJson.children.children" + | "childrenCexLayer2SupportJson.children.children.children" + | "childrenCexLayer2SupportJson.children.children.id" + | "childrenCexLayer2SupportJson.children.id" + | "childrenCexLayer2SupportJson.children.internal.content" + | "childrenCexLayer2SupportJson.children.internal.contentDigest" + | "childrenCexLayer2SupportJson.children.internal.description" + | "childrenCexLayer2SupportJson.children.internal.fieldOwners" + | "childrenCexLayer2SupportJson.children.internal.ignoreType" + | "childrenCexLayer2SupportJson.children.internal.mediaType" + | "childrenCexLayer2SupportJson.children.internal.owner" + | "childrenCexLayer2SupportJson.children.internal.type" + | "childrenCexLayer2SupportJson.children.parent.children" + | "childrenCexLayer2SupportJson.children.parent.id" + | "childrenCexLayer2SupportJson.id" + | "childrenCexLayer2SupportJson.internal.content" + | "childrenCexLayer2SupportJson.internal.contentDigest" + | "childrenCexLayer2SupportJson.internal.description" + | "childrenCexLayer2SupportJson.internal.fieldOwners" + | "childrenCexLayer2SupportJson.internal.ignoreType" + | "childrenCexLayer2SupportJson.internal.mediaType" + | "childrenCexLayer2SupportJson.internal.owner" + | "childrenCexLayer2SupportJson.internal.type" + | "childrenCexLayer2SupportJson.name" + | "childrenCexLayer2SupportJson.parent.children" + | "childrenCexLayer2SupportJson.parent.children.children" + | "childrenCexLayer2SupportJson.parent.children.id" + | "childrenCexLayer2SupportJson.parent.id" + | "childrenCexLayer2SupportJson.parent.internal.content" + | "childrenCexLayer2SupportJson.parent.internal.contentDigest" + | "childrenCexLayer2SupportJson.parent.internal.description" + | "childrenCexLayer2SupportJson.parent.internal.fieldOwners" + | "childrenCexLayer2SupportJson.parent.internal.ignoreType" + | "childrenCexLayer2SupportJson.parent.internal.mediaType" + | "childrenCexLayer2SupportJson.parent.internal.owner" + | "childrenCexLayer2SupportJson.parent.internal.type" + | "childrenCexLayer2SupportJson.parent.parent.children" + | "childrenCexLayer2SupportJson.parent.parent.id" + | "childrenCexLayer2SupportJson.supports_deposits" + | "childrenCexLayer2SupportJson.supports_withdrawals" + | "childrenCexLayer2SupportJson.url" + | "childrenCommunityEventsJson" + | "childrenCommunityEventsJson.children" + | "childrenCommunityEventsJson.children.children" + | "childrenCommunityEventsJson.children.children.children" + | "childrenCommunityEventsJson.children.children.id" + | "childrenCommunityEventsJson.children.id" + | "childrenCommunityEventsJson.children.internal.content" + | "childrenCommunityEventsJson.children.internal.contentDigest" + | "childrenCommunityEventsJson.children.internal.description" + | "childrenCommunityEventsJson.children.internal.fieldOwners" + | "childrenCommunityEventsJson.children.internal.ignoreType" + | "childrenCommunityEventsJson.children.internal.mediaType" + | "childrenCommunityEventsJson.children.internal.owner" + | "childrenCommunityEventsJson.children.internal.type" + | "childrenCommunityEventsJson.children.parent.children" + | "childrenCommunityEventsJson.children.parent.id" + | "childrenCommunityEventsJson.description" + | "childrenCommunityEventsJson.endDate" + | "childrenCommunityEventsJson.id" + | "childrenCommunityEventsJson.internal.content" + | "childrenCommunityEventsJson.internal.contentDigest" + | "childrenCommunityEventsJson.internal.description" + | "childrenCommunityEventsJson.internal.fieldOwners" + | "childrenCommunityEventsJson.internal.ignoreType" + | "childrenCommunityEventsJson.internal.mediaType" + | "childrenCommunityEventsJson.internal.owner" + | "childrenCommunityEventsJson.internal.type" + | "childrenCommunityEventsJson.location" + | "childrenCommunityEventsJson.parent.children" + | "childrenCommunityEventsJson.parent.children.children" + | "childrenCommunityEventsJson.parent.children.id" + | "childrenCommunityEventsJson.parent.id" + | "childrenCommunityEventsJson.parent.internal.content" + | "childrenCommunityEventsJson.parent.internal.contentDigest" + | "childrenCommunityEventsJson.parent.internal.description" + | "childrenCommunityEventsJson.parent.internal.fieldOwners" + | "childrenCommunityEventsJson.parent.internal.ignoreType" + | "childrenCommunityEventsJson.parent.internal.mediaType" + | "childrenCommunityEventsJson.parent.internal.owner" + | "childrenCommunityEventsJson.parent.internal.type" + | "childrenCommunityEventsJson.parent.parent.children" + | "childrenCommunityEventsJson.parent.parent.id" + | "childrenCommunityEventsJson.sponsor" + | "childrenCommunityEventsJson.startDate" + | "childrenCommunityEventsJson.title" + | "childrenCommunityEventsJson.to" + | "childrenCommunityMeetupsJson" + | "childrenCommunityMeetupsJson.children" + | "childrenCommunityMeetupsJson.children.children" + | "childrenCommunityMeetupsJson.children.children.children" + | "childrenCommunityMeetupsJson.children.children.id" + | "childrenCommunityMeetupsJson.children.id" + | "childrenCommunityMeetupsJson.children.internal.content" + | "childrenCommunityMeetupsJson.children.internal.contentDigest" + | "childrenCommunityMeetupsJson.children.internal.description" + | "childrenCommunityMeetupsJson.children.internal.fieldOwners" + | "childrenCommunityMeetupsJson.children.internal.ignoreType" + | "childrenCommunityMeetupsJson.children.internal.mediaType" + | "childrenCommunityMeetupsJson.children.internal.owner" + | "childrenCommunityMeetupsJson.children.internal.type" + | "childrenCommunityMeetupsJson.children.parent.children" + | "childrenCommunityMeetupsJson.children.parent.id" + | "childrenCommunityMeetupsJson.emoji" + | "childrenCommunityMeetupsJson.id" + | "childrenCommunityMeetupsJson.internal.content" + | "childrenCommunityMeetupsJson.internal.contentDigest" + | "childrenCommunityMeetupsJson.internal.description" + | "childrenCommunityMeetupsJson.internal.fieldOwners" + | "childrenCommunityMeetupsJson.internal.ignoreType" + | "childrenCommunityMeetupsJson.internal.mediaType" + | "childrenCommunityMeetupsJson.internal.owner" + | "childrenCommunityMeetupsJson.internal.type" + | "childrenCommunityMeetupsJson.link" + | "childrenCommunityMeetupsJson.location" + | "childrenCommunityMeetupsJson.parent.children" + | "childrenCommunityMeetupsJson.parent.children.children" + | "childrenCommunityMeetupsJson.parent.children.id" + | "childrenCommunityMeetupsJson.parent.id" + | "childrenCommunityMeetupsJson.parent.internal.content" + | "childrenCommunityMeetupsJson.parent.internal.contentDigest" + | "childrenCommunityMeetupsJson.parent.internal.description" + | "childrenCommunityMeetupsJson.parent.internal.fieldOwners" + | "childrenCommunityMeetupsJson.parent.internal.ignoreType" + | "childrenCommunityMeetupsJson.parent.internal.mediaType" + | "childrenCommunityMeetupsJson.parent.internal.owner" + | "childrenCommunityMeetupsJson.parent.internal.type" + | "childrenCommunityMeetupsJson.parent.parent.children" + | "childrenCommunityMeetupsJson.parent.parent.id" + | "childrenCommunityMeetupsJson.title" + | "childrenConsensusBountyHuntersCsv" + | "childrenConsensusBountyHuntersCsv.children" + | "childrenConsensusBountyHuntersCsv.children.children" + | "childrenConsensusBountyHuntersCsv.children.children.children" + | "childrenConsensusBountyHuntersCsv.children.children.id" + | "childrenConsensusBountyHuntersCsv.children.id" + | "childrenConsensusBountyHuntersCsv.children.internal.content" + | "childrenConsensusBountyHuntersCsv.children.internal.contentDigest" + | "childrenConsensusBountyHuntersCsv.children.internal.description" + | "childrenConsensusBountyHuntersCsv.children.internal.fieldOwners" + | "childrenConsensusBountyHuntersCsv.children.internal.ignoreType" + | "childrenConsensusBountyHuntersCsv.children.internal.mediaType" + | "childrenConsensusBountyHuntersCsv.children.internal.owner" + | "childrenConsensusBountyHuntersCsv.children.internal.type" + | "childrenConsensusBountyHuntersCsv.children.parent.children" + | "childrenConsensusBountyHuntersCsv.children.parent.id" + | "childrenConsensusBountyHuntersCsv.id" + | "childrenConsensusBountyHuntersCsv.internal.content" + | "childrenConsensusBountyHuntersCsv.internal.contentDigest" + | "childrenConsensusBountyHuntersCsv.internal.description" + | "childrenConsensusBountyHuntersCsv.internal.fieldOwners" + | "childrenConsensusBountyHuntersCsv.internal.ignoreType" + | "childrenConsensusBountyHuntersCsv.internal.mediaType" + | "childrenConsensusBountyHuntersCsv.internal.owner" + | "childrenConsensusBountyHuntersCsv.internal.type" + | "childrenConsensusBountyHuntersCsv.name" + | "childrenConsensusBountyHuntersCsv.parent.children" + | "childrenConsensusBountyHuntersCsv.parent.children.children" + | "childrenConsensusBountyHuntersCsv.parent.children.id" + | "childrenConsensusBountyHuntersCsv.parent.id" + | "childrenConsensusBountyHuntersCsv.parent.internal.content" + | "childrenConsensusBountyHuntersCsv.parent.internal.contentDigest" + | "childrenConsensusBountyHuntersCsv.parent.internal.description" + | "childrenConsensusBountyHuntersCsv.parent.internal.fieldOwners" + | "childrenConsensusBountyHuntersCsv.parent.internal.ignoreType" + | "childrenConsensusBountyHuntersCsv.parent.internal.mediaType" + | "childrenConsensusBountyHuntersCsv.parent.internal.owner" + | "childrenConsensusBountyHuntersCsv.parent.internal.type" + | "childrenConsensusBountyHuntersCsv.parent.parent.children" + | "childrenConsensusBountyHuntersCsv.parent.parent.id" + | "childrenConsensusBountyHuntersCsv.score" + | "childrenConsensusBountyHuntersCsv.username" + | "childrenDataJson" + | "childrenDataJson.children" + | "childrenDataJson.children.children" + | "childrenDataJson.children.children.children" + | "childrenDataJson.children.children.id" + | "childrenDataJson.children.id" + | "childrenDataJson.children.internal.content" + | "childrenDataJson.children.internal.contentDigest" + | "childrenDataJson.children.internal.description" + | "childrenDataJson.children.internal.fieldOwners" + | "childrenDataJson.children.internal.ignoreType" + | "childrenDataJson.children.internal.mediaType" + | "childrenDataJson.children.internal.owner" + | "childrenDataJson.children.internal.type" + | "childrenDataJson.children.parent.children" + | "childrenDataJson.children.parent.id" + | "childrenDataJson.commit" + | "childrenDataJson.contributors" + | "childrenDataJson.contributorsPerLine" + | "childrenDataJson.contributors.avatar_url" + | "childrenDataJson.contributors.contributions" + | "childrenDataJson.contributors.login" + | "childrenDataJson.contributors.name" + | "childrenDataJson.contributors.profile" + | "childrenDataJson.files" + | "childrenDataJson.id" + | "childrenDataJson.imageSize" + | "childrenDataJson.internal.content" + | "childrenDataJson.internal.contentDigest" + | "childrenDataJson.internal.description" + | "childrenDataJson.internal.fieldOwners" + | "childrenDataJson.internal.ignoreType" + | "childrenDataJson.internal.mediaType" + | "childrenDataJson.internal.owner" + | "childrenDataJson.internal.type" + | "childrenDataJson.keyGen" + | "childrenDataJson.keyGen.audits" + | "childrenDataJson.keyGen.audits.name" + | "childrenDataJson.keyGen.audits.url" + | "childrenDataJson.keyGen.hasBugBounty" + | "childrenDataJson.keyGen.hue" + | "childrenDataJson.keyGen.isFoss" + | "childrenDataJson.keyGen.isPermissionless" + | "childrenDataJson.keyGen.isSelfCustody" + | "childrenDataJson.keyGen.isTrustless" + | "childrenDataJson.keyGen.launchDate" + | "childrenDataJson.keyGen.matomo.eventAction" + | "childrenDataJson.keyGen.matomo.eventCategory" + | "childrenDataJson.keyGen.matomo.eventName" + | "childrenDataJson.keyGen.name" + | "childrenDataJson.keyGen.platforms" + | "childrenDataJson.keyGen.socials.discord" + | "childrenDataJson.keyGen.socials.github" + | "childrenDataJson.keyGen.socials.twitter" + | "childrenDataJson.keyGen.svgPath" + | "childrenDataJson.keyGen.ui" + | "childrenDataJson.keyGen.url" + | "childrenDataJson.nodeTools" + | "childrenDataJson.nodeTools.additionalStake" + | "childrenDataJson.nodeTools.additionalStakeUnit" + | "childrenDataJson.nodeTools.audits" + | "childrenDataJson.nodeTools.audits.name" + | "childrenDataJson.nodeTools.audits.url" + | "childrenDataJson.nodeTools.easyClientSwitching" + | "childrenDataJson.nodeTools.hasBugBounty" + | "childrenDataJson.nodeTools.hue" + | "childrenDataJson.nodeTools.isFoss" + | "childrenDataJson.nodeTools.isPermissionless" + | "childrenDataJson.nodeTools.isTrustless" + | "childrenDataJson.nodeTools.launchDate" + | "childrenDataJson.nodeTools.matomo.eventAction" + | "childrenDataJson.nodeTools.matomo.eventCategory" + | "childrenDataJson.nodeTools.matomo.eventName" + | "childrenDataJson.nodeTools.minEth" + | "childrenDataJson.nodeTools.multiClient" + | "childrenDataJson.nodeTools.name" + | "childrenDataJson.nodeTools.platforms" + | "childrenDataJson.nodeTools.socials.discord" + | "childrenDataJson.nodeTools.socials.github" + | "childrenDataJson.nodeTools.socials.telegram" + | "childrenDataJson.nodeTools.socials.twitter" + | "childrenDataJson.nodeTools.svgPath" + | "childrenDataJson.nodeTools.tokens" + | "childrenDataJson.nodeTools.tokens.address" + | "childrenDataJson.nodeTools.tokens.name" + | "childrenDataJson.nodeTools.tokens.symbol" + | "childrenDataJson.nodeTools.ui" + | "childrenDataJson.nodeTools.url" + | "childrenDataJson.parent.children" + | "childrenDataJson.parent.children.children" + | "childrenDataJson.parent.children.id" + | "childrenDataJson.parent.id" + | "childrenDataJson.parent.internal.content" + | "childrenDataJson.parent.internal.contentDigest" + | "childrenDataJson.parent.internal.description" + | "childrenDataJson.parent.internal.fieldOwners" + | "childrenDataJson.parent.internal.ignoreType" + | "childrenDataJson.parent.internal.mediaType" + | "childrenDataJson.parent.internal.owner" + | "childrenDataJson.parent.internal.type" + | "childrenDataJson.parent.parent.children" + | "childrenDataJson.parent.parent.id" + | "childrenDataJson.pools" + | "childrenDataJson.pools.audits" + | "childrenDataJson.pools.audits.date" + | "childrenDataJson.pools.audits.name" + | "childrenDataJson.pools.audits.url" + | "childrenDataJson.pools.feePercentage" + | "childrenDataJson.pools.hasBugBounty" + | "childrenDataJson.pools.hasPermissionlessNodes" + | "childrenDataJson.pools.hue" + | "childrenDataJson.pools.isFoss" + | "childrenDataJson.pools.isTrustless" + | "childrenDataJson.pools.launchDate" + | "childrenDataJson.pools.matomo.eventAction" + | "childrenDataJson.pools.matomo.eventCategory" + | "childrenDataJson.pools.matomo.eventName" + | "childrenDataJson.pools.minEth" + | "childrenDataJson.pools.name" + | "childrenDataJson.pools.pctMajorityClient" + | "childrenDataJson.pools.platforms" + | "childrenDataJson.pools.socials.discord" + | "childrenDataJson.pools.socials.github" + | "childrenDataJson.pools.socials.reddit" + | "childrenDataJson.pools.socials.telegram" + | "childrenDataJson.pools.socials.twitter" + | "childrenDataJson.pools.svgPath" + | "childrenDataJson.pools.telegram" + | "childrenDataJson.pools.tokens" + | "childrenDataJson.pools.tokens.address" + | "childrenDataJson.pools.tokens.name" + | "childrenDataJson.pools.tokens.symbol" + | "childrenDataJson.pools.twitter" + | "childrenDataJson.pools.ui" + | "childrenDataJson.pools.url" + | "childrenDataJson.projectName" + | "childrenDataJson.projectOwner" + | "childrenDataJson.repoHost" + | "childrenDataJson.repoType" + | "childrenDataJson.saas" + | "childrenDataJson.saas.additionalStake" + | "childrenDataJson.saas.additionalStakeUnit" + | "childrenDataJson.saas.audits" + | "childrenDataJson.saas.audits.name" + | "childrenDataJson.saas.audits.url" + | "childrenDataJson.saas.hasBugBounty" + | "childrenDataJson.saas.hue" + | "childrenDataJson.saas.isFoss" + | "childrenDataJson.saas.isPermissionless" + | "childrenDataJson.saas.isSelfCustody" + | "childrenDataJson.saas.isTrustless" + | "childrenDataJson.saas.launchDate" + | "childrenDataJson.saas.matomo.eventAction" + | "childrenDataJson.saas.matomo.eventCategory" + | "childrenDataJson.saas.matomo.eventName" + | "childrenDataJson.saas.minEth" + | "childrenDataJson.saas.monthlyFee" + | "childrenDataJson.saas.monthlyFeeUnit" + | "childrenDataJson.saas.name" + | "childrenDataJson.saas.pctMajorityClient" + | "childrenDataJson.saas.platforms" + | "childrenDataJson.saas.socials.discord" + | "childrenDataJson.saas.socials.github" + | "childrenDataJson.saas.socials.telegram" + | "childrenDataJson.saas.socials.twitter" + | "childrenDataJson.saas.svgPath" + | "childrenDataJson.saas.ui" + | "childrenDataJson.saas.url" + | "childrenDataJson.skipCi" + | "childrenExchangesByCountryCsv" + | "childrenExchangesByCountryCsv.binance" + | "childrenExchangesByCountryCsv.binanceus" + | "childrenExchangesByCountryCsv.bitbuy" + | "childrenExchangesByCountryCsv.bitfinex" + | "childrenExchangesByCountryCsv.bitflyer" + | "childrenExchangesByCountryCsv.bitkub" + | "childrenExchangesByCountryCsv.bitso" + | "childrenExchangesByCountryCsv.bittrex" + | "childrenExchangesByCountryCsv.bitvavo" + | "childrenExchangesByCountryCsv.bybit" + | "childrenExchangesByCountryCsv.children" + | "childrenExchangesByCountryCsv.children.children" + | "childrenExchangesByCountryCsv.children.children.children" + | "childrenExchangesByCountryCsv.children.children.id" + | "childrenExchangesByCountryCsv.children.id" + | "childrenExchangesByCountryCsv.children.internal.content" + | "childrenExchangesByCountryCsv.children.internal.contentDigest" + | "childrenExchangesByCountryCsv.children.internal.description" + | "childrenExchangesByCountryCsv.children.internal.fieldOwners" + | "childrenExchangesByCountryCsv.children.internal.ignoreType" + | "childrenExchangesByCountryCsv.children.internal.mediaType" + | "childrenExchangesByCountryCsv.children.internal.owner" + | "childrenExchangesByCountryCsv.children.internal.type" + | "childrenExchangesByCountryCsv.children.parent.children" + | "childrenExchangesByCountryCsv.children.parent.id" + | "childrenExchangesByCountryCsv.coinbase" + | "childrenExchangesByCountryCsv.coinmama" + | "childrenExchangesByCountryCsv.coinspot" + | "childrenExchangesByCountryCsv.country" + | "childrenExchangesByCountryCsv.cryptocom" + | "childrenExchangesByCountryCsv.easycrypto" + | "childrenExchangesByCountryCsv.ftx" + | "childrenExchangesByCountryCsv.ftxus" + | "childrenExchangesByCountryCsv.gateio" + | "childrenExchangesByCountryCsv.gemini" + | "childrenExchangesByCountryCsv.huobiglobal" + | "childrenExchangesByCountryCsv.id" + | "childrenExchangesByCountryCsv.internal.content" + | "childrenExchangesByCountryCsv.internal.contentDigest" + | "childrenExchangesByCountryCsv.internal.description" + | "childrenExchangesByCountryCsv.internal.fieldOwners" + | "childrenExchangesByCountryCsv.internal.ignoreType" + | "childrenExchangesByCountryCsv.internal.mediaType" + | "childrenExchangesByCountryCsv.internal.owner" + | "childrenExchangesByCountryCsv.internal.type" + | "childrenExchangesByCountryCsv.itezcom" + | "childrenExchangesByCountryCsv.kraken" + | "childrenExchangesByCountryCsv.kucoin" + | "childrenExchangesByCountryCsv.moonpay" + | "childrenExchangesByCountryCsv.mtpelerin" + | "childrenExchangesByCountryCsv.okx" + | "childrenExchangesByCountryCsv.parent.children" + | "childrenExchangesByCountryCsv.parent.children.children" + | "childrenExchangesByCountryCsv.parent.children.id" + | "childrenExchangesByCountryCsv.parent.id" + | "childrenExchangesByCountryCsv.parent.internal.content" + | "childrenExchangesByCountryCsv.parent.internal.contentDigest" + | "childrenExchangesByCountryCsv.parent.internal.description" + | "childrenExchangesByCountryCsv.parent.internal.fieldOwners" + | "childrenExchangesByCountryCsv.parent.internal.ignoreType" + | "childrenExchangesByCountryCsv.parent.internal.mediaType" + | "childrenExchangesByCountryCsv.parent.internal.owner" + | "childrenExchangesByCountryCsv.parent.internal.type" + | "childrenExchangesByCountryCsv.parent.parent.children" + | "childrenExchangesByCountryCsv.parent.parent.id" + | "childrenExchangesByCountryCsv.rain" + | "childrenExchangesByCountryCsv.simplex" + | "childrenExchangesByCountryCsv.wazirx" + | "childrenExchangesByCountryCsv.wyre" + | "childrenExecutionBountyHuntersCsv" + | "childrenExecutionBountyHuntersCsv.children" + | "childrenExecutionBountyHuntersCsv.children.children" + | "childrenExecutionBountyHuntersCsv.children.children.children" + | "childrenExecutionBountyHuntersCsv.children.children.id" + | "childrenExecutionBountyHuntersCsv.children.id" + | "childrenExecutionBountyHuntersCsv.children.internal.content" + | "childrenExecutionBountyHuntersCsv.children.internal.contentDigest" + | "childrenExecutionBountyHuntersCsv.children.internal.description" + | "childrenExecutionBountyHuntersCsv.children.internal.fieldOwners" + | "childrenExecutionBountyHuntersCsv.children.internal.ignoreType" + | "childrenExecutionBountyHuntersCsv.children.internal.mediaType" + | "childrenExecutionBountyHuntersCsv.children.internal.owner" + | "childrenExecutionBountyHuntersCsv.children.internal.type" + | "childrenExecutionBountyHuntersCsv.children.parent.children" + | "childrenExecutionBountyHuntersCsv.children.parent.id" + | "childrenExecutionBountyHuntersCsv.id" + | "childrenExecutionBountyHuntersCsv.internal.content" + | "childrenExecutionBountyHuntersCsv.internal.contentDigest" + | "childrenExecutionBountyHuntersCsv.internal.description" + | "childrenExecutionBountyHuntersCsv.internal.fieldOwners" + | "childrenExecutionBountyHuntersCsv.internal.ignoreType" + | "childrenExecutionBountyHuntersCsv.internal.mediaType" + | "childrenExecutionBountyHuntersCsv.internal.owner" + | "childrenExecutionBountyHuntersCsv.internal.type" + | "childrenExecutionBountyHuntersCsv.name" + | "childrenExecutionBountyHuntersCsv.parent.children" + | "childrenExecutionBountyHuntersCsv.parent.children.children" + | "childrenExecutionBountyHuntersCsv.parent.children.id" + | "childrenExecutionBountyHuntersCsv.parent.id" + | "childrenExecutionBountyHuntersCsv.parent.internal.content" + | "childrenExecutionBountyHuntersCsv.parent.internal.contentDigest" + | "childrenExecutionBountyHuntersCsv.parent.internal.description" + | "childrenExecutionBountyHuntersCsv.parent.internal.fieldOwners" + | "childrenExecutionBountyHuntersCsv.parent.internal.ignoreType" + | "childrenExecutionBountyHuntersCsv.parent.internal.mediaType" + | "childrenExecutionBountyHuntersCsv.parent.internal.owner" + | "childrenExecutionBountyHuntersCsv.parent.internal.type" + | "childrenExecutionBountyHuntersCsv.parent.parent.children" + | "childrenExecutionBountyHuntersCsv.parent.parent.id" + | "childrenExecutionBountyHuntersCsv.score" + | "childrenExecutionBountyHuntersCsv.username" + | "childrenExternalTutorialsJson" + | "childrenExternalTutorialsJson.author" + | "childrenExternalTutorialsJson.authorGithub" + | "childrenExternalTutorialsJson.children" + | "childrenExternalTutorialsJson.children.children" + | "childrenExternalTutorialsJson.children.children.children" + | "childrenExternalTutorialsJson.children.children.id" + | "childrenExternalTutorialsJson.children.id" + | "childrenExternalTutorialsJson.children.internal.content" + | "childrenExternalTutorialsJson.children.internal.contentDigest" + | "childrenExternalTutorialsJson.children.internal.description" + | "childrenExternalTutorialsJson.children.internal.fieldOwners" + | "childrenExternalTutorialsJson.children.internal.ignoreType" + | "childrenExternalTutorialsJson.children.internal.mediaType" + | "childrenExternalTutorialsJson.children.internal.owner" + | "childrenExternalTutorialsJson.children.internal.type" + | "childrenExternalTutorialsJson.children.parent.children" + | "childrenExternalTutorialsJson.children.parent.id" + | "childrenExternalTutorialsJson.description" + | "childrenExternalTutorialsJson.id" + | "childrenExternalTutorialsJson.internal.content" + | "childrenExternalTutorialsJson.internal.contentDigest" + | "childrenExternalTutorialsJson.internal.description" + | "childrenExternalTutorialsJson.internal.fieldOwners" + | "childrenExternalTutorialsJson.internal.ignoreType" + | "childrenExternalTutorialsJson.internal.mediaType" + | "childrenExternalTutorialsJson.internal.owner" + | "childrenExternalTutorialsJson.internal.type" + | "childrenExternalTutorialsJson.lang" + | "childrenExternalTutorialsJson.parent.children" + | "childrenExternalTutorialsJson.parent.children.children" + | "childrenExternalTutorialsJson.parent.children.id" + | "childrenExternalTutorialsJson.parent.id" + | "childrenExternalTutorialsJson.parent.internal.content" + | "childrenExternalTutorialsJson.parent.internal.contentDigest" + | "childrenExternalTutorialsJson.parent.internal.description" + | "childrenExternalTutorialsJson.parent.internal.fieldOwners" + | "childrenExternalTutorialsJson.parent.internal.ignoreType" + | "childrenExternalTutorialsJson.parent.internal.mediaType" + | "childrenExternalTutorialsJson.parent.internal.owner" + | "childrenExternalTutorialsJson.parent.internal.type" + | "childrenExternalTutorialsJson.parent.parent.children" + | "childrenExternalTutorialsJson.parent.parent.id" + | "childrenExternalTutorialsJson.publishDate" + | "childrenExternalTutorialsJson.skillLevel" + | "childrenExternalTutorialsJson.tags" + | "childrenExternalTutorialsJson.timeToRead" + | "childrenExternalTutorialsJson.title" + | "childrenExternalTutorialsJson.url" + | "childrenImageSharp" + | "childrenImageSharp.children" + | "childrenImageSharp.children.children" + | "childrenImageSharp.children.children.children" + | "childrenImageSharp.children.children.id" + | "childrenImageSharp.children.id" + | "childrenImageSharp.children.internal.content" + | "childrenImageSharp.children.internal.contentDigest" + | "childrenImageSharp.children.internal.description" + | "childrenImageSharp.children.internal.fieldOwners" + | "childrenImageSharp.children.internal.ignoreType" + | "childrenImageSharp.children.internal.mediaType" + | "childrenImageSharp.children.internal.owner" + | "childrenImageSharp.children.internal.type" + | "childrenImageSharp.children.parent.children" + | "childrenImageSharp.children.parent.id" + | "childrenImageSharp.fixed.aspectRatio" + | "childrenImageSharp.fixed.base64" + | "childrenImageSharp.fixed.height" + | "childrenImageSharp.fixed.originalName" + | "childrenImageSharp.fixed.src" + | "childrenImageSharp.fixed.srcSet" + | "childrenImageSharp.fixed.srcSetWebp" + | "childrenImageSharp.fixed.srcWebp" + | "childrenImageSharp.fixed.tracedSVG" + | "childrenImageSharp.fixed.width" + | "childrenImageSharp.fluid.aspectRatio" + | "childrenImageSharp.fluid.base64" + | "childrenImageSharp.fluid.originalImg" + | "childrenImageSharp.fluid.originalName" + | "childrenImageSharp.fluid.presentationHeight" + | "childrenImageSharp.fluid.presentationWidth" + | "childrenImageSharp.fluid.sizes" + | "childrenImageSharp.fluid.src" + | "childrenImageSharp.fluid.srcSet" + | "childrenImageSharp.fluid.srcSetWebp" + | "childrenImageSharp.fluid.srcWebp" + | "childrenImageSharp.fluid.tracedSVG" + | "childrenImageSharp.gatsbyImageData" + | "childrenImageSharp.id" + | "childrenImageSharp.internal.content" + | "childrenImageSharp.internal.contentDigest" + | "childrenImageSharp.internal.description" + | "childrenImageSharp.internal.fieldOwners" + | "childrenImageSharp.internal.ignoreType" + | "childrenImageSharp.internal.mediaType" + | "childrenImageSharp.internal.owner" + | "childrenImageSharp.internal.type" + | "childrenImageSharp.original.height" + | "childrenImageSharp.original.src" + | "childrenImageSharp.original.width" + | "childrenImageSharp.parent.children" + | "childrenImageSharp.parent.children.children" + | "childrenImageSharp.parent.children.id" + | "childrenImageSharp.parent.id" + | "childrenImageSharp.parent.internal.content" + | "childrenImageSharp.parent.internal.contentDigest" + | "childrenImageSharp.parent.internal.description" + | "childrenImageSharp.parent.internal.fieldOwners" + | "childrenImageSharp.parent.internal.ignoreType" + | "childrenImageSharp.parent.internal.mediaType" + | "childrenImageSharp.parent.internal.owner" + | "childrenImageSharp.parent.internal.type" + | "childrenImageSharp.parent.parent.children" + | "childrenImageSharp.parent.parent.id" + | "childrenImageSharp.resize.aspectRatio" + | "childrenImageSharp.resize.height" + | "childrenImageSharp.resize.originalName" + | "childrenImageSharp.resize.src" + | "childrenImageSharp.resize.tracedSVG" + | "childrenImageSharp.resize.width" + | "childrenLayer2Json" + | "childrenLayer2Json.children" + | "childrenLayer2Json.children.children" + | "childrenLayer2Json.children.children.children" + | "childrenLayer2Json.children.children.id" + | "childrenLayer2Json.children.id" + | "childrenLayer2Json.children.internal.content" + | "childrenLayer2Json.children.internal.contentDigest" + | "childrenLayer2Json.children.internal.description" + | "childrenLayer2Json.children.internal.fieldOwners" + | "childrenLayer2Json.children.internal.ignoreType" + | "childrenLayer2Json.children.internal.mediaType" + | "childrenLayer2Json.children.internal.owner" + | "childrenLayer2Json.children.internal.type" + | "childrenLayer2Json.children.parent.children" + | "childrenLayer2Json.children.parent.id" + | "childrenLayer2Json.id" + | "childrenLayer2Json.internal.content" + | "childrenLayer2Json.internal.contentDigest" + | "childrenLayer2Json.internal.description" + | "childrenLayer2Json.internal.fieldOwners" + | "childrenLayer2Json.internal.ignoreType" + | "childrenLayer2Json.internal.mediaType" + | "childrenLayer2Json.internal.owner" + | "childrenLayer2Json.internal.type" + | "childrenLayer2Json.optimistic" + | "childrenLayer2Json.optimistic.background" + | "childrenLayer2Json.optimistic.blockExplorer" + | "childrenLayer2Json.optimistic.bridge" + | "childrenLayer2Json.optimistic.bridgeWallets" + | "childrenLayer2Json.optimistic.description" + | "childrenLayer2Json.optimistic.developerDocs" + | "childrenLayer2Json.optimistic.ecosystemPortal" + | "childrenLayer2Json.optimistic.imageKey" + | "childrenLayer2Json.optimistic.l2beat" + | "childrenLayer2Json.optimistic.name" + | "childrenLayer2Json.optimistic.noteKey" + | "childrenLayer2Json.optimistic.purpose" + | "childrenLayer2Json.optimistic.tokenLists" + | "childrenLayer2Json.optimistic.website" + | "childrenLayer2Json.parent.children" + | "childrenLayer2Json.parent.children.children" + | "childrenLayer2Json.parent.children.id" + | "childrenLayer2Json.parent.id" + | "childrenLayer2Json.parent.internal.content" + | "childrenLayer2Json.parent.internal.contentDigest" + | "childrenLayer2Json.parent.internal.description" + | "childrenLayer2Json.parent.internal.fieldOwners" + | "childrenLayer2Json.parent.internal.ignoreType" + | "childrenLayer2Json.parent.internal.mediaType" + | "childrenLayer2Json.parent.internal.owner" + | "childrenLayer2Json.parent.internal.type" + | "childrenLayer2Json.parent.parent.children" + | "childrenLayer2Json.parent.parent.id" + | "childrenLayer2Json.zk" + | "childrenLayer2Json.zk.background" + | "childrenLayer2Json.zk.blockExplorer" + | "childrenLayer2Json.zk.bridge" + | "childrenLayer2Json.zk.bridgeWallets" + | "childrenLayer2Json.zk.description" + | "childrenLayer2Json.zk.developerDocs" + | "childrenLayer2Json.zk.ecosystemPortal" + | "childrenLayer2Json.zk.imageKey" + | "childrenLayer2Json.zk.l2beat" + | "childrenLayer2Json.zk.name" + | "childrenLayer2Json.zk.noteKey" + | "childrenLayer2Json.zk.purpose" + | "childrenLayer2Json.zk.tokenLists" + | "childrenLayer2Json.zk.website" + | "childrenMdx" + | "childrenMdx.body" + | "childrenMdx.children" + | "childrenMdx.children.children" + | "childrenMdx.children.children.children" + | "childrenMdx.children.children.id" + | "childrenMdx.children.id" + | "childrenMdx.children.internal.content" + | "childrenMdx.children.internal.contentDigest" + | "childrenMdx.children.internal.description" + | "childrenMdx.children.internal.fieldOwners" + | "childrenMdx.children.internal.ignoreType" + | "childrenMdx.children.internal.mediaType" + | "childrenMdx.children.internal.owner" + | "childrenMdx.children.internal.type" + | "childrenMdx.children.parent.children" + | "childrenMdx.children.parent.id" + | "childrenMdx.excerpt" + | "childrenMdx.fields.isOutdated" + | "childrenMdx.fields.readingTime.minutes" + | "childrenMdx.fields.readingTime.text" + | "childrenMdx.fields.readingTime.time" + | "childrenMdx.fields.readingTime.words" + | "childrenMdx.fields.relativePath" + | "childrenMdx.fields.slug" + | "childrenMdx.fileAbsolutePath" + | "childrenMdx.frontmatter.address" + | "childrenMdx.frontmatter.alt" + | "childrenMdx.frontmatter.author" + | "childrenMdx.frontmatter.authors" + | "childrenMdx.frontmatter.compensation" + | "childrenMdx.frontmatter.description" + | "childrenMdx.frontmatter.emoji" + | "childrenMdx.frontmatter.image.absolutePath" + | "childrenMdx.frontmatter.image.accessTime" + | "childrenMdx.frontmatter.image.atime" + | "childrenMdx.frontmatter.image.atimeMs" + | "childrenMdx.frontmatter.image.base" + | "childrenMdx.frontmatter.image.birthTime" + | "childrenMdx.frontmatter.image.birthtime" + | "childrenMdx.frontmatter.image.birthtimeMs" + | "childrenMdx.frontmatter.image.blksize" + | "childrenMdx.frontmatter.image.blocks" + | "childrenMdx.frontmatter.image.changeTime" + | "childrenMdx.frontmatter.image.children" + | "childrenMdx.frontmatter.image.childrenAlltimeJson" + | "childrenMdx.frontmatter.image.childrenCexLayer2SupportJson" + | "childrenMdx.frontmatter.image.childrenCommunityEventsJson" + | "childrenMdx.frontmatter.image.childrenCommunityMeetupsJson" + | "childrenMdx.frontmatter.image.childrenConsensusBountyHuntersCsv" + | "childrenMdx.frontmatter.image.childrenDataJson" + | "childrenMdx.frontmatter.image.childrenExchangesByCountryCsv" + | "childrenMdx.frontmatter.image.childrenExecutionBountyHuntersCsv" + | "childrenMdx.frontmatter.image.childrenExternalTutorialsJson" + | "childrenMdx.frontmatter.image.childrenImageSharp" + | "childrenMdx.frontmatter.image.childrenLayer2Json" + | "childrenMdx.frontmatter.image.childrenMdx" + | "childrenMdx.frontmatter.image.childrenMonthJson" + | "childrenMdx.frontmatter.image.childrenQuarterJson" + | "childrenMdx.frontmatter.image.childrenWalletsCsv" + | "childrenMdx.frontmatter.image.ctime" + | "childrenMdx.frontmatter.image.ctimeMs" + | "childrenMdx.frontmatter.image.dev" + | "childrenMdx.frontmatter.image.dir" + | "childrenMdx.frontmatter.image.ext" + | "childrenMdx.frontmatter.image.extension" + | "childrenMdx.frontmatter.image.gid" + | "childrenMdx.frontmatter.image.id" + | "childrenMdx.frontmatter.image.ino" + | "childrenMdx.frontmatter.image.mode" + | "childrenMdx.frontmatter.image.modifiedTime" + | "childrenMdx.frontmatter.image.mtime" + | "childrenMdx.frontmatter.image.mtimeMs" + | "childrenMdx.frontmatter.image.name" + | "childrenMdx.frontmatter.image.nlink" + | "childrenMdx.frontmatter.image.prettySize" + | "childrenMdx.frontmatter.image.publicURL" + | "childrenMdx.frontmatter.image.rdev" + | "childrenMdx.frontmatter.image.relativeDirectory" + | "childrenMdx.frontmatter.image.relativePath" + | "childrenMdx.frontmatter.image.root" + | "childrenMdx.frontmatter.image.size" + | "childrenMdx.frontmatter.image.sourceInstanceName" + | "childrenMdx.frontmatter.image.uid" + | "childrenMdx.frontmatter.incomplete" + | "childrenMdx.frontmatter.isOutdated" + | "childrenMdx.frontmatter.lang" + | "childrenMdx.frontmatter.link" + | "childrenMdx.frontmatter.location" + | "childrenMdx.frontmatter.position" + | "childrenMdx.frontmatter.published" + | "childrenMdx.frontmatter.sidebar" + | "childrenMdx.frontmatter.sidebarDepth" + | "childrenMdx.frontmatter.skill" + | "childrenMdx.frontmatter.source" + | "childrenMdx.frontmatter.sourceUrl" + | "childrenMdx.frontmatter.summaryPoint1" + | "childrenMdx.frontmatter.summaryPoint2" + | "childrenMdx.frontmatter.summaryPoint3" + | "childrenMdx.frontmatter.summaryPoint4" + | "childrenMdx.frontmatter.summaryPoints" + | "childrenMdx.frontmatter.tags" + | "childrenMdx.frontmatter.template" + | "childrenMdx.frontmatter.title" + | "childrenMdx.frontmatter.type" + | "childrenMdx.headings" + | "childrenMdx.headings.depth" + | "childrenMdx.headings.value" + | "childrenMdx.html" + | "childrenMdx.id" + | "childrenMdx.internal.content" + | "childrenMdx.internal.contentDigest" + | "childrenMdx.internal.description" + | "childrenMdx.internal.fieldOwners" + | "childrenMdx.internal.ignoreType" + | "childrenMdx.internal.mediaType" + | "childrenMdx.internal.owner" + | "childrenMdx.internal.type" + | "childrenMdx.mdxAST" + | "childrenMdx.parent.children" + | "childrenMdx.parent.children.children" + | "childrenMdx.parent.children.id" + | "childrenMdx.parent.id" + | "childrenMdx.parent.internal.content" + | "childrenMdx.parent.internal.contentDigest" + | "childrenMdx.parent.internal.description" + | "childrenMdx.parent.internal.fieldOwners" + | "childrenMdx.parent.internal.ignoreType" + | "childrenMdx.parent.internal.mediaType" + | "childrenMdx.parent.internal.owner" + | "childrenMdx.parent.internal.type" + | "childrenMdx.parent.parent.children" + | "childrenMdx.parent.parent.id" + | "childrenMdx.rawBody" + | "childrenMdx.slug" + | "childrenMdx.tableOfContents" + | "childrenMdx.timeToRead" + | "childrenMdx.wordCount.paragraphs" + | "childrenMdx.wordCount.sentences" + | "childrenMdx.wordCount.words" + | "childrenMonthJson" + | "childrenMonthJson.children" + | "childrenMonthJson.children.children" + | "childrenMonthJson.children.children.children" + | "childrenMonthJson.children.children.id" + | "childrenMonthJson.children.id" + | "childrenMonthJson.children.internal.content" + | "childrenMonthJson.children.internal.contentDigest" + | "childrenMonthJson.children.internal.description" + | "childrenMonthJson.children.internal.fieldOwners" + | "childrenMonthJson.children.internal.ignoreType" + | "childrenMonthJson.children.internal.mediaType" + | "childrenMonthJson.children.internal.owner" + | "childrenMonthJson.children.internal.type" + | "childrenMonthJson.children.parent.children" + | "childrenMonthJson.children.parent.id" + | "childrenMonthJson.currency" + | "childrenMonthJson.data" + | "childrenMonthJson.data.languages" + | "childrenMonthJson.data.user.avatarUrl" + | "childrenMonthJson.data.user.fullName" + | "childrenMonthJson.data.user.id" + | "childrenMonthJson.data.user.preTranslated" + | "childrenMonthJson.data.user.totalCosts" + | "childrenMonthJson.data.user.userRole" + | "childrenMonthJson.data.user.username" + | "childrenMonthJson.dateRange.from" + | "childrenMonthJson.dateRange.to" + | "childrenMonthJson.id" + | "childrenMonthJson.internal.content" + | "childrenMonthJson.internal.contentDigest" + | "childrenMonthJson.internal.description" + | "childrenMonthJson.internal.fieldOwners" + | "childrenMonthJson.internal.ignoreType" + | "childrenMonthJson.internal.mediaType" + | "childrenMonthJson.internal.owner" + | "childrenMonthJson.internal.type" + | "childrenMonthJson.mode" + | "childrenMonthJson.name" + | "childrenMonthJson.parent.children" + | "childrenMonthJson.parent.children.children" + | "childrenMonthJson.parent.children.id" + | "childrenMonthJson.parent.id" + | "childrenMonthJson.parent.internal.content" + | "childrenMonthJson.parent.internal.contentDigest" + | "childrenMonthJson.parent.internal.description" + | "childrenMonthJson.parent.internal.fieldOwners" + | "childrenMonthJson.parent.internal.ignoreType" + | "childrenMonthJson.parent.internal.mediaType" + | "childrenMonthJson.parent.internal.owner" + | "childrenMonthJson.parent.internal.type" + | "childrenMonthJson.parent.parent.children" + | "childrenMonthJson.parent.parent.id" + | "childrenMonthJson.totalCosts" + | "childrenMonthJson.totalPreTranslated" + | "childrenMonthJson.totalTMSavings" + | "childrenMonthJson.unit" + | "childrenMonthJson.url" + | "childrenQuarterJson" + | "childrenQuarterJson.children" + | "childrenQuarterJson.children.children" + | "childrenQuarterJson.children.children.children" + | "childrenQuarterJson.children.children.id" + | "childrenQuarterJson.children.id" + | "childrenQuarterJson.children.internal.content" + | "childrenQuarterJson.children.internal.contentDigest" + | "childrenQuarterJson.children.internal.description" + | "childrenQuarterJson.children.internal.fieldOwners" + | "childrenQuarterJson.children.internal.ignoreType" + | "childrenQuarterJson.children.internal.mediaType" + | "childrenQuarterJson.children.internal.owner" + | "childrenQuarterJson.children.internal.type" + | "childrenQuarterJson.children.parent.children" + | "childrenQuarterJson.children.parent.id" + | "childrenQuarterJson.currency" + | "childrenQuarterJson.data" + | "childrenQuarterJson.data.languages" + | "childrenQuarterJson.data.user.avatarUrl" + | "childrenQuarterJson.data.user.fullName" + | "childrenQuarterJson.data.user.id" + | "childrenQuarterJson.data.user.preTranslated" + | "childrenQuarterJson.data.user.totalCosts" + | "childrenQuarterJson.data.user.userRole" + | "childrenQuarterJson.data.user.username" + | "childrenQuarterJson.dateRange.from" + | "childrenQuarterJson.dateRange.to" + | "childrenQuarterJson.id" + | "childrenQuarterJson.internal.content" + | "childrenQuarterJson.internal.contentDigest" + | "childrenQuarterJson.internal.description" + | "childrenQuarterJson.internal.fieldOwners" + | "childrenQuarterJson.internal.ignoreType" + | "childrenQuarterJson.internal.mediaType" + | "childrenQuarterJson.internal.owner" + | "childrenQuarterJson.internal.type" + | "childrenQuarterJson.mode" + | "childrenQuarterJson.name" + | "childrenQuarterJson.parent.children" + | "childrenQuarterJson.parent.children.children" + | "childrenQuarterJson.parent.children.id" + | "childrenQuarterJson.parent.id" + | "childrenQuarterJson.parent.internal.content" + | "childrenQuarterJson.parent.internal.contentDigest" + | "childrenQuarterJson.parent.internal.description" + | "childrenQuarterJson.parent.internal.fieldOwners" + | "childrenQuarterJson.parent.internal.ignoreType" + | "childrenQuarterJson.parent.internal.mediaType" + | "childrenQuarterJson.parent.internal.owner" + | "childrenQuarterJson.parent.internal.type" + | "childrenQuarterJson.parent.parent.children" + | "childrenQuarterJson.parent.parent.id" + | "childrenQuarterJson.totalCosts" + | "childrenQuarterJson.totalPreTranslated" + | "childrenQuarterJson.totalTMSavings" + | "childrenQuarterJson.unit" + | "childrenQuarterJson.url" + | "childrenWalletsCsv" + | "childrenWalletsCsv.brand_color" + | "childrenWalletsCsv.children" + | "childrenWalletsCsv.children.children" + | "childrenWalletsCsv.children.children.children" + | "childrenWalletsCsv.children.children.id" + | "childrenWalletsCsv.children.id" + | "childrenWalletsCsv.children.internal.content" + | "childrenWalletsCsv.children.internal.contentDigest" + | "childrenWalletsCsv.children.internal.description" + | "childrenWalletsCsv.children.internal.fieldOwners" + | "childrenWalletsCsv.children.internal.ignoreType" + | "childrenWalletsCsv.children.internal.mediaType" + | "childrenWalletsCsv.children.internal.owner" + | "childrenWalletsCsv.children.internal.type" + | "childrenWalletsCsv.children.parent.children" + | "childrenWalletsCsv.children.parent.id" + | "childrenWalletsCsv.has_bank_withdrawals" + | "childrenWalletsCsv.has_card_deposits" + | "childrenWalletsCsv.has_defi_integrations" + | "childrenWalletsCsv.has_desktop" + | "childrenWalletsCsv.has_dex_integrations" + | "childrenWalletsCsv.has_explore_dapps" + | "childrenWalletsCsv.has_hardware" + | "childrenWalletsCsv.has_high_volume_purchases" + | "childrenWalletsCsv.has_limits_protection" + | "childrenWalletsCsv.has_mobile" + | "childrenWalletsCsv.has_multisig" + | "childrenWalletsCsv.has_web" + | "childrenWalletsCsv.id" + | "childrenWalletsCsv.internal.content" + | "childrenWalletsCsv.internal.contentDigest" + | "childrenWalletsCsv.internal.description" + | "childrenWalletsCsv.internal.fieldOwners" + | "childrenWalletsCsv.internal.ignoreType" + | "childrenWalletsCsv.internal.mediaType" + | "childrenWalletsCsv.internal.owner" + | "childrenWalletsCsv.internal.type" + | "childrenWalletsCsv.name" + | "childrenWalletsCsv.parent.children" + | "childrenWalletsCsv.parent.children.children" + | "childrenWalletsCsv.parent.children.id" + | "childrenWalletsCsv.parent.id" + | "childrenWalletsCsv.parent.internal.content" + | "childrenWalletsCsv.parent.internal.contentDigest" + | "childrenWalletsCsv.parent.internal.description" + | "childrenWalletsCsv.parent.internal.fieldOwners" + | "childrenWalletsCsv.parent.internal.ignoreType" + | "childrenWalletsCsv.parent.internal.mediaType" + | "childrenWalletsCsv.parent.internal.owner" + | "childrenWalletsCsv.parent.internal.type" + | "childrenWalletsCsv.parent.parent.children" + | "childrenWalletsCsv.parent.parent.id" + | "childrenWalletsCsv.url" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "ctime" + | "ctimeMs" + | "dev" + | "dir" + | "ext" + | "extension" + | "fields.gitLogLatestAuthorEmail" + | "fields.gitLogLatestAuthorName" + | "fields.gitLogLatestDate" + | "gid" + | "id" + | "ino" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "mode" + | "modifiedTime" + | "mtime" + | "mtimeMs" + | "name" + | "nlink" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "prettySize" + | "publicURL" + | "rdev" + | "relativeDirectory" + | "relativePath" + | "root" + | "size" + | "sourceInstanceName" + | "uid" + + type FileFieldsFilterInput = { + readonly gitLogLatestAuthorEmail: InputMaybe + readonly gitLogLatestAuthorName: InputMaybe + readonly gitLogLatestDate: InputMaybe + } + + type FileFilterInput = { + readonly absolutePath: InputMaybe + readonly accessTime: InputMaybe + readonly atime: InputMaybe + readonly atimeMs: InputMaybe + readonly base: InputMaybe + readonly birthTime: InputMaybe + readonly birthtime: InputMaybe + readonly birthtimeMs: InputMaybe + readonly blksize: InputMaybe + readonly blocks: InputMaybe + readonly changeTime: InputMaybe + readonly childAlltimeJson: InputMaybe + readonly childCexLayer2SupportJson: InputMaybe + readonly childCommunityEventsJson: InputMaybe + readonly childCommunityMeetupsJson: InputMaybe + readonly childConsensusBountyHuntersCsv: InputMaybe + readonly childDataJson: InputMaybe + readonly childExchangesByCountryCsv: InputMaybe + readonly childExecutionBountyHuntersCsv: InputMaybe + readonly childExternalTutorialsJson: InputMaybe + readonly childImageSharp: InputMaybe + readonly childLayer2Json: InputMaybe + readonly childMdx: InputMaybe + readonly childMonthJson: InputMaybe + readonly childQuarterJson: InputMaybe + readonly childWalletsCsv: InputMaybe + readonly children: InputMaybe + readonly childrenAlltimeJson: InputMaybe + readonly childrenCexLayer2SupportJson: InputMaybe + readonly childrenCommunityEventsJson: InputMaybe + readonly childrenCommunityMeetupsJson: InputMaybe + readonly childrenConsensusBountyHuntersCsv: InputMaybe + readonly childrenDataJson: InputMaybe + readonly childrenExchangesByCountryCsv: InputMaybe + readonly childrenExecutionBountyHuntersCsv: InputMaybe + readonly childrenExternalTutorialsJson: InputMaybe + readonly childrenImageSharp: InputMaybe + readonly childrenLayer2Json: InputMaybe + readonly childrenMdx: InputMaybe + readonly childrenMonthJson: InputMaybe + readonly childrenQuarterJson: InputMaybe + readonly childrenWalletsCsv: InputMaybe + readonly ctime: InputMaybe + readonly ctimeMs: InputMaybe + readonly dev: InputMaybe + readonly dir: InputMaybe + readonly ext: InputMaybe + readonly extension: InputMaybe + readonly fields: InputMaybe + readonly gid: InputMaybe + readonly id: InputMaybe + readonly ino: InputMaybe + readonly internal: InputMaybe + readonly mode: InputMaybe + readonly modifiedTime: InputMaybe + readonly mtime: InputMaybe + readonly mtimeMs: InputMaybe + readonly name: InputMaybe + readonly nlink: InputMaybe + readonly parent: InputMaybe + readonly prettySize: InputMaybe + readonly publicURL: InputMaybe + readonly rdev: InputMaybe + readonly relativeDirectory: InputMaybe + readonly relativePath: InputMaybe + readonly root: InputMaybe + readonly size: InputMaybe + readonly sourceInstanceName: InputMaybe + readonly uid: InputMaybe + } + + type FileGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type FileGroupConnection_distinctArgs = { + field: FileFieldsEnum + } + + type FileGroupConnection_groupArgs = { + field: FileFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type FileGroupConnection_maxArgs = { + field: FileFieldsEnum + } + + type FileGroupConnection_minArgs = { + field: FileFieldsEnum + } + + type FileGroupConnection_sumArgs = { + field: FileFieldsEnum + } + + type FileSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type FloatQueryOperatorInput = { + readonly eq: InputMaybe + readonly gt: InputMaybe + readonly gte: InputMaybe + readonly in: InputMaybe>> + readonly lt: InputMaybe + readonly lte: InputMaybe + readonly ne: InputMaybe + readonly nin: InputMaybe>> + } + + type Frontmatter = { + readonly address: Maybe + readonly alt: Maybe + readonly author: Maybe + readonly authors: Maybe + readonly compensation: Maybe + readonly description: Maybe + readonly emoji: Maybe + readonly image: Maybe + readonly incomplete: Maybe + readonly isOutdated: Maybe + readonly lang: Maybe + readonly link: Maybe + readonly location: Maybe + readonly position: Maybe + readonly published: Maybe + readonly sidebar: Maybe + readonly sidebarDepth: Maybe + readonly skill: Maybe + readonly source: Maybe + readonly sourceUrl: Maybe + readonly summaryPoint1: Scalars["String"] + readonly summaryPoint2: Scalars["String"] + readonly summaryPoint3: Scalars["String"] + readonly summaryPoint4: Scalars["String"] + readonly summaryPoints: Maybe>> + readonly tags: Maybe>> + readonly template: Maybe + readonly title: Maybe + readonly type: Maybe + } + + type FrontmatterFilterInput = { + readonly address: InputMaybe + readonly alt: InputMaybe + readonly author: InputMaybe + readonly authors: InputMaybe + readonly compensation: InputMaybe + readonly description: InputMaybe + readonly emoji: InputMaybe + readonly image: InputMaybe + readonly incomplete: InputMaybe + readonly isOutdated: InputMaybe + readonly lang: InputMaybe + readonly link: InputMaybe + readonly location: InputMaybe + readonly position: InputMaybe + readonly published: InputMaybe + readonly sidebar: InputMaybe + readonly sidebarDepth: InputMaybe + readonly skill: InputMaybe + readonly source: InputMaybe + readonly sourceUrl: InputMaybe + readonly summaryPoint1: InputMaybe + readonly summaryPoint2: InputMaybe + readonly summaryPoint3: InputMaybe + readonly summaryPoint4: InputMaybe + readonly summaryPoints: InputMaybe + readonly tags: InputMaybe + readonly template: InputMaybe + readonly title: InputMaybe + readonly type: InputMaybe + } + + type GatsbyImageFormat = + | "auto" + | "avif" + | "jpg" + | "NO_CHANGE" + | "png" + | "webp" + + type GatsbyImageLayout = "constrained" | "fixed" | "fullWidth" + + type GatsbyImagePlaceholder = + | "blurred" + | "dominantColor" + | "none" + | "tracedSVG" + + type HeadingsMdx = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" + + type ImageCropFocus = 17 | "CENTER" | 2 | 16 | 1 | 5 | 8 | 3 | 6 | 7 | 4 + + type ImageFit = "contain" | "cover" | "fill" | "inside" | "outside" + + type ImageFormat = "AUTO" | "avif" | "jpg" | "NO_CHANGE" | "png" | "webp" + + type ImageLayout = "constrained" | "fixed" | "fullWidth" + + type ImagePlaceholder = "blurred" | "dominantColor" | "none" | "tracedSVG" + + type ImageSharp = Node & { + readonly children: ReadonlyArray + readonly fixed: Maybe + readonly fluid: Maybe + readonly gatsbyImageData: Scalars["JSON"] + readonly id: Scalars["ID"] + readonly internal: Internal + readonly original: Maybe + readonly parent: Maybe + readonly resize: Maybe + } + + type ImageSharp_fixedArgs = { + background?: InputMaybe + base64Width: InputMaybe + cropFocus?: InputMaybe + duotone: InputMaybe + fit?: InputMaybe + grayscale?: InputMaybe + height: InputMaybe + jpegProgressive?: InputMaybe + jpegQuality: InputMaybe + pngCompressionSpeed?: InputMaybe + pngQuality: InputMaybe + quality: InputMaybe + rotate?: InputMaybe + toFormat?: InputMaybe + toFormatBase64?: InputMaybe + traceSVG: InputMaybe + trim?: InputMaybe + webpQuality: InputMaybe + width: InputMaybe + } + + type ImageSharp_fluidArgs = { + background?: InputMaybe + base64Width: InputMaybe + cropFocus?: InputMaybe + duotone: InputMaybe + fit?: InputMaybe + grayscale?: InputMaybe + jpegProgressive?: InputMaybe + jpegQuality: InputMaybe + maxHeight: InputMaybe + maxWidth: InputMaybe + pngCompressionSpeed?: InputMaybe + pngQuality: InputMaybe + quality: InputMaybe + rotate?: InputMaybe + sizes?: InputMaybe + srcSetBreakpoints?: InputMaybe>> + toFormat?: InputMaybe + toFormatBase64?: InputMaybe + traceSVG: InputMaybe + trim?: InputMaybe + webpQuality: InputMaybe + } + + type ImageSharp_gatsbyImageDataArgs = { + aspectRatio: InputMaybe + avifOptions: InputMaybe + backgroundColor: InputMaybe + blurredOptions: InputMaybe + breakpoints: InputMaybe>> + formats: InputMaybe>> + height: InputMaybe + jpgOptions: InputMaybe + layout?: InputMaybe + outputPixelDensities: InputMaybe< + ReadonlyArray> + > + placeholder: InputMaybe + pngOptions: InputMaybe + quality: InputMaybe + sizes: InputMaybe + tracedSVGOptions: InputMaybe + transformOptions: InputMaybe + webpOptions: InputMaybe + width: InputMaybe + } + + type ImageSharp_resizeArgs = { + background?: InputMaybe + base64?: InputMaybe + cropFocus?: InputMaybe + duotone: InputMaybe + fit?: InputMaybe + grayscale?: InputMaybe + height: InputMaybe + jpegProgressive?: InputMaybe + jpegQuality: InputMaybe + pngCompressionLevel?: InputMaybe + pngCompressionSpeed?: InputMaybe + pngQuality: InputMaybe + quality: InputMaybe + rotate?: InputMaybe + toFormat?: InputMaybe + traceSVG: InputMaybe + trim?: InputMaybe + webpQuality: InputMaybe + width: InputMaybe + } + + type ImageSharpConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ImageSharpConnection_distinctArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpConnection_groupArgs = { + field: ImageSharpFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ImageSharpConnection_maxArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpConnection_minArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpConnection_sumArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpEdge = { + readonly next: Maybe + readonly node: ImageSharp + readonly previous: Maybe + } + + type ImageSharpFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "fixed.aspectRatio" + | "fixed.base64" + | "fixed.height" + | "fixed.originalName" + | "fixed.src" + | "fixed.srcSet" + | "fixed.srcSetWebp" + | "fixed.srcWebp" + | "fixed.tracedSVG" + | "fixed.width" + | "fluid.aspectRatio" + | "fluid.base64" + | "fluid.originalImg" + | "fluid.originalName" + | "fluid.presentationHeight" + | "fluid.presentationWidth" + | "fluid.sizes" + | "fluid.src" + | "fluid.srcSet" + | "fluid.srcSetWebp" + | "fluid.srcWebp" + | "fluid.tracedSVG" + | "gatsbyImageData" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "original.height" + | "original.src" + | "original.width" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "resize.aspectRatio" + | "resize.height" + | "resize.originalName" + | "resize.src" + | "resize.tracedSVG" + | "resize.width" + + type ImageSharpFilterInput = { + readonly children: InputMaybe + readonly fixed: InputMaybe + readonly fluid: InputMaybe + readonly gatsbyImageData: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly original: InputMaybe + readonly parent: InputMaybe + readonly resize: InputMaybe + } + + type ImageSharpFilterListInput = { + readonly elemMatch: InputMaybe + } + + type ImageSharpFixed = { + readonly aspectRatio: Maybe + readonly base64: Maybe + readonly height: Scalars["Float"] + readonly originalName: Maybe + readonly src: Scalars["String"] + readonly srcSet: Scalars["String"] + readonly srcSetWebp: Maybe + readonly srcWebp: Maybe + readonly tracedSVG: Maybe + readonly width: Scalars["Float"] + } + + type ImageSharpFixedFilterInput = { + readonly aspectRatio: InputMaybe + readonly base64: InputMaybe + readonly height: InputMaybe + readonly originalName: InputMaybe + readonly src: InputMaybe + readonly srcSet: InputMaybe + readonly srcSetWebp: InputMaybe + readonly srcWebp: InputMaybe + readonly tracedSVG: InputMaybe + readonly width: InputMaybe + } + + type ImageSharpFluid = { + readonly aspectRatio: Scalars["Float"] + readonly base64: Maybe + readonly originalImg: Maybe + readonly originalName: Maybe + readonly presentationHeight: Scalars["Int"] + readonly presentationWidth: Scalars["Int"] + readonly sizes: Scalars["String"] + readonly src: Scalars["String"] + readonly srcSet: Scalars["String"] + readonly srcSetWebp: Maybe + readonly srcWebp: Maybe + readonly tracedSVG: Maybe + } + + type ImageSharpFluidFilterInput = { + readonly aspectRatio: InputMaybe + readonly base64: InputMaybe + readonly originalImg: InputMaybe + readonly originalName: InputMaybe + readonly presentationHeight: InputMaybe + readonly presentationWidth: InputMaybe + readonly sizes: InputMaybe + readonly src: InputMaybe + readonly srcSet: InputMaybe + readonly srcSetWebp: InputMaybe + readonly srcWebp: InputMaybe + readonly tracedSVG: InputMaybe + } + + type ImageSharpGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type ImageSharpGroupConnection_distinctArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpGroupConnection_groupArgs = { + field: ImageSharpFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type ImageSharpGroupConnection_maxArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpGroupConnection_minArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpGroupConnection_sumArgs = { + field: ImageSharpFieldsEnum + } + + type ImageSharpOriginal = { + readonly height: Maybe + readonly src: Maybe + readonly width: Maybe + } + + type ImageSharpOriginalFilterInput = { + readonly height: InputMaybe + readonly src: InputMaybe + readonly width: InputMaybe + } + + type ImageSharpResize = { + readonly aspectRatio: Maybe + readonly height: Maybe + readonly originalName: Maybe + readonly src: Maybe + readonly tracedSVG: Maybe + readonly width: Maybe + } + + type ImageSharpResizeFilterInput = { + readonly aspectRatio: InputMaybe + readonly height: InputMaybe + readonly originalName: InputMaybe + readonly src: InputMaybe + readonly tracedSVG: InputMaybe + readonly width: InputMaybe + } + + type ImageSharpSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type IntQueryOperatorInput = { + readonly eq: InputMaybe + readonly gt: InputMaybe + readonly gte: InputMaybe + readonly in: InputMaybe>> + readonly lt: InputMaybe + readonly lte: InputMaybe + readonly ne: InputMaybe + readonly nin: InputMaybe>> + } + + type Internal = { + readonly content: Maybe + readonly contentDigest: Scalars["String"] + readonly description: Maybe + readonly fieldOwners: Maybe>> + readonly ignoreType: Maybe + readonly mediaType: Maybe + readonly owner: Scalars["String"] + readonly type: Scalars["String"] + } + + type InternalFilterInput = { + readonly content: InputMaybe + readonly contentDigest: InputMaybe + readonly description: InputMaybe + readonly fieldOwners: InputMaybe + readonly ignoreType: InputMaybe + readonly mediaType: InputMaybe + readonly owner: InputMaybe + readonly type: InputMaybe + } + + type JPGOptions = { + readonly progressive: InputMaybe + readonly quality: InputMaybe + } + + type JSONQueryOperatorInput = { + readonly eq: InputMaybe + readonly glob: InputMaybe + readonly in: InputMaybe>> + readonly ne: InputMaybe + readonly nin: InputMaybe>> + readonly regex: InputMaybe + } + + type Layer2Json = Node & { + readonly children: ReadonlyArray + readonly id: Scalars["ID"] + readonly internal: Internal + readonly optimistic: Maybe>> + readonly parent: Maybe + readonly zk: Maybe>> + } + + type Layer2JsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type Layer2JsonConnection_distinctArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonConnection_groupArgs = { + field: Layer2JsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type Layer2JsonConnection_maxArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonConnection_minArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonConnection_sumArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonEdge = { + readonly next: Maybe + readonly node: Layer2Json + readonly previous: Maybe + } + + type Layer2JsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "optimistic" + | "optimistic.background" + | "optimistic.blockExplorer" + | "optimistic.bridge" + | "optimistic.bridgeWallets" + | "optimistic.description" + | "optimistic.developerDocs" + | "optimistic.ecosystemPortal" + | "optimistic.imageKey" + | "optimistic.l2beat" + | "optimistic.name" + | "optimistic.noteKey" + | "optimistic.purpose" + | "optimistic.tokenLists" + | "optimistic.website" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "zk" + | "zk.background" + | "zk.blockExplorer" + | "zk.bridge" + | "zk.bridgeWallets" + | "zk.description" + | "zk.developerDocs" + | "zk.ecosystemPortal" + | "zk.imageKey" + | "zk.l2beat" + | "zk.name" + | "zk.noteKey" + | "zk.purpose" + | "zk.tokenLists" + | "zk.website" + + type Layer2JsonFilterInput = { + readonly children: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly optimistic: InputMaybe + readonly parent: InputMaybe + readonly zk: InputMaybe + } + + type Layer2JsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type Layer2JsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type Layer2JsonGroupConnection_distinctArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonGroupConnection_groupArgs = { + field: Layer2JsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type Layer2JsonGroupConnection_maxArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonGroupConnection_minArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonGroupConnection_sumArgs = { + field: Layer2JsonFieldsEnum + } + + type Layer2JsonOptimistic = { + readonly background: Maybe + readonly blockExplorer: Maybe + readonly bridge: Maybe + readonly bridgeWallets: Maybe>> + readonly description: Maybe + readonly developerDocs: Maybe + readonly ecosystemPortal: Maybe + readonly imageKey: Maybe + readonly l2beat: Maybe + readonly name: Maybe + readonly noteKey: Maybe + readonly purpose: Maybe>> + readonly tokenLists: Maybe + readonly website: Maybe + } + + type Layer2JsonOptimisticFilterInput = { + readonly background: InputMaybe + readonly blockExplorer: InputMaybe + readonly bridge: InputMaybe + readonly bridgeWallets: InputMaybe + readonly description: InputMaybe + readonly developerDocs: InputMaybe + readonly ecosystemPortal: InputMaybe + readonly imageKey: InputMaybe + readonly l2beat: InputMaybe + readonly name: InputMaybe + readonly noteKey: InputMaybe + readonly purpose: InputMaybe + readonly tokenLists: InputMaybe + readonly website: InputMaybe + } + + type Layer2JsonOptimisticFilterListInput = { + readonly elemMatch: InputMaybe + } + + type Layer2JsonSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type Layer2JsonZk = { + readonly background: Maybe + readonly blockExplorer: Maybe + readonly bridge: Maybe + readonly bridgeWallets: Maybe>> + readonly description: Maybe + readonly developerDocs: Maybe + readonly ecosystemPortal: Maybe + readonly imageKey: Maybe + readonly l2beat: Maybe + readonly name: Maybe + readonly noteKey: Maybe + readonly purpose: Maybe>> + readonly tokenLists: Maybe + readonly website: Maybe + } + + type Layer2JsonZkFilterInput = { + readonly background: InputMaybe + readonly blockExplorer: InputMaybe + readonly bridge: InputMaybe + readonly bridgeWallets: InputMaybe + readonly description: InputMaybe + readonly developerDocs: InputMaybe + readonly ecosystemPortal: InputMaybe + readonly imageKey: InputMaybe + readonly l2beat: InputMaybe + readonly name: InputMaybe + readonly noteKey: InputMaybe + readonly purpose: InputMaybe + readonly tokenLists: InputMaybe + readonly website: InputMaybe + } + + type Layer2JsonZkFilterListInput = { + readonly elemMatch: InputMaybe + } + + type Mdx = Node & { + readonly body: Scalars["String"] + readonly children: ReadonlyArray + readonly excerpt: Scalars["String"] + readonly fields: Maybe + readonly fileAbsolutePath: Scalars["String"] + readonly frontmatter: Maybe + readonly headings: Maybe>> + readonly html: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly mdxAST: Maybe + readonly parent: Maybe + readonly rawBody: Scalars["String"] + readonly slug: Maybe + readonly tableOfContents: Maybe + readonly timeToRead: Maybe + readonly wordCount: Maybe + } + + type Mdx_excerptArgs = { + pruneLength?: InputMaybe + truncate?: InputMaybe + } + + type Mdx_headingsArgs = { + depth: InputMaybe + } + + type Mdx_tableOfContentsArgs = { + maxDepth: InputMaybe + } + + type MdxConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type MdxConnection_distinctArgs = { + field: MdxFieldsEnum + } + + type MdxConnection_groupArgs = { + field: MdxFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type MdxConnection_maxArgs = { + field: MdxFieldsEnum + } + + type MdxConnection_minArgs = { + field: MdxFieldsEnum + } + + type MdxConnection_sumArgs = { + field: MdxFieldsEnum + } + + type MdxEdge = { + readonly next: Maybe + readonly node: Mdx + readonly previous: Maybe + } + + type MdxFields = { + readonly isOutdated: Maybe + readonly readingTime: Maybe + readonly relativePath: Maybe + readonly slug: Maybe + } + + type MdxFieldsEnum = + | "body" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "excerpt" + | "fields.isOutdated" + | "fields.readingTime.minutes" + | "fields.readingTime.text" + | "fields.readingTime.time" + | "fields.readingTime.words" + | "fields.relativePath" + | "fields.slug" + | "fileAbsolutePath" + | "frontmatter.address" + | "frontmatter.alt" + | "frontmatter.author" + | "frontmatter.authors" + | "frontmatter.compensation" + | "frontmatter.description" + | "frontmatter.emoji" + | "frontmatter.image.absolutePath" + | "frontmatter.image.accessTime" + | "frontmatter.image.atime" + | "frontmatter.image.atimeMs" + | "frontmatter.image.base" + | "frontmatter.image.birthTime" + | "frontmatter.image.birthtime" + | "frontmatter.image.birthtimeMs" + | "frontmatter.image.blksize" + | "frontmatter.image.blocks" + | "frontmatter.image.changeTime" + | "frontmatter.image.childAlltimeJson.children" + | "frontmatter.image.childAlltimeJson.currency" + | "frontmatter.image.childAlltimeJson.data" + | "frontmatter.image.childAlltimeJson.id" + | "frontmatter.image.childAlltimeJson.mode" + | "frontmatter.image.childAlltimeJson.name" + | "frontmatter.image.childAlltimeJson.totalCosts" + | "frontmatter.image.childAlltimeJson.totalPreTranslated" + | "frontmatter.image.childAlltimeJson.totalTMSavings" + | "frontmatter.image.childAlltimeJson.unit" + | "frontmatter.image.childAlltimeJson.url" + | "frontmatter.image.childCexLayer2SupportJson.children" + | "frontmatter.image.childCexLayer2SupportJson.id" + | "frontmatter.image.childCexLayer2SupportJson.name" + | "frontmatter.image.childCexLayer2SupportJson.supports_deposits" + | "frontmatter.image.childCexLayer2SupportJson.supports_withdrawals" + | "frontmatter.image.childCexLayer2SupportJson.url" + | "frontmatter.image.childCommunityEventsJson.children" + | "frontmatter.image.childCommunityEventsJson.description" + | "frontmatter.image.childCommunityEventsJson.endDate" + | "frontmatter.image.childCommunityEventsJson.id" + | "frontmatter.image.childCommunityEventsJson.location" + | "frontmatter.image.childCommunityEventsJson.sponsor" + | "frontmatter.image.childCommunityEventsJson.startDate" + | "frontmatter.image.childCommunityEventsJson.title" + | "frontmatter.image.childCommunityEventsJson.to" + | "frontmatter.image.childCommunityMeetupsJson.children" + | "frontmatter.image.childCommunityMeetupsJson.emoji" + | "frontmatter.image.childCommunityMeetupsJson.id" + | "frontmatter.image.childCommunityMeetupsJson.link" + | "frontmatter.image.childCommunityMeetupsJson.location" + | "frontmatter.image.childCommunityMeetupsJson.title" + | "frontmatter.image.childConsensusBountyHuntersCsv.children" + | "frontmatter.image.childConsensusBountyHuntersCsv.id" + | "frontmatter.image.childConsensusBountyHuntersCsv.name" + | "frontmatter.image.childConsensusBountyHuntersCsv.score" + | "frontmatter.image.childConsensusBountyHuntersCsv.username" + | "frontmatter.image.childDataJson.children" + | "frontmatter.image.childDataJson.commit" + | "frontmatter.image.childDataJson.contributors" + | "frontmatter.image.childDataJson.contributorsPerLine" + | "frontmatter.image.childDataJson.files" + | "frontmatter.image.childDataJson.id" + | "frontmatter.image.childDataJson.imageSize" + | "frontmatter.image.childDataJson.keyGen" + | "frontmatter.image.childDataJson.nodeTools" + | "frontmatter.image.childDataJson.pools" + | "frontmatter.image.childDataJson.projectName" + | "frontmatter.image.childDataJson.projectOwner" + | "frontmatter.image.childDataJson.repoHost" + | "frontmatter.image.childDataJson.repoType" + | "frontmatter.image.childDataJson.saas" + | "frontmatter.image.childDataJson.skipCi" + | "frontmatter.image.childExchangesByCountryCsv.binance" + | "frontmatter.image.childExchangesByCountryCsv.binanceus" + | "frontmatter.image.childExchangesByCountryCsv.bitbuy" + | "frontmatter.image.childExchangesByCountryCsv.bitfinex" + | "frontmatter.image.childExchangesByCountryCsv.bitflyer" + | "frontmatter.image.childExchangesByCountryCsv.bitkub" + | "frontmatter.image.childExchangesByCountryCsv.bitso" + | "frontmatter.image.childExchangesByCountryCsv.bittrex" + | "frontmatter.image.childExchangesByCountryCsv.bitvavo" + | "frontmatter.image.childExchangesByCountryCsv.bybit" + | "frontmatter.image.childExchangesByCountryCsv.children" + | "frontmatter.image.childExchangesByCountryCsv.coinbase" + | "frontmatter.image.childExchangesByCountryCsv.coinmama" + | "frontmatter.image.childExchangesByCountryCsv.coinspot" + | "frontmatter.image.childExchangesByCountryCsv.country" + | "frontmatter.image.childExchangesByCountryCsv.cryptocom" + | "frontmatter.image.childExchangesByCountryCsv.easycrypto" + | "frontmatter.image.childExchangesByCountryCsv.ftx" + | "frontmatter.image.childExchangesByCountryCsv.ftxus" + | "frontmatter.image.childExchangesByCountryCsv.gateio" + | "frontmatter.image.childExchangesByCountryCsv.gemini" + | "frontmatter.image.childExchangesByCountryCsv.huobiglobal" + | "frontmatter.image.childExchangesByCountryCsv.id" + | "frontmatter.image.childExchangesByCountryCsv.itezcom" + | "frontmatter.image.childExchangesByCountryCsv.kraken" + | "frontmatter.image.childExchangesByCountryCsv.kucoin" + | "frontmatter.image.childExchangesByCountryCsv.moonpay" + | "frontmatter.image.childExchangesByCountryCsv.mtpelerin" + | "frontmatter.image.childExchangesByCountryCsv.okx" + | "frontmatter.image.childExchangesByCountryCsv.rain" + | "frontmatter.image.childExchangesByCountryCsv.simplex" + | "frontmatter.image.childExchangesByCountryCsv.wazirx" + | "frontmatter.image.childExchangesByCountryCsv.wyre" + | "frontmatter.image.childExecutionBountyHuntersCsv.children" + | "frontmatter.image.childExecutionBountyHuntersCsv.id" + | "frontmatter.image.childExecutionBountyHuntersCsv.name" + | "frontmatter.image.childExecutionBountyHuntersCsv.score" + | "frontmatter.image.childExecutionBountyHuntersCsv.username" + | "frontmatter.image.childExternalTutorialsJson.author" + | "frontmatter.image.childExternalTutorialsJson.authorGithub" + | "frontmatter.image.childExternalTutorialsJson.children" + | "frontmatter.image.childExternalTutorialsJson.description" + | "frontmatter.image.childExternalTutorialsJson.id" + | "frontmatter.image.childExternalTutorialsJson.lang" + | "frontmatter.image.childExternalTutorialsJson.publishDate" + | "frontmatter.image.childExternalTutorialsJson.skillLevel" + | "frontmatter.image.childExternalTutorialsJson.tags" + | "frontmatter.image.childExternalTutorialsJson.timeToRead" + | "frontmatter.image.childExternalTutorialsJson.title" + | "frontmatter.image.childExternalTutorialsJson.url" + | "frontmatter.image.childImageSharp.children" + | "frontmatter.image.childImageSharp.gatsbyImageData" + | "frontmatter.image.childImageSharp.id" + | "frontmatter.image.childLayer2Json.children" + | "frontmatter.image.childLayer2Json.id" + | "frontmatter.image.childLayer2Json.optimistic" + | "frontmatter.image.childLayer2Json.zk" + | "frontmatter.image.childMdx.body" + | "frontmatter.image.childMdx.children" + | "frontmatter.image.childMdx.excerpt" + | "frontmatter.image.childMdx.fileAbsolutePath" + | "frontmatter.image.childMdx.headings" + | "frontmatter.image.childMdx.html" + | "frontmatter.image.childMdx.id" + | "frontmatter.image.childMdx.mdxAST" + | "frontmatter.image.childMdx.rawBody" + | "frontmatter.image.childMdx.slug" + | "frontmatter.image.childMdx.tableOfContents" + | "frontmatter.image.childMdx.timeToRead" + | "frontmatter.image.childMonthJson.children" + | "frontmatter.image.childMonthJson.currency" + | "frontmatter.image.childMonthJson.data" + | "frontmatter.image.childMonthJson.id" + | "frontmatter.image.childMonthJson.mode" + | "frontmatter.image.childMonthJson.name" + | "frontmatter.image.childMonthJson.totalCosts" + | "frontmatter.image.childMonthJson.totalPreTranslated" + | "frontmatter.image.childMonthJson.totalTMSavings" + | "frontmatter.image.childMonthJson.unit" + | "frontmatter.image.childMonthJson.url" + | "frontmatter.image.childQuarterJson.children" + | "frontmatter.image.childQuarterJson.currency" + | "frontmatter.image.childQuarterJson.data" + | "frontmatter.image.childQuarterJson.id" + | "frontmatter.image.childQuarterJson.mode" + | "frontmatter.image.childQuarterJson.name" + | "frontmatter.image.childQuarterJson.totalCosts" + | "frontmatter.image.childQuarterJson.totalPreTranslated" + | "frontmatter.image.childQuarterJson.totalTMSavings" + | "frontmatter.image.childQuarterJson.unit" + | "frontmatter.image.childQuarterJson.url" + | "frontmatter.image.childWalletsCsv.brand_color" + | "frontmatter.image.childWalletsCsv.children" + | "frontmatter.image.childWalletsCsv.has_bank_withdrawals" + | "frontmatter.image.childWalletsCsv.has_card_deposits" + | "frontmatter.image.childWalletsCsv.has_defi_integrations" + | "frontmatter.image.childWalletsCsv.has_desktop" + | "frontmatter.image.childWalletsCsv.has_dex_integrations" + | "frontmatter.image.childWalletsCsv.has_explore_dapps" + | "frontmatter.image.childWalletsCsv.has_hardware" + | "frontmatter.image.childWalletsCsv.has_high_volume_purchases" + | "frontmatter.image.childWalletsCsv.has_limits_protection" + | "frontmatter.image.childWalletsCsv.has_mobile" + | "frontmatter.image.childWalletsCsv.has_multisig" + | "frontmatter.image.childWalletsCsv.has_web" + | "frontmatter.image.childWalletsCsv.id" + | "frontmatter.image.childWalletsCsv.name" + | "frontmatter.image.childWalletsCsv.url" + | "frontmatter.image.children" + | "frontmatter.image.childrenAlltimeJson" + | "frontmatter.image.childrenAlltimeJson.children" + | "frontmatter.image.childrenAlltimeJson.currency" + | "frontmatter.image.childrenAlltimeJson.data" + | "frontmatter.image.childrenAlltimeJson.id" + | "frontmatter.image.childrenAlltimeJson.mode" + | "frontmatter.image.childrenAlltimeJson.name" + | "frontmatter.image.childrenAlltimeJson.totalCosts" + | "frontmatter.image.childrenAlltimeJson.totalPreTranslated" + | "frontmatter.image.childrenAlltimeJson.totalTMSavings" + | "frontmatter.image.childrenAlltimeJson.unit" + | "frontmatter.image.childrenAlltimeJson.url" + | "frontmatter.image.childrenCexLayer2SupportJson" + | "frontmatter.image.childrenCexLayer2SupportJson.children" + | "frontmatter.image.childrenCexLayer2SupportJson.id" + | "frontmatter.image.childrenCexLayer2SupportJson.name" + | "frontmatter.image.childrenCexLayer2SupportJson.supports_deposits" + | "frontmatter.image.childrenCexLayer2SupportJson.supports_withdrawals" + | "frontmatter.image.childrenCexLayer2SupportJson.url" + | "frontmatter.image.childrenCommunityEventsJson" + | "frontmatter.image.childrenCommunityEventsJson.children" + | "frontmatter.image.childrenCommunityEventsJson.description" + | "frontmatter.image.childrenCommunityEventsJson.endDate" + | "frontmatter.image.childrenCommunityEventsJson.id" + | "frontmatter.image.childrenCommunityEventsJson.location" + | "frontmatter.image.childrenCommunityEventsJson.sponsor" + | "frontmatter.image.childrenCommunityEventsJson.startDate" + | "frontmatter.image.childrenCommunityEventsJson.title" + | "frontmatter.image.childrenCommunityEventsJson.to" + | "frontmatter.image.childrenCommunityMeetupsJson" + | "frontmatter.image.childrenCommunityMeetupsJson.children" + | "frontmatter.image.childrenCommunityMeetupsJson.emoji" + | "frontmatter.image.childrenCommunityMeetupsJson.id" + | "frontmatter.image.childrenCommunityMeetupsJson.link" + | "frontmatter.image.childrenCommunityMeetupsJson.location" + | "frontmatter.image.childrenCommunityMeetupsJson.title" + | "frontmatter.image.childrenConsensusBountyHuntersCsv" + | "frontmatter.image.childrenConsensusBountyHuntersCsv.children" + | "frontmatter.image.childrenConsensusBountyHuntersCsv.id" + | "frontmatter.image.childrenConsensusBountyHuntersCsv.name" + | "frontmatter.image.childrenConsensusBountyHuntersCsv.score" + | "frontmatter.image.childrenConsensusBountyHuntersCsv.username" + | "frontmatter.image.childrenDataJson" + | "frontmatter.image.childrenDataJson.children" + | "frontmatter.image.childrenDataJson.commit" + | "frontmatter.image.childrenDataJson.contributors" + | "frontmatter.image.childrenDataJson.contributorsPerLine" + | "frontmatter.image.childrenDataJson.files" + | "frontmatter.image.childrenDataJson.id" + | "frontmatter.image.childrenDataJson.imageSize" + | "frontmatter.image.childrenDataJson.keyGen" + | "frontmatter.image.childrenDataJson.nodeTools" + | "frontmatter.image.childrenDataJson.pools" + | "frontmatter.image.childrenDataJson.projectName" + | "frontmatter.image.childrenDataJson.projectOwner" + | "frontmatter.image.childrenDataJson.repoHost" + | "frontmatter.image.childrenDataJson.repoType" + | "frontmatter.image.childrenDataJson.saas" + | "frontmatter.image.childrenDataJson.skipCi" + | "frontmatter.image.childrenExchangesByCountryCsv" + | "frontmatter.image.childrenExchangesByCountryCsv.binance" + | "frontmatter.image.childrenExchangesByCountryCsv.binanceus" + | "frontmatter.image.childrenExchangesByCountryCsv.bitbuy" + | "frontmatter.image.childrenExchangesByCountryCsv.bitfinex" + | "frontmatter.image.childrenExchangesByCountryCsv.bitflyer" + | "frontmatter.image.childrenExchangesByCountryCsv.bitkub" + | "frontmatter.image.childrenExchangesByCountryCsv.bitso" + | "frontmatter.image.childrenExchangesByCountryCsv.bittrex" + | "frontmatter.image.childrenExchangesByCountryCsv.bitvavo" + | "frontmatter.image.childrenExchangesByCountryCsv.bybit" + | "frontmatter.image.childrenExchangesByCountryCsv.children" + | "frontmatter.image.childrenExchangesByCountryCsv.coinbase" + | "frontmatter.image.childrenExchangesByCountryCsv.coinmama" + | "frontmatter.image.childrenExchangesByCountryCsv.coinspot" + | "frontmatter.image.childrenExchangesByCountryCsv.country" + | "frontmatter.image.childrenExchangesByCountryCsv.cryptocom" + | "frontmatter.image.childrenExchangesByCountryCsv.easycrypto" + | "frontmatter.image.childrenExchangesByCountryCsv.ftx" + | "frontmatter.image.childrenExchangesByCountryCsv.ftxus" + | "frontmatter.image.childrenExchangesByCountryCsv.gateio" + | "frontmatter.image.childrenExchangesByCountryCsv.gemini" + | "frontmatter.image.childrenExchangesByCountryCsv.huobiglobal" + | "frontmatter.image.childrenExchangesByCountryCsv.id" + | "frontmatter.image.childrenExchangesByCountryCsv.itezcom" + | "frontmatter.image.childrenExchangesByCountryCsv.kraken" + | "frontmatter.image.childrenExchangesByCountryCsv.kucoin" + | "frontmatter.image.childrenExchangesByCountryCsv.moonpay" + | "frontmatter.image.childrenExchangesByCountryCsv.mtpelerin" + | "frontmatter.image.childrenExchangesByCountryCsv.okx" + | "frontmatter.image.childrenExchangesByCountryCsv.rain" + | "frontmatter.image.childrenExchangesByCountryCsv.simplex" + | "frontmatter.image.childrenExchangesByCountryCsv.wazirx" + | "frontmatter.image.childrenExchangesByCountryCsv.wyre" + | "frontmatter.image.childrenExecutionBountyHuntersCsv" + | "frontmatter.image.childrenExecutionBountyHuntersCsv.children" + | "frontmatter.image.childrenExecutionBountyHuntersCsv.id" + | "frontmatter.image.childrenExecutionBountyHuntersCsv.name" + | "frontmatter.image.childrenExecutionBountyHuntersCsv.score" + | "frontmatter.image.childrenExecutionBountyHuntersCsv.username" + | "frontmatter.image.childrenExternalTutorialsJson" + | "frontmatter.image.childrenExternalTutorialsJson.author" + | "frontmatter.image.childrenExternalTutorialsJson.authorGithub" + | "frontmatter.image.childrenExternalTutorialsJson.children" + | "frontmatter.image.childrenExternalTutorialsJson.description" + | "frontmatter.image.childrenExternalTutorialsJson.id" + | "frontmatter.image.childrenExternalTutorialsJson.lang" + | "frontmatter.image.childrenExternalTutorialsJson.publishDate" + | "frontmatter.image.childrenExternalTutorialsJson.skillLevel" + | "frontmatter.image.childrenExternalTutorialsJson.tags" + | "frontmatter.image.childrenExternalTutorialsJson.timeToRead" + | "frontmatter.image.childrenExternalTutorialsJson.title" + | "frontmatter.image.childrenExternalTutorialsJson.url" + | "frontmatter.image.childrenImageSharp" + | "frontmatter.image.childrenImageSharp.children" + | "frontmatter.image.childrenImageSharp.gatsbyImageData" + | "frontmatter.image.childrenImageSharp.id" + | "frontmatter.image.childrenLayer2Json" + | "frontmatter.image.childrenLayer2Json.children" + | "frontmatter.image.childrenLayer2Json.id" + | "frontmatter.image.childrenLayer2Json.optimistic" + | "frontmatter.image.childrenLayer2Json.zk" + | "frontmatter.image.childrenMdx" + | "frontmatter.image.childrenMdx.body" + | "frontmatter.image.childrenMdx.children" + | "frontmatter.image.childrenMdx.excerpt" + | "frontmatter.image.childrenMdx.fileAbsolutePath" + | "frontmatter.image.childrenMdx.headings" + | "frontmatter.image.childrenMdx.html" + | "frontmatter.image.childrenMdx.id" + | "frontmatter.image.childrenMdx.mdxAST" + | "frontmatter.image.childrenMdx.rawBody" + | "frontmatter.image.childrenMdx.slug" + | "frontmatter.image.childrenMdx.tableOfContents" + | "frontmatter.image.childrenMdx.timeToRead" + | "frontmatter.image.childrenMonthJson" + | "frontmatter.image.childrenMonthJson.children" + | "frontmatter.image.childrenMonthJson.currency" + | "frontmatter.image.childrenMonthJson.data" + | "frontmatter.image.childrenMonthJson.id" + | "frontmatter.image.childrenMonthJson.mode" + | "frontmatter.image.childrenMonthJson.name" + | "frontmatter.image.childrenMonthJson.totalCosts" + | "frontmatter.image.childrenMonthJson.totalPreTranslated" + | "frontmatter.image.childrenMonthJson.totalTMSavings" + | "frontmatter.image.childrenMonthJson.unit" + | "frontmatter.image.childrenMonthJson.url" + | "frontmatter.image.childrenQuarterJson" + | "frontmatter.image.childrenQuarterJson.children" + | "frontmatter.image.childrenQuarterJson.currency" + | "frontmatter.image.childrenQuarterJson.data" + | "frontmatter.image.childrenQuarterJson.id" + | "frontmatter.image.childrenQuarterJson.mode" + | "frontmatter.image.childrenQuarterJson.name" + | "frontmatter.image.childrenQuarterJson.totalCosts" + | "frontmatter.image.childrenQuarterJson.totalPreTranslated" + | "frontmatter.image.childrenQuarterJson.totalTMSavings" + | "frontmatter.image.childrenQuarterJson.unit" + | "frontmatter.image.childrenQuarterJson.url" + | "frontmatter.image.childrenWalletsCsv" + | "frontmatter.image.childrenWalletsCsv.brand_color" + | "frontmatter.image.childrenWalletsCsv.children" + | "frontmatter.image.childrenWalletsCsv.has_bank_withdrawals" + | "frontmatter.image.childrenWalletsCsv.has_card_deposits" + | "frontmatter.image.childrenWalletsCsv.has_defi_integrations" + | "frontmatter.image.childrenWalletsCsv.has_desktop" + | "frontmatter.image.childrenWalletsCsv.has_dex_integrations" + | "frontmatter.image.childrenWalletsCsv.has_explore_dapps" + | "frontmatter.image.childrenWalletsCsv.has_hardware" + | "frontmatter.image.childrenWalletsCsv.has_high_volume_purchases" + | "frontmatter.image.childrenWalletsCsv.has_limits_protection" + | "frontmatter.image.childrenWalletsCsv.has_mobile" + | "frontmatter.image.childrenWalletsCsv.has_multisig" + | "frontmatter.image.childrenWalletsCsv.has_web" + | "frontmatter.image.childrenWalletsCsv.id" + | "frontmatter.image.childrenWalletsCsv.name" + | "frontmatter.image.childrenWalletsCsv.url" + | "frontmatter.image.children.children" + | "frontmatter.image.children.id" + | "frontmatter.image.ctime" + | "frontmatter.image.ctimeMs" + | "frontmatter.image.dev" + | "frontmatter.image.dir" + | "frontmatter.image.ext" + | "frontmatter.image.extension" + | "frontmatter.image.fields.gitLogLatestAuthorEmail" + | "frontmatter.image.fields.gitLogLatestAuthorName" + | "frontmatter.image.fields.gitLogLatestDate" + | "frontmatter.image.gid" + | "frontmatter.image.id" + | "frontmatter.image.ino" + | "frontmatter.image.internal.content" + | "frontmatter.image.internal.contentDigest" + | "frontmatter.image.internal.description" + | "frontmatter.image.internal.fieldOwners" + | "frontmatter.image.internal.ignoreType" + | "frontmatter.image.internal.mediaType" + | "frontmatter.image.internal.owner" + | "frontmatter.image.internal.type" + | "frontmatter.image.mode" + | "frontmatter.image.modifiedTime" + | "frontmatter.image.mtime" + | "frontmatter.image.mtimeMs" + | "frontmatter.image.name" + | "frontmatter.image.nlink" + | "frontmatter.image.parent.children" + | "frontmatter.image.parent.id" + | "frontmatter.image.prettySize" + | "frontmatter.image.publicURL" + | "frontmatter.image.rdev" + | "frontmatter.image.relativeDirectory" + | "frontmatter.image.relativePath" + | "frontmatter.image.root" + | "frontmatter.image.size" + | "frontmatter.image.sourceInstanceName" + | "frontmatter.image.uid" + | "frontmatter.incomplete" + | "frontmatter.isOutdated" + | "frontmatter.lang" + | "frontmatter.link" + | "frontmatter.location" + | "frontmatter.position" + | "frontmatter.published" + | "frontmatter.sidebar" + | "frontmatter.sidebarDepth" + | "frontmatter.skill" + | "frontmatter.source" + | "frontmatter.sourceUrl" + | "frontmatter.summaryPoint1" + | "frontmatter.summaryPoint2" + | "frontmatter.summaryPoint3" + | "frontmatter.summaryPoint4" + | "frontmatter.summaryPoints" + | "frontmatter.tags" + | "frontmatter.template" + | "frontmatter.title" + | "frontmatter.type" + | "headings" + | "headings.depth" + | "headings.value" + | "html" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "mdxAST" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "rawBody" + | "slug" + | "tableOfContents" + | "timeToRead" + | "wordCount.paragraphs" + | "wordCount.sentences" + | "wordCount.words" + + type MdxFieldsFilterInput = { + readonly isOutdated: InputMaybe + readonly readingTime: InputMaybe + readonly relativePath: InputMaybe + readonly slug: InputMaybe + } + + type MdxFieldsReadingTime = { + readonly minutes: Maybe + readonly text: Maybe + readonly time: Maybe + readonly words: Maybe + } + + type MdxFieldsReadingTimeFilterInput = { + readonly minutes: InputMaybe + readonly text: InputMaybe + readonly time: InputMaybe + readonly words: InputMaybe + } + + type MdxFilterInput = { + readonly body: InputMaybe + readonly children: InputMaybe + readonly excerpt: InputMaybe + readonly fields: InputMaybe + readonly fileAbsolutePath: InputMaybe + readonly frontmatter: InputMaybe + readonly headings: InputMaybe + readonly html: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly mdxAST: InputMaybe + readonly parent: InputMaybe + readonly rawBody: InputMaybe + readonly slug: InputMaybe + readonly tableOfContents: InputMaybe + readonly timeToRead: InputMaybe + readonly wordCount: InputMaybe + } + + type MdxFilterListInput = { + readonly elemMatch: InputMaybe + } + + type MdxFrontmatter = { + readonly title: Scalars["String"] + } + + type MdxGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type MdxGroupConnection_distinctArgs = { + field: MdxFieldsEnum + } + + type MdxGroupConnection_groupArgs = { + field: MdxFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type MdxGroupConnection_maxArgs = { + field: MdxFieldsEnum + } + + type MdxGroupConnection_minArgs = { + field: MdxFieldsEnum + } + + type MdxGroupConnection_sumArgs = { + field: MdxFieldsEnum + } + + type MdxHeadingMdx = { + readonly depth: Maybe + readonly value: Maybe + } + + type MdxHeadingMdxFilterInput = { + readonly depth: InputMaybe + readonly value: InputMaybe + } + + type MdxHeadingMdxFilterListInput = { + readonly elemMatch: InputMaybe + } + + type MdxSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type MdxWordCount = { + readonly paragraphs: Maybe + readonly sentences: Maybe + readonly words: Maybe + } + + type MdxWordCountFilterInput = { + readonly paragraphs: InputMaybe + readonly sentences: InputMaybe + readonly words: InputMaybe + } + + type MonthJson = Node & { + readonly children: ReadonlyArray + readonly currency: Maybe + readonly data: Maybe>> + readonly dateRange: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly mode: Maybe + readonly name: Maybe + readonly parent: Maybe + readonly totalCosts: Maybe + readonly totalPreTranslated: Maybe + readonly totalTMSavings: Maybe + readonly unit: Maybe + readonly url: Maybe + } + + type MonthJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type MonthJsonConnection_distinctArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonConnection_groupArgs = { + field: MonthJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type MonthJsonConnection_maxArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonConnection_minArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonConnection_sumArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonData = { + readonly languages: Maybe>> + readonly user: Maybe + } + + type MonthJsonDataFilterInput = { + readonly languages: InputMaybe + readonly user: InputMaybe + } + + type MonthJsonDataFilterListInput = { + readonly elemMatch: InputMaybe + } + + type MonthJsonDataLanguages = { + readonly approvalCosts: Maybe + readonly approved: Maybe + readonly language: Maybe + readonly targetTranslated: Maybe + readonly translated: Maybe + readonly translatedByMt: Maybe + readonly translationCosts: Maybe + } + + type MonthJsonDataLanguagesApprovalCosts = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type MonthJsonDataLanguagesApprovalCostsFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type MonthJsonDataLanguagesApproved = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type MonthJsonDataLanguagesApprovedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type MonthJsonDataLanguagesFilterInput = { + readonly approvalCosts: InputMaybe + readonly approved: InputMaybe + readonly language: InputMaybe + readonly targetTranslated: InputMaybe + readonly translated: InputMaybe + readonly translatedByMt: InputMaybe + readonly translationCosts: InputMaybe + } + + type MonthJsonDataLanguagesFilterListInput = { + readonly elemMatch: InputMaybe + } + + type MonthJsonDataLanguagesLanguage = { + readonly id: Maybe + readonly name: Maybe + readonly preTranslate: Maybe + readonly tmSavings: Maybe + readonly totalCosts: Maybe + } + + type MonthJsonDataLanguagesLanguageFilterInput = { + readonly id: InputMaybe + readonly name: InputMaybe + readonly preTranslate: InputMaybe + readonly tmSavings: InputMaybe + readonly totalCosts: InputMaybe + } + + type MonthJsonDataLanguagesTargetTranslated = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type MonthJsonDataLanguagesTargetTranslatedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type MonthJsonDataLanguagesTranslated = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type MonthJsonDataLanguagesTranslatedByMt = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type MonthJsonDataLanguagesTranslatedByMtFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type MonthJsonDataLanguagesTranslatedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type MonthJsonDataLanguagesTranslationCosts = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type MonthJsonDataLanguagesTranslationCostsFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type MonthJsonDataUser = { + readonly avatarUrl: Maybe + readonly fullName: Maybe + readonly id: Maybe + readonly preTranslated: Maybe + readonly totalCosts: Maybe + readonly userRole: Maybe + readonly username: Maybe + } + + type MonthJsonDataUserFilterInput = { + readonly avatarUrl: InputMaybe + readonly fullName: InputMaybe + readonly id: InputMaybe + readonly preTranslated: InputMaybe + readonly totalCosts: InputMaybe + readonly userRole: InputMaybe + readonly username: InputMaybe + } + + type MonthJsonDateRange = { + readonly from: Maybe + readonly to: Maybe + } + + type MonthJsonDateRange_fromArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type MonthJsonDateRange_toArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type MonthJsonDateRangeFilterInput = { + readonly from: InputMaybe + readonly to: InputMaybe + } + + type MonthJsonEdge = { + readonly next: Maybe + readonly node: MonthJson + readonly previous: Maybe + } + + type MonthJsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "currency" + | "data" + | "data.languages" + | "data.languages.approvalCosts.default" + | "data.languages.approvalCosts.tmMatch" + | "data.languages.approvalCosts.total" + | "data.languages.approved.default" + | "data.languages.approved.tmMatch" + | "data.languages.approved.total" + | "data.languages.language.id" + | "data.languages.language.name" + | "data.languages.language.preTranslate" + | "data.languages.language.tmSavings" + | "data.languages.language.totalCosts" + | "data.languages.targetTranslated.default" + | "data.languages.targetTranslated.tmMatch" + | "data.languages.targetTranslated.total" + | "data.languages.translatedByMt.default" + | "data.languages.translatedByMt.tmMatch" + | "data.languages.translatedByMt.total" + | "data.languages.translated.default" + | "data.languages.translated.tmMatch" + | "data.languages.translated.total" + | "data.languages.translationCosts.default" + | "data.languages.translationCosts.tmMatch" + | "data.languages.translationCosts.total" + | "data.user.avatarUrl" + | "data.user.fullName" + | "data.user.id" + | "data.user.preTranslated" + | "data.user.totalCosts" + | "data.user.userRole" + | "data.user.username" + | "dateRange.from" + | "dateRange.to" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "mode" + | "name" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "totalCosts" + | "totalPreTranslated" + | "totalTMSavings" + | "unit" + | "url" + + type MonthJsonFilterInput = { + readonly children: InputMaybe + readonly currency: InputMaybe + readonly data: InputMaybe + readonly dateRange: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly mode: InputMaybe + readonly name: InputMaybe + readonly parent: InputMaybe + readonly totalCosts: InputMaybe + readonly totalPreTranslated: InputMaybe + readonly totalTMSavings: InputMaybe + readonly unit: InputMaybe + readonly url: InputMaybe + } + + type MonthJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type MonthJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type MonthJsonGroupConnection_distinctArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonGroupConnection_groupArgs = { + field: MonthJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type MonthJsonGroupConnection_maxArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonGroupConnection_minArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonGroupConnection_sumArgs = { + field: MonthJsonFieldsEnum + } + + type MonthJsonSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + /** Node Interface */ + type Node = { + readonly children: ReadonlyArray + readonly id: Scalars["ID"] + readonly internal: Internal + readonly parent: Maybe + } + + type NodeFilterInput = { + readonly children: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly parent: InputMaybe + } + + type NodeFilterListInput = { + readonly elemMatch: InputMaybe + } + + type PNGOptions = { + readonly compressionSpeed: InputMaybe + readonly quality: InputMaybe + } + + type PageInfo = { + readonly currentPage: Scalars["Int"] + readonly hasNextPage: Scalars["Boolean"] + readonly hasPreviousPage: Scalars["Boolean"] + readonly itemCount: Scalars["Int"] + readonly pageCount: Scalars["Int"] + readonly perPage: Maybe + readonly totalCount: Scalars["Int"] + } + + type Potrace = { + readonly alphaMax: InputMaybe + readonly background: InputMaybe + readonly blackOnWhite: InputMaybe + readonly color: InputMaybe + readonly optCurve: InputMaybe + readonly optTolerance: InputMaybe + readonly threshold: InputMaybe + readonly turdSize: InputMaybe + readonly turnPolicy: InputMaybe + } + + type PotraceTurnPolicy = + | "black" + | "left" + | "majority" + | "minority" + | "right" + | "white" + + type QuarterJson = Node & { + readonly children: ReadonlyArray + readonly currency: Maybe + readonly data: Maybe>> + readonly dateRange: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly mode: Maybe + readonly name: Maybe + readonly parent: Maybe + readonly totalCosts: Maybe + readonly totalPreTranslated: Maybe + readonly totalTMSavings: Maybe + readonly unit: Maybe + readonly url: Maybe + } + + type QuarterJsonConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type QuarterJsonConnection_distinctArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonConnection_groupArgs = { + field: QuarterJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type QuarterJsonConnection_maxArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonConnection_minArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonConnection_sumArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonData = { + readonly languages: Maybe>> + readonly user: Maybe + } + + type QuarterJsonDataFilterInput = { + readonly languages: InputMaybe + readonly user: InputMaybe + } + + type QuarterJsonDataFilterListInput = { + readonly elemMatch: InputMaybe + } + + type QuarterJsonDataLanguages = { + readonly approvalCosts: Maybe + readonly approved: Maybe + readonly language: Maybe + readonly targetTranslated: Maybe + readonly translated: Maybe + readonly translatedByMt: Maybe + readonly translationCosts: Maybe + } + + type QuarterJsonDataLanguagesApprovalCosts = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type QuarterJsonDataLanguagesApprovalCostsFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type QuarterJsonDataLanguagesApproved = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type QuarterJsonDataLanguagesApprovedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type QuarterJsonDataLanguagesFilterInput = { + readonly approvalCosts: InputMaybe + readonly approved: InputMaybe + readonly language: InputMaybe + readonly targetTranslated: InputMaybe + readonly translated: InputMaybe + readonly translatedByMt: InputMaybe + readonly translationCosts: InputMaybe + } + + type QuarterJsonDataLanguagesFilterListInput = { + readonly elemMatch: InputMaybe + } + + type QuarterJsonDataLanguagesLanguage = { + readonly id: Maybe + readonly name: Maybe + readonly preTranslate: Maybe + readonly tmSavings: Maybe + readonly totalCosts: Maybe + } + + type QuarterJsonDataLanguagesLanguageFilterInput = { + readonly id: InputMaybe + readonly name: InputMaybe + readonly preTranslate: InputMaybe + readonly tmSavings: InputMaybe + readonly totalCosts: InputMaybe + } + + type QuarterJsonDataLanguagesTargetTranslated = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type QuarterJsonDataLanguagesTargetTranslatedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type QuarterJsonDataLanguagesTranslated = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type QuarterJsonDataLanguagesTranslatedByMt = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type QuarterJsonDataLanguagesTranslatedByMtFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type QuarterJsonDataLanguagesTranslatedFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type QuarterJsonDataLanguagesTranslationCosts = { + readonly default: Maybe + readonly tmMatch: Maybe + readonly total: Maybe + } + + type QuarterJsonDataLanguagesTranslationCostsFilterInput = { + readonly default: InputMaybe + readonly tmMatch: InputMaybe + readonly total: InputMaybe + } + + type QuarterJsonDataUser = { + readonly avatarUrl: Maybe + readonly fullName: Maybe + readonly id: Maybe + readonly preTranslated: Maybe + readonly totalCosts: Maybe + readonly userRole: Maybe + readonly username: Maybe + } + + type QuarterJsonDataUserFilterInput = { + readonly avatarUrl: InputMaybe + readonly fullName: InputMaybe + readonly id: InputMaybe + readonly preTranslated: InputMaybe + readonly totalCosts: InputMaybe + readonly userRole: InputMaybe + readonly username: InputMaybe + } + + type QuarterJsonDateRange = { + readonly from: Maybe + readonly to: Maybe + } + + type QuarterJsonDateRange_fromArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type QuarterJsonDateRange_toArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type QuarterJsonDateRangeFilterInput = { + readonly from: InputMaybe + readonly to: InputMaybe + } + + type QuarterJsonEdge = { + readonly next: Maybe + readonly node: QuarterJson + readonly previous: Maybe + } + + type QuarterJsonFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "currency" + | "data" + | "data.languages" + | "data.languages.approvalCosts.default" + | "data.languages.approvalCosts.tmMatch" + | "data.languages.approvalCosts.total" + | "data.languages.approved.default" + | "data.languages.approved.tmMatch" + | "data.languages.approved.total" + | "data.languages.language.id" + | "data.languages.language.name" + | "data.languages.language.preTranslate" + | "data.languages.language.tmSavings" + | "data.languages.language.totalCosts" + | "data.languages.targetTranslated.default" + | "data.languages.targetTranslated.tmMatch" + | "data.languages.targetTranslated.total" + | "data.languages.translatedByMt.default" + | "data.languages.translatedByMt.tmMatch" + | "data.languages.translatedByMt.total" + | "data.languages.translated.default" + | "data.languages.translated.tmMatch" + | "data.languages.translated.total" + | "data.languages.translationCosts.default" + | "data.languages.translationCosts.tmMatch" + | "data.languages.translationCosts.total" + | "data.user.avatarUrl" + | "data.user.fullName" + | "data.user.id" + | "data.user.preTranslated" + | "data.user.totalCosts" + | "data.user.userRole" + | "data.user.username" + | "dateRange.from" + | "dateRange.to" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "mode" + | "name" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "totalCosts" + | "totalPreTranslated" + | "totalTMSavings" + | "unit" + | "url" + + type QuarterJsonFilterInput = { + readonly children: InputMaybe + readonly currency: InputMaybe + readonly data: InputMaybe + readonly dateRange: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly mode: InputMaybe + readonly name: InputMaybe + readonly parent: InputMaybe + readonly totalCosts: InputMaybe + readonly totalPreTranslated: InputMaybe + readonly totalTMSavings: InputMaybe + readonly unit: InputMaybe + readonly url: InputMaybe + } + + type QuarterJsonFilterListInput = { + readonly elemMatch: InputMaybe + } + + type QuarterJsonGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type QuarterJsonGroupConnection_distinctArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonGroupConnection_groupArgs = { + field: QuarterJsonFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type QuarterJsonGroupConnection_maxArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonGroupConnection_minArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonGroupConnection_sumArgs = { + field: QuarterJsonFieldsEnum + } + + type QuarterJsonSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type Query = { + readonly allAlltimeJson: AlltimeJsonConnection + readonly allCexLayer2SupportJson: CexLayer2SupportJsonConnection + readonly allCommunityEventsJson: CommunityEventsJsonConnection + readonly allCommunityMeetupsJson: CommunityMeetupsJsonConnection + readonly allConsensusBountyHuntersCsv: ConsensusBountyHuntersCsvConnection + readonly allDataJson: DataJsonConnection + readonly allDirectory: DirectoryConnection + readonly allExchangesByCountryCsv: ExchangesByCountryCsvConnection + readonly allExecutionBountyHuntersCsv: ExecutionBountyHuntersCsvConnection + readonly allExternalTutorialsJson: ExternalTutorialsJsonConnection + readonly allFile: FileConnection + readonly allImageSharp: ImageSharpConnection + readonly allLayer2Json: Layer2JsonConnection + readonly allMdx: MdxConnection + readonly allMonthJson: MonthJsonConnection + readonly allQuarterJson: QuarterJsonConnection + readonly allSite: SiteConnection + readonly allSiteBuildMetadata: SiteBuildMetadataConnection + readonly allSiteFunction: SiteFunctionConnection + readonly allSitePage: SitePageConnection + readonly allSitePlugin: SitePluginConnection + readonly allWalletsCsv: WalletsCsvConnection + readonly alltimeJson: Maybe + readonly cexLayer2SupportJson: Maybe + readonly communityEventsJson: Maybe + readonly communityMeetupsJson: Maybe + readonly consensusBountyHuntersCsv: Maybe + readonly dataJson: Maybe + readonly directory: Maybe + readonly exchangesByCountryCsv: Maybe + readonly executionBountyHuntersCsv: Maybe + readonly externalTutorialsJson: Maybe + readonly file: Maybe + readonly imageSharp: Maybe + readonly layer2Json: Maybe + readonly mdx: Maybe + readonly monthJson: Maybe + readonly quarterJson: Maybe + readonly site: Maybe + readonly siteBuildMetadata: Maybe + readonly siteFunction: Maybe + readonly sitePage: Maybe + readonly sitePlugin: Maybe + readonly walletsCsv: Maybe + } + + type Query_allAlltimeJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allCexLayer2SupportJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allCommunityEventsJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allCommunityMeetupsJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allConsensusBountyHuntersCsvArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allDataJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allDirectoryArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allExchangesByCountryCsvArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allExecutionBountyHuntersCsvArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allExternalTutorialsJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allFileArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allImageSharpArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allLayer2JsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allMdxArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allMonthJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allQuarterJsonArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allSiteArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allSiteBuildMetadataArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allSiteFunctionArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allSitePageArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allSitePluginArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_allWalletsCsvArgs = { + filter: InputMaybe + limit: InputMaybe + skip: InputMaybe + sort: InputMaybe + } + + type Query_alltimeJsonArgs = { + children: InputMaybe + currency: InputMaybe + data: InputMaybe + dateRange: InputMaybe + id: InputMaybe + internal: InputMaybe + mode: InputMaybe + name: InputMaybe + parent: InputMaybe + totalCosts: InputMaybe + totalPreTranslated: InputMaybe + totalTMSavings: InputMaybe + unit: InputMaybe + url: InputMaybe + } + + type Query_cexLayer2SupportJsonArgs = { + children: InputMaybe + id: InputMaybe + internal: InputMaybe + name: InputMaybe + parent: InputMaybe + supports_deposits: InputMaybe + supports_withdrawals: InputMaybe + url: InputMaybe + } + + type Query_communityEventsJsonArgs = { + children: InputMaybe + description: InputMaybe + endDate: InputMaybe + id: InputMaybe + internal: InputMaybe + location: InputMaybe + parent: InputMaybe + sponsor: InputMaybe + startDate: InputMaybe + title: InputMaybe + to: InputMaybe + } + + type Query_communityMeetupsJsonArgs = { + children: InputMaybe + emoji: InputMaybe + id: InputMaybe + internal: InputMaybe + link: InputMaybe + location: InputMaybe + parent: InputMaybe + title: InputMaybe + } + + type Query_consensusBountyHuntersCsvArgs = { + children: InputMaybe + id: InputMaybe + internal: InputMaybe + name: InputMaybe + parent: InputMaybe + score: InputMaybe + username: InputMaybe + } + + type Query_dataJsonArgs = { + children: InputMaybe + commit: InputMaybe + contributors: InputMaybe + contributorsPerLine: InputMaybe + files: InputMaybe + id: InputMaybe + imageSize: InputMaybe + internal: InputMaybe + keyGen: InputMaybe + nodeTools: InputMaybe + parent: InputMaybe + pools: InputMaybe + projectName: InputMaybe + projectOwner: InputMaybe + repoHost: InputMaybe + repoType: InputMaybe + saas: InputMaybe + skipCi: InputMaybe + } + + type Query_directoryArgs = { + absolutePath: InputMaybe + accessTime: InputMaybe + atime: InputMaybe + atimeMs: InputMaybe + base: InputMaybe + birthTime: InputMaybe + birthtime: InputMaybe + birthtimeMs: InputMaybe + changeTime: InputMaybe + children: InputMaybe + ctime: InputMaybe + ctimeMs: InputMaybe + dev: InputMaybe + dir: InputMaybe + ext: InputMaybe + extension: InputMaybe + gid: InputMaybe + id: InputMaybe + ino: InputMaybe + internal: InputMaybe + mode: InputMaybe + modifiedTime: InputMaybe + mtime: InputMaybe + mtimeMs: InputMaybe + name: InputMaybe + nlink: InputMaybe + parent: InputMaybe + prettySize: InputMaybe + rdev: InputMaybe + relativeDirectory: InputMaybe + relativePath: InputMaybe + root: InputMaybe + size: InputMaybe + sourceInstanceName: InputMaybe + uid: InputMaybe + } + + type Query_exchangesByCountryCsvArgs = { + binance: InputMaybe + binanceus: InputMaybe + bitbuy: InputMaybe + bitfinex: InputMaybe + bitflyer: InputMaybe + bitkub: InputMaybe + bitso: InputMaybe + bittrex: InputMaybe + bitvavo: InputMaybe + bybit: InputMaybe + children: InputMaybe + coinbase: InputMaybe + coinmama: InputMaybe + coinspot: InputMaybe + country: InputMaybe + cryptocom: InputMaybe + easycrypto: InputMaybe + ftx: InputMaybe + ftxus: InputMaybe + gateio: InputMaybe + gemini: InputMaybe + huobiglobal: InputMaybe + id: InputMaybe + internal: InputMaybe + itezcom: InputMaybe + kraken: InputMaybe + kucoin: InputMaybe + moonpay: InputMaybe + mtpelerin: InputMaybe + okx: InputMaybe + parent: InputMaybe + rain: InputMaybe + simplex: InputMaybe + wazirx: InputMaybe + wyre: InputMaybe + } + + type Query_executionBountyHuntersCsvArgs = { + children: InputMaybe + id: InputMaybe + internal: InputMaybe + name: InputMaybe + parent: InputMaybe + score: InputMaybe + username: InputMaybe + } + + type Query_externalTutorialsJsonArgs = { + author: InputMaybe + authorGithub: InputMaybe + children: InputMaybe + description: InputMaybe + id: InputMaybe + internal: InputMaybe + lang: InputMaybe + parent: InputMaybe + publishDate: InputMaybe + skillLevel: InputMaybe + tags: InputMaybe + timeToRead: InputMaybe + title: InputMaybe + url: InputMaybe + } + + type Query_fileArgs = { + absolutePath: InputMaybe + accessTime: InputMaybe + atime: InputMaybe + atimeMs: InputMaybe + base: InputMaybe + birthTime: InputMaybe + birthtime: InputMaybe + birthtimeMs: InputMaybe + blksize: InputMaybe + blocks: InputMaybe + changeTime: InputMaybe + childAlltimeJson: InputMaybe + childCexLayer2SupportJson: InputMaybe + childCommunityEventsJson: InputMaybe + childCommunityMeetupsJson: InputMaybe + childConsensusBountyHuntersCsv: InputMaybe + childDataJson: InputMaybe + childExchangesByCountryCsv: InputMaybe + childExecutionBountyHuntersCsv: InputMaybe + childExternalTutorialsJson: InputMaybe + childImageSharp: InputMaybe + childLayer2Json: InputMaybe + childMdx: InputMaybe + childMonthJson: InputMaybe + childQuarterJson: InputMaybe + childWalletsCsv: InputMaybe + children: InputMaybe + childrenAlltimeJson: InputMaybe + childrenCexLayer2SupportJson: InputMaybe + childrenCommunityEventsJson: InputMaybe + childrenCommunityMeetupsJson: InputMaybe + childrenConsensusBountyHuntersCsv: InputMaybe + childrenDataJson: InputMaybe + childrenExchangesByCountryCsv: InputMaybe + childrenExecutionBountyHuntersCsv: InputMaybe + childrenExternalTutorialsJson: InputMaybe + childrenImageSharp: InputMaybe + childrenLayer2Json: InputMaybe + childrenMdx: InputMaybe + childrenMonthJson: InputMaybe + childrenQuarterJson: InputMaybe + childrenWalletsCsv: InputMaybe + ctime: InputMaybe + ctimeMs: InputMaybe + dev: InputMaybe + dir: InputMaybe + ext: InputMaybe + extension: InputMaybe + fields: InputMaybe + gid: InputMaybe + id: InputMaybe + ino: InputMaybe + internal: InputMaybe + mode: InputMaybe + modifiedTime: InputMaybe + mtime: InputMaybe + mtimeMs: InputMaybe + name: InputMaybe + nlink: InputMaybe + parent: InputMaybe + prettySize: InputMaybe + publicURL: InputMaybe + rdev: InputMaybe + relativeDirectory: InputMaybe + relativePath: InputMaybe + root: InputMaybe + size: InputMaybe + sourceInstanceName: InputMaybe + uid: InputMaybe + } + + type Query_imageSharpArgs = { + children: InputMaybe + fixed: InputMaybe + fluid: InputMaybe + gatsbyImageData: InputMaybe + id: InputMaybe + internal: InputMaybe + original: InputMaybe + parent: InputMaybe + resize: InputMaybe + } + + type Query_layer2JsonArgs = { + children: InputMaybe + id: InputMaybe + internal: InputMaybe + optimistic: InputMaybe + parent: InputMaybe + zk: InputMaybe + } + + type Query_mdxArgs = { + body: InputMaybe + children: InputMaybe + excerpt: InputMaybe + fields: InputMaybe + fileAbsolutePath: InputMaybe + frontmatter: InputMaybe + headings: InputMaybe + html: InputMaybe + id: InputMaybe + internal: InputMaybe + mdxAST: InputMaybe + parent: InputMaybe + rawBody: InputMaybe + slug: InputMaybe + tableOfContents: InputMaybe + timeToRead: InputMaybe + wordCount: InputMaybe + } + + type Query_monthJsonArgs = { + children: InputMaybe + currency: InputMaybe + data: InputMaybe + dateRange: InputMaybe + id: InputMaybe + internal: InputMaybe + mode: InputMaybe + name: InputMaybe + parent: InputMaybe + totalCosts: InputMaybe + totalPreTranslated: InputMaybe + totalTMSavings: InputMaybe + unit: InputMaybe + url: InputMaybe + } + + type Query_quarterJsonArgs = { + children: InputMaybe + currency: InputMaybe + data: InputMaybe + dateRange: InputMaybe + id: InputMaybe + internal: InputMaybe + mode: InputMaybe + name: InputMaybe + parent: InputMaybe + totalCosts: InputMaybe + totalPreTranslated: InputMaybe + totalTMSavings: InputMaybe + unit: InputMaybe + url: InputMaybe + } + + type Query_siteArgs = { + buildTime: InputMaybe + children: InputMaybe + flags: InputMaybe + graphqlTypegen: InputMaybe + host: InputMaybe + id: InputMaybe + internal: InputMaybe + jsxRuntime: InputMaybe + parent: InputMaybe + pathPrefix: InputMaybe + polyfill: InputMaybe + port: InputMaybe + siteMetadata: InputMaybe + trailingSlash: InputMaybe + } + + type Query_siteBuildMetadataArgs = { + buildTime: InputMaybe + children: InputMaybe + id: InputMaybe + internal: InputMaybe + parent: InputMaybe + } + + type Query_siteFunctionArgs = { + absoluteCompiledFilePath: InputMaybe + children: InputMaybe + functionRoute: InputMaybe + id: InputMaybe + internal: InputMaybe + matchPath: InputMaybe + originalAbsoluteFilePath: InputMaybe + originalRelativeFilePath: InputMaybe + parent: InputMaybe + pluginName: InputMaybe + relativeCompiledFilePath: InputMaybe + } + + type Query_sitePageArgs = { + children: InputMaybe + component: InputMaybe + componentChunkName: InputMaybe + id: InputMaybe + internal: InputMaybe + internalComponentName: InputMaybe + matchPath: InputMaybe + pageContext: InputMaybe + parent: InputMaybe + path: InputMaybe + pluginCreator: InputMaybe + } + + type Query_sitePluginArgs = { + browserAPIs: InputMaybe + children: InputMaybe + id: InputMaybe + internal: InputMaybe + name: InputMaybe + nodeAPIs: InputMaybe + packageJson: InputMaybe + parent: InputMaybe + pluginFilepath: InputMaybe + pluginOptions: InputMaybe + resolve: InputMaybe + ssrAPIs: InputMaybe + version: InputMaybe + } + + type Query_walletsCsvArgs = { + brand_color: InputMaybe + children: InputMaybe + has_bank_withdrawals: InputMaybe + has_card_deposits: InputMaybe + has_defi_integrations: InputMaybe + has_desktop: InputMaybe + has_dex_integrations: InputMaybe + has_explore_dapps: InputMaybe + has_hardware: InputMaybe + has_high_volume_purchases: InputMaybe + has_limits_protection: InputMaybe + has_mobile: InputMaybe + has_multisig: InputMaybe + has_web: InputMaybe + id: InputMaybe + internal: InputMaybe + name: InputMaybe + parent: InputMaybe + url: InputMaybe + } + + type Site = Node & { + readonly buildTime: Maybe + readonly children: ReadonlyArray + readonly flags: Maybe + readonly graphqlTypegen: Maybe + readonly host: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly jsxRuntime: Maybe + readonly parent: Maybe + readonly pathPrefix: Maybe + readonly polyfill: Maybe + readonly port: Maybe + readonly siteMetadata: Maybe + readonly trailingSlash: Maybe + } + + type Site_buildTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type SiteBuildMetadata = Node & { + readonly buildTime: Maybe + readonly children: ReadonlyArray + readonly id: Scalars["ID"] + readonly internal: Internal + readonly parent: Maybe + } + + type SiteBuildMetadata_buildTimeArgs = { + difference: InputMaybe + formatString: InputMaybe + fromNow: InputMaybe + locale: InputMaybe + } + + type SiteBuildMetadataConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SiteBuildMetadataConnection_distinctArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataConnection_groupArgs = { + field: SiteBuildMetadataFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SiteBuildMetadataConnection_maxArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataConnection_minArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataConnection_sumArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataEdge = { + readonly next: Maybe + readonly node: SiteBuildMetadata + readonly previous: Maybe + } + + type SiteBuildMetadataFieldsEnum = + | "buildTime" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + + type SiteBuildMetadataFilterInput = { + readonly buildTime: InputMaybe + readonly children: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly parent: InputMaybe + } + + type SiteBuildMetadataGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SiteBuildMetadataGroupConnection_distinctArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataGroupConnection_groupArgs = { + field: SiteBuildMetadataFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SiteBuildMetadataGroupConnection_maxArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataGroupConnection_minArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataGroupConnection_sumArgs = { + field: SiteBuildMetadataFieldsEnum + } + + type SiteBuildMetadataSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type SiteConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SiteConnection_distinctArgs = { + field: SiteFieldsEnum + } + + type SiteConnection_groupArgs = { + field: SiteFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SiteConnection_maxArgs = { + field: SiteFieldsEnum + } + + type SiteConnection_minArgs = { + field: SiteFieldsEnum + } + + type SiteConnection_sumArgs = { + field: SiteFieldsEnum + } + + type SiteEdge = { + readonly next: Maybe + readonly node: Site + readonly previous: Maybe + } + + type SiteFieldsEnum = + | "buildTime" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "flags.FAST_DEV" + | "graphqlTypegen" + | "host" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "jsxRuntime" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "pathPrefix" + | "polyfill" + | "port" + | "siteMetadata.author" + | "siteMetadata.defaultLanguage" + | "siteMetadata.description" + | "siteMetadata.editContentUrl" + | "siteMetadata.siteUrl" + | "siteMetadata.supportedLanguages" + | "siteMetadata.title" + | "siteMetadata.url" + | "trailingSlash" + + type SiteFilterInput = { + readonly buildTime: InputMaybe + readonly children: InputMaybe + readonly flags: InputMaybe + readonly graphqlTypegen: InputMaybe + readonly host: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly jsxRuntime: InputMaybe + readonly parent: InputMaybe + readonly pathPrefix: InputMaybe + readonly polyfill: InputMaybe + readonly port: InputMaybe + readonly siteMetadata: InputMaybe + readonly trailingSlash: InputMaybe + } + + type SiteFlags = { + readonly FAST_DEV: Maybe + } + + type SiteFlagsFilterInput = { + readonly FAST_DEV: InputMaybe + } + + type SiteFunction = Node & { + readonly absoluteCompiledFilePath: Scalars["String"] + readonly children: ReadonlyArray + readonly functionRoute: Scalars["String"] + readonly id: Scalars["ID"] + readonly internal: Internal + readonly matchPath: Maybe + readonly originalAbsoluteFilePath: Scalars["String"] + readonly originalRelativeFilePath: Scalars["String"] + readonly parent: Maybe + readonly pluginName: Scalars["String"] + readonly relativeCompiledFilePath: Scalars["String"] + } + + type SiteFunctionConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SiteFunctionConnection_distinctArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionConnection_groupArgs = { + field: SiteFunctionFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SiteFunctionConnection_maxArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionConnection_minArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionConnection_sumArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionEdge = { + readonly next: Maybe + readonly node: SiteFunction + readonly previous: Maybe + } + + type SiteFunctionFieldsEnum = + | "absoluteCompiledFilePath" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "functionRoute" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "matchPath" + | "originalAbsoluteFilePath" + | "originalRelativeFilePath" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "pluginName" + | "relativeCompiledFilePath" + + type SiteFunctionFilterInput = { + readonly absoluteCompiledFilePath: InputMaybe + readonly children: InputMaybe + readonly functionRoute: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly matchPath: InputMaybe + readonly originalAbsoluteFilePath: InputMaybe + readonly originalRelativeFilePath: InputMaybe + readonly parent: InputMaybe + readonly pluginName: InputMaybe + readonly relativeCompiledFilePath: InputMaybe + } + + type SiteFunctionGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SiteFunctionGroupConnection_distinctArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionGroupConnection_groupArgs = { + field: SiteFunctionFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SiteFunctionGroupConnection_maxArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionGroupConnection_minArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionGroupConnection_sumArgs = { + field: SiteFunctionFieldsEnum + } + + type SiteFunctionSortInput = { + readonly fields: InputMaybe< + ReadonlyArray> + > + readonly order: InputMaybe>> + } + + type SiteGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SiteGroupConnection_distinctArgs = { + field: SiteFieldsEnum + } + + type SiteGroupConnection_groupArgs = { + field: SiteFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SiteGroupConnection_maxArgs = { + field: SiteFieldsEnum + } + + type SiteGroupConnection_minArgs = { + field: SiteFieldsEnum + } + + type SiteGroupConnection_sumArgs = { + field: SiteFieldsEnum + } + + type SitePage = Node & { + readonly children: ReadonlyArray + readonly component: Scalars["String"] + readonly componentChunkName: Scalars["String"] + readonly id: Scalars["ID"] + readonly internal: Internal + readonly internalComponentName: Scalars["String"] + readonly matchPath: Maybe + readonly pageContext: Maybe + readonly parent: Maybe + readonly path: Scalars["String"] + readonly pluginCreator: Maybe + } + + type SitePageConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SitePageConnection_distinctArgs = { + field: SitePageFieldsEnum + } + + type SitePageConnection_groupArgs = { + field: SitePageFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SitePageConnection_maxArgs = { + field: SitePageFieldsEnum + } + + type SitePageConnection_minArgs = { + field: SitePageFieldsEnum + } + + type SitePageConnection_sumArgs = { + field: SitePageFieldsEnum + } + + type SitePageEdge = { + readonly next: Maybe + readonly node: SitePage + readonly previous: Maybe + } + + type SitePageFieldsEnum = + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "component" + | "componentChunkName" + | "id" + | "internalComponentName" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "matchPath" + | "pageContext" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "path" + | "pluginCreator.browserAPIs" + | "pluginCreator.children" + | "pluginCreator.children.children" + | "pluginCreator.children.children.children" + | "pluginCreator.children.children.id" + | "pluginCreator.children.id" + | "pluginCreator.children.internal.content" + | "pluginCreator.children.internal.contentDigest" + | "pluginCreator.children.internal.description" + | "pluginCreator.children.internal.fieldOwners" + | "pluginCreator.children.internal.ignoreType" + | "pluginCreator.children.internal.mediaType" + | "pluginCreator.children.internal.owner" + | "pluginCreator.children.internal.type" + | "pluginCreator.children.parent.children" + | "pluginCreator.children.parent.id" + | "pluginCreator.id" + | "pluginCreator.internal.content" + | "pluginCreator.internal.contentDigest" + | "pluginCreator.internal.description" + | "pluginCreator.internal.fieldOwners" + | "pluginCreator.internal.ignoreType" + | "pluginCreator.internal.mediaType" + | "pluginCreator.internal.owner" + | "pluginCreator.internal.type" + | "pluginCreator.name" + | "pluginCreator.nodeAPIs" + | "pluginCreator.packageJson" + | "pluginCreator.parent.children" + | "pluginCreator.parent.children.children" + | "pluginCreator.parent.children.id" + | "pluginCreator.parent.id" + | "pluginCreator.parent.internal.content" + | "pluginCreator.parent.internal.contentDigest" + | "pluginCreator.parent.internal.description" + | "pluginCreator.parent.internal.fieldOwners" + | "pluginCreator.parent.internal.ignoreType" + | "pluginCreator.parent.internal.mediaType" + | "pluginCreator.parent.internal.owner" + | "pluginCreator.parent.internal.type" + | "pluginCreator.parent.parent.children" + | "pluginCreator.parent.parent.id" + | "pluginCreator.pluginFilepath" + | "pluginCreator.pluginOptions" + | "pluginCreator.resolve" + | "pluginCreator.ssrAPIs" + | "pluginCreator.version" + + type SitePageFilterInput = { + readonly children: InputMaybe + readonly component: InputMaybe + readonly componentChunkName: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly internalComponentName: InputMaybe + readonly matchPath: InputMaybe + readonly pageContext: InputMaybe + readonly parent: InputMaybe + readonly path: InputMaybe + readonly pluginCreator: InputMaybe + } + + type SitePageGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SitePageGroupConnection_distinctArgs = { + field: SitePageFieldsEnum + } + + type SitePageGroupConnection_groupArgs = { + field: SitePageFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SitePageGroupConnection_maxArgs = { + field: SitePageFieldsEnum + } + + type SitePageGroupConnection_minArgs = { + field: SitePageFieldsEnum + } + + type SitePageGroupConnection_sumArgs = { + field: SitePageFieldsEnum + } + + type SitePageSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type SitePlugin = Node & { + readonly browserAPIs: Maybe>> + readonly children: ReadonlyArray + readonly id: Scalars["ID"] + readonly internal: Internal + readonly name: Maybe + readonly nodeAPIs: Maybe>> + readonly packageJson: Maybe + readonly parent: Maybe + readonly pluginFilepath: Maybe + readonly pluginOptions: Maybe + readonly resolve: Maybe + readonly ssrAPIs: Maybe>> + readonly version: Maybe + } + + type SitePluginConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SitePluginConnection_distinctArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginConnection_groupArgs = { + field: SitePluginFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SitePluginConnection_maxArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginConnection_minArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginConnection_sumArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginEdge = { + readonly next: Maybe + readonly node: SitePlugin + readonly previous: Maybe + } + + type SitePluginFieldsEnum = + | "browserAPIs" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "name" + | "nodeAPIs" + | "packageJson" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "pluginFilepath" + | "pluginOptions" + | "resolve" + | "ssrAPIs" + | "version" + + type SitePluginFilterInput = { + readonly browserAPIs: InputMaybe + readonly children: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly name: InputMaybe + readonly nodeAPIs: InputMaybe + readonly packageJson: InputMaybe + readonly parent: InputMaybe + readonly pluginFilepath: InputMaybe + readonly pluginOptions: InputMaybe + readonly resolve: InputMaybe + readonly ssrAPIs: InputMaybe + readonly version: InputMaybe + } + + type SitePluginGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type SitePluginGroupConnection_distinctArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginGroupConnection_groupArgs = { + field: SitePluginFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type SitePluginGroupConnection_maxArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginGroupConnection_minArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginGroupConnection_sumArgs = { + field: SitePluginFieldsEnum + } + + type SitePluginSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type SiteSiteMetadata = { + readonly author: Maybe + readonly defaultLanguage: Maybe + readonly description: Maybe + readonly editContentUrl: Maybe + readonly siteUrl: Maybe + readonly supportedLanguages: Maybe>> + readonly title: Maybe + readonly url: Maybe + } + + type SiteSiteMetadataFilterInput = { + readonly author: InputMaybe + readonly defaultLanguage: InputMaybe + readonly description: InputMaybe + readonly editContentUrl: InputMaybe + readonly siteUrl: InputMaybe + readonly supportedLanguages: InputMaybe + readonly title: InputMaybe + readonly url: InputMaybe + } + + type SiteSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type SortOrderEnum = "ASC" | "DESC" + + type StringQueryOperatorInput = { + readonly eq: InputMaybe + readonly glob: InputMaybe + readonly in: InputMaybe>> + readonly ne: InputMaybe + readonly nin: InputMaybe>> + readonly regex: InputMaybe + } + + type TransformOptions = { + readonly cropFocus: InputMaybe + readonly duotone: InputMaybe + readonly fit: InputMaybe + readonly grayscale: InputMaybe + readonly rotate: InputMaybe + readonly trim: InputMaybe + } + + type WalletsCsv = Node & { + readonly brand_color: Maybe + readonly children: ReadonlyArray + readonly has_bank_withdrawals: Maybe + readonly has_card_deposits: Maybe + readonly has_defi_integrations: Maybe + readonly has_desktop: Maybe + readonly has_dex_integrations: Maybe + readonly has_explore_dapps: Maybe + readonly has_hardware: Maybe + readonly has_high_volume_purchases: Maybe + readonly has_limits_protection: Maybe + readonly has_mobile: Maybe + readonly has_multisig: Maybe + readonly has_web: Maybe + readonly id: Scalars["ID"] + readonly internal: Internal + readonly name: Maybe + readonly parent: Maybe + readonly url: Maybe + } + + type WalletsCsvConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type WalletsCsvConnection_distinctArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvConnection_groupArgs = { + field: WalletsCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type WalletsCsvConnection_maxArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvConnection_minArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvConnection_sumArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvEdge = { + readonly next: Maybe + readonly node: WalletsCsv + readonly previous: Maybe + } + + type WalletsCsvFieldsEnum = + | "brand_color" + | "children" + | "children.children" + | "children.children.children" + | "children.children.children.children" + | "children.children.children.id" + | "children.children.id" + | "children.children.internal.content" + | "children.children.internal.contentDigest" + | "children.children.internal.description" + | "children.children.internal.fieldOwners" + | "children.children.internal.ignoreType" + | "children.children.internal.mediaType" + | "children.children.internal.owner" + | "children.children.internal.type" + | "children.children.parent.children" + | "children.children.parent.id" + | "children.id" + | "children.internal.content" + | "children.internal.contentDigest" + | "children.internal.description" + | "children.internal.fieldOwners" + | "children.internal.ignoreType" + | "children.internal.mediaType" + | "children.internal.owner" + | "children.internal.type" + | "children.parent.children" + | "children.parent.children.children" + | "children.parent.children.id" + | "children.parent.id" + | "children.parent.internal.content" + | "children.parent.internal.contentDigest" + | "children.parent.internal.description" + | "children.parent.internal.fieldOwners" + | "children.parent.internal.ignoreType" + | "children.parent.internal.mediaType" + | "children.parent.internal.owner" + | "children.parent.internal.type" + | "children.parent.parent.children" + | "children.parent.parent.id" + | "has_bank_withdrawals" + | "has_card_deposits" + | "has_defi_integrations" + | "has_desktop" + | "has_dex_integrations" + | "has_explore_dapps" + | "has_hardware" + | "has_high_volume_purchases" + | "has_limits_protection" + | "has_mobile" + | "has_multisig" + | "has_web" + | "id" + | "internal.content" + | "internal.contentDigest" + | "internal.description" + | "internal.fieldOwners" + | "internal.ignoreType" + | "internal.mediaType" + | "internal.owner" + | "internal.type" + | "name" + | "parent.children" + | "parent.children.children" + | "parent.children.children.children" + | "parent.children.children.id" + | "parent.children.id" + | "parent.children.internal.content" + | "parent.children.internal.contentDigest" + | "parent.children.internal.description" + | "parent.children.internal.fieldOwners" + | "parent.children.internal.ignoreType" + | "parent.children.internal.mediaType" + | "parent.children.internal.owner" + | "parent.children.internal.type" + | "parent.children.parent.children" + | "parent.children.parent.id" + | "parent.id" + | "parent.internal.content" + | "parent.internal.contentDigest" + | "parent.internal.description" + | "parent.internal.fieldOwners" + | "parent.internal.ignoreType" + | "parent.internal.mediaType" + | "parent.internal.owner" + | "parent.internal.type" + | "parent.parent.children" + | "parent.parent.children.children" + | "parent.parent.children.id" + | "parent.parent.id" + | "parent.parent.internal.content" + | "parent.parent.internal.contentDigest" + | "parent.parent.internal.description" + | "parent.parent.internal.fieldOwners" + | "parent.parent.internal.ignoreType" + | "parent.parent.internal.mediaType" + | "parent.parent.internal.owner" + | "parent.parent.internal.type" + | "parent.parent.parent.children" + | "parent.parent.parent.id" + | "url" + + type WalletsCsvFilterInput = { + readonly brand_color: InputMaybe + readonly children: InputMaybe + readonly has_bank_withdrawals: InputMaybe + readonly has_card_deposits: InputMaybe + readonly has_defi_integrations: InputMaybe + readonly has_desktop: InputMaybe + readonly has_dex_integrations: InputMaybe + readonly has_explore_dapps: InputMaybe + readonly has_hardware: InputMaybe + readonly has_high_volume_purchases: InputMaybe + readonly has_limits_protection: InputMaybe + readonly has_mobile: InputMaybe + readonly has_multisig: InputMaybe + readonly has_web: InputMaybe + readonly id: InputMaybe + readonly internal: InputMaybe + readonly name: InputMaybe + readonly parent: InputMaybe + readonly url: InputMaybe + } + + type WalletsCsvFilterListInput = { + readonly elemMatch: InputMaybe + } + + type WalletsCsvGroupConnection = { + readonly distinct: ReadonlyArray + readonly edges: ReadonlyArray + readonly field: Scalars["String"] + readonly fieldValue: Maybe + readonly group: ReadonlyArray + readonly max: Maybe + readonly min: Maybe + readonly nodes: ReadonlyArray + readonly pageInfo: PageInfo + readonly sum: Maybe + readonly totalCount: Scalars["Int"] + } + + type WalletsCsvGroupConnection_distinctArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvGroupConnection_groupArgs = { + field: WalletsCsvFieldsEnum + limit: InputMaybe + skip: InputMaybe + } + + type WalletsCsvGroupConnection_maxArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvGroupConnection_minArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvGroupConnection_sumArgs = { + field: WalletsCsvFieldsEnum + } + + type WalletsCsvSortInput = { + readonly fields: InputMaybe>> + readonly order: InputMaybe>> + } + + type WebPOptions = { + readonly quality: InputMaybe + } + + type DataLogoFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type TokenLogoFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type cardListImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type FooterQueryQueryVariables = Exact<{ [key: string]: never }> + + type FooterQueryQuery = { + readonly allSiteBuildMetadata: { + readonly edges: ReadonlyArray<{ + readonly node: { readonly buildTime: string | null } + }> + } + } + + type dappImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type editorImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type useCaseImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type actionCardImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type calloutImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type listImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type assetItemFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type learningToolImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type ClientLogosFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type ClientLogosSmallFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type devtoolImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type listItemImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type IndexPageQueryVariables = Exact<{ [key: string]: never }> + + type IndexPageQuery = { + readonly hero: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly ethereum: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly enterprise: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly dogefixed: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly robotfixed: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly ethfixed: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly devfixed: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly future: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly impact: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly finance: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly hackathon: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly infrastructure: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly infrastructurefixed: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + readonly merge: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + } + + type ClientsFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type sourceImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type DocsPageQueryVariables = Exact<{ + relativePath: InputMaybe + }> + + type DocsPageQuery = { + readonly siteData: { + readonly siteMetadata: { readonly editContentUrl: string | null } | null + } | null + readonly pageData: { + readonly body: string + readonly tableOfContents: Record | null + readonly fields: { readonly slug: string | null } | null + readonly frontmatter: { + readonly title: string | null + readonly description: string | null + readonly lang: string | null + readonly incomplete: boolean | null + readonly sidebar: boolean | null + readonly sidebarDepth: number | null + readonly isOutdated: boolean | null + } | null + } | null + } + + type StaticPageQueryVariables = Exact<{ + relativePath: InputMaybe + }> + + type StaticPageQuery = { + readonly siteData: { + readonly siteMetadata: { readonly editContentUrl: string | null } | null + } | null + readonly pageData: { + readonly body: string + readonly tableOfContents: Record | null + readonly fields: { readonly slug: string | null } | null + readonly frontmatter: { + readonly title: string | null + readonly description: string | null + readonly lang: string | null + readonly sidebar: boolean | null + readonly sidebarDepth: number | null + readonly isOutdated: boolean | null + } | null + readonly parent: + | { + readonly mtime: string + readonly fields: { readonly gitLogLatestDate: string | null } | null + } + | {} + | null + } | null + } + + type TutorialPageQueryVariables = Exact<{ + relativePath: InputMaybe + }> + + type TutorialPageQuery = { + readonly siteData: { + readonly siteMetadata: { readonly editContentUrl: string | null } | null + } | null + readonly pageData: { + readonly body: string + readonly tableOfContents: Record | null + readonly fields: { + readonly slug: string | null + readonly readingTime: { readonly minutes: number | null } | null + } | null + readonly frontmatter: { + readonly title: string | null + readonly description: string | null + readonly lang: string | null + readonly tags: ReadonlyArray | null + readonly author: string | null + readonly source: string | null + readonly sourceUrl: string | null + readonly skill: string | null + readonly published: string | null + readonly sidebar: boolean | null + readonly sidebarDepth: number | null + readonly address: string | null + readonly isOutdated: boolean | null + } | null + } | null + } + + type UpgradePageQueryVariables = Exact<{ + relativePath: InputMaybe + }> + + type UpgradePageQuery = { + readonly mdx: { + readonly body: string + readonly tableOfContents: Record | null + readonly fields: { readonly slug: string | null } | null + readonly frontmatter: { + readonly title: string | null + readonly description: string | null + readonly lang: string | null + readonly sidebar: boolean | null + readonly sidebarDepth: number | null + readonly summaryPoint1: string + readonly summaryPoint2: string + readonly summaryPoint3: string + readonly summaryPoint4: string + readonly isOutdated: boolean | null + readonly image: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + } | null + readonly parent: + | { + readonly mtime: string + readonly fields: { readonly gitLogLatestDate: string | null } | null + } + | {} + | null + } | null + } + + type StakingPageQueryVariables = Exact<{ + relativePath: InputMaybe + }> + + type StakingPageQuery = { + readonly siteData: { + readonly siteMetadata: { readonly editContentUrl: string | null } | null + } | null + readonly pageData: { + readonly body: string + readonly tableOfContents: Record | null + readonly fields: { readonly slug: string | null } | null + readonly frontmatter: { + readonly title: string | null + readonly description: string | null + readonly lang: string | null + readonly sidebar: boolean | null + readonly emoji: string | null + readonly sidebarDepth: number | null + readonly summaryPoints: ReadonlyArray | null + readonly alt: string | null + readonly image: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + } | null + readonly parent: + | { + readonly mtime: string + readonly fields: { readonly gitLogLatestDate: string | null } | null + } + | {} + | null + } | null + } + + type UseCasePageQueryVariables = Exact<{ + relativePath: InputMaybe + }> + + type UseCasePageQuery = { + readonly siteData: { + readonly siteMetadata: { readonly editContentUrl: string | null } | null + } | null + readonly pageData: { + readonly body: string + readonly tableOfContents: Record | null + readonly fields: { readonly slug: string | null } | null + readonly frontmatter: { + readonly title: string | null + readonly description: string | null + readonly lang: string | null + readonly sidebar: boolean | null + readonly emoji: string | null + readonly sidebarDepth: number | null + readonly summaryPoint1: string + readonly summaryPoint2: string + readonly summaryPoint3: string + readonly alt: string | null + readonly isOutdated: boolean | null + readonly image: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + } | null + readonly parent: + | { + readonly mtime: string + readonly fields: { readonly gitLogLatestDate: string | null } | null + } + | {} + | null + } | null + } + + type JobPageQueryVariables = Exact<{ + relativePath: InputMaybe + }> + + type JobPageQuery = { + readonly mdx: { + readonly body: string + readonly tableOfContents: Record | null + readonly fields: { readonly slug: string | null } | null + readonly frontmatter: { + readonly title: string | null + readonly description: string | null + readonly sidebar: boolean | null + readonly sidebarDepth: number | null + readonly position: string | null + readonly location: string | null + readonly compensation: string | null + readonly type: string | null + readonly link: string | null + readonly image: { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } | null + } | null + readonly parent: + | { + readonly mtime: string + readonly fields: { readonly gitLogLatestDate: string | null } | null + } + | {} + | null + } | null + } + + type GatsbyImageSharpFixedFragment = { + readonly base64: string | null + readonly width: number + readonly height: number + readonly src: string + readonly srcSet: string + } + + type GatsbyImageSharpFixed_tracedSVGFragment = { + readonly tracedSVG: string | null + readonly width: number + readonly height: number + readonly src: string + readonly srcSet: string + } + + type GatsbyImageSharpFixed_withWebpFragment = { + readonly base64: string | null + readonly width: number + readonly height: number + readonly src: string + readonly srcSet: string + readonly srcWebp: string | null + readonly srcSetWebp: string | null + } + + type GatsbyImageSharpFixed_withWebp_tracedSVGFragment = { + readonly tracedSVG: string | null + readonly width: number + readonly height: number + readonly src: string + readonly srcSet: string + readonly srcWebp: string | null + readonly srcSetWebp: string | null + } + + type GatsbyImageSharpFixed_noBase64Fragment = { + readonly width: number + readonly height: number + readonly src: string + readonly srcSet: string + } + + type GatsbyImageSharpFixed_withWebp_noBase64Fragment = { + readonly width: number + readonly height: number + readonly src: string + readonly srcSet: string + readonly srcWebp: string | null + readonly srcSetWebp: string | null + } + + type GatsbyImageSharpFluidFragment = { + readonly base64: string | null + readonly aspectRatio: number + readonly src: string + readonly srcSet: string + readonly sizes: string + } + + type GatsbyImageSharpFluidLimitPresentationSizeFragment = { + readonly maxHeight: number + readonly maxWidth: number + } + + type GatsbyImageSharpFluid_tracedSVGFragment = { + readonly tracedSVG: string | null + readonly aspectRatio: number + readonly src: string + readonly srcSet: string + readonly sizes: string + } + + type GatsbyImageSharpFluid_withWebpFragment = { + readonly base64: string | null + readonly aspectRatio: number + readonly src: string + readonly srcSet: string + readonly srcWebp: string | null + readonly srcSetWebp: string | null + readonly sizes: string + } + + type GatsbyImageSharpFluid_withWebp_tracedSVGFragment = { + readonly tracedSVG: string | null + readonly aspectRatio: number + readonly src: string + readonly srcSet: string + readonly srcWebp: string | null + readonly srcSetWebp: string | null + readonly sizes: string + } + + type GatsbyImageSharpFluid_noBase64Fragment = { + readonly aspectRatio: number + readonly src: string + readonly srcSet: string + readonly sizes: string + } + + type GatsbyImageSharpFluid_withWebp_noBase64Fragment = { + readonly aspectRatio: number + readonly src: string + readonly srcSet: string + readonly srcWebp: string | null + readonly srcSetWebp: string | null + readonly sizes: string + } + + type walletCardImageFragment = { + readonly childImageSharp: { + readonly gatsbyImageData: Record + } | null + } + + type AllMdxQueryVariables = Exact<{ [key: string]: never }> + + type AllMdxQuery = { + readonly allMdx: { + readonly edges: ReadonlyArray<{ + readonly node: { + readonly fields: { + readonly isOutdated: boolean | null + readonly slug: string | null + readonly relativePath: string | null + } | null + readonly frontmatter: { + readonly lang: string | null + readonly template: string | null + } | null + } + }> + } + } +} From 1d8176d47ea2fc9b6be5e6d7565a42d1b56b5826 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 30 May 2022 11:21:17 -0600 Subject: [PATCH 154/298] translate new button --- src/intl/en/page-layer-2.json | 1 + src/pages/layer-2.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index fde0709374a..44c76868bee 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -9,6 +9,7 @@ "layer-2-hero-alt-text": "Illustration of transactions being rolled up on Layer 2 and posted to Ethereum Mainnet", "layer-2-hero-button-1": "What is layer 2", "layer-2-hero-button-2": "Use layer 2", + "layer-2-hero-button-3": "Move to layer 2", "layer-2-statsbox-1": "TVL locked in layer 2 (USD)", "layer-2-statsbox-2": "Average layer 2 ETH transfer fee (USD)", "layer-2-statsbox-3": "Layer 2 TVL change (30 days)", diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index d229800a6b5..a036f85cd9f 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -274,7 +274,7 @@ const Layer2Page = ({ data }) => { isSecondary: "isSecondary", }, { - content: "Move to layer 2", + content: translateMessageId("layer-2-hero-button-3", intl), pathId: "how-to-get-onto-layer-2", isSecondary: "isSecondary", }, From 04bbc0924724e3f597fa609ecf7c3328d09134d2 Mon Sep 17 00:00:00 2001 From: William Welsh Date: Mon, 30 May 2022 15:16:12 -0400 Subject: [PATCH 155/298] Conform ethUpgradeArticles --- src/components/UpgradeArticles.js | 2 +- src/data/{eth-upgrade-articles.ts => ethUpgradeArticles.ts} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/data/{eth-upgrade-articles.ts => ethUpgradeArticles.ts} (95%) diff --git a/src/components/UpgradeArticles.js b/src/components/UpgradeArticles.js index ffa5cd5dc39..e7a4890bf57 100644 --- a/src/components/UpgradeArticles.js +++ b/src/components/UpgradeArticles.js @@ -1,6 +1,6 @@ import React from "react" import styled from "styled-components" -import { dannyArticles, benArticles } from "../data/eth-upgrade-articles" +import { dannyArticles, benArticles } from "../data/ethUpgradeArticles" import CardList from "./CardList" diff --git a/src/data/eth-upgrade-articles.ts b/src/data/ethUpgradeArticles.ts similarity index 95% rename from src/data/eth-upgrade-articles.ts rename to src/data/ethUpgradeArticles.ts index 0127f5b5165..f68a3e04c60 100644 --- a/src/data/eth-upgrade-articles.ts +++ b/src/data/ethUpgradeArticles.ts @@ -5,7 +5,7 @@ interface Article { } /** Articles by Danny Ryan (Ethereum Foundation) */ -export const dannyArticles: Article[] = [ +export const dannyArticles: Array
        = [ { title: "Finalized no. 34", description: "23 March 2022", @@ -34,7 +34,7 @@ export const dannyArticles: Article[] = [ ] /** Articles by Ben Edgington (PegaSys, ConsenSys) */ -export const benArticles: Article[] = [ +export const benArticles: Array
        = [ { title: "What’s New in Eth2 – #92", description: "6 May 2022", From 8d042fc457afba68377172c878b29827fcd128b8 Mon Sep 17 00:00:00 2001 From: William Welsh Date: Mon, 30 May 2022 15:16:49 -0400 Subject: [PATCH 156/298] Throw error on missing envs --- src/lambda/etherscan.ts | 10 ++++++++-- src/lambda/etherscanBlock.ts | 10 ++++++++-- src/lambda/roadmap.ts | 12 ++++++++---- src/lambda/translations.ts | 10 ++++++++-- src/lambda/txs.ts | 10 ++++++++-- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/lambda/etherscan.ts b/src/lambda/etherscan.ts index 4475b2fabe9..8222e8071b1 100644 --- a/src/lambda/etherscan.ts +++ b/src/lambda/etherscan.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string | undefined): Promise => { +const lambda = async (apiKey: string): Promise => { const daysToFetch = 90 const now = new Date() const endDate = now.toISOString().split("T")[0] // YYYY-MM-DD @@ -28,7 +28,13 @@ const lambda = async (apiKey: string | undefined): Promise => { } const handler = () => { - return lambda(process.env.ETHERSCAN_API_KEY) + let apiKey = process.env.ETHERSCAN_API_KEY + + if (!apiKey) { + throw new Error("required env ETHERSCAN_API_KEY not set") + } + + return lambda(apiKey) } export { handler, lambda } diff --git a/src/lambda/etherscanBlock.ts b/src/lambda/etherscanBlock.ts index 6fbbf750240..f641004a32e 100644 --- a/src/lambda/etherscanBlock.ts +++ b/src/lambda/etherscanBlock.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string | undefined): Promise => { +const lambda = async (apiKey: string): Promise => { try { const response = await axios.get( `https://api.etherscan.io/api?module=block&action=getblockcountdown&blockno=12965000&apikey=${apiKey}` @@ -26,7 +26,13 @@ const lambda = async (apiKey: string | undefined): Promise => { } const handler = () => { - return lambda(process.env.ETHERSCAN_API_KEY) + let apiKey = process.env.ETHERSCAN_API_KEY + + if (!apiKey) { + throw new Error("required env ETHERSCAN_API_KEY not set") + } + + return lambda(apiKey) } export { handler, lambda } diff --git a/src/lambda/roadmap.ts b/src/lambda/roadmap.ts index eb7865ec15c..e7c656f23ca 100644 --- a/src/lambda/roadmap.ts +++ b/src/lambda/roadmap.ts @@ -2,9 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async ( - githubToken: string | undefined -): Promise => { +const lambda = async (githubToken: string): Promise => { try { const baseURL = "https://api.github.com/repos/ethereum/ethereum-org-website/issues?per_page=100&state=all" @@ -34,7 +32,13 @@ const lambda = async ( } const handler = () => { - return lambda(process.env.GITHUB_TOKEN) + let apiKey = process.env.GITHUB_TOKEN + + if (!apiKey) { + throw new Error("required env GITHUB_TOKEN not set") + } + + return lambda(apiKey) } export { handler, lambda } diff --git a/src/lambda/translations.ts b/src/lambda/translations.ts index cd684d4ea32..24268de4bbf 100644 --- a/src/lambda/translations.ts +++ b/src/lambda/translations.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string | undefined): Promise => { +const lambda = async (apiKey: string): Promise => { try { const baseURL = "https://api.crowdin.com/api/project/ethereum-org/status" @@ -27,7 +27,13 @@ const lambda = async (apiKey: string | undefined): Promise => { } const handler = () => { - return lambda(process.env.CROWDIN_API_KEY) + let apiKey = process.env.CROWDIN_API_KEY + + if (!apiKey) { + throw new Error("required env CROWDIN_API_KEY not set") + } + + return lambda(apiKey) } export { handler, lambda } diff --git a/src/lambda/txs.ts b/src/lambda/txs.ts index 610cc250d38..fb4acf98d58 100644 --- a/src/lambda/txs.ts +++ b/src/lambda/txs.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string | undefined): Promise => { +const lambda = async (apiKey: string): Promise => { try { const daysToFetch = 90 const now = new Date() @@ -31,7 +31,13 @@ const lambda = async (apiKey: string | undefined): Promise => { } const handler = () => { - return lambda(process.env.ETHERSCAN_API_KEY) + let apiKey = process.env.ETHERSCAN_API_KEY + + if (!apiKey) { + throw new Error("required env ETHERSCAN_API_KEY not set") + } + + return lambda(apiKey) } export { handler, lambda } From 571c2e5e3fab687c1b803b33f9cf0fad6cca5272 Mon Sep 17 00:00:00 2001 From: William Welsh Date: Mon, 30 May 2022 15:25:17 -0400 Subject: [PATCH 157/298] Define types for process.env --- environment.d.ts | 16 ++++++++++++++++ tsconfig.json | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 environment.d.ts diff --git a/environment.d.ts b/environment.d.ts new file mode 100644 index 00000000000..ae3756b99dc --- /dev/null +++ b/environment.d.ts @@ -0,0 +1,16 @@ +declare global { + namespace NodeJS { + interface ProcessEnv { + GITHUB_TOKEN: string + ALGOLIA_ADMIN_KEY: string + ETHERSCAN_API_KEY: string + GATSBY_ALGOLIA_APP_ID: string + GATSBY_ALGOLIA_SEARCH_KEY: string + GATSBY_GITHUB_TOKEN_READ_ONLY: string + GATSBY_FUNCTIONS_PATH: string + CROWDIN_API_KEY: string + } + } +} + +export {} diff --git a/tsconfig.json b/tsconfig.json index e10a4bc5313..2d56bb20cba 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,7 +17,8 @@ "./plugins/**/*", "./gatsby-node.ts", "./gatsby-config.ts", - "./overrides.d.ts" + "./overrides.d.ts", + "./environment.d.ts" ], "exclude": [ "node_modules", From 97973f101af30e62b228efe95707ffae8b09bc98 Mon Sep 17 00:00:00 2001 From: William Welsh Date: Mon, 30 May 2022 15:33:13 -0400 Subject: [PATCH 158/298] Switch src/lambda to named exports --- src/lambda/coinmetrics.ts | 6 ++---- src/lambda/defipulse.ts | 6 ++---- src/lambda/etherscan.ts | 6 ++---- src/lambda/etherscanBlock.ts | 6 ++---- src/lambda/l2beat.ts | 6 ++---- src/lambda/roadmap.ts | 6 ++---- src/lambda/translations.ts | 4 +--- src/lambda/txs.ts | 4 +--- 8 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/lambda/coinmetrics.ts b/src/lambda/coinmetrics.ts index 4da43f4939f..96606517814 100644 --- a/src/lambda/coinmetrics.ts +++ b/src/lambda/coinmetrics.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (): Promise => { +export const lambda = async (): Promise => { try { const response = await axios.get( "https://community-api.coinmetrics.io/v2/assets/eth/metricdata/?metrics=TxCnt" @@ -19,8 +19,6 @@ const lambda = async (): Promise => { } } -const handler = (): Promise => { +export const handler = (): Promise => { return lambda() } - -export { handler, lambda } diff --git a/src/lambda/defipulse.ts b/src/lambda/defipulse.ts index 63d27f52dce..3c2446f0d54 100644 --- a/src/lambda/defipulse.ts +++ b/src/lambda/defipulse.ts @@ -3,7 +3,7 @@ import takeRightWhile from "lodash/takeRightWhile" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (): Promise => { +export const lambda = async (): Promise => { try { const response = await axios.get(`https://api.llama.fi/charts/Ethereum`) if (response.status < 200 || response.status >= 300) { @@ -34,8 +34,6 @@ const lambda = async (): Promise => { } } -const handler = (): Promise => { +export const handler = (): Promise => { return lambda() } - -export { handler, lambda } diff --git a/src/lambda/etherscan.ts b/src/lambda/etherscan.ts index 8222e8071b1..3ee4f23db22 100644 --- a/src/lambda/etherscan.ts +++ b/src/lambda/etherscan.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string): Promise => { +export const lambda = async (apiKey: string): Promise => { const daysToFetch = 90 const now = new Date() const endDate = now.toISOString().split("T")[0] // YYYY-MM-DD @@ -27,7 +27,7 @@ const lambda = async (apiKey: string): Promise => { } } -const handler = () => { +export const handler = () => { let apiKey = process.env.ETHERSCAN_API_KEY if (!apiKey) { @@ -36,5 +36,3 @@ const handler = () => { return lambda(apiKey) } - -export { handler, lambda } diff --git a/src/lambda/etherscanBlock.ts b/src/lambda/etherscanBlock.ts index f641004a32e..53bbeb7beaf 100644 --- a/src/lambda/etherscanBlock.ts +++ b/src/lambda/etherscanBlock.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string): Promise => { +export const lambda = async (apiKey: string): Promise => { try { const response = await axios.get( `https://api.etherscan.io/api?module=block&action=getblockcountdown&blockno=12965000&apikey=${apiKey}` @@ -25,7 +25,7 @@ const lambda = async (apiKey: string): Promise => { } } -const handler = () => { +export const handler = () => { let apiKey = process.env.ETHERSCAN_API_KEY if (!apiKey) { @@ -34,5 +34,3 @@ const handler = () => { return lambda(apiKey) } - -export { handler, lambda } diff --git a/src/lambda/l2beat.ts b/src/lambda/l2beat.ts index 8a144bc93d9..343cd6ff918 100644 --- a/src/lambda/l2beat.ts +++ b/src/lambda/l2beat.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (): Promise => { +export const lambda = async (): Promise => { try { const response = await axios.get(`https://l2beat.com/api/tvl.json`) if (response.status < 200 || response.status >= 300) { @@ -23,8 +23,6 @@ const lambda = async (): Promise => { } } -const handler = () => { +export const handler = () => { return lambda() } - -export { handler, lambda } diff --git a/src/lambda/roadmap.ts b/src/lambda/roadmap.ts index e7c656f23ca..d7f7fdd99fa 100644 --- a/src/lambda/roadmap.ts +++ b/src/lambda/roadmap.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (githubToken: string): Promise => { +export const lambda = async (githubToken: string): Promise => { try { const baseURL = "https://api.github.com/repos/ethereum/ethereum-org-website/issues?per_page=100&state=all" @@ -31,7 +31,7 @@ const lambda = async (githubToken: string): Promise => { } } -const handler = () => { +export const handler = () => { let apiKey = process.env.GITHUB_TOKEN if (!apiKey) { @@ -40,5 +40,3 @@ const handler = () => { return lambda(apiKey) } - -export { handler, lambda } diff --git a/src/lambda/translations.ts b/src/lambda/translations.ts index 24268de4bbf..2710587cca0 100644 --- a/src/lambda/translations.ts +++ b/src/lambda/translations.ts @@ -26,7 +26,7 @@ const lambda = async (apiKey: string): Promise => { } } -const handler = () => { +export const handler = () => { let apiKey = process.env.CROWDIN_API_KEY if (!apiKey) { @@ -35,5 +35,3 @@ const handler = () => { return lambda(apiKey) } - -export { handler, lambda } diff --git a/src/lambda/txs.ts b/src/lambda/txs.ts index fb4acf98d58..e2bece59585 100644 --- a/src/lambda/txs.ts +++ b/src/lambda/txs.ts @@ -30,7 +30,7 @@ const lambda = async (apiKey: string): Promise => { } } -const handler = () => { +export const handler = () => { let apiKey = process.env.ETHERSCAN_API_KEY if (!apiKey) { @@ -39,5 +39,3 @@ const handler = () => { return lambda(apiKey) } - -export { handler, lambda } From ac0081256d9472492703f024a5dc26f23921e386 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 30 May 2022 14:47:51 -0600 Subject: [PATCH 159/298] product descriptions and article titles set up for translations --- src/components/Layer2ProductCard.js | 32 ++++++++++++++++++++++++----- src/data/layer-2/layer-2.json | 14 ++++++------- src/intl/en/page-layer-2.json | 19 ++++++++++++++++- src/pages/layer-2.js | 18 ++++++++-------- 4 files changed, 60 insertions(+), 23 deletions(-) diff --git a/src/components/Layer2ProductCard.js b/src/components/Layer2ProductCard.js index 92fb475b62e..3a8baf54284 100644 --- a/src/components/Layer2ProductCard.js +++ b/src/components/Layer2ProductCard.js @@ -2,11 +2,15 @@ import React from "react" import styled from "styled-components" import { GatsbyImage } from "gatsby-plugin-image" +import { useIntl } from "gatsby-plugin-intl" // Components import ButtonLink from "./ButtonLink" import Link from "./Link" +// Utils +import { translateMessageId } from "../utils/translations" + // Styles const ImageWrapper = styled.div` display: flex; @@ -87,6 +91,8 @@ const Layer2ProductCard = ({ tokenLists, ecosystemPortal, }) => { + const intl = useIntl() + return ( @@ -97,15 +103,31 @@ const Layer2ProductCard = ({ {name} {children && {children}} {description} - {note.length > 0 && Note: {note}} + {note.length > 0 && ( + + {translateMessageId("layer-2-note", intl)} {note} + + )} - {bridge && {name} Bridge} + {bridge && ( + + {name} {translateMessageId("layer-2-bridge", intl)} + + )} {ecosystemPortal && ( - {name} Ecosystem Portal + + {name} {translateMessageId("layer-2-ecosystem-portal", intl)} + + )} + {tokenLists && ( + + {name} {translateMessageId("layer-2-token-lists", intl)} + )} - {tokenLists && {name} Token Lists} - Explore {name} + + {translateMessageId("layer-2-explore", intl)} {name} + ) } diff --git a/src/data/layer-2/layer-2.json b/src/data/layer-2/layer-2.json index e749b2ca395..56afc9f30f3 100644 --- a/src/data/layer-2/layer-2.json +++ b/src/data/layer-2/layer-2.json @@ -12,7 +12,7 @@ "tokenLists": "https://arbucks.io/tokens/", "noteKey": "", "purpose": ["universal"], - "description": "Arbitrum is an Optimistic Rollup that aims to feel exactly like interacting with Ethereum, but with transactions costing a fraction of what they do on L1.", + "descriptionKey": "arbitrum-description", "imageKey": "arbitrum", "background": "white" }, @@ -28,7 +28,7 @@ "tokenLists": "https://tokenlists.org/token-list?url=https://static.optimism.io/optimism.tokenlist.json", "noteKey": "layer-2-optimism-note", "purpose": ["universal"], - "description": "Optimistic Ethereum is an EVM-equivalent Optimistic Rollup chain. It aims to be fast, simple, and secure.", + "descriptionKey": "optimism-description", "imageKey": "optimism", "background": "white" }, @@ -44,7 +44,7 @@ "tokenLists": "", "noteKey": "layer-2-boba-note", "purpose": ["universal"], - "description": "Boba is an Optimistic Rollup originally forked from Optimism which is a scaling solution that aims to reduce gas fees, improve transaction throughput, and extend the capabilities of smart contracts.", + "descriptionKey": "boba-description", "imageKey": "boba", "background": "black" } @@ -72,7 +72,7 @@ "tokenLists": "", "noteKey": "", "purpose": ["exchange"], - "description": "dYdX aims to build a powerful and professional exchange for trading crypto assets where users can truly own their trades and, eventually, the exchange itself.", + "descriptionKey": "dydx-description", "imageKey": "dydx", "background": "#121223" }, @@ -88,7 +88,7 @@ "tokenLists": "", "noteKey": "", "purpose": ["payments", "exchange"], - "description": "Loopring's zkRollup L2 solution aims to offer the same security guarantees as Ethereum mainnet, with a big scalability boost: throughput increased by 1000x, and cost reduced to just 0.1% of L1.", + "descriptionKey": "loopring-description", "imageKey": "loopring", "background": "white" }, @@ -116,7 +116,7 @@ "tokenLists": "", "noteKey": "", "purpose": ["tokens", "nft"], - "description": "zkSync is a user-centric zk rollup platform from Matter Labs. It is a scaling solution for Ethereum, already live on Ethereum mainnet. It supports payments, token swaps and NFT minting.", + "descriptionKey": "zksync-description", "imageKey": "zksync", "background": "#11142b" }, @@ -139,7 +139,7 @@ "tokenLists": "", "noteKey": "", "purpose": ["payments", "exchange"], - "description": "The ZKSpace platform consists of three main parts: a Layer 2 AMM DEX utilizing ZK-Rollups technology called ZKSwap, a payment service called ZKSquare, and an NFT marketplace called ZKSea.", + "descriptionKey": "zkspace-description", "imageKey": "zkspace", "background": "black" } diff --git a/src/intl/en/page-layer-2.json b/src/intl/en/page-layer-2.json index 44c76868bee..dd3e9224482 100644 --- a/src/intl/en/page-layer-2.json +++ b/src/intl/en/page-layer-2.json @@ -107,5 +107,22 @@ "layer-2-faq-question-5-title": "Why aren't some layer 2 projects listed here?", "layer-2-faq-question-5-description-1": "We want to make sure we list the best resources possible so users can navigate the layer 2 space in a safe and confident manner. We maintain a framework of criteria for how projects are evaluated for inclusion. View our layer 2 listing policy here.", "layer-2-faq-question-5-description-2": "Anyone is free to suggest adding a layer 2 on ethereum.org. If there's a layer 2 that we have missed, please suggest it.", - "layer-2-further-reading-title": "Further reading" + "layer-2-further-reading-title": "Further reading", + "a-rollup-centric-ethereum-roadmap": "A rollup-centric ethereum roadmap", + "an-incomplete-guide-to-rollups": "An Incomplete Guide to Rollups", + "polygon-sidechain-vs-ethereum-rollups": "Polygon sidechain vs Ethereum rollups: Layer 2 scaling approaches| Vitalik Buterin and Lex Fridman", + "rollups-the-ultimate-ethereum-scaling-strategy": "ROLLUPS - The Ultimate Ethereum Scaling Strategy? Arbitrum & Optimism Explained", + "scaling-layer-1-with-shard-chains": "Scaling layer 1 with shard chains", + "understanding-rollup-economics-from-first-principals": "Understanding rollup economics from first principals", + "arbitrum-description": "Arbitrum is an Optimistic Rollup that aims to feel exactly like interacting with Ethereum, but with transactions costing a fraction of what they do on L1.", + "optimism-description": "Optimistic Ethereum is an EVM-equivalent Optimistic Rollup chain. It aims to be fast, simple, and secure.", + "boba-description": "Boba is an Optimistic Rollup originally forked from Optimism which is a scaling solution that aims to reduce gas fees, improve transaction throughput, and extend the capabilities of smart contracts.", + "dydx-description": "dYdX aims to build a powerful and professional exchange for trading crypto assets where users can truly own their trades and, eventually, the exchange itself.", + "loopring-description": "Loopring's zkRollup L2 solution aims to offer the same security guarantees as Ethereum mainnet, with a big scalability boost: throughput increased by 1000x, and cost reduced to just 0.1% of L1.", + "zksync-description": "zkSync is a user-centric zk rollup platform from Matter Labs. It is a scaling solution for Ethereum, already live on Ethereum mainnet. It supports payments, token swaps and NFT minting.", + "zkspace-description": "The ZKSpace platform consists of three main parts: a Layer 2 AMM DEX utilizing ZK-Rollups technology called ZKSwap, a payment service called ZKSquare, and an NFT marketplace called ZKSea.", + "layer-2-note": "Note:", + "layer-2-ecosystem-portal": "Ecosystem Portal", + "layer-2-token-lists": "Token Lists", + "layer-2-explore": "Explore" } diff --git a/src/pages/layer-2.js b/src/pages/layer-2.js index a036f85cd9f..36504dcd83b 100644 --- a/src/pages/layer-2.js +++ b/src/pages/layer-2.js @@ -694,7 +694,7 @@ const Layer2Page = ({ data }) => { key={idx} background={l2.background} image={getImage(data[l2.imageKey])} - description={l2.description} + description={translateMessageId(l2.descriptionKey, intl)} url={l2.website} note={translateMessageId(l2.noteKey, intl)} name={l2.name} @@ -723,7 +723,7 @@ const Layer2Page = ({ data }) => { key={idx} background={l2.background} image={getImage(data[l2.imageKey])} - description={l2.description} + description={translateMessageId(l2.descriptionKey, intl)} url={l2.website} note={translateMessageId(l2.noteKey, intl)} name={l2.name} @@ -860,38 +860,36 @@ const Layer2Page = ({ data }) => {
        • - A rollup-centric ethereum roadmap + {" "} - Vitalik Buterin
        • - An Incomplete Guide to Rollups + {" "} - Vitalik Buterin
        • - Polygon sidechain vs Ethereum rollups: Layer 2 scaling approaches - | Vitalik Buterin and Lex Fridman + {" "} - Lex Clips
        • - ROLLUPS - The Ultimate Ethereum Scaling Strategy? Arbitrum & - Optimism Explained + {" "} - Finematics
        • - Scaling layer 1 with shard chains +
        • - Understanding rollup economics from first principals + {" "} - Barnabé Monnot
        • From 7bb0f47746f544849ae63512c7c43f5fd5142bdc Mon Sep 17 00:00:00 2001 From: Hursit Tarcan <75273616+hursittarcan@users.noreply.github.com> Date: Tue, 31 May 2022 02:09:43 +0200 Subject: [PATCH 160/298] Migrated ActionCard.js to TS --- .../{ActionCard.js => ActionCard.tsx} | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) rename src/components/{ActionCard.js => ActionCard.tsx} (87%) diff --git a/src/components/ActionCard.js b/src/components/ActionCard.tsx similarity index 87% rename from src/components/ActionCard.js rename to src/components/ActionCard.tsx index 2706ad116aa..d9bae405853 100644 --- a/src/components/ActionCard.js +++ b/src/components/ActionCard.tsx @@ -62,16 +62,27 @@ const Card = styled(Link)` } ` -const ActionCard = ({ - to, - alt, - image, - title, - description, - children, - className, - isRight, - isBottom = true, +export interface IProps { + to?: string + alt?: string + image?: string + title?: string + description?: string + className?: string + isRight?: boolean + isBottom?: boolean +} + +const ActionCard: React.FC = ({ + to, + alt, + image, + title, + description, + children, + className, + isRight, + isBottom = true }) => { const isImageURL = typeof image === "string" && image.includes("http") return ( From 872fd424de7dd05156e257b2c03730cb49d5de67 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Mon, 30 May 2022 21:42:23 -0300 Subject: [PATCH 161/298] fix json file --- src/data/externalTutorials.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/externalTutorials.json b/src/data/externalTutorials.json index 41effae1e1a..d7155a1753f 100644 --- a/src/data/externalTutorials.json +++ b/src/data/externalTutorials.json @@ -161,7 +161,7 @@ "moralis", "web3modal", "web3-react", - "ethersjs", + "ethersjs" ], "skillLevel": "beginner", "timeToRead": "14", From 67196ca37d08cac5ea5ee9a0047a99dfd8854182 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 30 May 2022 21:01:02 -0400 Subject: [PATCH 162/298] Update src/lambda/translations.ts Oops Co-authored-by: Pablo Pettinari --- src/lambda/translations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lambda/translations.ts b/src/lambda/translations.ts index 2710587cca0..42deb90a5ca 100644 --- a/src/lambda/translations.ts +++ b/src/lambda/translations.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string): Promise => { +export const lambda = async (apiKey: string): Promise => { try { const baseURL = "https://api.crowdin.com/api/project/ethereum-org/status" From 69c031f9e718716dfc12df3ed6fc9102d35406b1 Mon Sep 17 00:00:00 2001 From: William Date: Mon, 30 May 2022 21:01:12 -0400 Subject: [PATCH 163/298] Update src/lambda/txs.ts Oops Co-authored-by: Pablo Pettinari --- src/lambda/txs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lambda/txs.ts b/src/lambda/txs.ts index e2bece59585..1b0559e5f58 100644 --- a/src/lambda/txs.ts +++ b/src/lambda/txs.ts @@ -2,7 +2,7 @@ import axios from "axios" import type { HandlerResponse } from "@netlify/functions" -const lambda = async (apiKey: string): Promise => { +export const lambda = async (apiKey: string): Promise => { try { const daysToFetch = 90 const now = new Date() From 713eeed7751c510714e53bb98b4d78acb0d5367b Mon Sep 17 00:00:00 2001 From: William Welsh Date: Mon, 30 May 2022 21:03:29 -0400 Subject: [PATCH 164/298] Move env types to global.d.ts --- environment.d.ts | 16 ---------------- src/global.d.ts | 13 +++++++++++++ tsconfig.json | 3 +-- 3 files changed, 14 insertions(+), 18 deletions(-) delete mode 100644 environment.d.ts diff --git a/environment.d.ts b/environment.d.ts deleted file mode 100644 index ae3756b99dc..00000000000 --- a/environment.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -declare global { - namespace NodeJS { - interface ProcessEnv { - GITHUB_TOKEN: string - ALGOLIA_ADMIN_KEY: string - ETHERSCAN_API_KEY: string - GATSBY_ALGOLIA_APP_ID: string - GATSBY_ALGOLIA_SEARCH_KEY: string - GATSBY_GITHUB_TOKEN_READ_ONLY: string - GATSBY_FUNCTIONS_PATH: string - CROWDIN_API_KEY: string - } - } -} - -export {} diff --git a/src/global.d.ts b/src/global.d.ts index f93c7ccc03a..3cc74b3903b 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -8,4 +8,17 @@ declare global { _paq: any dev: boolean } + + namespace NodeJS { + interface ProcessEnv { + GITHUB_TOKEN: string + ALGOLIA_ADMIN_KEY: string + ETHERSCAN_API_KEY: string + GATSBY_ALGOLIA_APP_ID: string + GATSBY_ALGOLIA_SEARCH_KEY: string + GATSBY_GITHUB_TOKEN_READ_ONLY: string + GATSBY_FUNCTIONS_PATH: string + CROWDIN_API_KEY: string + } + } } diff --git a/tsconfig.json b/tsconfig.json index 2d56bb20cba..e10a4bc5313 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,8 +17,7 @@ "./plugins/**/*", "./gatsby-node.ts", "./gatsby-config.ts", - "./overrides.d.ts", - "./environment.d.ts" + "./overrides.d.ts" ], "exclude": [ "node_modules", From 36152faaa3e7810b8c28d5aaecd70708d702e68b Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 09:07:01 +0100 Subject: [PATCH 165/298] Apply suggestions from code review Co-authored-by: Sam Richards --- .../community/get-involved/open-research/index.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index f4f6fc9fe25..40e1a5dd27f 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -11,7 +11,9 @@ One of the primary strengths of Ethereum is that it is constantly being improved ## General research resources -Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). This report from [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) also covers a lot of ground. These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. +Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. + +This May 2022 report from [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) also covers a lot of ground. ## Scaling and performance @@ -40,7 +42,7 @@ There are now several Layer 2 protocols that scale Ethereum using different tech ### Bridges -One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of researchg because bridges are commonly targeted by hackers. +One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of research because bridges are commonly targeted by hackers. #### Background reading @@ -119,7 +121,7 @@ Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy a ### Wallets -User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with dveelopment of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. +User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with development of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. #### Background reading @@ -134,7 +136,7 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac #### Recent research -[Validation focussed smart contract wallets](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +[Validation focused smart contract wallets](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) [The future of accounts](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) From 880b91f05e72fa5d538af40ef871fa0ec9d6225e Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 09:19:56 +0100 Subject: [PATCH 166/298] fix link format and move subsections as per Sam review --- .../get-involved/open-research/index.md | 54 +++++++++++-------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 40e1a5dd27f..39c7bd28bdd 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -9,6 +9,10 @@ lang: en One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline some of the key areas of active research as a rough guide to Ethereum's cutting edge. +## How Ethereum research works + +TBC + ## General research resources Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. @@ -27,7 +31,7 @@ There are now several Layer 2 protocols that scale Ethereum using different tech [Introduction to layer 2](/layer-2/) -[EthHub Layer-2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) +[EthHub Layer 2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) [Polynya: Rollups, DA and modular chains](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) @@ -39,10 +43,12 @@ There are now several Layer 2 protocols that scale Ethereum using different tech [Rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) +[L2Beat](https://l2beat.com/) + ### Bridges -One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer-2s and bridges between Layer 1 and Layer 2. This is a particularly important area of research because bridges are commonly targeted by hackers. +One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer 2s and bridges between Layer 1 and Layer 2. This is a particularly important area of research because bridges are commonly targeted by hackers. #### Background reading @@ -52,7 +58,8 @@ One particular area of layer 2 that requires more research and development is sa [Blockchain Bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) -[L2Beat](https://l2beat.com/) +[Valkue locked in bridges](https://dune.com/eliasimos/Bridge-Away-(from-Ethereum)) + #### Recent research @@ -217,22 +224,6 @@ Liquid staking allows users with less than 32 ETH to receive staking yields by s [Withdrawal credentials](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) -### DeFi - -Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. - -#### Background reading - -[DeFi](https://ethereum.org/en/defi/) - -[Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) - - -#### Recent research - -[Decentralized finance, centralized ownership?](https://arxiv.org/pdf/2012.09306.pdf) - -[Optimism: The road to sub-dollar transactions](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) ### Fee markets @@ -298,7 +289,7 @@ The execution layer is concerned with executing transactions, running the EVM an #### Background reading -[Nodes and Clients](https://ethereum.org/developers/docs/nodes-and-clients) +[Nodes and Clients](/developers/docs/nodes-and-clients/) #### Client implementations @@ -355,9 +346,26 @@ There is a need for more data analysis tools and dashboards that give detailed i #### Recent research - ## Apps and tooling +### DeFi + +Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. + +#### Background reading + +[DeFi](/defi/) + +[Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) + + +#### Recent research + +[Decentralized finance, centralized ownership?](https://arxiv.org/pdf/2012.09306.pdf) + +[Optimism: The road to sub-dollar transactions](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) + + ### DAOs DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. @@ -377,7 +385,7 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res #### Background reading -[Developer Frameworks](https://ethereum.org/en/developers/docs/frameworks/) +[Developer Frameworks](/developers/docs/frameworks/) [Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) @@ -412,4 +420,4 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra #### Recent research -[Smart contract composability](https://ethereum.org/en/developers/docs/smart-contracts/composability/) +[Smart contract composability](/developers/docs/smart-contracts/composability/) From 9fb05316ebb76943feed067994ece132b6e9fd5b Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 09:25:29 +0100 Subject: [PATCH 167/298] add/fix links --- .../community/get-involved/open-research/index.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 39c7bd28bdd..3aed36cc138 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -132,7 +132,7 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac #### Background reading -[Our Security page](https://ethereum.org/en/security/) +[Introduction to wallet security]/security/) [ethresear.ch Security](https://ethresear.ch/tag/security) @@ -147,7 +147,7 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [The future of accounts](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) -[EIP-3074](https://eips.ethereum.org/EIPS/eip-3074) +[EIP-3074 AUTH and AUTHCALL Opcodes](https://eips.ethereum.org/EIPS/eip-3074) [Publishing code code at EOA addresses](https://github.com/ethereum/EIPs/pull/5003) @@ -164,10 +164,15 @@ For Ethereum to onboard more people the UX/UI must be improved. This requires de [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) -[Ethereum.org community page](https://ethereum.org/en/learn/) #### Recent research +[Web3 Design Discord](https://discord.gg/FsCFPMTSm9) + +[Web3 Design Principles](https://www.web3designprinciples.com/) + +[Ethereum Magicians UX discussion](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) + ## Economics From b2c0cafaf46d6105ae16d7b1b8e696c7a4ecf474 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 09:40:02 +0100 Subject: [PATCH 168/298] add placeholder "how research works" paragraph --- .../get-involved/open-research/index.md | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 3aed36cc138..a8940d04e3d 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -11,7 +11,7 @@ One of the primary strengths of Ethereum is that it is constantly being improved ## How Ethereum research works -TBC +Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on fora such as ethresear.ch rather than reaching the community after rounds of peer review. ## General research resources @@ -264,18 +264,6 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe [Gasper paper](https://arxiv.org/abs/2003.03052) -##### Client implementations - -[Prysm client](https://docs.prylabs.network/docs/how-prysm-works/beacon-node/) - -[Lighthouse client](https://lighthouse-book.sigmaprime.io/) - -[Lodestar client](https://lodestar.chainsafe.io/) - -[Teku client](https://consensys.net/knowledge-base/ethereum-2/teku/) - -[Nimbus client](https://nimbus.team/) - #### Recent research @@ -294,17 +282,8 @@ The execution layer is concerned with executing transactions, running the EVM an #### Background reading -[Nodes and Clients](/developers/docs/nodes-and-clients/) - -#### Client implementations - -[Geth client](geth.ethereum.org) - -[Nethermind client](nethermind.io) - -[Besu client](https://consensys.net/quorum/developers/) +[Nodes and Clients (includes links to client implementations](/developers/docs/nodes-and-clients/) -[Erigon client](https://github.com/ledgerwatch/erigon) #### Recent research From f72640f6d339810ad35170f414f77f1e7a3e2824 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 09:51:02 +0100 Subject: [PATCH 169/298] add description of EIP --- src/content/community/get-involved/open-research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index a8940d04e3d..39603043de0 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -84,7 +84,7 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Recent research -[EIP-4844](https://github.com/ethereum/EIPs/pull/5088) +[EIP-4844: Proto-Danksharding](https://github.com/ethereum/EIPs/pull/5088) [Vitalik on sharding and data availability sampling](https://hackmd.io/@vbuterin/sharding_proposal) From 8c5931c97957c2a7b7b82d8decbc67d06aa1d497 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 10:51:48 +0100 Subject: [PATCH 170/298] separate protocol res from protocol dev --- .../get-involved/open-research/index.md | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 39603043de0..1df8f001b17 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -249,11 +249,13 @@ Ethereum transaction fees protect the network from spam, denial-of-service attac [Cross domain MEV](http://arxiv.org/abs/2112.01472) -## Clients and protocol research +## Protocol research -### Consensus clients +Protocol research is concerned with Ethereum's base layer - the set of rules defining how nodes connect, communicate, exchange and store Ethereum data and come to consensus about the state of the blockchain. The protocol can be divided into two top-level categories: consensus and execution. -The consensus layer is concerned with the proof-of-stake mechanism securing Ethereum from the merge onwards. There is abundant ongoing research and development relating to PoS concepts and implementation, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations, building light clients and developing staking apps. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. +### Consensus + +Consensus research is concerned with Ethereum's proof-of-stake mechanism, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations and developing light clients. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. #### Background reading @@ -264,7 +266,6 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe [Gasper paper](https://arxiv.org/abs/2003.03052) - #### Recent research [Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) @@ -276,14 +277,15 @@ The consensus layer is concerned with the proof-of-stake mechanism securing Ethe [Proposer-builder separation](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) -### Execution clients +### Execution The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). #### Background reading -[Nodes and Clients (includes links to client implementations](/developers/docs/nodes-and-clients/) +[Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) +[Ethereum Virtual Machine](/developers/docs/evm/#top) #### Recent research @@ -298,6 +300,24 @@ The execution layer is concerned with executing transactions, running the EVM an [Data availability sampling](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) +### Client Development + +Client development makes the outcomes from protocol research into reality by building them into Ethereum clients. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software - a consensus client to keep track of the head of the blockchain, gossip blocks anmd handle consensus logic and an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. + +#### Execution Clients + +[Execution client specification](https://github.com/ethereum/execution-specs) + +[Execution API spec](https://github.com/ethereum/execution-apis) + +### Consensus Clients + +[Consensus client specification](https://github.com/ethereum/consensus-specs) + +[Beacon API specification](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) + + + ### Formal verification Formal verification is writing code to verify that Ethereum's consensus specifications are correct and bug-free. There is an executable version of the specification written in Python that requires maintenance and development. Further research can help to improve the Python implementation of the specification and add tools that can more robustly verify correctness and identify issues. @@ -329,6 +349,8 @@ There is a need for more data analysis tools and dashboards that give detailed i #### Recent research +[Robust Incentives Group Data Analysis](https://ethereum.github.io/rig/) + ## Apps and tooling @@ -363,20 +385,31 @@ DAOs are one of the key classes of application being built on top of Ethereum. T [Mapping the DAO ecosystem](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) + ### Developer tools Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. #### Background reading +[Tooling by programming language](/developers/docs/programming-languages/) + [Developer Frameworks](/developers/docs/frameworks/) [Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) +[Token standards]/developers/docs/standards/tokens/) + +[Biastek: Ethereum tools](https://biastek.com/ethereum-tools/) + +[CryptoDevHub: EVM Tools](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) + + #### Recent research [Eth R&D Discord Consensus Tooling channel](https://discordapp.com/channels/595666850260713488/746343380900118528) + ### App security Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. @@ -389,6 +422,7 @@ Hacks on Ethereum nearly always exploit vulnerabilities in individual applicatio [Rekt News](https://twitter.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) + #### Recent research [ethresear.ch Applications](https://ethresear.ch/c/applications/18) @@ -402,6 +436,8 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra [Coinbase: Intro to Web3 Stack](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) +[Ethereum stack](/developers/docs/ethereum-stack/) + #### Recent research [Smart contract composability](/developers/docs/smart-contracts/composability/) From c1f003c6cd4fc432cedb819991319a50e38ea566 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 11:13:19 +0100 Subject: [PATCH 171/298] added oracles, started "testing" heading --- .../get-involved/open-research/index.md | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 1df8f001b17..ef2cdec3d56 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -300,7 +300,7 @@ The execution layer is concerned with executing transactions, running the EVM an [Data availability sampling](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) -### Client Development +## Client Development Client development makes the outcomes from protocol research into reality by building them into Ethereum clients. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software - a consensus client to keep track of the head of the blockchain, gossip blocks anmd handle consensus logic and an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. @@ -317,6 +317,7 @@ Client development makes the outcomes from protocol research into reality by bui [Beacon API specification](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) +## Testing ### Formal verification @@ -337,7 +338,7 @@ Formal verification is writing code to verify that Ethereum's consensus specific -### Data science and analytics +## Data science and analytics There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. @@ -354,6 +355,8 @@ There is a need for more data analysis tools and dashboards that give detailed i ## Apps and tooling +The application layer supports a very diverse ecosystem of programs that settle transactions on Ethereum's base layer. App teams are constantly finding new ways to leverage Ethereum to create lower-friction, composable, permissionless and censorship resistant versions of important Web2 apps or creating completely new web3-native concepts. At the same time, new tooling is being developed that makes building increasingly complex Ethereum apps easier. + ### DeFi Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. @@ -410,6 +413,21 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res [Eth R&D Discord Consensus Tooling channel](https://discordapp.com/channels/595666850260713488/746343380900118528) +### Oracles + +Oracles are used to import off-chain data on-chain in a permissionless and decentralized way. This enables dapps to be reactive to real world phenomena such as price fluctuations in real-world assets, events in off-chain apps or even changes in the weather. + +#### Background reading + +[Introduction to Oracles](/developers/docs/oracles/) + +#### Recent Research + +[Survey of blockchain oracles](https://arxiv.org/pdf/2004.07140.pdf) + +[Chainlink white paper](https://chain.link/whitepaper) + + ### App security Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. From f800a7967251a9c5cbf37236f4e46753147a7e02 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 11:18:10 +0100 Subject: [PATCH 172/298] add funding section new heading and short placeholder paragraph --- src/content/community/get-involved/open-research/index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index ef2cdec3d56..607ddfcf754 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -11,7 +11,7 @@ One of the primary strengths of Ethereum is that it is constantly being improved ## How Ethereum research works -Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on fora such as ethresear.ch rather than reaching the community after rounds of peer review. +Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on fora such as [ethresear.ch](https://ethresear.ch/) rather than reaching the community after rounds of peer review. ## General research resources @@ -459,3 +459,7 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra #### Recent research [Smart contract composability](/developers/docs/smart-contracts/composability/) + +## Sources of Funding + +You can get involved with Ethereum research and get paid for it! For example, the Ethereum Foundation recently ran an [Academic Grants](/community/grants/academic-grants-round/) funding round. Information on active and upcoming funding opportunities can be found on the [grants page](community/grants/). From ac38743dc277565743ec9fcdd3a0c93dccad4361 Mon Sep 17 00:00:00 2001 From: Hursit Tarcan <75273616+hursittarcan@users.noreply.github.com> Date: Tue, 31 May 2022 12:23:09 +0200 Subject: [PATCH 173/298] Update ActionCard.tsx --- src/components/ActionCard.tsx | 81 ++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/src/components/ActionCard.tsx b/src/components/ActionCard.tsx index d9bae405853..6df675dc4bb 100644 --- a/src/components/ActionCard.tsx +++ b/src/components/ActionCard.tsx @@ -17,7 +17,10 @@ const ChildrenContainer = styled.div` margin-top: 2rem; ` -const ImageWrapper = styled.div` +const ImageWrapper = styled.div<{ + isRight: boolean | undefined + isBottom: boolean | undefined +}>` display: flex; flex-direction: row; justify-content: ${(props) => (props.isRight ? `flex-end` : `center`)}; @@ -63,47 +66,47 @@ const Card = styled(Link)` ` export interface IProps { - to?: string - alt?: string - image?: string - title?: string - description?: string - className?: string - isRight?: boolean - isBottom?: boolean + to: string + alt?: string + image: string + title: string + description: string + className?: string + isRight?: boolean + isBottom?: boolean } const ActionCard: React.FC = ({ - to, - alt, - image, - title, - description, - children, - className, - isRight, - isBottom = true -}) => { - const isImageURL = typeof image === "string" && image.includes("http") - return ( - - - {!isImageURL && {alt}} - {isImageURL && ( - {alt} - )} - - - {title} - {description} - {children && {children}} - - - ) + to, + alt, + image, + title, + description, + children, + className, + isRight, + isBottom = true + }) => { + const isImageURL = typeof image === "string" && image.includes("http") + return ( + + + {!isImageURL && {alt}} + {isImageURL && ( + {alt} + )} + + + {title} + {description} + {children && {children}} + + + ) } export default ActionCard From 8d4dd29c5ca361167fba7f87f34aba37bc6ac5a4 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 11:29:11 +0100 Subject: [PATCH 174/298] fix broken link --- src/content/community/get-involved/open-research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 607ddfcf754..9717494bbb2 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -401,7 +401,7 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res [Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) -[Token standards]/developers/docs/standards/tokens/) +[Token standards](/developers/docs/standards/tokens/) [Biastek: Ethereum tools](https://biastek.com/ethereum-tools/) From 40128599944233a9b156f80266e6fac87bbad7d9 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Tue, 31 May 2022 11:45:10 +0100 Subject: [PATCH 175/298] add links to tech stack --- src/content/community/get-involved/open-research/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 9717494bbb2..33ebe32ef34 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -456,6 +456,10 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra [Ethereum stack](/developers/docs/ethereum-stack/) +[Introduction to smart contracts](/developers/docs/smart-contracts/) + +[Introduction to storage](/developers/docs/storage/) + #### Recent research [Smart contract composability](/developers/docs/smart-contracts/composability/) From 36251dd41d2dd31eb450635fcf6c68719b64c34a Mon Sep 17 00:00:00 2001 From: Hursit Tarcan <75273616+hursittarcan@users.noreply.github.com> Date: Tue, 31 May 2022 15:24:27 +0200 Subject: [PATCH 176/298] Fixed formatting ActionCard --- src/components/ActionCard.tsx | 80 +++++++++++++++++------------------ 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/components/ActionCard.tsx b/src/components/ActionCard.tsx index 6df675dc4bb..e7963998613 100644 --- a/src/components/ActionCard.tsx +++ b/src/components/ActionCard.tsx @@ -18,8 +18,8 @@ const ChildrenContainer = styled.div` ` const ImageWrapper = styled.div<{ - isRight: boolean | undefined - isBottom: boolean | undefined + isRight: boolean | undefined + isBottom: boolean | undefined }>` display: flex; flex-direction: row; @@ -66,47 +66,47 @@ const Card = styled(Link)` ` export interface IProps { - to: string - alt?: string - image: string - title: string - description: string - className?: string - isRight?: boolean - isBottom?: boolean + to: string + alt?: string + image: string + title: string + description: string + className?: string + isRight?: boolean + isBottom?: boolean } const ActionCard: React.FC = ({ - to, - alt, - image, - title, - description, - children, - className, - isRight, - isBottom = true - }) => { - const isImageURL = typeof image === "string" && image.includes("http") - return ( - - - {!isImageURL && {alt}} - {isImageURL && ( - {alt} - )} - - - {title} - {description} - {children && {children}} - - - ) + to, + alt, + image, + title, + description, + children, + className, + isRight, + isBottom = true +}) => { + const isImageURL = typeof image === "string" && image.includes("http") + return ( + + + {!isImageURL && {alt}} + {isImageURL && ( + {alt} + )} + + + {title} + {description} + {children && {children}} + + + ) } export default ActionCard From 8cb60aacc454db5d256f869fed9de975f166e826 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 31 May 2022 13:47:28 +0000 Subject: [PATCH 177/298] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3bead1171e8..0572e8cfa36 100644 --- a/README.md +++ b/README.md @@ -1061,7 +1061,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
          EtherWorld

          📖
          Stefan Ignjatović

          📖
          Iheb Haboubi

          🐛 -
          Hursit Tarcan

          🐛 💻 ️️️️♿️ +
          Hursit Tarcan

          💻
          pabloped

          📖 🌍 From aeefa204a9a80f68ce8067396c7a75f2eaf51d4a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 31 May 2022 13:47:30 +0000 Subject: [PATCH 178/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 004cece6e2c..7e268a7e1dc 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -6378,9 +6378,7 @@ "avatar_url": "https://avatars.githubusercontent.com/u/75273616?v=4", "profile": "https://github.com/HursitTarcan", "contributions": [ - "bug", - "code", - "a11y" + "code" ] }, { From 266abd60868b365db2ba2494c55f51942cfd978b Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 31 May 2022 16:27:59 +0100 Subject: [PATCH 179/298] Apply suggestions from code review Co-authored-by: Sam Richards Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/scaling/validium/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index a5032380e68..0d6dd0bedb2 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -7,7 +7,7 @@ incomplete: true sidebarDepth: 3 --- -Validium is a [scaling solution](/developers/docs/scaling/) that enforces integrity of transactions using validity proofs like [ZK-rollups](/developers/docs/scaling/zk-rollups/), but doesn’t store transaction data on the main Ethereum layer. While off-chain data availability introduces trade-offs, it can lead to massive improvements in scalability (validiums can process ~ 9,000 transactions, or more, per second). +Validium is a [scaling solution](/developers/docs/scaling/) that enforces integrity of transactions using validity proofs like [ZK-rollups](/developers/docs/scaling/zk-rollups/), but doesn’t store transaction data on the Ethereum Mainnet. While off-chain data availability introduces trade-offs, it can lead to massive improvements in scalability (validiums can process ~ 9,000 transactions, or more, per second). ## Prerequisites {#prerequisites} @@ -25,9 +25,9 @@ The major difference between validiums and ZK-rollups concerns their positions o ### Off-chain vs on-chain data availability {#off-chain-vs-on-chain-data-availability} -ZK-rollups post information about off-transactions to Ethereum Mainnet as `calldata`. This information can be used to recreate the state of the rollup, if necessary, to prove the validity (or lack thereof) of a specific state transition. As the data is anchored on Ethereum (on-chain data availability), ZK-rollups can directly benefit from Ethereum’s security guarantees—funds are always secure if Mainnet is operational. +**ZK-rollups** post information about off-transactions to Ethereum Mainnet as `calldata`. This information can be used to recreate the state of the rollup, if necessary, to prove the validity (or lack thereof) of a specific state transition. As the data is anchored on Ethereum (**on-chain data availability**), ZK-rollups can directly benefit from Ethereum’s security guarantees—funds are always secure if Mainnet is operational. -Validiums keep all data relating to transactions off the Ethereum chain (off-chain data availability). This improves throughput on validium chains since less data needs to be posted to Mainnet. It also reduces rollup costs by eliminating the need to publish calldata and increases privacy for users (transaction information doesn't make it to Mainnet). +**Validiums** keep all data relating to transactions off the Ethereum chain (**off-chain data availability**). This improves throughput on validium chains since less data needs to be posted to Mainnet. It also reduces rollup costs by eliminating the need to publish calldata and increases privacy for users (transaction information doesn't make it to Mainnet). Off-chain data availability does present a problem: data necessary for creating Merkle proofs may be unavailable. This means users may be unable to withdraw funds from the rollup contract if operators should act maliciously. From f1eccc3381f1fbe5618f870af47d3ca50116ff69 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Tue, 31 May 2022 16:31:12 +0100 Subject: [PATCH 180/298] Update index.md --- src/content/developers/docs/scaling/validium/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 0d6dd0bedb2..227a590d4c2 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -15,7 +15,7 @@ You should have a good understanding of all the foundational topics and a high-l ## How does validium work? {#how-does-validium work} -Validiums are a type of “rollup”: a [Layer 2](/layer-2/) scaling protocol designed to improve throughput by processing transactions off the main Ethereum chain. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs, which can be SNARKs (Succinct Non-Interactive Argument of Knowledge) or STARKs (Scalable Transparent ARgument of Knowledge). +Validiums are a type of “rollup”: an off-chain scaling protocol designed to improve throughput by processing transactions off the Ethereum Mainnet. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs, which can be SNARKs (Succinct Non-Interactive Argument of Knowledge) or STARKs (Scalable Transparent ARgument of Knowledge). More on [zero-knowledge proofs](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/). From 59c7eeebef888e58e2a032b0b76ecc2679ed3397 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 31 May 2022 20:52:57 +0300 Subject: [PATCH 181/298] StakeWise added Bug Bounty --- src/data/staking-products.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/staking-products.json b/src/data/staking-products.json index 10fdfcc8d00..84520599957 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -492,7 +492,7 @@ } ], "isFoss": true, - "hasBugBounty": false, + "hasBugBounty": true, "isTrustless": true, "hasPermissionlessNodes": false, "pctMajorityClient": 43.1, From b372ecbc29d28e0ee4ed4bf7041b38b8bfe3c184 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 11:55:33 -0700 Subject: [PATCH 182/298] a11y for FeedbackWidget --- src/components/FeedbackWidget.js | 35 ++++++++++++++++++++++++-------- src/intl/en/common.json | 1 + 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/components/FeedbackWidget.js b/src/components/FeedbackWidget.js index c058460ad1e..ad71fe6b240 100644 --- a/src/components/FeedbackWidget.js +++ b/src/components/FeedbackWidget.js @@ -1,18 +1,21 @@ // Library imports import React, { useState, useEffect, useRef, useMemo } from "react" +import { useIntl } from "gatsby-plugin-intl" import styled from "styled-components" // Component imports import { ButtonPrimary } from "./SharedStyledComponents" import Translation from "./Translation" import Icon from "./Icon" +import NakedButton from "./NakedButton" // SVG imports import FeedbackGlyph from "../assets/feedback-glyph.svg" // Utility imports import { trackCustomEvent } from "../utils/matomo" +import { translateMessageId } from "../utils/translations" // Hook imports import { useOnClickOutside } from "../hooks/useOnClickOutside" -const FixedDot = styled.div` +const FixedDot = styled(NakedButton)` width: 3rem; aspect-ratio: 1; border-radius: 50%; @@ -127,7 +130,7 @@ const StyledFeedbackGlyph = styled(FeedbackGlyph)` } ` -const IconContainer = styled.div` +const IconContainer = styled(NakedButton)` position: absolute; right: 0.5rem; top: 0.5rem; @@ -140,6 +143,7 @@ const IconContainer = styled.div` ` const FeedbackWidget = ({ className }) => { + const intl = useIntl() const containerRef = useRef() useOnClickOutside(containerRef, () => handleClose(), [`mousedown`]) const [isOpen, setIsOpen] = useState(false) @@ -238,9 +242,6 @@ const FeedbackWidget = ({ className }) => { ref={containerRef} className={className} > - - -

          {feedbackSubmitted ? ( @@ -260,20 +261,38 @@ const FeedbackWidget = ({ className }) => { )} {feedbackSubmitted ? ( - + ) : ( <> - handleSubmit(true)}> + handleSubmit(true)} + aria-label={translateMessageId("yes", intl)} + > - handleSubmit(false)}> + handleSubmit(false)} + aria-label={translateMessageId("no", intl)} + > )} + + + diff --git a/src/intl/en/common.json b/src/intl/en/common.json index 66a6c60cb22..0c621e6a30d 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -17,6 +17,7 @@ "brand-assets": "Brand assets", "bridges": "Blockchain bridges", "bug-bounty": "Bug bounty", + "close": "Close", "coinbase-logo": "Coinbase logo", "coinmama-logo": "Coinmama logo", "community": "Community", From cffed0f1fd685da6a35a3e45139e4e77036f838f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 11:55:58 -0700 Subject: [PATCH 183/298] add focus trap to FW modal for keyboard navigation --- src/components/FeedbackWidget.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/components/FeedbackWidget.js b/src/components/FeedbackWidget.js index ad71fe6b240..af13ad4f82f 100644 --- a/src/components/FeedbackWidget.js +++ b/src/components/FeedbackWidget.js @@ -193,8 +193,36 @@ const FeedbackWidget = ({ className }) => { return offset }, [location]) + const handleKey = (e) => { + // Adds focus trap to modal for keyboard navigation + if (e.keyCode === 9) { + let focusable = document + .querySelector("#modal") + .querySelectorAll("button") + if (focusable.length) { + let first = focusable[0] + let last = focusable[focusable.length - 1] + let shift = e.shiftKey + if (shift) { + if (e.target === first) { + // shift-tab pressed on first input in dialog + last.focus() + e.preventDefault() + } + } else { + if (e.target === last) { + // tab pressed on last input in dialog + first.focus() + e.preventDefault() + } + } + } + } + } + const handleClose = () => { setIsOpen(false) + window.removeEventListener("keydown", handleKey) trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, @@ -203,6 +231,7 @@ const FeedbackWidget = ({ className }) => { } const handleOpen = () => { setIsOpen(true) + window.addEventListener("keydown", handleKey) trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, @@ -241,6 +270,7 @@ const FeedbackWidget = ({ className }) => { bottomOffset={bottomOffset} ref={containerRef} className={className} + id="modal" >

          {feedbackSubmitted ? ( From 95511db769bc7131a8fb4735f8c8e1af5002c47e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 13:07:12 -0700 Subject: [PATCH 184/298] extract useFocusTrap hook implement in FeedbackWidget --- src/components/FeedbackWidget.js | 33 +++-------------------- src/hooks/useFocusTrap.ts | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 29 deletions(-) create mode 100644 src/hooks/useFocusTrap.ts diff --git a/src/components/FeedbackWidget.js b/src/components/FeedbackWidget.js index af13ad4f82f..96b95f5b81d 100644 --- a/src/components/FeedbackWidget.js +++ b/src/components/FeedbackWidget.js @@ -14,6 +14,7 @@ import { trackCustomEvent } from "../utils/matomo" import { translateMessageId } from "../utils/translations" // Hook imports import { useOnClickOutside } from "../hooks/useOnClickOutside" +import { useFocusTrap } from "../hooks/useFocusTrap" const FixedDot = styled(NakedButton)` width: 3rem; @@ -149,6 +150,7 @@ const FeedbackWidget = ({ className }) => { const [isOpen, setIsOpen] = useState(false) const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) const [isHelpful, setIsHelpful] = useState(null) + const [startTrap, stopTrap] = useFocusTrap("#modal") const location = typeof window !== "undefined" ? window.location.href : "" @@ -193,36 +195,9 @@ const FeedbackWidget = ({ className }) => { return offset }, [location]) - const handleKey = (e) => { - // Adds focus trap to modal for keyboard navigation - if (e.keyCode === 9) { - let focusable = document - .querySelector("#modal") - .querySelectorAll("button") - if (focusable.length) { - let first = focusable[0] - let last = focusable[focusable.length - 1] - let shift = e.shiftKey - if (shift) { - if (e.target === first) { - // shift-tab pressed on first input in dialog - last.focus() - e.preventDefault() - } - } else { - if (e.target === last) { - // tab pressed on last input in dialog - first.focus() - e.preventDefault() - } - } - } - } - } - const handleClose = () => { setIsOpen(false) - window.removeEventListener("keydown", handleKey) + stopTrap() trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, @@ -231,7 +206,7 @@ const FeedbackWidget = ({ className }) => { } const handleOpen = () => { setIsOpen(true) - window.addEventListener("keydown", handleKey) + startTrap() trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, diff --git a/src/hooks/useFocusTrap.ts b/src/hooks/useFocusTrap.ts new file mode 100644 index 00000000000..a6a50d9a2e5 --- /dev/null +++ b/src/hooks/useFocusTrap.ts @@ -0,0 +1,46 @@ +// Adds focus trap to modal for keyboard navigation +export const useFocusTrap = ( + _querySelector: string +): (() => void)[] | null[] => { + const focusedElement: Element | null = document.querySelector(_querySelector) + if (!focusedElement) return [null, null] + + const handleKey = (e: KeyboardEvent) => { + const { key, shiftKey, target } = e + if (key === "Tab") { + const focusableElements: NodeList = focusedElement.querySelectorAll( + "button, textarea, input, select" + ) + if (focusableElements.length) { + const first = focusableElements[0] + const last = focusableElements[focusableElements.length - 1] + + let isTargetOutside = true + focusableElements.forEach((element) => { + if (element === target) isTargetOutside = false + }) + if (shiftKey) { + if (target === first || isTargetOutside) { + // shift-tab pressed on first input in dialog + last.focus() + e.preventDefault() + } + } else { + if (target === last || isTargetOutside) { + // tab pressed on last input in dialog + first.focus() + e.preventDefault() + } + } + } + } + } + + const startTrap = (): void => { + window.addEventListener("keydown", handleKey) + } + const stopTrap = (): void => { + window.removeEventListener("keydown", handleKey) + } + return [startTrap, stopTrap] +} From 355fa685143ba7c18324e62eee892ea02e5f053f Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 13:30:18 -0700 Subject: [PATCH 185/298] Update src/content/developers/docs/scaling/validium/index.md --- src/content/developers/docs/scaling/validium/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 227a590d4c2..7fe5d3e0ba7 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -13,7 +13,7 @@ Validium is a [scaling solution](/developers/docs/scaling/) that enforces integr You should have a good understanding of all the foundational topics and a high-level understanding of [Ethereum scaling](/developers/docs/scaling/). Implementing scaling solutions such as Validium is an advanced topic as the technology is less battle-tested, and continues to be researched and developed. -## How does validium work? {#how-does-validium work} +## How does validium work? {#how-does-validium-work} Validiums are a type of “rollup”: an off-chain scaling protocol designed to improve throughput by processing transactions off the Ethereum Mainnet. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs, which can be SNARKs (Succinct Non-Interactive Argument of Knowledge) or STARKs (Scalable Transparent ARgument of Knowledge). From 65bc96a6b0c0e5594dcc2572f533a32f8bd9fce0 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 13:40:04 -0700 Subject: [PATCH 186/298] guard for undefined document --- src/hooks/useFocusTrap.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hooks/useFocusTrap.ts b/src/hooks/useFocusTrap.ts index a6a50d9a2e5..1d44dfab44f 100644 --- a/src/hooks/useFocusTrap.ts +++ b/src/hooks/useFocusTrap.ts @@ -1,8 +1,9 @@ // Adds focus trap to modal for keyboard navigation export const useFocusTrap = ( _querySelector: string -): (() => void)[] | null[] => { - const focusedElement: Element | null = document.querySelector(_querySelector) +): ((() => void) | null)[] => { + const focusedElement: Element | null | undefined = + document?.querySelector(_querySelector) if (!focusedElement) return [null, null] const handleKey = (e: KeyboardEvent) => { From d29def9251e41fe438c260752c87354fe72d62a7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 14:10:22 -0700 Subject: [PATCH 187/298] guard for undefined window or document --- src/hooks/useFocusTrap.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hooks/useFocusTrap.ts b/src/hooks/useFocusTrap.ts index 1d44dfab44f..8a9b18243ae 100644 --- a/src/hooks/useFocusTrap.ts +++ b/src/hooks/useFocusTrap.ts @@ -2,8 +2,9 @@ export const useFocusTrap = ( _querySelector: string ): ((() => void) | null)[] => { - const focusedElement: Element | null | undefined = - document?.querySelector(_querySelector) + if (typeof document === "undefined" || typeof window === "undefined") + return [null, null] + const focusedElement: Element | null = document.querySelector(_querySelector) if (!focusedElement) return [null, null] const handleKey = (e: KeyboardEvent) => { From d9335b21eea29cf675e95779fda9c3b5d4bb7da1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 17:19:04 -0700 Subject: [PATCH 188/298] yarn add focus-trap-react --- package.json | 1 + yarn.lock | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/package.json b/package.json index b1032a4372b..29e9a7b72ea 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "cross-fetch": "^3.1.5", "dotenv": "^8.2.0", "ethereum-blockies-base64": "^1.0.2", + "focus-trap-react": "^8.11.2", "framer-motion": "^4.1.3", "gatsby": "^4.15.0", "gatsby-plugin-gatsby-cloud": "^4.3.0", diff --git a/yarn.lock b/yarn.lock index 5395915ba78..bd2f4793ba3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8146,6 +8146,20 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +focus-trap-react@^8.11.2: + version "8.11.2" + resolved "https://registry.yarnpkg.com/focus-trap-react/-/focus-trap-react-8.11.2.tgz#92c6dc65bc96cbc14660a5f4b3bd434b61c1960b" + integrity sha512-+LQSE2vfe/2d23ddg+f2bm2IietBkarVUGw0jkswAU4btUxihHvWOrUC5QfNAqv5MLgfhGRs/rr0rU2IaxzM4w== + dependencies: + focus-trap "^6.9.3" + +focus-trap@^6.9.3: + version "6.9.3" + resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-6.9.3.tgz#2b9fae5b86c051a374f437e5ce171833efac0515" + integrity sha512-sUXiHx0QbF8SQMZGdxpu8V8zPcXx0BkU6Fj7t14csEknkcH1pnxorhhh1PfSaGjJj6gj3yiBRPxBV/qoHege3w== + dependencies: + tabbable "^5.3.3" + follow-redirects@^1.0.0, follow-redirects@^1.14.0: version "1.14.8" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" @@ -15610,6 +15624,11 @@ sync-fetch@0.3.0: buffer "^5.7.0" node-fetch "^2.6.1" +tabbable@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf" + integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA== + table@^6.0.9: version "6.7.5" resolved "https://registry.yarnpkg.com/table/-/table-6.7.5.tgz#f04478c351ef3d8c7904f0e8be90a1b62417d238" From f2858022f8a2ee969ca846f90a96ba01564c97bb Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 17:19:53 -0700 Subject: [PATCH 189/298] implement focus-trap-react --- src/components/FeedbackWidget.js | 139 ++++++++++++++++--------------- src/hooks/useFocusTrap.ts | 48 ----------- 2 files changed, 70 insertions(+), 117 deletions(-) delete mode 100644 src/hooks/useFocusTrap.ts diff --git a/src/components/FeedbackWidget.js b/src/components/FeedbackWidget.js index 96b95f5b81d..fb863bdb20c 100644 --- a/src/components/FeedbackWidget.js +++ b/src/components/FeedbackWidget.js @@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef, useMemo } from "react" import { useIntl } from "gatsby-plugin-intl" import styled from "styled-components" +import FocusTrap from "focus-trap-react" // Component imports import { ButtonPrimary } from "./SharedStyledComponents" import Translation from "./Translation" @@ -14,7 +15,6 @@ import { trackCustomEvent } from "../utils/matomo" import { translateMessageId } from "../utils/translations" // Hook imports import { useOnClickOutside } from "../hooks/useOnClickOutside" -import { useFocusTrap } from "../hooks/useFocusTrap" const FixedDot = styled(NakedButton)` width: 3rem; @@ -43,12 +43,9 @@ const FixedDot = styled(NakedButton)` ` const ModalBackground = styled.div` - display: ${({ isOpen }) => (isOpen ? "block" : "none")}; + display: block; position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; + inset: 0; background-color: rgba(0, 0, 0, 0.2); z-index: 1001; /* Above the nav bar */ ` @@ -150,7 +147,6 @@ const FeedbackWidget = ({ className }) => { const [isOpen, setIsOpen] = useState(false) const [feedbackSubmitted, setFeedbackSubmitted] = useState(false) const [isHelpful, setIsHelpful] = useState(null) - const [startTrap, stopTrap] = useFocusTrap("#modal") const location = typeof window !== "undefined" ? window.location.href : "" @@ -197,7 +193,6 @@ const FeedbackWidget = ({ className }) => { const handleClose = () => { setIsOpen(false) - stopTrap() trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, @@ -206,7 +201,6 @@ const FeedbackWidget = ({ className }) => { } const handleOpen = () => { setIsOpen(true) - startTrap() trackCustomEvent({ eventCategory: `FeedbackWidget toggled`, eventAction: `Clicked`, @@ -236,70 +230,77 @@ const FeedbackWidget = ({ className }) => { return ( <> - + - - -

          - {feedbackSubmitted ? ( - - ) : ( - - )} -

          - {feedbackSubmitted && ( -

          - -

          - )} - {feedbackSubmitted && ( -

          - -

          - )} - - {feedbackSubmitted ? ( - + + +

          + {feedbackSubmitted ? ( + + ) : ( + )} +

          + {feedbackSubmitted && ( +

          + +

          + )} + {feedbackSubmitted && ( +

          + +

          + )} + + {feedbackSubmitted ? ( + + + + ) : ( + <> + handleSubmit(true)} + aria-label={translateMessageId("yes", intl)} + > + + + handleSubmit(false)} + aria-label={translateMessageId("no", intl)} + > + + + + )} + + - -
          - ) : ( - <> - handleSubmit(true)} - aria-label={translateMessageId("yes", intl)} - > - - - handleSubmit(false)} - aria-label={translateMessageId("no", intl)} - > - - - - )} -
          - - - - - + + + + + + )} ) } diff --git a/src/hooks/useFocusTrap.ts b/src/hooks/useFocusTrap.ts deleted file mode 100644 index 8a9b18243ae..00000000000 --- a/src/hooks/useFocusTrap.ts +++ /dev/null @@ -1,48 +0,0 @@ -// Adds focus trap to modal for keyboard navigation -export const useFocusTrap = ( - _querySelector: string -): ((() => void) | null)[] => { - if (typeof document === "undefined" || typeof window === "undefined") - return [null, null] - const focusedElement: Element | null = document.querySelector(_querySelector) - if (!focusedElement) return [null, null] - - const handleKey = (e: KeyboardEvent) => { - const { key, shiftKey, target } = e - if (key === "Tab") { - const focusableElements: NodeList = focusedElement.querySelectorAll( - "button, textarea, input, select" - ) - if (focusableElements.length) { - const first = focusableElements[0] - const last = focusableElements[focusableElements.length - 1] - - let isTargetOutside = true - focusableElements.forEach((element) => { - if (element === target) isTargetOutside = false - }) - if (shiftKey) { - if (target === first || isTargetOutside) { - // shift-tab pressed on first input in dialog - last.focus() - e.preventDefault() - } - } else { - if (target === last || isTargetOutside) { - // tab pressed on last input in dialog - first.focus() - e.preventDefault() - } - } - } - } - } - - const startTrap = (): void => { - window.addEventListener("keydown", handleKey) - } - const stopTrap = (): void => { - window.removeEventListener("keydown", handleKey) - } - return [startTrap, stopTrap] -} From b88bb540f1e434990068d0994ea7b73563362f73 Mon Sep 17 00:00:00 2001 From: Nico Date: Wed, 1 Jun 2022 10:11:57 +0900 Subject: [PATCH 190/298] make start prop optional --- src/components/YouTube.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/YouTube.tsx b/src/components/YouTube.tsx index 40da9dd185a..307073e72e7 100644 --- a/src/components/YouTube.tsx +++ b/src/components/YouTube.tsx @@ -18,7 +18,7 @@ const Figure = styled.figure` export interface IProps { id: string - start: string + start?: string title: string } From 00aa69b3c01a71adf731e6beeb3fc22cf6e1e6d9 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 31 May 2022 20:01:24 -0700 Subject: [PATCH 191/298] Adds close modal with escape --- src/components/FeedbackWidget.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/FeedbackWidget.js b/src/components/FeedbackWidget.js index fb863bdb20c..1d933bbe6f8 100644 --- a/src/components/FeedbackWidget.js +++ b/src/components/FeedbackWidget.js @@ -15,6 +15,7 @@ import { trackCustomEvent } from "../utils/matomo" import { translateMessageId } from "../utils/translations" // Hook imports import { useOnClickOutside } from "../hooks/useOnClickOutside" +import { useKeyPress } from "../hooks/useKeyPress" const FixedDot = styled(NakedButton)` width: 3rem; @@ -226,6 +227,8 @@ const FeedbackWidget = ({ className }) => { setIsOpen(false) // Close widget without triggering redundant tracker event } + useKeyPress(`Escape`, handleClose) + if (!location.includes("/en/")) return null return ( From 47e69d2bc2332ee5f18b54bcb83a5282fb47913b Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Wed, 1 Jun 2022 06:53:59 +0100 Subject: [PATCH 192/298] Apply suggestions from code review Co-authored-by: Corwin Smith --- .../developers/docs/scaling/validium/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 7fe5d3e0ba7..9d4165cd9be 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -15,7 +15,7 @@ You should have a good understanding of all the foundational topics and a high-l ## How does validium work? {#how-does-validium-work} -Validiums are a type of “rollup”: an off-chain scaling protocol designed to improve throughput by processing transactions off the Ethereum Mainnet. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs, which can be SNARKs (Succinct Non-Interactive Argument of Knowledge) or STARKs (Scalable Transparent ARgument of Knowledge). +Validiums are a zero-knowledge proof scaling solution that uses off-chain data availability and computation designed to improve throughput by processing transactions off the Ethereum Mainnet. Off-chain transactions executed on the validium chain are verified via a smart contract on the base Ethereum layer using zero-knowledge proofs, which can be SNARKs (Succinct Non-Interactive Argument of Knowledge) or STARKs (Scalable Transparent ARgument of Knowledge). More on [zero-knowledge proofs](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/). @@ -23,15 +23,15 @@ As with ZK-rollups, validity proofs prevent invalid state transitions on validiu The major difference between validiums and ZK-rollups concerns their positions on the data availability spectrum. Both solutions approach data storage differently, which has implications for security and trustlessness. -### Off-chain vs on-chain data availability {#off-chain-vs-on-chain-data-availability} +### On-chain vs off-chain data availability {#on-chain-vs-off-chain-data-availability} -**ZK-rollups** post information about off-transactions to Ethereum Mainnet as `calldata`. This information can be used to recreate the state of the rollup, if necessary, to prove the validity (or lack thereof) of a specific state transition. As the data is anchored on Ethereum (**on-chain data availability**), ZK-rollups can directly benefit from Ethereum’s security guarantees—funds are always secure if Mainnet is operational. +**ZK-rollups** bundle (or "roll-up") off-chain transaction data to Ethereum Mainnet as `calldata`. This information can be used to recreate the state of the rollup, if necessary, to prove the validity (or lack thereof) of a specific state transition. As the data is anchored on Ethereum (**on-chain data availability**), ZK-rollups directly benefit from Ethereum’s security and data availability guarantees—funds are always secure if Mainnet is operational. -**Validiums** keep all data relating to transactions off the Ethereum chain (**off-chain data availability**). This improves throughput on validium chains since less data needs to be posted to Mainnet. It also reduces rollup costs by eliminating the need to publish calldata and increases privacy for users (transaction information doesn't make it to Mainnet). +**Validiums** store all transaction data off Ethereum Mainnet (**off-chain data availability**). This improves throughput and reduces the costs on validium chains since calldata is not posted to Ethereum Mainnet. -Off-chain data availability does present a problem: data necessary for creating Merkle proofs may be unavailable. This means users may be unable to withdraw funds from the rollup contract if operators should act maliciously. +Off-chain data availability does present a problem: data necessary for creating or verifying Merkle proofs may be unavailable. This means users may be unable to withdraw funds from the rollup contract if operators should act maliciously. -To guarantee the availability of off-chain data, some validium solutions use a group of trusted entities to store copies of the state and provide proof of data availability. Of course, this presents another problem: users must trust these entities to make the data available when needed. There's also the possibility of members of data availability committees [getting compromised by a malicious actor](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) who can then withhold off-chain data. +To guarantee the availability of off-chain data, some validium solutions use a group of trusted entities know as a data availability committee (DAC) to store copies of the state and provide proof of data availability. Users must trust these entities to make the data available when needed. There's the possibility of members of data availability committees [getting compromised by a malicious actor](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) who can then withhold off-chain data. Other validiums require participants charged with storing offline data to provide a “bond” to reduce trust assumptions. If these participants fail to prove data availability, the bond is slashed. This approach relies on cryptoeconomic incentives and is considerably more secure than appointing trusted parties to secure offline data in the validium. @@ -48,7 +48,7 @@ A decentralized exchange (DEX) may prefer using a validium’s scalable and priv | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | No withdrawal delay (no latency to on-chain/cross-chain tx); consequent greater capital efficiency. | Limited support for general computation/smart contracts; specialized languages required. | | Not vulnerable to certain economic attacks faced by fraud-proof based systems in high-value applications. | High computational power required to generate ZK proofs; not cost effective for low throughput applications. | -| Reduces rollup fees for users by shrinking costs of publishing data on Ethereum. | Slower subjective finality time (10-30 min to generate a ZK proof) (but faster to full finality because there is no dispute time delay). | +| Reduces gas fees for users by not posting calldata to Ethereum Mainnet. | Slower subjective finality time (10-30 min to generate a ZK proof) but faster to full finality because there is no dispute time delay. | | Suitable for specific use-cases, like trading or blockchain gaming that prioritize transaction privacy and scalability. | Generating a proof requires off-chain data to be available at all times. | | | Security relies on trust assumptions and cryptoeconomic incentives, unlike ZK-rollups which rely on cryptographic security mechanisms. From f397b2300d999586f7302af4037f25d991196f6b Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Wed, 1 Jun 2022 07:40:23 +0100 Subject: [PATCH 193/298] Update index.md --- .../developers/docs/scaling/validium/index.md | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 9d4165cd9be..626745ea054 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -21,7 +21,7 @@ More on [zero-knowledge proofs](https://consensys.net/blog/blockchain-explained/ As with ZK-rollups, validity proofs prevent invalid state transitions on validium chains and enhance security guarantees available to users. For instance, a malicious operator cannot steal funds since users can always withdraw funds directly from the on-chain contract [using Merkle proofs](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). -The major difference between validiums and ZK-rollups concerns their positions on the data availability spectrum. Both solutions approach data storage differently, which has implications for security and trustlessness. +However, user funds can be frozen, particualarly if the data availability managers on the validium chain withold off-chain data from users. This is the major difference between validiums and ZK-rollups—their positions on the data availability spectrum. Both solutions approach data storage differently, which has implications for security and trustlessness. ### On-chain vs off-chain data availability {#on-chain-vs-off-chain-data-availability} @@ -29,17 +29,27 @@ The major difference between validiums and ZK-rollups concerns their positions o **Validiums** store all transaction data off Ethereum Mainnet (**off-chain data availability**). This improves throughput and reduces the costs on validium chains since calldata is not posted to Ethereum Mainnet. -Off-chain data availability does present a problem: data necessary for creating or verifying Merkle proofs may be unavailable. This means users may be unable to withdraw funds from the rollup contract if operators should act maliciously. +Off-chain data availability does present a problem: data necessary for creating or verifying Merkle proofs may be unavailable. This means users may be unable to withdraw funds from the rollup contract if operators should act maliciously. Various validium solutions attempt to solve this problem by holding off-chain data with trusted parties or randomly assigned validators, who are expected to provide proofs of data availability. -To guarantee the availability of off-chain data, some validium solutions use a group of trusted entities know as a data availability committee (DAC) to store copies of the state and provide proof of data availability. Users must trust these entities to make the data available when needed. There's the possibility of members of data availability committees [getting compromised by a malicious actor](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) who can then withhold off-chain data. +#### Data availability committee (DAC) -Other validiums require participants charged with storing offline data to provide a “bond” to reduce trust assumptions. If these participants fail to prove data availability, the bond is slashed. This approach relies on cryptoeconomic incentives and is considerably more secure than appointing trusted parties to secure offline data in the validium. +To guarantee the availability of off-chain data, some validium solutions appoint a group of trusted entities, collectively known as a data availability committee (DAC), to store copies of the state and provide proof of data availability. Users must trust these entities to make the data available when needed. There's the possibility of members of data availability committees [getting compromised by a malicious actor](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) who can then withhold off-chain data. + +[More on data availability committees in validiums](https://medium.com/starkware/data-availability-e5564c416424). + +#### Bonded data availability + +Other validiums require participants charged with storing offline data to stake (i.e., lock up) tokens in a smart contract before assuming their roles. This stake serves as a “bond” to guarantee honest behavior among data availability managers, and reduces trust assumptions. If these participants fail to prove data availability, the bond is slashed. + +In a bonded data availability scheme, anyone can be assigned to hold off-chain data once they provide the required stake. This expands the pool of eligible data availability managers, reducing the centralization that affects data availability committees (DACs). More importantly, this approach relies on cryptoeconomic incentives to prevent malicious activity, which is considerably more secure than appointing trusted parties to secure offline data in the validium. + +[More on bonded data availability in validiums](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf). ## Volitions and validium Validiums offer many benefits, but come with trade-offs (most notably, data availability). But, as with many scaling solutions, validiums are suited to specific use-cases—which is why volitions were created. -Volitions combine a ZK-rollups and validium chain and allow users to switch between the two scaling solutions. With volitions, users can take advantage of validium's off-chain data availability for certain transactions, while retaining the freedom to switch to an on-chain data availability solution (ZK-rollup) if needed. This essentially gives users freedom to choose trade-offs as dictated by their unique circumstances. +Volitions combine a ZK-rollup and validium chain and allow users to switch between the two scaling solutions. With volitions, users can take advantage of validium's off-chain data availability for certain transactions, while retaining the freedom to switch to an on-chain data availability solution (ZK-rollup) if needed. This essentially gives users freedom to choose trade-offs as dictated by their unique circumstances. A decentralized exchange (DEX) may prefer using a validium’s scalable and private infrastructure for high-value trades. It can also use a ZK-rollup for users who want a ZK-rollup's higher security guarantees and trustlessness. @@ -50,7 +60,7 @@ A decentralized exchange (DEX) may prefer using a validium’s scalable and priv | Not vulnerable to certain economic attacks faced by fraud-proof based systems in high-value applications. | High computational power required to generate ZK proofs; not cost effective for low throughput applications. | | Reduces gas fees for users by not posting calldata to Ethereum Mainnet. | Slower subjective finality time (10-30 min to generate a ZK proof) but faster to full finality because there is no dispute time delay. | | Suitable for specific use-cases, like trading or blockchain gaming that prioritize transaction privacy and scalability. | Generating a proof requires off-chain data to be available at all times. | -| | Security relies on trust assumptions and cryptoeconomic incentives, unlike ZK-rollups which rely on cryptographic security mechanisms. +| | Security relies on trust assumptions and cryptoeconomic incentives, unlike ZK-rollups, which rely on cryptographic security mechanisms. ### Use Validium/Volitions {#use-validium-and-volitions} From b0aac5f9f0366d91ccfb76844aede2c0482d8489 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Wed, 1 Jun 2022 07:44:08 +0100 Subject: [PATCH 194/298] Apply suggestions from code review Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/scaling/sidechains/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/sidechains/index.md b/src/content/developers/docs/scaling/sidechains/index.md index b6ba1720216..23d238e8648 100644 --- a/src/content/developers/docs/scaling/sidechains/index.md +++ b/src/content/developers/docs/scaling/sidechains/index.md @@ -19,7 +19,7 @@ As mentioned, sidechains use alternative consensus algorithms that are different - [Delegated proof-of-stake](https://en.bitcoinwiki.org/wiki/DPoS) - [Byzantine fault tolerance](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained). -Sidechain nodes (called validators) are responsible for ordering and processing transactions, storing the blockchain state, and securing the network. In some cases, validators may be responsible for approving users' entries and exits between the sidechain and Ethereum Mainnet. +Validating nodes of sidechains are responsible for ordering and processing transactions, storing the blockchain state, and securing the network. In some cases, validators may be responsible for approving users' entries and exits between the sidechain and Ethereum Mainnet. ### EVM compatibility {#evm-compatibility} From 74b3b085dc7cbcf856f0466e72005a8925e76830 Mon Sep 17 00:00:00 2001 From: Fredrik Svantes Date: Wed, 1 Jun 2022 09:18:48 +0200 Subject: [PATCH 195/298] Updated Jonny's score --- src/data/consensus-bounty-hunters.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/consensus-bounty-hunters.csv b/src/data/consensus-bounty-hunters.csv index dd717b3f987..d8d645b9cd9 100644 --- a/src/data/consensus-bounty-hunters.csv +++ b/src/data/consensus-bounty-hunters.csv @@ -1,6 +1,6 @@ username, name, score cryptosubtlety, "Quan Thoi Minh Nguyen", 19650 -jrhea, "Jonny Rhea", 15500 +jrhea, "Jonny Rhea", 18700 AlexSSD7, "Alexander Sadovskyi", 2500 tintinweb, "tintin", 2500 holiman, "Martin Holst Swende", 2500 From 571fe98ca3ac6de56f538a9ad16047e48ad28a7a Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Wed, 1 Jun 2022 10:05:47 +0100 Subject: [PATCH 196/298] Update index.md --- .../docs/scaling/sidechains/index.md | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/scaling/sidechains/index.md b/src/content/developers/docs/scaling/sidechains/index.md index 23d238e8648..a3b5a8fb7a0 100644 --- a/src/content/developers/docs/scaling/sidechains/index.md +++ b/src/content/developers/docs/scaling/sidechains/index.md @@ -7,31 +7,45 @@ incomplete: true sidebarDepth: 3 --- -A sidechain is a separate blockchain which runs in parallel to Ethereum; it is connected to Mainnet by a two-way bridge. Sidechains have separate [consensus algorithms](/developers/docs/consensus-mechanisms/), which are often designed for faster processing times. Using a sidechain involves trade-offs, though, as they do not inherit Ethereum's security properties, unlike [layer 2 scaling solutions](/layer-2/). +A sidechain is a separate blockchain which runs in parallel to Ethereum and is connected to Mainnet by a two-way bridge. Sidechains have separate block parameters and [consensus algorithms](/developers/docs/consensus-mechanisms/), which are often designed for efficient processing of transactions. Using a sidechain involves trade-offs, though, as they do not inherit Ethereum's security properties, unlike [layer 2 scaling solutions](/layer-2/). + +Sidechains also sacrifice some measure of decentralization or security to achieve high throughput ([scalability trilemma](https://vitalik.ca/general/2021/05/23/scaling.html)). Ethereum is, however, committed to scaling without compromising on decentralization and security as outlined in its [vision statement](/upgrades/vision/) for upgrades. ## How do sidechains work? {#how-do-sidechains-work} +Sidechains are independent blockchains, with different histories, development roadmaps, and design considerations. While a sidechain may share some surface-level similarities with Ethereum, it has several distinctive features. + ### Consensus algorithms {#consensus-algorithms} -As mentioned, sidechains use alternative consensus algorithms that are different from Ethereum's proof-of-work (PoW) or proof-of-stake (PoS). Some examples of consensus algorithms used on sidechains include: +One of the qualities that make sidechains unique (i.e., different from Ethereum) is the consensus algorithm used. Ssidechains don't rely on Ethereum for consensus and can choose alternative consensus protocols that suit their needs. Some examples of consensus algorithms used on sidechains include: - [Proof-of-authority](https://wikipedia.org/wiki/Proof_of_authority) - [Delegated proof-of-stake](https://en.bitcoinwiki.org/wiki/DPoS) - [Byzantine fault tolerance](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained). -Validating nodes of sidechains are responsible for ordering and processing transactions, storing the blockchain state, and securing the network. In some cases, validators may be responsible for approving users' entries and exits between the sidechain and Ethereum Mainnet. +Like Ethereum, sidechains have validating nodes that verify and process transactions, produce blocks, and store the blockchain state. Validators are also responsible for maintaining consensus across the network and securing it against malicious attacks. + +#### Block parameters + +Ethereum places limits on [block times](/developers/docs/blocks/#block-time) (i.e., the time it takes to produce new blocks) and [block sizes](/developers/docs/blocks/#block-size) (i.e., the number of transactions in each block). Conversely, sidechains often adopt different parameters, such as faster block times and higher gas limits, to achieve high throughput, fast transactions, and low fees. + +While this has some benefits, it has critical implications for network decentralization and security. Block parameters, like fast block times and big block sizes, increase the difficulty of running a full node—leaving a few "supernodes" responsible for securing the chain. In such a scenario, the possibility of validator collusion or a malicious takeover of the chain increases. + +For blockchains to scale without harming decentralization, running a node must be open to everyone—not necessarily parties with specialized hardware. This is why efforts are underway to ensure everyone can [run a full node](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node) on the Ethereum network. ### EVM compatibility {#evm-compatibility} -What makes a sidechain particularly exciting is that the chain works the same as the main Ethereum chain because it's based on [the EVM](/developers/docs/evm/). It doesn't merely use Ethereum, it _is_ Ethereum. +What makes sidechains useful is their ability to execute contracts developed for the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/). Most EVM-compatible sidechains support smart contracts [written in Solidity](/developers/docs/smart-contracts/languages/), allowing for compatibility with Ethereum Mainnet. This means if you want to use your [dapp](/developers/docs/dapps/) on a sidechain, it's just a matter of deploying your [smart contract](/developers/docs/smart-contracts/) to this sidechain. It looks, feels, and acts just like Mainnet – you write contracts in Solidity, and interact with the chain via the Web3 API. -Because sidechains are EVM-compatible, they are considered a useful scaling [scaling solution](/developers/docs/scaling/) for Ethereum-native dapps. With your dapp on a sidechain, users can enjoy lower gas fees and faster transactions (albeit, with certain trade-offs), especially if Mainnet is congested. +Because sidechains are EVM-compatible, they are considered a useful scaling [scaling solution](/developers/docs/scaling/) for Ethereum-native dapps. With your dapp on a sidechain, users can enjoy lower gas fees and faster transactions, especially if Mainnet is congested. + +However, as explained previously, using a sidechain involves significant trade-offs. Each sidechain is responsible for its security and doesn't inherit Ethereum's security properties. This increases the possibility of malicious behavior which can affect your users or put their funds at risk. ### Asset movement {#asset-movement} -A crucial feature of sidechains is their ability to facilitate seamless transfer of value from and to Ethereum Mainnet. This interoperability with Ethereum is achieved using a blockchain bridge, which enforces a “two-way peg” between two chains. Bridges use a network of smart contracts deployed on both networks to control transfer of funds between Ethereum and sidechains. +A crucial feature of sidechains is their ability to facilitate seamless transfer of value from and to Ethereum Mainnet. This interoperability with Ethereum is achieved using a blockchain bridge, which enforces a “two-way peg” between two chains. [Bridges](/bridges/) use a network of smart contracts deployed on both networks to control transfer of funds between Ethereum and sidechains. While bridges help users move funds between Ethereum and the sidechain, the assets are not physically moved across the two chains. Instead, a "lock-mint-burn" mechanism is used for transferring value across chains. Here is a description of the actual process: From 0ddce1d6c2c56189b75d7fd6f9d5cfe6811598af Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Wed, 1 Jun 2022 10:16:24 +0100 Subject: [PATCH 197/298] Update The Merge --- src/content/contributing/style-guide/index.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/content/contributing/style-guide/index.md b/src/content/contributing/style-guide/index.md index 61d73d35acd..308ddb8af4e 100644 --- a/src/content/contributing/style-guide/index.md +++ b/src/content/contributing/style-guide/index.md @@ -147,6 +147,19 @@ Proof-of-work should be capitalized at the beginning of a sentence. In any other The same rules we apply to proof-of-work are applicable to proof-of-stake, proof-of-authority, proof-of-humanity, proof-of-individuality, etc. +### The Merge {#the-merge} + +When referring to The Merge, treat it as a proper noun. Always capitalize the first letter in each word. + +**Correct usage:** + +- The Merge + +**Incorrect usage:** + +- The merge +- the Merge + ### Use active voice {#use-active-voice} Sentences using active voice are more concise and efficient, making your writing more engaging and easier to comprehend. From 2e8a3c90e10f44088b923bac820a22436018a93a Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Wed, 1 Jun 2022 11:17:56 +0200 Subject: [PATCH 198/298] Move protocol research & client development to the top --- .../get-involved/open-research/index.md | 175 +++++++----------- 1 file changed, 71 insertions(+), 104 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 33ebe32ef34..23026ea4110 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -11,13 +11,77 @@ One of the primary strengths of Ethereum is that it is constantly being improved ## How Ethereum research works -Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on fora such as [ethresear.ch](https://ethresear.ch/) rather than reaching the community after rounds of peer review. +Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on forums such as [ethresear.ch](https://ethresear.ch/) rather than reaching the community in traditional publications after rounds of peer review. ## General research resources -Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. +Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. -This May 2022 report from [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) also covers a lot of ground. +This May 2022 report from [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) also covers a lot of ground. + +## Protocol research + +Protocol research is concerned with Ethereum's base layer - the set of rules defining how nodes connect, communicate, exchange and store Ethereum data and come to consensus about the state of the blockchain. The protocol can be divided into two top-level categories: consensus and execution. + +### Consensus + +Consensus research is concerned with Ethereum's proof-of-stake mechanism, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations and developing light clients. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. + +#### Background reading + +[Casper-FFG paper](https://arxiv.org/abs/1710.09437) + +[Casper-FFG Explainer](https://arxiv.org/abs/1710.09437) + +[Gasper paper](https://arxiv.org/abs/2003.03052) + +#### Recent research + +[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) + +[Availability/Finality dilemma](https://arxiv.org/abs/2009.04987) + +[Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) + +[Proposer-builder separation](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) + +### Execution + +The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). + +#### Background reading + +[Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) + +[Ethereum Virtual Machine](/developers/docs/evm/#top) + +#### Recent research + +[Database optimizations](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) + +[State expiry](https://notes.ethereum.org/@vbuterin/state_expiry_eip) + +[History management](https://eips.ethereum.org/EIPS/eip-4444) + +[Verkle Trees](https://vitalik.ca/general/2021/06/18/verkle.html) + +[Data availability sampling](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) + +## Client Development + +Client development makes the outcomes from protocol research into reality by building them into Ethereum clients. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software - a consensus client to keep track of the head of the blockchain, gossip blocks anmd handle consensus logic and an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. + +### Execution Clients + +[Execution client specification](https://github.com/ethereum/execution-specs) + +[Execution API spec](https://github.com/ethereum/execution-apis) + +### Consensus Clients + +[Consensus client specification](https://github.com/ethereum/consensus-specs) + +[Beacon API specification](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) ## Scaling and performance @@ -45,7 +109,6 @@ There are now several Layer 2 protocols that scale Ethereum using different tech [L2Beat](https://l2beat.com/) - ### Bridges One particular area of layer 2 that requires more research and development is safe and performant bridges. This includes bridges between various Layer 2s and bridges between Layer 1 and Layer 2. This is a particularly important area of research because bridges are commonly targeted by hackers. @@ -58,17 +121,15 @@ One particular area of layer 2 that requires more research and development is sa [Blockchain Bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) -[Valkue locked in bridges](https://dune.com/eliasimos/Bridge-Away-(from-Ethereum)) - +[Valkue locked in bridges]() #### Recent research [Validating bridges](https://stonecoldpat.github.io/images/validatingbridges.pdf) - ### Sharding -Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. +Sharding Ethereum's blockchain has long been part of the development roadmap. However, new scaling solutions such as "Danksharding" are currently taking center stage. #### Background reading @@ -88,7 +149,6 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho [Vitalik on sharding and data availability sampling](https://hackmd.io/@vbuterin/sharding_proposal) - ### Hardware [Running nodes](/developers/docs/nodes-and-clients/run-a-node/) on modest hardware is fundamental to keeping Ethereum decentralized. Therefore, active research into minimizing the hardware requirements to run nodes is an important area of research. @@ -97,7 +157,6 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) - #### Recent research [ecdsa on FGPAs](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) @@ -118,14 +177,12 @@ Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy a [Zero Knowledge podcast](https://zeroknowledge.fm/) - #### Recent research [Recent advance in elliptic curve cryptography](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) [Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) - ### Wallets User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with development of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. @@ -140,7 +197,6 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [EIP-4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) - #### Recent research [Validation focused smart contract wallets](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) @@ -151,7 +207,6 @@ User-wallets can be browser extensions, desktop and mobile apps or smart contrac [Publishing code code at EOA addresses](https://github.com/ethereum/EIPs/pull/5003) - ## Community, education and outreach Onboarding new users onto Ethereum requires new educational resources and approaches to outreach. This might include blog posts and articles, books, podcasts, memes, teaching resources events and anything else that builds communities, welcomes new starters and educates people about Ethereum. @@ -164,7 +219,6 @@ For Ethereum to onboard more people the UX/UI must be improved. This requires de [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) - #### Recent research [Web3 Design Discord](https://discord.gg/FsCFPMTSm9) @@ -173,7 +227,6 @@ For Ethereum to onboard more people the UX/UI must be improved. This requires de [Ethereum Magicians UX discussion](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) - ## Economics There are complex crypto-economic factors relating to Ethereum's native asset (ether) and the tokens built on top of it (for example NFTs and ERC20 tokens). @@ -184,7 +237,6 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e [Robust Incentives Group](https://ethereum.github.io/rig/) - #### Recent research [Empirical analysis of EIP1559]([https://arxiv.org/abs/2110.04753) @@ -199,7 +251,7 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e ### PoS incentives -When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this determines the security of the network. Sophisticated validators may be able to exploit the nuances of the incentive layer to theior own advantage by extracting MEV or launching explicit attacks. +When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this determines the security of the network. Sophisticated validators may be able to exploit the nuances of the incentive layer to theior own advantage by extracting MEV or launching explicit attacks. #### Background reading @@ -213,7 +265,6 @@ When Ethereum transitions to proof of stake, its native asset (ether) will be us [Low-cost attacks on Ethereum 2.0 by sub 1/3 stakeholders](https://arxiv.org/abs/2102.02247) - ### Liquid staking and derivatives Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks). @@ -222,17 +273,15 @@ Liquid staking allows users with less than 32 ETH to receive staking yields by s [Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) - #### Recent research [Handling withdrawals from Lido](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-staking-protocol/8873) [Withdrawal credentials](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) - ### Fee markets -Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user user-experience is an ongoing challenge that requires further research and development. +Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user user-experience is an ongoing challenge that requires further research and development. #### Background reading @@ -248,75 +297,6 @@ Ethereum transaction fees protect the network from spam, denial-of-service attac [Cross domain MEV](http://arxiv.org/abs/2112.01472) - -## Protocol research - -Protocol research is concerned with Ethereum's base layer - the set of rules defining how nodes connect, communicate, exchange and store Ethereum data and come to consensus about the state of the blockchain. The protocol can be divided into two top-level categories: consensus and execution. - -### Consensus - -Consensus research is concerned with Ethereum's proof-of-stake mechanism, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations and developing light clients. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. - -#### Background reading - -[Casper-FFG paper](https://arxiv.org/abs/1710.09437) - -[Casper-FFG Explainer](https://arxiv.org/abs/1710.09437) - -[Gasper paper](https://arxiv.org/abs/2003.03052) - - -#### Recent research - -[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) - -[Availability/Finality dilemma](https://arxiv.org/abs/2009.04987) - -[Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) - -[Proposer-builder separation](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) - - -### Execution - -The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). - -#### Background reading - -[Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) - -[Ethereum Virtual Machine](/developers/docs/evm/#top) - -#### Recent research - -[Database optimizations](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) - -[State expiry](https://notes.ethereum.org/@vbuterin/state_expiry_eip) - -[History management](https://eips.ethereum.org/EIPS/eip-4444) - -[Verkle Trees](https://vitalik.ca/general/2021/06/18/verkle.html) - -[Data availability sampling](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) - - -## Client Development - -Client development makes the outcomes from protocol research into reality by building them into Ethereum clients. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software - a consensus client to keep track of the head of the blockchain, gossip blocks anmd handle consensus logic and an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. - -#### Execution Clients - -[Execution client specification](https://github.com/ethereum/execution-specs) - -[Execution API spec](https://github.com/ethereum/execution-apis) - -### Consensus Clients - -[Consensus client specification](https://github.com/ethereum/consensus-specs) - -[Beacon API specification](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) - - ## Testing ### Formal verification @@ -329,15 +309,12 @@ Formal verification is writing code to verify that Ethereum's consensus specific [Formal Verification (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) - #### Recent research [Formal verification of the deposit contract](https://github.com/runtimeverification/deposit-contract-verification) [Formal verification of the Beacon Chain specification](https://github.com/runtimeverification/deposit-contract-verification) - - ## Data science and analytics There is a need for more data analysis tools and dashboards that give detailed information about activity on Ethereum and the health of the network. @@ -352,7 +329,6 @@ There is a need for more data analysis tools and dashboards that give detailed i [Robust Incentives Group Data Analysis](https://ethereum.github.io/rig/) - ## Apps and tooling The application layer supports a very diverse ecosystem of programs that settle transactions on Ethereum's base layer. App teams are constantly finding new ways to leverage Ethereum to create lower-friction, composable, permissionless and censorship resistant versions of important Web2 apps or creating completely new web3-native concepts. At the same time, new tooling is being developed that makes building increasingly complex Ethereum apps easier. @@ -367,14 +343,12 @@ Decentralized finance (DeFi) is one of the primary classes of application built [Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) - #### Recent research [Decentralized finance, centralized ownership?](https://arxiv.org/pdf/2012.09306.pdf) [Optimism: The road to sub-dollar transactions](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) - ### DAOs DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. @@ -383,12 +357,10 @@ DAOs are one of the key classes of application being built on top of Ethereum. T [Dao Collective](https://daocollective.xyz/) - #### Recent research [Mapping the DAO ecosystem](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) - ### Developer tools Tools for Ethereum developers are rapidly improving. There is lots of active research and development to do in this general area. @@ -407,12 +379,10 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res [CryptoDevHub: EVM Tools](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) - #### Recent research [Eth R&D Discord Consensus Tooling channel](https://discordapp.com/channels/595666850260713488/746343380900118528) - ### Oracles Oracles are used to import off-chain data on-chain in a permissionless and decentralized way. This enables dapps to be reactive to real world phenomena such as price fluctuations in real-world assets, events in off-chain apps or even changes in the weather. @@ -427,7 +397,6 @@ Oracles are used to import off-chain data on-chain in a permissionless and decen [Chainlink white paper](https://chain.link/whitepaper) - ### App security Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. @@ -440,12 +409,10 @@ Hacks on Ethereum nearly always exploit vulnerabilities in individual applicatio [Rekt News](https://twitter.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) - #### Recent research [ethresear.ch Applications](https://ethresear.ch/c/applications/18) - ### Technology stack Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. From 8e863b0900c8d72eb0fd2a6075402196a99bb158 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 09:19:44 +0000 Subject: [PATCH 199/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0572e8cfa36..4c4aad1837b 100644 --- a/README.md +++ b/README.md @@ -1238,6 +1238,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
          wii u

          🤔
          MonsieurDMA

          📖 +
          fennar01

          🤔 From 18c089a859509f7ccbf4e77fe552587cc19282ac Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 09:19:45 +0000 Subject: [PATCH 200/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 7e268a7e1dc..6e437828fe8 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7642,6 +7642,15 @@ "contributions": [ "doc" ] + }, + { + "login": "fennar01", + "name": "fennar01", + "avatar_url": "https://avatars.githubusercontent.com/u/42185291?v=4", + "profile": "https://github.com/fennar01", + "contributions": [ + "ideas" + ] } ], "contributorsPerLine": 7, From bae19dabef28eb76c1a0aa4b43900fe42b657c66 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Wed, 1 Jun 2022 11:49:17 +0200 Subject: [PATCH 201/298] Add links to dev docs --- .../community/get-involved/open-research/index.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/get-involved/open-research/index.md index 23026ea4110..a351836205e 100644 --- a/src/content/community/get-involved/open-research/index.md +++ b/src/content/community/get-involved/open-research/index.md @@ -25,10 +25,12 @@ Protocol research is concerned with Ethereum's base layer - the set of rules def ### Consensus -Consensus research is concerned with Ethereum's proof-of-stake mechanism, for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations and developing light clients. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. +Consensus research is concerned with [Ethereum's proof-of-stake mechanism](/developers/docs/consensus-mechanisms/pos/), for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations and developing light clients. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. #### Background reading +[Introduction to proof-of-stake](/developers/docs/consensus-mechanisms/pos/) + [Casper-FFG paper](https://arxiv.org/abs/1710.09437) [Casper-FFG Explainer](https://arxiv.org/abs/1710.09437) @@ -47,13 +49,13 @@ Consensus research is concerned with Ethereum's proof-of-stake mechanism, for ex ### Execution -The execution layer is concerned with executing transactions, running the EVM and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for the merge. This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). +The execution layer is concerned with executing transactions, running the [Ethereum virtual machine (EVM)](/developers/docs/evm/) and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for [the Merge](/upgrades/merge/). This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). #### Background reading -[Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) +[Introduction to the EVM](/developers/docs/evm) -[Ethereum Virtual Machine](/developers/docs/evm/#top) +[Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) #### Recent research @@ -69,7 +71,7 @@ The execution layer is concerned with executing transactions, running the EVM an ## Client Development -Client development makes the outcomes from protocol research into reality by building them into Ethereum clients. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software - a consensus client to keep track of the head of the blockchain, gossip blocks anmd handle consensus logic and an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. +Client development makes the outcomes from protocol research into reality by building them into Ethereum clients - implementations of the Ethereum protocol. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software: 1) a consensus client to keep track of the head of the blockchain, gossip blocks and handle consensus logic and 2) an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. ### Execution Clients From 7f253ec90d1f803fa6962aae539a9e2a9c63547c Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Wed, 1 Jun 2022 11:50:13 +0200 Subject: [PATCH 202/298] Move research page to /community/research/ --- src/content/community/get-involved/index.md | 2 +- .../community/{get-involved/open-research => research}/index.md | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/content/community/{get-involved/open-research => research}/index.md (100%) diff --git a/src/content/community/get-involved/index.md b/src/content/community/get-involved/index.md index afb8bdedc7d..5a69afd0154 100644 --- a/src/content/community/get-involved/index.md +++ b/src/content/community/get-involved/index.md @@ -27,7 +27,7 @@ Do you have a background in mathematics, cryptography, or economics? You might b - [Ethresear.ch](https://ethresear.ch) - Ethereum’s primary forum for research, and the world’s most influential forum for cryptoeconomics - [Ecosystem Support Program's wishlist](https://esp.ethereum.foundation/wishlist/) - research areas where the Ethereum Ecosystem Support Program is actively seeking grant applications -[Explore more active areas of research](/community/get-involved/open-research/). +[Explore more active areas of research](/community/research/). ## Non-technical skillsets ‍ {#non-technical} diff --git a/src/content/community/get-involved/open-research/index.md b/src/content/community/research/index.md similarity index 100% rename from src/content/community/get-involved/open-research/index.md rename to src/content/community/research/index.md From 48af24e65b1e95d5ef7a318eae7dbb8f63d9b0f8 Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Wed, 1 Jun 2022 11:53:38 +0200 Subject: [PATCH 203/298] Add research page to site nav --- src/components/Nav/index.js | 5 ++++- src/intl/en/common.json | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/Nav/index.js b/src/components/Nav/index.js index b8a33fa0689..6c8dd674677 100644 --- a/src/components/Nav/index.js +++ b/src/components/Nav/index.js @@ -316,11 +316,14 @@ const Nav = ({ handleThemeChange, isDarkTheme, path }) => { text: "ethereum-events", to: "/community/events/", }, - { text: "get-involved", to: "/community/get-involved/", }, + { + text: "open-research", + to: "/community/research/", + }, { text: "grants", to: "/community/grants/", diff --git a/src/intl/en/common.json b/src/intl/en/common.json index 221ba2d2b92..cba28a054c1 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -186,6 +186,7 @@ "oasis-logo": "Oasis logo", "online": "Online", "on-this-page": "On this page", + "open-research": "Open research", "page-content": "Page content", "page-enterprise": "Enterprise", "page-last-updated": "Page last updated", From 15ed0a82cd46b5198b21b848a57f94aa0fb93f1c Mon Sep 17 00:00:00 2001 From: Sam Richards Date: Wed, 1 Jun 2022 12:08:17 +0200 Subject: [PATCH 204/298] Add minor touchups - a few internal links --- src/content/community/research/index.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index a351836205e..84a24e9776f 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -5,13 +5,13 @@ sidebar: true lang: en --- -# Open areas of Ethereum research +# Active areas of Ethereum research -One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline some of the key areas of active research as a rough guide to Ethereum's cutting edge. +One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline key areas of active research as a rough guide to Ethereum's cutting edge. ## How Ethereum research works -Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on forums such as [ethresear.ch](https://ethresear.ch/) rather than reaching the community in traditional publications after rounds of peer review. +Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on forums such as [ethresear.ch](https://ethresear.ch/) rather than reaching the community through traditional publications after rounds of peer review. ## General research resources @@ -71,7 +71,9 @@ The execution layer is concerned with executing transactions, running the [Ether ## Client Development -Client development makes the outcomes from protocol research into reality by building them into Ethereum clients - implementations of the Ethereum protocol. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software: 1) a consensus client to keep track of the head of the blockchain, gossip blocks and handle consensus logic and 2) an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. +Client development makes the outcomes from protocol research into reality by building them into Ethereum clients - implementations of the Ethereum protocol. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software: 1) a consensus client to keep track of the head of the blockchain, gossip blocks and handle consensus logic and 2) an execution client to support the Ethereum Virtual Machine and execute transactions. + +The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. You can also find a history of all Ethereum upgrades on our [history page](/history/). ### Execution Clients @@ -187,11 +189,13 @@ Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy a ### Wallets -User-wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with development of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. +Ethereum wallets can be browser extensions, desktop and mobile apps or smart contracts on Ethereum. There is active research into social recovery wallets that reduce some of the risk associated with individual-user key management. Associated with development of wallets is research into alternative forms of account abstraction, which is an important area of nascent research. #### Background reading -[Introduction to wallet security]/security/) +[Introduction to wallets](/wallets/) + +[Introduction to wallet security](/security/) [ethresear.ch Security](https://ethresear.ch/tag/security) @@ -427,7 +431,7 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra [Introduction to smart contracts](/developers/docs/smart-contracts/) -[Introduction to storage](/developers/docs/storage/) +[Introduction to decentralized storage](/developers/docs/storage/) #### Recent research @@ -435,4 +439,4 @@ Apps on Ethereum are rarely fully decentralized because they rely on some centra ## Sources of Funding -You can get involved with Ethereum research and get paid for it! For example, the Ethereum Foundation recently ran an [Academic Grants](/community/grants/academic-grants-round/) funding round. Information on active and upcoming funding opportunities can be found on the [grants page](community/grants/). +You can get involved with Ethereum research and get paid for it! For example, the [Ethereum Foundation](/foundation/) recently ran an [Academic Grants](/community/grants/academic-grants-round/) funding round. Information on active and upcoming funding opportunities can be found on the [Ethereum grants page](/community/grants/). From d466ed71e2ee1640206d430d738357b2c42475ef Mon Sep 17 00:00:00 2001 From: fennar01 <42185291+fennar01@users.noreply.github.com> Date: Thu, 2 Jun 2022 00:20:12 +1200 Subject: [PATCH 205/298] Typo typo fix --- .../developers/docs/consensus-mechanisms/pos/gasper/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/consensus-mechanisms/pos/gasper/index.md b/src/content/developers/docs/consensus-mechanisms/pos/gasper/index.md index 6b200d629ce..1dfc1f26cd2 100644 --- a/src/content/developers/docs/consensus-mechanisms/pos/gasper/index.md +++ b/src/content/developers/docs/consensus-mechanisms/pos/gasper/index.md @@ -5,7 +5,7 @@ lang: en sidebar: true --- -Gasper is a combination of Casper the Friendly Finality Gadget (Casper-FGG) and the LMD-GHOST fork choice algorithm. Together these components form the consensus mechanism securing proof-of-stake Ethereum. Casper is the mechanism that upgrades certain blocks to "finalized" so that new entrants into the network can be confident that they are syncing the canonical chain. The fork choice algorithm uses accumulated votes to ensure that nodes can easily select the correct one when forks arise in the blockchain. +Gasper is a combination of Casper the Friendly Finality Gadget (Casper-FFG) and the LMD-GHOST fork choice algorithm. Together these components form the consensus mechanism securing proof-of-stake Ethereum. Casper is the mechanism that upgrades certain blocks to "finalized" so that new entrants into the network can be confident that they are syncing the canonical chain. The fork choice algorithm uses accumulated votes to ensure that nodes can easily select the correct one when forks arise in the blockchain. **Note** that the original definition of Casper-FFG was updated slightly for inclusion in Gasper. On this page we consider the updated version. From 19b42a1fb6fc997d07e7ac245abf041022cdf9f5 Mon Sep 17 00:00:00 2001 From: Pascal Marco Caversaccio Date: Wed, 1 Jun 2022 15:05:44 +0200 Subject: [PATCH 206/298] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20chore:=20add=20fur?= =?UTF-8?q?ther=20Sepolia=20links?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/developers/docs/networks/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/content/developers/docs/networks/index.md b/src/content/developers/docs/networks/index.md index b52cec5fe9d..3264b1a48ad 100644 --- a/src/content/developers/docs/networks/index.md +++ b/src/content/developers/docs/networks/index.md @@ -41,10 +41,12 @@ A proof-of-work testnet; this means it's the best like-for-like representation o - [Website](https://sepolia.dev/) - [Github](https://github.com/goerli/sepolia) - [Otterscan](https://sepolia.otterscan.io/) +- [Etherscan](https://sepolia.etherscan.io) ##### Sepolia faucets - [Sepolia faucet](https://faucet.sepolia.dev/) +- [FaucETH](https://fauceth.komputing.org) #### Görli {#goerli} From fc5a2643e45ccdc0e8061d53f9cbe781f3a45fa8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 13:19:14 +0000 Subject: [PATCH 207/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4c4aad1837b..6edb493a95d 100644 --- a/README.md +++ b/README.md @@ -1239,6 +1239,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
          wii u

          🤔
          MonsieurDMA

          📖
          fennar01

          🤔 +
          William

          💻 From b88fd2287c59d9e00ec94e5249403d64f7337e36 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 13:19:15 +0000 Subject: [PATCH 208/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 6e437828fe8..ad65c263e25 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7651,6 +7651,15 @@ "contributions": [ "ideas" ] + }, + { + "login": "WilliamWelsh", + "name": "William", + "avatar_url": "https://avatars.githubusercontent.com/u/16886888?v=4", + "profile": "https://williamalanwelsh.com", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From c17848dbfd62c42a3d2bbb1285b697ef1ba1847d Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Wed, 1 Jun 2022 10:25:06 -0300 Subject: [PATCH 209/298] make start and title optional --- src/components/YouTube.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/YouTube.tsx b/src/components/YouTube.tsx index 307073e72e7..9a45cc14f3c 100644 --- a/src/components/YouTube.tsx +++ b/src/components/YouTube.tsx @@ -19,10 +19,10 @@ const Figure = styled.figure` export interface IProps { id: string start?: string - title: string + title?: string } -const YouTube: React.FC = ({ id, start, title }) => { +const YouTube: React.FC = ({ id, start = "0", title = "YouTube" }) => { const startQuery = parseInt(start) > 0 ? `?start=${start}` : "" const baseUrl = "https://www.youtube.com/embed/" const src = baseUrl + id + startQuery @@ -33,7 +33,7 @@ const YouTube: React.FC = ({ id, start, title }) => { height="315" src={src} frameBorder="0" - title={title || "YouTube"} + title={title} allow=" accelerometer; autoplay; From fa70190c1a14664a24d23aba99f936abc53c3084 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 14:33:52 +0000 Subject: [PATCH 210/298] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6edb493a95d..f44c0c192dc 100644 --- a/README.md +++ b/README.md @@ -1240,6 +1240,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
          MonsieurDMA

          📖
          fennar01

          🤔
          William

          💻 +
          motemotech

          💻 From 6f63de32d406483ba61f5144e65aa318dbde0ae6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 14:33:53 +0000 Subject: [PATCH 211/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index ad65c263e25..1df992a535d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7660,6 +7660,15 @@ "contributions": [ "code" ] + }, + { + "login": "motemotech", + "name": "motemotech", + "avatar_url": "https://avatars.githubusercontent.com/u/59491191?v=4", + "profile": "https://github.com/motemotech", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From 86952a84fc8f33f8d2327ec00b8f2786c6e82118 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 17:53:05 +0000 Subject: [PATCH 212/298] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f44c0c192dc..a7299e51137 100644 --- a/README.md +++ b/README.md @@ -999,7 +999,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
          0xdie

          📖
          Taimoor Ali

          📖 🐛
          Andrej

          📖 🖋 -
          Pascal Marco Caversaccio

          📖 +
          Pascal Marco Caversaccio

          📖 🖋
          kennethcassel

          📖 From 13744e2a959750a2b3c146c5babefe36e0d16d19 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 17:53:06 +0000 Subject: [PATCH 213/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 1df992a535d..c8ce2dcd849 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -5931,7 +5931,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/25297591?v=4", "profile": "http://www.daita.tech", "contributions": [ - "doc" + "doc", + "content" ] }, { From 252fc7f4fe12cccd603932b7e45e0c27e7881e19 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 17:57:45 +0000 Subject: [PATCH 214/298] docs: update README.md [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7299e51137..b2b15fdd06f 100644 --- a/README.md +++ b/README.md @@ -1238,7 +1238,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
          wii u

          🤔
          MonsieurDMA

          📖 -
          fennar01

          🤔 +
          fennar01

          🤔 📖
          William

          💻
          motemotech

          💻 From e15d2050675f7a0133e18100f137ae1b61550ee4 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 17:57:45 +0000 Subject: [PATCH 215/298] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c8ce2dcd849..dee5ac38257 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -7650,7 +7650,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/42185291?v=4", "profile": "https://github.com/fennar01", "contributions": [ - "ideas" + "ideas", + "doc" ] }, { From 1c950a3e673b0dfa8d0b32220955868739bdadd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 23:53:20 +0000 Subject: [PATCH 216/298] Bump sharp from 0.30.3 to 0.30.6 Bumps [sharp](https://github.com/lovell/sharp) from 0.30.3 to 0.30.6. - [Release notes](https://github.com/lovell/sharp/releases) - [Changelog](https://github.com/lovell/sharp/blob/main/docs/changelog.md) - [Commits](https://github.com/lovell/sharp/compare/v0.30.3...v0.30.6) --- updated-dependencies: - dependency-name: sharp dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 108 ++++++++++++++---------------------------------------- 1 file changed, 28 insertions(+), 80 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5395915ba78..616aa4ec1dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4494,7 +4494,7 @@ ansi-html@0.0.7, ansi-html@^0.0.7: ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^4.1.0: version "4.1.0" @@ -5878,7 +5878,7 @@ coa@^2.0.2: code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: version "1.0.6" @@ -5918,21 +5918,13 @@ color-name@^1.0.0, color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" - integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.1.tgz#498aee5fce7fc982606c8875cab080ac0547c884" - integrity sha512-MFJr0uY4RvTQUKvPq7dh9grVOTYSFeXja2mBXioCGjnjJoXrAp9jJ1NQTDR73c9nwBSAQiNKloKl5zq9WB9UPw== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - color@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" @@ -6063,7 +6055,7 @@ console-browserify@^1.1.0: console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== constant-case@^2.0.0: version "2.0.0" @@ -6782,7 +6774,7 @@ delegate@^3.1.2: delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== depd@2.0.0: version "2.0.0" @@ -9192,7 +9184,7 @@ gatsby@^4.15.0: gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -9278,7 +9270,7 @@ git-up@^4.0.5: github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== github-slugger@^1.2.1, github-slugger@^1.3.0: version "1.4.0" @@ -9595,7 +9587,7 @@ has-tostringtag@^1.0.0: has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" @@ -10407,7 +10399,7 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" @@ -10709,7 +10701,7 @@ isarray@0.0.1: isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" @@ -12088,9 +12080,9 @@ no-case@^3.0.4: tslib "^2.0.3" node-abi@^3.3.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.8.0.tgz#679957dc8e7aa47b0a02589dbfde4f77b29ccb32" - integrity sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw== + version "3.22.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.22.0.tgz#00b8250e86a0816576258227edbce7bbe0039362" + integrity sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w== dependencies: semver "^7.3.5" @@ -12288,7 +12280,7 @@ nullthrows@^1.1.1: number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -13311,25 +13303,6 @@ potrace@^2.1.8: dependencies: jimp "^0.14.0" -prebuild-install@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.0.1.tgz#c10075727c318efe72412f333e0ef625beaf3870" - integrity sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - prebuild-install@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.0.tgz#991b6ac16c81591ba40a6d5de93fb33673ac1370" @@ -14634,14 +14607,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.2, semver@^7.3.7: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -14775,24 +14741,10 @@ shallowequal@^1.1.0: resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== -sharp@^0.30.1: - version "0.30.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.3.tgz#315a1817423a4d1cde5119a21c99c234a7a6fb37" - integrity sha512-rjpfJFK58ZOFSG8sxYSo3/JQb4ej095HjXp9X7gVu7gEn1aqSG8TCW29h/Rr31+PXrFADo1H/vKfw0uhMQWFtg== - dependencies: - color "^4.2.1" - detect-libc "^2.0.1" - node-addon-api "^4.3.0" - prebuild-install "^7.0.1" - semver "^7.3.5" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -sharp@^0.30.3: - version "0.30.5" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.5.tgz#81c36fd05624978384ac6bd2744d23f9c82edefd" - integrity sha512-0T28KxqY4DzUMLSAp1/IhGVeHpPIQyp1xt7esmuXCAfyi/+6tYMUeRhQok+E/+E52Yk5yFjacXp90cQOkmkl4w== +sharp@^0.30.1, sharp@^0.30.3: + version "0.30.6" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.6.tgz#02264e9826b5f1577509f70bb627716099778873" + integrity sha512-lSdVxFxcndzcXggDrak6ozdGJgmIgES9YVZWtAFrwi+a/H5vModaf51TghBtMPw+71sLxUsTy2j+aB7qLIODQg== dependencies: color "^4.2.3" detect-libc "^2.0.1" @@ -14841,7 +14793,12 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.5, signal-exit@^3.0.6: +signal-exit@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.5, signal-exit@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== @@ -14856,16 +14813,7 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== -simple-get@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675" - integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-get@^4.0.1: +simple-get@^4.0.0, simple-get@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== From 3e92f17a3f23e1f39219f6baf5540b87662c7002 Mon Sep 17 00:00:00 2001 From: Emmanuel Awosika Date: Thu, 2 Jun 2022 10:32:06 +0100 Subject: [PATCH 217/298] Apply suggestions from code review Co-authored-by: Corwin Smith --- .../developers/docs/scaling/sidechains/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/content/developers/docs/scaling/sidechains/index.md b/src/content/developers/docs/scaling/sidechains/index.md index a3b5a8fb7a0..bd4cb6be047 100644 --- a/src/content/developers/docs/scaling/sidechains/index.md +++ b/src/content/developers/docs/scaling/sidechains/index.md @@ -7,7 +7,7 @@ incomplete: true sidebarDepth: 3 --- -A sidechain is a separate blockchain which runs in parallel to Ethereum and is connected to Mainnet by a two-way bridge. Sidechains have separate block parameters and [consensus algorithms](/developers/docs/consensus-mechanisms/), which are often designed for efficient processing of transactions. Using a sidechain involves trade-offs, though, as they do not inherit Ethereum's security properties, unlike [layer 2 scaling solutions](/layer-2/). +A sidechain is a separate blockchain that runs independent of Ethereum and is connected to Ethereum Mainnet by a two-way bridge. Sidechains can have separate block parameters and [consensus algorithms](/developers/docs/consensus-mechanisms/), which are often designed for efficient processing of transactions. Using a sidechain involves trade-offs, though, as they do not inherit Ethereum's security properties. Unlike [layer 2 scaling solutions](/layer-2/), sidechains do not post state changes and transaction data back to Ethereum Mainnet. Sidechains also sacrifice some measure of decentralization or security to achieve high throughput ([scalability trilemma](https://vitalik.ca/general/2021/05/23/scaling.html)). Ethereum is, however, committed to scaling without compromising on decentralization and security as outlined in its [vision statement](/upgrades/vision/) for upgrades. @@ -17,7 +17,7 @@ Sidechains are independent blockchains, with different histories, development ro ### Consensus algorithms {#consensus-algorithms} -One of the qualities that make sidechains unique (i.e., different from Ethereum) is the consensus algorithm used. Ssidechains don't rely on Ethereum for consensus and can choose alternative consensus protocols that suit their needs. Some examples of consensus algorithms used on sidechains include: +One of the qualities that make sidechains unique (i.e., different from Ethereum) is the consensus algorithm used. Sidechains don't rely on Ethereum for consensus and can choose alternative consensus protocols that suit their needs. Some examples of consensus algorithms used on sidechains include: - [Proof-of-authority](https://wikipedia.org/wiki/Proof_of_authority) - [Delegated proof-of-stake](https://en.bitcoinwiki.org/wiki/DPoS) @@ -27,7 +27,7 @@ Like Ethereum, sidechains have validating nodes that verify and process transact #### Block parameters -Ethereum places limits on [block times](/developers/docs/blocks/#block-time) (i.e., the time it takes to produce new blocks) and [block sizes](/developers/docs/blocks/#block-size) (i.e., the number of transactions in each block). Conversely, sidechains often adopt different parameters, such as faster block times and higher gas limits, to achieve high throughput, fast transactions, and low fees. +Ethereum places limits on [block times](/developers/docs/blocks/#block-time) (i.e., the time it takes to produce new blocks) and [block sizes](/developers/docs/blocks/#block-size) (i.e., the amount of data contained per block denominated in gas). Conversely, sidechains often adopt different parameters, such as faster block times and higher gas limits, to achieve high throughput, fast transactions, and low fees. While this has some benefits, it has critical implications for network decentralization and security. Block parameters, like fast block times and big block sizes, increase the difficulty of running a full node—leaving a few "supernodes" responsible for securing the chain. In such a scenario, the possibility of validator collusion or a malicious takeover of the chain increases. @@ -35,17 +35,17 @@ For blockchains to scale without harming decentralization, running a node must b ### EVM compatibility {#evm-compatibility} -What makes sidechains useful is their ability to execute contracts developed for the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/). Most EVM-compatible sidechains support smart contracts [written in Solidity](/developers/docs/smart-contracts/languages/), allowing for compatibility with Ethereum Mainnet. +Some sidechains are EVM-compatible and are able to execute contracts developed for the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/). EVM-compatible sidechains support smart contracts [written in Solidity](/developers/docs/smart-contracts/languages/), as well as other EVM smart contract languages, which means smart contracts written for Ethereum Mainnet will also work on EVM-compatible sidechains. -This means if you want to use your [dapp](/developers/docs/dapps/) on a sidechain, it's just a matter of deploying your [smart contract](/developers/docs/smart-contracts/) to this sidechain. It looks, feels, and acts just like Mainnet – you write contracts in Solidity, and interact with the chain via the Web3 API. +This means if you want to use your [dapp](/developers/docs/dapps/) on a sidechain, it's just a matter of deploying your [smart contract](/developers/docs/smart-contracts/) to this sidechain. It looks, feels, and acts just like Mainnet – you write contracts in Solidity, and interact with the chain via the sidechains RPC. -Because sidechains are EVM-compatible, they are considered a useful scaling [scaling solution](/developers/docs/scaling/) for Ethereum-native dapps. With your dapp on a sidechain, users can enjoy lower gas fees and faster transactions, especially if Mainnet is congested. +Because sidechains are EVM-compatible, they are considered a useful [scaling solution](/developers/docs/scaling/) for Ethereum-native dapps. With your dapp on a sidechain, users can enjoy lower gas fees and faster transactions, especially if Mainnet is congested. However, as explained previously, using a sidechain involves significant trade-offs. Each sidechain is responsible for its security and doesn't inherit Ethereum's security properties. This increases the possibility of malicious behavior which can affect your users or put their funds at risk. ### Asset movement {#asset-movement} -A crucial feature of sidechains is their ability to facilitate seamless transfer of value from and to Ethereum Mainnet. This interoperability with Ethereum is achieved using a blockchain bridge, which enforces a “two-way peg” between two chains. [Bridges](/bridges/) use a network of smart contracts deployed on both networks to control transfer of funds between Ethereum and sidechains. +In order for a separate blockchain to become a sidechain to Ethereum Mainnet it needs the ability to facilitate the transfer of assets from and to Ethereum Mainnet. This interoperability with Ethereum is achieved using a blockchain bridge. [Bridges](/bridges/) use smart contracts deployed on Ethereum Mainnet and a sidechain to control the bridging of funds between them. While bridges help users move funds between Ethereum and the sidechain, the assets are not physically moved across the two chains. Instead, a "lock-mint-burn" mechanism is used for transferring value across chains. Here is a description of the actual process: From cbecddedc2e8e8611639c650c6e5b01ebb43ebb2 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 09:56:03 -0600 Subject: [PATCH 218/298] Update src/content/developers/docs/bridges/index.md --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index db4a20a3add..1c826d636b2 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -85,7 +85,7 @@ For developers, there are many ways to add support for bridges: 1. **Building your own bridge –** Building a secure and reliable bridge is not easy, especially if you take a more trust-minimized route. Moreover, it requires years of experience and technical expertise related to scalability and interoperability studies. Additionally, it would require a hands-on team to maintain a bridge and attract sufficient liquidity to make it feasible. -2. **Showing users multiple bridge options –** Many [dapps](https://ethereum.org/en/developers/docs/dapps/) require users to have their native token to interact with them. To enable users to access their tokens, they offer different bridge options on their website. However, this method is a quick fix to the problem as it takes the user away from the dapp interface and still requires them to interact with other dapps and bridges. This is a cumbersome onboarding experience with the increased scope of making mistakes. +2. **Showing users multiple bridge options –** Many [dapps](/developers/docs/dapps/) require users to have their native token to interact with them. To enable users to access their tokens, they offer different bridge options on their website. However, this method is a quick fix to the problem as it takes the user away from the dapp interface and still requires them to interact with other dapps and bridges. This is a cumbersome onboarding experience with the increased scope of making mistakes. 3. **Integrating a bridge –** This solution doesn’t require the dapp to send users to the external bridge and DEX interfaces. It allows dapps to improve the user onboarding experience. However, this approach has its limitations: From 22b2e23b5b05371cf3a1f3fb12e1f453bdafb514 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 10:05:45 -0600 Subject: [PATCH 219/298] next bullet points --- src/content/developers/docs/bridges/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index db4a20a3add..89c7b983367 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -89,13 +89,13 @@ For developers, there are many ways to add support for bridges: 3. **Integrating a bridge –** This solution doesn’t require the dapp to send users to the external bridge and DEX interfaces. It allows dapps to improve the user onboarding experience. However, this approach has its limitations: -- Assessment and maintenance of bridges are hard and time-consuming. + - Assessment and maintenance of bridges are hard and time-consuming. -- Selecting one bridge creates a single point of failure and dependency. + - Selecting one bridge creates a single point of failure and dependency. -- The dapp is limited by the bridge’s capabilities. + - The dapp is limited by the bridge’s capabilities. -- Bridges alone might not be enough. dapps might need DEXs to offer more functionality such as cross-chain swaps. + - Bridges alone might not be enough. dapps might need DEXs to offer more functionality such as cross-chain swaps. 4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers – the scarcest resource in crypto. From 88fad3dca0d041047bcb343060ce40f6bc2a5450 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 10:12:45 -0600 Subject: [PATCH 220/298] adding examples --- src/content/developers/docs/bridges/index.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 93cf6a043d5..d870bf87bd3 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -109,10 +109,21 @@ If a dapp goes down the route of integrating a bridge or an aggregator, there ar To deploy a dapp on multiple chains, developers can use development platforms like Alchemy, Hardhat, Truffle, Moralis, etc. Typically, these platforms come with composable plugins that can enable dapps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the hardhat-deploy plugin. +#### Examples: + +- [How to build cross-chain dapps](https://moralis.io/how-to-build-cross-chain-dapps/) +- [Building a Cross-Chain NFT Marketplace](https://youtu.be/WZWCzsB1xUE) +- [Moralis: Building cross-chain NFT dapps](https://www.youtube.com/watch?v=ehv70kE1QYo) + ### Monitoring contract activity across chains {#monitoring-contract-activity-across-chains} To monitor contract activity across chains, developers can use subgraphs and developer platforms like Tenderly to observe smart contracts in real-time. Such platforms also have tools that offer greater data monitoring functionality for cross-chain activities, such as checking for events emitted by contracts, etc. +#### Tools + +- [The Graph](https://thegraph.com/en/) +- [Tenderly](https://tenderly.co/) + ## Further reading {#further-reading} - [Blockchain Bridges](/en/bridges/) – ethereum.org From 4388d0bf095be7b33983eaa311549d1cf5c66fc3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 10:24:13 -0600 Subject: [PATCH 221/298] add links to tools --- src/content/developers/docs/bridges/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index d870bf87bd3..31d0805bb0b 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -107,7 +107,7 @@ If a dapp goes down the route of integrating a bridge or an aggregator, there ar ### Deploying a dapp on multiple chains {#deploying-a-dapp-on-multiple-chains} -To deploy a dapp on multiple chains, developers can use development platforms like Alchemy, Hardhat, Truffle, Moralis, etc. Typically, these platforms come with composable plugins that can enable dapps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the hardhat-deploy plugin. +To deploy a dapp on multiple chains, developers can use development platforms like [Alchemy](https://www.alchemy.com/), [Hardhat](https://hardhat.org/), [Truffle](https://trufflesuite.com/), [Moralis](https://moralis.io/), etc. Typically, these platforms come with composable plugins that can enable dapps to go cross-chain. For instance, developers can use a deterministic deployment proxy offered by the [hardhat-deploy plugin](https://github.com/wighawag/hardhat-deploy). #### Examples: @@ -117,7 +117,7 @@ To deploy a dapp on multiple chains, developers can use development platforms li ### Monitoring contract activity across chains {#monitoring-contract-activity-across-chains} -To monitor contract activity across chains, developers can use subgraphs and developer platforms like Tenderly to observe smart contracts in real-time. Such platforms also have tools that offer greater data monitoring functionality for cross-chain activities, such as checking for events emitted by contracts, etc. +To monitor contract activity across chains, developers can use subgraphs and developer platforms like Tenderly to observe smart contracts in real-time. Such platforms also have tools that offer greater data monitoring functionality for cross-chain activities, such as checking for [events emitted by contracts](https://docs.soliditylang.org/en/v0.8.14/contracts.html?highlight=events#events), etc. #### Tools From d201022f0d71344e8902890ef942dc11f1f48132 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 11:27:00 -0600 Subject: [PATCH 222/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 84a24e9776f..74437cdf521 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -223,7 +223,7 @@ For Ethereum to onboard more people the UX/UI must be improved. This requires de #### Background reading -[Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) +- [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) #### Recent research From 5f4721fc6b560f7980f85dfb5b8281a040e5c8b7 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 11:27:13 -0600 Subject: [PATCH 223/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 74437cdf521..311a9b44806 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -7,7 +7,7 @@ lang: en # Active areas of Ethereum research -One of the primary strengths of Ethereum is that it is constantly being improved by an active research and engineering community. There are many enthusiastic, skilled people worldwide that would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page aims to outline key areas of active research as a rough guide to Ethereum's cutting edge. +One of the primary strengths of Ethereum is that an active research and engineering community are constantly improving it. Many enthusiastic, skilled people worldwide would like to apply themselves to outstanding issues in Ethereum, but it is not always easy to find out what those issues are. This page outlines key active research areas as a rough guide to Ethereum's cutting edge. ## How Ethereum research works From 246055afbab8ccafb928f79b738333187b76663b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 11:27:20 -0600 Subject: [PATCH 224/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 311a9b44806..2d36eb81f9d 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -11,7 +11,7 @@ One of the primary strengths of Ethereum is that an active research and engineer ## How Ethereum research works -Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example through executable notebooks. Ethereum research is generally rapid, with new findings posted and discussed in the open on forums such as [ethresear.ch](https://ethresear.ch/) rather than reaching the community through traditional publications after rounds of peer review. +Ethereum research is open and transparent. The culture is to make research tools and outputs as open and interactive as possible, for example, through executable notebooks. Ethereum research moves quickly, with new findings posted and discussed in the open on forums such as [ethresear.ch](https://ethresear.ch/) rather than reaching the community through traditional publications after rounds of peer review. ## General research resources From e7d9154f3d057f1d7cd9711ac58e5fe6064a0159 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 11:27:42 -0600 Subject: [PATCH 225/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 2d36eb81f9d..3b4d82e1940 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -17,7 +17,7 @@ Ethereum research is open and transparent. The culture is to make research tools Regardless of the specific topic, there is a wealth of information on Ethereum research to be found at [ethresear.ch](https://ethresear.ch) and the [Eth R&D Discord channel](https://discord.gg/n7JxAeRu). These are the primary places where Ethereum researchers discuss the latest ideas and development opportunities. -This May 2022 report from [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) also covers a lot of ground. +This report published in May 2022 by [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) provides a good overview of the Ethereum roadmap. ## Protocol research From ddde7493487dc031b815c8de7d826f2db7d7cde0 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 11:31:59 -0600 Subject: [PATCH 226/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 3b4d82e1940..dd8b1d592d9 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -21,7 +21,7 @@ This report published in May 2022 by [DelphiDigital](https://members.delphidigit ## Protocol research -Protocol research is concerned with Ethereum's base layer - the set of rules defining how nodes connect, communicate, exchange and store Ethereum data and come to consensus about the state of the blockchain. The protocol can be divided into two top-level categories: consensus and execution. +Protocol research is concerned with Ethereum's base layer - the set of rules defining how nodes connect, communicate, exchange and store Ethereum data and come to consensus about the state of the blockchain. Protocol research gets divided into two top-level categories: consensus and execution. ### Consensus From bb2f5c0e58008fb035dc003adff05385696e153a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 2 Jun 2022 10:46:02 -0700 Subject: [PATCH 227/298] Apply suggestions from code review Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- .../translations/de/developers/docs/intro-to-ether/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/translations/de/developers/docs/intro-to-ether/index.md b/src/content/translations/de/developers/docs/intro-to-ether/index.md index 7d3fc4171da..7d4ba731a8f 100644 --- a/src/content/translations/de/developers/docs/intro-to-ether/index.md +++ b/src/content/translations/de/developers/docs/intro-to-ether/index.md @@ -58,7 +58,7 @@ Gwei, kurz für Giga-Wei, wird oft verwendet, um die Gaskosten auf Ethereum zu b ## Überweisung von Ether {#transferring-ether} -Jede Transaktion auf Ethereum enthält ein `Wert`-Feld, das den zu überweisenden Ether-Betrag in Wei angibt, der von der Adresse des Absenders an die Adresse des Empfängers gesendet wird. +Jede Transaktion auf Ethereum enthält ein `value`-Feld, das den zu überweisenden Ether-Betrag in Wei angibt, der von der Adresse des Absenders an die Adresse des Empfängers gesendet wird. Wenn es sich bei der Empfängeradresse um einen [Smart Contract](/developers/docs/smart-contracts/) handelt, kann dieser übertragene Ether zum Bezahlen von Gas verwendet werden, wenn der Smart Contract seinen Code ausführt. @@ -66,7 +66,7 @@ Wenn es sich bei der Empfängeradresse um einen [Smart Contract](/developers/doc ## Ether-Saldo abfragen {#querying-ether} -Nutzer können den Ether-Saldo jedes [Kontos](/developers/docs/accounts/) abfragen, indem sie das `Saldo`-Feld des Kontos einsehen, das den Ether-Bestand in Wei anzeigt. +Nutzer können den Ether-Saldo jedes [Kontos](/developers/docs/accounts/) abfragen, indem sie das `balance`-Feld des Kontos einsehen, das den Ether-Bestand in Wei anzeigt. [Etherscan](https://etherscan.io) ist ein beliebtes Tool zur Überprüfung von Adresssalden über eine webbasierte Anwendung. Zum Beispiel zeigt [diese Etherscan-Seite](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae) den Kontostand der Ethereum Foundation. From 3b31ea371bc844dc1b202ebc0016905639d7cf09 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 2 Jun 2022 10:46:12 -0700 Subject: [PATCH 228/298] remove [.engl] tags --- src/content/translations/de/developers/docs/blocks/index.md | 2 +- .../de/developers/docs/consensus-mechanisms/pos/index.md | 2 +- src/content/translations/de/developers/docs/dapps/index.md | 2 +- src/content/translations/de/developers/docs/networks/index.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/translations/de/developers/docs/blocks/index.md b/src/content/translations/de/developers/docs/blocks/index.md index 94260572196..9ec51df9732 100644 --- a/src/content/translations/de/developers/docs/blocks/index.md +++ b/src/content/translations/de/developers/docs/blocks/index.md @@ -23,7 +23,7 @@ Durch die Aufteilung der Übertragungen geben wir allen Netzwerkteilnehmern gen Um die Transaktionsgeschichte zu erhalten, sind Blöcke streng sortiert (jeder neu erstellte Block enthält einen Verweis auf den übergeordneten Block), und Transaktionen innerhalb von Blöcken sind ebenfalls streng geordnet. Außer in seltenen Fällen, zu einem bestimmten Zeitpunkt, sind sich alle Teilnehmer des Netzwerks über die genaue Anzahl und Geschichte der Blöcke einig und arbeiten daran, die aktuellen Live-Transaktionsanfragen in den nächsten Block zu integrieren. -Sobald ein Block von einem Miner im Netzwerk zusammengesetzt wird (geschürft, mined [engl.]), wird er an den Rest des Netzwerks weitergeleitet: Alle Nodes fügen diesen Block am Ende ihrer Blockchain hinzu und das Mining (Schürfen) geht weiter. Der genaue Prozess der Blockmontage (Schürfen/Mining [engl.]) und der Commitment/Konsensus-Prozess werden derzeit durch das „Proof-of-Work-Protokoll" von Ethereum spezifiziert. +Sobald ein Block von einem Miner im Netzwerk zusammengesetzt wird (geschürft), wird er an den Rest des Netzwerks weitergeleitet: Alle Nodes fügen diesen Block am Ende ihrer Blockchain hinzu und das Mining (Schürfen) geht weiter. Der genaue Prozess der Blockmontage (Schürfen) und der Commitment/Konsensus-Prozess werden derzeit durch das „Proof-of-Work-Protokoll" von Ethereum spezifiziert. ### Eine visuelle Demo {#a-visual-demo} diff --git a/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md b/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md index 49de72dc5be..ea5bb629253 100644 --- a/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md +++ b/src/content/translations/de/developers/docs/consensus-mechanisms/pos/index.md @@ -16,7 +16,7 @@ Um diese Seite besser zu verstehen, empfehlen wir dir, zuerst einen Blick auf [K Proof-of-Stake ist eine Art von [Konsensmechanismus](/developers/docs/consensus-mechanisms/), die von Blockchain-Netzwerken benutzt wird, um einen verteilten Konsens zu erreichen. -Es verlangt von Nutzern das Einsetzen ([engl.] Staking) ihrer ETH, um ein Validator im Netzwerk zu werden. Validatoren sind verantwortlich für die gleichen Dinge wie Miner in [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/): Ordnen von Transaktionen und Erstellen von neuen Blöcken, so dass alle Nodes mit dem Status des Netzwerks übereinstimmen. +Es verlangt von Nutzern das Einsetzen ihrer ETH, um ein Validator im Netzwerk zu werden. Validatoren sind verantwortlich für die gleichen Dinge wie Miner in [Proof-of-Work](/developers/docs/consensus-mechanisms/pow/): Ordnen von Transaktionen und Erstellen von neuen Blöcken, so dass alle Nodes mit dem Status des Netzwerks übereinstimmen. Proof-of-Stake kommt mit einer Anzahl an Verbesserungen zum Proof-of-Work-System hinzu: diff --git a/src/content/translations/de/developers/docs/dapps/index.md b/src/content/translations/de/developers/docs/dapps/index.md index 83a103133b1..90eed2152d2 100644 --- a/src/content/translations/de/developers/docs/dapps/index.md +++ b/src/content/translations/de/developers/docs/dapps/index.md @@ -5,7 +5,7 @@ lang: de sidebar: true --- -Eine dezentralisierte Anwendung ([engl.] decentralized application, dapp) ist eine Anwendung, die auf einem dezentralisierten Netzwerk aufgebaut ist. Dies kombiniert einen [Smart Contract](/developers/docs/smart-contracts/) und eine Frontend-Benutzeroberfläche. Beachte, dass Smart Contracts in Ethereum zugänglich und transparent sind – wie offene APIs –, also kann deine Dapp sogar einen Smart Contract enthalten, den eine andere Person geschrieben hat. +Eine dezentralisierte Anwendung ist eine Anwendung, die auf einem dezentralisierten Netzwerk aufgebaut ist. Dies kombiniert einen [Smart Contract](/developers/docs/smart-contracts/) und eine Frontend-Benutzeroberfläche. Beachte, dass Smart Contracts in Ethereum zugänglich und transparent sind – wie offene APIs –, also kann deine Dapp sogar einen Smart Contract enthalten, den eine andere Person geschrieben hat. ## Voraussetzungen {#prerequisites} diff --git a/src/content/translations/de/developers/docs/networks/index.md b/src/content/translations/de/developers/docs/networks/index.md index face3cc806e..5cfe4b938a5 100644 --- a/src/content/translations/de/developers/docs/networks/index.md +++ b/src/content/translations/de/developers/docs/networks/index.md @@ -105,7 +105,7 @@ Ein Proof-of-Work-Testnetz. Das bedeutet, es ist die beste gleichartige Testnetz ## Private Netzwerke {#private-networks} -Ein Ethereum-Netzwerk ist ein privates Netzwerk, wenn seine Nodes nicht mit einem öffentlichen Netzwerk verbunden sind (d. h. Hauptnetz [engl. Mainnet] oder ein Testnetz [engl. Testnet). In diesem Zusammenhang bedeutet privat nur reserviert oder isoliert statt geschützt oder sicher. +Ein Ethereum-Netzwerk ist ein privates Netzwerk, wenn seine Nodes nicht mit einem öffentlichen Netzwerk verbunden sind (d. h. Hauptnetz oder ein Testnetz). In diesem Zusammenhang bedeutet privat nur reserviert oder isoliert statt geschützt oder sicher. ### Entwicklungsnetzwerke {#development-networks} From 7912804e274c901cba7ee34fc5dc2958ad27f3ea Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 11:57:07 -0600 Subject: [PATCH 229/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index dd8b1d592d9..82c10d06e8c 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -25,7 +25,14 @@ Protocol research is concerned with Ethereum's base layer - the set of rules def ### Consensus -Consensus research is concerned with [Ethereum's proof-of-stake mechanism](/developers/docs/consensus-mechanisms/pos/), for example identifying and patching vulnerabilities, quantifying cryptoeconomic security, increasing the security or performance of client implementations and developing light clients. Some fundamental redesigns of the protocol to confer large improvements to Ethereum are also being researched, for example single slot finality. Furthermore, the efficiency and safety and monitoring of the peer-to-peer networking between consensus clients are also important research topics. +Consensus research is concerned with [Ethereum's proof-of-stake mechanism](/developers/docs/consensus-mechanisms/pos/). Some example consensus research topics are: + +- identifying and patching vulnerabilities; +- quantifying cryptoeconomic security; +- increasing the security or performance of client implementations; +- and developing light clients. + +As well as forward-looking research, some fundamental redesigns of the protocol, such as single slot finality, are being researched to allow for significant improvements to Ethereum. Furthermore, the efficiency, safety, and monitoring of peer-to-peer networking between consensus clients are also important research topics. #### Background reading From fef98ef5b2898e9bc02b4e1606ad74e12ad86535 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 11:59:52 -0600 Subject: [PATCH 230/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 82c10d06e8c..52a6d3f1b57 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -36,13 +36,10 @@ As well as forward-looking research, some fundamental redesigns of the protocol, #### Background reading -[Introduction to proof-of-stake](/developers/docs/consensus-mechanisms/pos/) - -[Casper-FFG paper](https://arxiv.org/abs/1710.09437) - -[Casper-FFG Explainer](https://arxiv.org/abs/1710.09437) - -[Gasper paper](https://arxiv.org/abs/2003.03052) +- [Introduction to proof-of-stake](/developers/docs/consensus-mechanisms/pos/) +- [Casper-FFG paper](https://arxiv.org/abs/1710.09437) +- [Casper-FFG explainer](https://arxiv.org/abs/1710.09437) +- [Gasper paper](https://arxiv.org/abs/2003.03052) #### Recent research From c7ef5356c28f04f961c814f6766226db1901febc Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:01:16 -0600 Subject: [PATCH 231/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 52a6d3f1b57..0e9569d9d39 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -43,13 +43,10 @@ As well as forward-looking research, some fundamental redesigns of the protocol, #### Recent research -[Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) - -[Availability/Finality dilemma](https://arxiv.org/abs/2009.04987) - -[Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) - -[Proposer-builder separation](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) +- [Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) +- [Availability/Finality dilemma](https://arxiv.org/abs/2009.04987) +- [Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) +- [Proposer-builder separation](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) ### Execution From 12c0dbe258b74ab7742f680be5841a2f310edcd9 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:03:38 -0600 Subject: [PATCH 232/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 0e9569d9d39..b91e754ecd3 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -50,7 +50,11 @@ As well as forward-looking research, some fundamental redesigns of the protocol, ### Execution -The execution layer is concerned with executing transactions, running the [Ethereum virtual machine (EVM)](/developers/docs/evm/) and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are updated ready for [the Merge](/upgrades/merge/). This includes building out light client support, research into gas limits and incorporating new data structures (e.g. Verkle Tries). +The execution layer is concerned with executing transactions, running the [Ethereum virtual machine (EVM)](/developers/docs/evm/) and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are getting updated in anticipation of [The Merge](/upgrades/merge/). Active areas of research include: + +- building out light client support; +- researching gas limits; +- and incorporating new data structures (e.g. Verkle Tries). #### Background reading From c86d19366527f09b9a6d88814c5159b240d50345 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:03:58 -0600 Subject: [PATCH 233/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index b91e754ecd3..ebc23739c26 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -58,9 +58,8 @@ The execution layer is concerned with executing transactions, running the [Ether #### Background reading -[Introduction to the EVM](/developers/docs/evm) - -[Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) +- [Introduction to the EVM](/developers/docs/evm) +- [Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) #### Recent research From efc211c1a5632af1816c4a3dd49f0249e9615a8c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:18:37 -0600 Subject: [PATCH 234/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index ebc23739c26..7126e3df3ba 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -63,15 +63,11 @@ The execution layer is concerned with executing transactions, running the [Ether #### Recent research -[Database optimizations](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) - -[State expiry](https://notes.ethereum.org/@vbuterin/state_expiry_eip) - -[History management](https://eips.ethereum.org/EIPS/eip-4444) - -[Verkle Trees](https://vitalik.ca/general/2021/06/18/verkle.html) - -[Data availability sampling](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) +- [Database optimizations](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) +- [State expiry](https://notes.ethereum.org/@vbuterin/state_expiry_eip) +- [History management](https://eips.ethereum.org/EIPS/eip-4444) +- [Verkle Trees](https://vitalik.ca/general/2021/06/18/verkle.html) +- [Data availability sampling](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) ## Client Development From b145eff848807f102a3d7b685e66cd1787d974ff Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:25:59 -0600 Subject: [PATCH 235/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 7126e3df3ba..7925060fb64 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -71,7 +71,12 @@ The execution layer is concerned with executing transactions, running the [Ether ## Client Development -Client development makes the outcomes from protocol research into reality by building them into Ethereum clients - implementations of the Ethereum protocol. This includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software: 1) a consensus client to keep track of the head of the blockchain, gossip blocks and handle consensus logic and 2) an execution client to support the Ethereum Virtual Machine and execute transactions. +Ethereum clients are implementations of the Ethereum protocol. Client development makes the outcomes from protocol research into reality by building them into these clients. Client development includes updating the client specifications as well as building specific implementations. + +An Ethereum node is required to run two pieces of software: + +1. a consensus client to keep track of the head of the blockchain, gossip blocks and handle consensus logic +2. an execution client to support the Ethereum Virtual Machine and execute transactions. The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. You can also find a history of all Ethereum upgrades on our [history page](/history/). From 9c19f62880f1e16b475ee478c7269a5727bea1a8 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:26:44 -0600 Subject: [PATCH 236/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 7925060fb64..7b1d8b01759 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -78,7 +78,7 @@ An Ethereum node is required to run two pieces of software: 1. a consensus client to keep track of the head of the blockchain, gossip blocks and handle consensus logic 2. an execution client to support the Ethereum Virtual Machine and execute transactions. -The [nodes and clients page](/developers/docs/nodes-and-clients/) explains about nodes and clients and includes links to all current client implementations. You can also find a history of all Ethereum upgrades on our [history page](/history/). +See the [nodes and clients page](/developers/docs/nodes-and-clients/) for more detail on nodes and clients and for a list of all current client implementations. You can also find a history of all Ethereum upgrades on the [history page](/history/). ### Execution Clients From ae8499e6b4be9a49244fc66eb7175c2489376f7c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:27:02 -0600 Subject: [PATCH 237/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 7b1d8b01759..1c503e92c87 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -82,9 +82,8 @@ See the [nodes and clients page](/developers/docs/nodes-and-clients/) for more d ### Execution Clients -[Execution client specification](https://github.com/ethereum/execution-specs) - -[Execution API spec](https://github.com/ethereum/execution-apis) +- [Execution client specification](https://github.com/ethereum/execution-specs) +- [Execution API spec](https://github.com/ethereum/execution-apis) ### Consensus Clients From 70f833af2fa78fff705f09f20af3f59f39fbb27c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:27:17 -0600 Subject: [PATCH 238/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 1c503e92c87..6d498dd1759 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -87,9 +87,8 @@ See the [nodes and clients page](/developers/docs/nodes-and-clients/) for more d ### Consensus Clients -[Consensus client specification](https://github.com/ethereum/consensus-specs) - -[Beacon API specification](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) +- [Consensus client specification](https://github.com/ethereum/consensus-specs) +- [Beacon API specification](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) ## Scaling and performance From 6837b92586765de9e461d53ca3397e829b3159ef Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:29:30 -0600 Subject: [PATCH 239/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 6d498dd1759..580567e249a 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -92,7 +92,7 @@ See the [nodes and clients page](/developers/docs/nodes-and-clients/) for more d ## Scaling and performance -There are ongoing efforts to scale Ethereum using a variety of techniques including sharding the blockchain, danksharding and using rollups. Introductory information on scaling Ethereum is available on our [scaling page](/developers/docs/scaling). +Scaling Ethereum is a large area of focus for Ethereum researchers. Current approaches include sharding the blockchain, danksharding, and using rollups. Introductory information on scaling Ethereum is available on our [scaling page](/developers/docs/scaling). ### Layer 2 From 76b1b9e4b87e3782a458fe29eb06b53b14570339 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:29:56 -0600 Subject: [PATCH 240/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 580567e249a..688ba043be3 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -100,11 +100,9 @@ There are now several Layer 2 protocols that scale Ethereum using different tech #### Background reading -[Introduction to layer 2](/layer-2/) - -[EthHub Layer 2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) - -[Polynya: Rollups, DA and modular chains](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) +- [Introduction to layer 2](/layer-2/) +- [EthHub Layer 2](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/) +- [Polynya: Rollups, DA and modular chains](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) #### Recent research From cd6df71c52970f1f5ff4e7a2a1b5f4e0c0c92048 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:30:25 -0600 Subject: [PATCH 241/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 688ba043be3..41ad665e288 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -106,13 +106,10 @@ There are now several Layer 2 protocols that scale Ethereum using different tech #### Recent research -[Arbitrum's fair-ordering for sequencers](https://eprint.iacr.org/2020/269.pdf) - -[ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) - -[Rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) - -[L2Beat](https://l2beat.com/) +- [Arbitrum's fair-ordering for sequencers](https://eprint.iacr.org/2020/269.pdf) +- [ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) +- [Rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) +- [L2Beat](https://l2beat.com/) ### Bridges From 0eb752f8b239936e4c472c8287ca8908b54417e8 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:30:44 -0600 Subject: [PATCH 242/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 41ad665e288..b5690c6e083 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -117,13 +117,10 @@ One particular area of layer 2 that requires more research and development is sa #### Background reading -[Introduction to blockchain bridges](/bridges/) - -[Vitalik on bridges](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) - -[Blockchain Bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) - -[Valkue locked in bridges]() +- [Introduction to blockchain bridges](/bridges/) +- [Vitalik on bridges](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) +- [Blockchain bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) +- [Value locked in bridges](https://dune.com/eliasimos/Bridge-Away-(from-Ethereum)) #### Recent research From fda20701c263e946dee20ffb6d26a5f46be39f0c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:31:19 -0600 Subject: [PATCH 243/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index b5690c6e083..bfb00bdc218 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -124,7 +124,7 @@ One particular area of layer 2 that requires more research and development is sa #### Recent research -[Validating bridges](https://stonecoldpat.github.io/images/validatingbridges.pdf) +- [Validating bridges](https://stonecoldpat.github.io/images/validatingbridges.pdf) ### Sharding From 16d18fbc4eb77fc11100098f11787a82cce78039 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:31:35 -0600 Subject: [PATCH 244/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index bfb00bdc218..a5d18c62aaf 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -132,15 +132,11 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Background reading -[Introduction to Ethereum sharding](/upgrades/shard-chains/) - -[Proto-Danksharding notes](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) - -[Bankless Danksharding video](https://www.youtube.com/watch?v=N5p0TB77flM) - -[Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) - -[Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) +- [Introduction to Ethereum sharding](/upgrades/shard-chains/) +- [Proto-Danksharding notes](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) +- [Bankless Danksharding video](https://www.youtube.com/watch?v=N5p0TB77flM) +- [Ethereum Sharding Research Compendium](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) +- [Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) #### Recent research From 0022c134a4604fc08f765236c0589093646e1bf5 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:31:59 -0600 Subject: [PATCH 245/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index a5d18c62aaf..48cfd54a4f3 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -140,9 +140,8 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Recent research -[EIP-4844: Proto-Danksharding](https://github.com/ethereum/EIPs/pull/5088) - -[Vitalik on sharding and data availability sampling](https://hackmd.io/@vbuterin/sharding_proposal) +- [EIP-4844: Proto-Danksharding](https://github.com/ethereum/EIPs/pull/5088) +- [Vitalik on sharding and data availability sampling](https://hackmd.io/@vbuterin/sharding_proposal) ### Hardware From e5ed5f18cf7af7546e8bfcb2416a60646af8b9aa Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:34:27 -0600 Subject: [PATCH 246/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 48cfd54a4f3..e9de6320884 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -183,15 +183,11 @@ Ethereum wallets can be browser extensions, desktop and mobile apps or smart con #### Background reading -[Introduction to wallets](/wallets/) - -[Introduction to wallet security](/security/) - -[ethresear.ch Security](https://ethresear.ch/tag/security) - -[EIP-2938 Account Abstraction](https://eips.ethereum.org/EIPS/eip-2938) - -[EIP-4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) +- [Introduction to wallets](/wallets/) +- [Introduction to wallet security](/security/) +- [ethresear.ch Security](https://ethresear.ch/tag/security) +- [EIP-2938 Account Abstraction](https://eips.ethereum.org/EIPS/eip-2938) +- [EIP-4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) #### Recent research From dded6fe2af6f58b67f7270432a2274eea9db3875 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:36:26 -0600 Subject: [PATCH 247/298] list styling --- src/content/community/research/index.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index e9de6320884..721e3efb5a8 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -50,10 +50,10 @@ As well as forward-looking research, some fundamental redesigns of the protocol, ### Execution -The execution layer is concerned with executing transactions, running the [Ethereum virtual machine (EVM)](/developers/docs/evm/) and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are getting updated in anticipation of [The Merge](/upgrades/merge/). Active areas of research include: +The execution layer is concerned with executing transactions, running the [Ethereum virtual machine (EVM)](/developers/docs/evm/) and generating execution payloads to pass to the consensus layer. There are many active areas of research, especially as execution clients are getting updated in anticipation of [The Merge](/upgrades/merge/). Active areas of research include: - building out light client support; -- researching gas limits; +- researching gas limits; - and incorporating new data structures (e.g. Verkle Tries). #### Background reading @@ -71,7 +71,7 @@ The execution layer is concerned with executing transactions, running the [Ether ## Client Development -Ethereum clients are implementations of the Ethereum protocol. Client development makes the outcomes from protocol research into reality by building them into these clients. Client development includes updating the client specifications as well as building specific implementations. +Ethereum clients are implementations of the Ethereum protocol. Client development makes the outcomes from protocol research into reality by building them into these clients. Client development includes updating the client specifications as well as building specific implementations. An Ethereum node is required to run two pieces of software: @@ -120,7 +120,7 @@ One particular area of layer 2 that requires more research and development is sa - [Introduction to blockchain bridges](/bridges/) - [Vitalik on bridges](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) - [Blockchain bridges article](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) -- [Value locked in bridges](https://dune.com/eliasimos/Bridge-Away-(from-Ethereum)) +- [Value locked in bridges]() #### Recent research @@ -149,11 +149,11 @@ Sharding Ethereum's blockchain has long been part of the development roadmap. Ho #### Background reading -[Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) +- [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) #### Recent research -[ecdsa on FGPAs](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) +- [ecdsa on FGPAs](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) ## Security @@ -165,17 +165,17 @@ Zero-knowledge proofs (ZKP) and cryptography are critical for building privacy a #### Background reading -[0xparc blog](https://0xparc.org/blog) +- [0xparc blog](https://0xparc.org/blog) -[zkp.science](https://zkp.science/) +- [zkp.science](https://zkp.science/) -[Zero Knowledge podcast](https://zeroknowledge.fm/) +- [Zero Knowledge podcast](https://zeroknowledge.fm/) #### Recent research -[Recent advance in elliptic curve cryptography](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) +- [Recent advance in elliptic curve cryptography](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) -[Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) +- [Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) ### Wallets From 1645c5a54786889c61966a1610fbe400c2c1cb2c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:37:06 -0600 Subject: [PATCH 248/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 721e3efb5a8..aa339a79387 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -191,13 +191,10 @@ Ethereum wallets can be browser extensions, desktop and mobile apps or smart con #### Recent research -[Validation focused smart contract wallets](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) - -[The future of accounts](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) - -[EIP-3074 AUTH and AUTHCALL Opcodes](https://eips.ethereum.org/EIPS/eip-3074) - -[Publishing code code at EOA addresses](https://github.com/ethereum/EIPs/pull/5003) +- [Validation focused smart contract wallets](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [The future of accounts](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [EIP-3074 AUTH and AUTHCALL Opcodes](https://eips.ethereum.org/EIPS/eip-3074) +- [Publishing code at an EOA address](https://github.com/ethereum/EIPs/pull/5003) ## Community, education and outreach From b70feae4d89743bb9d8793d49fbc79d02f3357c6 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:37:59 -0600 Subject: [PATCH 249/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index aa339a79387..2e5d0a4e8a8 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -202,7 +202,7 @@ Onboarding new users onto Ethereum requires new educational resources and approa ### UX/UI -For Ethereum to onboard more people the UX/UI must be improved. This requires designers and UI and product experts to re-examine the design of wallets and apps. +To onboard more people onto Ethereum, the ecosystem must improve the UX/UI. This will require designers and product experts to re-examine the design of wallets and apps. #### Background reading From 253f1ac5153894e6446407b556edb766fe1ab542 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:38:13 -0600 Subject: [PATCH 250/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 2e5d0a4e8a8..1df2046ddf9 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -210,11 +210,9 @@ To onboard more people onto Ethereum, the ecosystem must improve the UX/UI. This #### Recent research -[Web3 Design Discord](https://discord.gg/FsCFPMTSm9) - -[Web3 Design Principles](https://www.web3designprinciples.com/) - -[Ethereum Magicians UX discussion](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) +- [Web3 Design Discord](https://discord.gg/FsCFPMTSm9) +- [Web3 Design Principles](https://www.web3designprinciples.com/) +- [Ethereum Magicians UX discussion](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) ## Economics From 46158057415224b181583b699305eed7853abc83 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:38:29 -0600 Subject: [PATCH 251/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 1df2046ddf9..c48d6d1a6a2 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -220,9 +220,8 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e #### Background reading -[Rollup economics from first principles](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) - -[Robust Incentives Group](https://ethereum.github.io/rig/) +- [Rollup economics from first principles](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) +- [Robust Incentives Group](https://ethereum.github.io/rig/) #### Recent research From cdf444b8daf02488171406cd9f502cfaf28ce1aa Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:38:44 -0600 Subject: [PATCH 252/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index c48d6d1a6a2..fe561358731 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -225,15 +225,11 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e #### Recent research -[Empirical analysis of EIP1559]([https://arxiv.org/abs/2110.04753) - -[MEV auctions](https://ethresear.ch/t/mev-auction-auctioning-transaction-ordering-rights-as-a-solution-to-miner-extractable-value/6788) - -[Circulating supply equilibrium](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954#6-enforcing-minimum-viable-issuance-with-a-variable-base-reward-factor-19) - -[Quantifying MEV: How dark is the forest?](https://arxiv.org/abs/2101.05511) - -[EIP 1559: One month later](https://arxiv.org/abs/2110.04753) +- [Empirical analysis of EIP1559]([https://arxiv.org/abs/2110.04753) +- [MEV auctions](https://ethresear.ch/t/mev-auction-auctioning-transaction-ordering-rights-as-a-solution-to-miner-extractable-value/6788) +- [Circulating supply equilibrium](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954#6-enforcing-minimum-viable-issuance-with-a-variable-base-reward-factor-19) +- [Quantifying MEV: How dark is the forest?](https://arxiv.org/abs/2101.05511) +- [EIP 1559: One month later](https://arxiv.org/abs/2110.04753) ### PoS incentives From 415845b4c4593aa3181ef775e8267b6f32f320db Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:39:16 -0600 Subject: [PATCH 253/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index fe561358731..e8ea4f8dc6b 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -231,7 +231,7 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e - [Quantifying MEV: How dark is the forest?](https://arxiv.org/abs/2101.05511) - [EIP 1559: One month later](https://arxiv.org/abs/2110.04753) -### PoS incentives +### Proof-of-stake incentives When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this determines the security of the network. Sophisticated validators may be able to exploit the nuances of the incentive layer to theior own advantage by extracting MEV or launching explicit attacks. From 6ad0a0ac1eb097e9dd2c608fd86505f41e6cd39f Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:40:33 -0600 Subject: [PATCH 254/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index e8ea4f8dc6b..a8687b64d13 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -233,7 +233,7 @@ There are complex crypto-economic factors relating to Ethereum's native asset (e ### Proof-of-stake incentives -When Ethereum transitions to proof of stake, its native asset (ether) will be used as collateral by validators. The cryptoeconomics of this determines the security of the network. Sophisticated validators may be able to exploit the nuances of the incentive layer to theior own advantage by extracting MEV or launching explicit attacks. +When Ethereum transitions to proof-of-stake, validators will use its native asset (ether) as collateral. The cryptoeconomics of this determines the security of the network. Sophisticated validators may be able to exploit the nuances of the incentive layer to their own advantage by extracting MEV or launching explicit attacks. #### Background reading From eb078a168196a39b7861978343d5fde821d6bc0b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:40:46 -0600 Subject: [PATCH 255/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index a8687b64d13..d4b3133c491 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -237,7 +237,7 @@ When Ethereum transitions to proof-of-stake, validators will use its native asse #### Background reading -[Robist Incentives Group: PoS incentives](https://ethereum.github.io/beaconrunner/) +- [Robist Incentives Group: PoS incentives](https://ethereum.github.io/beaconrunner/) #### Recent research From f8f1d450f7c945fe84c6086e9b44dd8968b1f035 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:42:15 -0600 Subject: [PATCH 256/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index d4b3133c491..be876a097aa 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -241,11 +241,9 @@ When Ethereum transitions to proof-of-stake, validators will use its native asse #### Recent research -[Vitalik on PBS](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ#Hybrid-PBS-can-we-use-proposers-only-for-inclusion-of-last-resort) - -[Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) - -[Low-cost attacks on Ethereum 2.0 by sub 1/3 stakeholders](https://arxiv.org/abs/2102.02247) +- [Vitalik on PBS](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ#Hybrid-PBS-can-we-use-proposers-only-for-inclusion-of-last-resort) +- [Three Attacks on PoS Ethereum](https://arxiv.org/abs/2110.10086) +- [Low-cost attacks on Ethereum 2.0 by sub 1/3 stakeholders](https://arxiv.org/abs/2102.02247) ### Liquid staking and derivatives From 9eb5d486321ed245ddfcae0435d48e4e57099198 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:43:42 -0600 Subject: [PATCH 257/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index be876a097aa..0e3f7005593 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -247,7 +247,7 @@ When Ethereum transitions to proof-of-stake, validators will use its native asse ### Liquid staking and derivatives -Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking as well as its effect on Ethereum's security (e.g. centralization risks). +Liquid staking allows users with less than 32 ETH to receive staking yields by swapping ether for a token representing staked ether that can be used in DeFi. However, the incentives and market dynamics associated with liquid staking are still being discovered, as well as its effect on Ethereum's security (e.g. centralization risks). #### Background reading From 7c553865a25a499cdd0db722e8235797b4741d9c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:44:22 -0600 Subject: [PATCH 258/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 0e3f7005593..e0826dc7fec 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -251,7 +251,7 @@ Liquid staking allows users with less than 32 ETH to receive staking yields by s #### Background reading -[Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) +- [Ethresear.ch liquid staking](https://ethresear.ch/search?q=liquid%20staking) #### Recent research From 7b37647fe2d6bf8632108c48ec70cfc1863c17bb Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:45:46 -0600 Subject: [PATCH 259/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index e0826dc7fec..eeaba740165 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -255,9 +255,8 @@ Liquid staking allows users with less than 32 ETH to receive staking yields by s #### Recent research -[Handling withdrawals from Lido](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-staking-protocol/8873) - -[Withdrawal credentials](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) +- [Handling withdrawals from Lido](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-staking-protocol/8873) +- [Withdrawal credentials](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) ### Fee markets From 711348c03af740b413c1cce5d29e5bf6ce6377df Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:48:33 -0600 Subject: [PATCH 260/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index eeaba740165..3800dad08bb 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -260,7 +260,7 @@ Liquid staking allows users with less than 32 ETH to receive staking yields by s ### Fee markets -Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user user-experience is an ongoing challenge that requires further research and development. +Ethereum transaction fees protect the network from spam, denial-of-service attacks and bad smart-contract code. However, it also affects the end-user by influencing the cost of interacting with Ethereum. Balancing network security with end-user experience is an ongoing challenge that requires further research and development. #### Background reading From 01870b8cc8c76b6654e9ae3f6534a9d181e8b940 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:48:47 -0600 Subject: [PATCH 261/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 3800dad08bb..444ac2c25f7 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -264,7 +264,7 @@ Ethereum transaction fees protect the network from spam, denial-of-service attac #### Background reading -[EIP-1559 (Robust Incentives Group)](https://ethereum.github.io/abm1559/notebooks/eip1559.html) +- [EIP-1559 (Robust Incentives Group)](https://ethereum.github.io/abm1559/notebooks/eip1559.html) #### Recent research From 84019d65cd322dafd3ec92eba4c0df801cb7a3bc Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:49:06 -0600 Subject: [PATCH 262/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 444ac2c25f7..c4aeb0b0ae1 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -268,13 +268,10 @@ Ethereum transaction fees protect the network from spam, denial-of-service attac #### Recent research -[EIP-4396](https://eips.ethereum.org/EIPS/eip-4396) - -[Multidimensional EIP-1559](https://ethresear.ch/t/multidimensional-eip-1559/11651) - -[Making EIP-1559 more like an AMM curve](https://ethresear.ch/t/make-eip-1559-more-like-an-amm-curve/9082) - -[Cross domain MEV](http://arxiv.org/abs/2112.01472) +- [EIP-4396](https://eips.ethereum.org/EIPS/eip-4396) +- [Multidimensional EIP-1559](https://ethresear.ch/t/multidimensional-eip-1559/11651) +- [Making EIP-1559 more like an AMM curve](https://ethresear.ch/t/make-eip-1559-more-like-an-amm-curve/9082) +- [Cross domain MEV](http://arxiv.org/abs/2112.01472) ## Testing From f746830caff0d27b2dfdec7100231e4f2bfd65b8 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:49:25 -0600 Subject: [PATCH 263/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index c4aeb0b0ae1..123f8d72de4 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -281,9 +281,8 @@ Formal verification is writing code to verify that Ethereum's consensus specific #### Background reading -[Introduction to formal verification](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) - -[Formal Verification (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) +- [Introduction to formal verification](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) +- [Formal Verification (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) #### Recent research From a82291f561b39ab690662f15bc30ebc4303d95ba Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:49:43 -0600 Subject: [PATCH 264/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 123f8d72de4..6f7b952d730 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -286,9 +286,8 @@ Formal verification is writing code to verify that Ethereum's consensus specific #### Recent research -[Formal verification of the deposit contract](https://github.com/runtimeverification/deposit-contract-verification) - -[Formal verification of the Beacon Chain specification](https://github.com/runtimeverification/deposit-contract-verification) +- [Formal verification of the deposit contract](https://github.com/runtimeverification/deposit-contract-verification) +- [Formal verification of the Beacon Chain specification](https://github.com/runtimeverification/deposit-contract-verification) ## Data science and analytics From cd4323d2fbe89dceb98d95ed083c2f810324c1a1 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:51:53 -0600 Subject: [PATCH 265/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 6f7b952d730..b229405c6b5 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -295,9 +295,8 @@ There is a need for more data analysis tools and dashboards that give detailed i ### Background reading -[Dune Analytics](https://dune.com/browse/dashboards) - -[Client diversity dashboard](https://clientdiversity.org/) +- [Dune Analytics](https://dune.com/browse/dashboards) +- [Client diversity dashboard](https://clientdiversity.org/) #### Recent research From f5f242e954995279dab2af8d9aead96d041b2367 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:52:08 -0600 Subject: [PATCH 266/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index b229405c6b5..8735f1fce39 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -300,7 +300,7 @@ There is a need for more data analysis tools and dashboards that give detailed i #### Recent research -[Robust Incentives Group Data Analysis](https://ethereum.github.io/rig/) +- [Robust Incentives Group Data Analysis](https://ethereum.github.io/rig/) ## Apps and tooling From e939e98f01eb4ffb76df3f84b8ada565d9cb7988 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:53:14 -0600 Subject: [PATCH 267/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 8735f1fce39..810d280c59f 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -304,7 +304,7 @@ There is a need for more data analysis tools and dashboards that give detailed i ## Apps and tooling -The application layer supports a very diverse ecosystem of programs that settle transactions on Ethereum's base layer. App teams are constantly finding new ways to leverage Ethereum to create lower-friction, composable, permissionless and censorship resistant versions of important Web2 apps or creating completely new web3-native concepts. At the same time, new tooling is being developed that makes building increasingly complex Ethereum apps easier. +The application layer supports a diverse ecosystem of programs that settle transactions on Ethereum's base layer. Development teams are constantly finding new ways to leverage Ethereum to create composable, permissionless and censorship-resistant versions of important Web2 apps or create completely new Web3-native concepts. At the same time, new tooling is being developed that makes building dapps on Ethereum less complex. ### DeFi From b4b921b3f54e6fb58fae4dd77784eabe539cf75e Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:53:53 -0600 Subject: [PATCH 268/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 810d280c59f..cf1fbc54f43 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -308,7 +308,7 @@ The application layer supports a diverse ecosystem of programs that settle trans ### DeFi -Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and and invest crypto-assets using smart contracts. This is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is constantly needed. +Decentralized finance (DeFi) is one of the primary classes of application built on top of Ethereum. DeFi aims to create composable "money legos" that allow users to store, transfer, lend, borrow and invest crypto-assets using smart contracts. DeFi is a fast-moving space that is constantly updating. Research into secure, efficient and accessible protocols is continuously needed. #### Background reading From 0b3a747d394f47759a92dc29faffdd0dcc54314a Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:54:06 -0600 Subject: [PATCH 269/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index cf1fbc54f43..703b6c2a0de 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -312,9 +312,8 @@ Decentralized finance (DeFi) is one of the primary classes of application built #### Background reading -[DeFi](/defi/) - -[Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) +- [DeFi](/defi/) +- [Coinbase: What is DeFi?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) #### Recent research From ecbbaf9264ddf8362364154c7344430d75c7fe15 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:54:19 -0600 Subject: [PATCH 270/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 703b6c2a0de..31a98ac22fa 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -317,9 +317,8 @@ Decentralized finance (DeFi) is one of the primary classes of application built #### Recent research -[Decentralized finance, centralized ownership?](https://arxiv.org/pdf/2012.09306.pdf) - -[Optimism: The road to sub-dollar transactions](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) +- [Decentralized finance, centralized ownership?](https://arxiv.org/pdf/2012.09306.pdf) +- [Optimism: The road to sub-dollar transactions](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) ### DAOs From 3c26152fe25a64af7b270ae87c8ce7c5c958bbb3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:54:53 -0600 Subject: [PATCH 271/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 31a98ac22fa..9a79d8880e0 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -322,7 +322,7 @@ Decentralized finance (DeFi) is one of the primary classes of application built ### DAOs -DAOs are one of the key classes of application being built on top of Ethereum. There is a lot of very active research into how they may develop to replace corporations and other traditional organizations. +An impactful use case for Ethereum is the ability to organize in a decentralized manner through the use of DAOs. There is a lot of active research into how DAOs on Ethereum can be developed and utilized to execute improved forms of governance, as a trust-minimized coordination tool, greatly expanding peoples options beyond traditional corporations and organizations. #### Background reading From 03bedc9d56607deeb5a587e69609f8116204013b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:55:18 -0600 Subject: [PATCH 272/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 9a79d8880e0..f1444099a64 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -326,7 +326,8 @@ An impactful use case for Ethereum is the ability to organize in a decentralized #### Background reading -[Dao Collective](https://daocollective.xyz/) +- [Introduction to DAOs](/dao/) +- [Dao Collective](https://daocollective.xyz/) #### Recent research From af29ca604aff04ab327b7884bfe7ca8fd24536f2 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:55:35 -0600 Subject: [PATCH 273/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index f1444099a64..bca1eb621ff 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -331,7 +331,7 @@ An impactful use case for Ethereum is the ability to organize in a decentralized #### Recent research -[Mapping the DAO ecosystem](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) +- [Mapping the DAO ecosystem](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) ### Developer tools From e21a87ae6235cf10264a5fe18f4e0c2ceb872231 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:55:46 -0600 Subject: [PATCH 274/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index bca1eb621ff..ce28cf5b84b 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -339,17 +339,12 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res #### Background reading -[Tooling by programming language](/developers/docs/programming-languages/) - -[Developer Frameworks](/developers/docs/frameworks/) - -[Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) - -[Token standards](/developers/docs/standards/tokens/) - -[Biastek: Ethereum tools](https://biastek.com/ethereum-tools/) - -[CryptoDevHub: EVM Tools](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) +- [Tooling by programming language](/developers/docs/programming-languages/) +- [Developer Frameworks](/developers/docs/frameworks/) +- [Consensus developer tools list](https://github.com/ConsenSys/ethereum-developer-tools-list) +- [Token standards](/developers/docs/standards/tokens/) +- [Biastek: Ethereum tools](https://biastek.com/ethereum-tools/) +- [CryptoDevHub: EVM Tools](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) #### Recent research From a3fe642a3956672d4191d83c450d7ad0226687c0 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:56:04 -0600 Subject: [PATCH 275/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index ce28cf5b84b..883a940e563 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -348,7 +348,7 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res #### Recent research -[Eth R&D Discord Consensus Tooling channel](https://discordapp.com/channels/595666850260713488/746343380900118528) +- [Eth R&D Discord Consensus Tooling channel](https://discordapp.com/channels/595666850260713488/746343380900118528) ### Oracles From e7ec3627358c96836f0d938aabfea58cc6a3d4f3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:56:36 -0600 Subject: [PATCH 276/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 883a940e563..8067a94807b 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -352,7 +352,7 @@ Tools for Ethereum developers are rapidly improving. There is lots of active res ### Oracles -Oracles are used to import off-chain data on-chain in a permissionless and decentralized way. This enables dapps to be reactive to real world phenomena such as price fluctuations in real-world assets, events in off-chain apps or even changes in the weather. +Oracles import off-chain data onto the blockchain in a permissionless and decentralized way. Getting this data on-chain enables dapps to be reactive to real-world phenomena such as price fluctuations in real-world assets, events in off-chain apps, or even changes in the weather. #### Background reading From a3776627fd2da48f2558f66be82e7539a75163b2 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:56:47 -0600 Subject: [PATCH 277/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 8067a94807b..e56ed5c21a6 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -356,7 +356,7 @@ Oracles import off-chain data onto the blockchain in a permissionless and decent #### Background reading -[Introduction to Oracles](/developers/docs/oracles/) +- [Introduction to Oracles](/developers/docs/oracles/) #### Recent Research From 61b9bc75754f2a881b9a15fc7a056689848115a3 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:56:58 -0600 Subject: [PATCH 278/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index e56ed5c21a6..463738a6fc7 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -360,9 +360,8 @@ Oracles import off-chain data onto the blockchain in a permissionless and decent #### Recent Research -[Survey of blockchain oracles](https://arxiv.org/pdf/2004.07140.pdf) - -[Chainlink white paper](https://chain.link/whitepaper) +- [Survey of blockchain oracles](https://arxiv.org/pdf/2004.07140.pdf) +- [Chainlink white paper](https://chain.link/whitepaper) ### App security From cb6a5bcb1424dab88c19ef5b925b6292c3c64765 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:57:39 -0600 Subject: [PATCH 279/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 463738a6fc7..7525e33be49 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -365,7 +365,7 @@ Oracles import off-chain data onto the blockchain in a permissionless and decent ### App security -Hacks on Ethereum nearly always exploit vulnerabilities in individual applications rather than the base protocol. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. +Hacks on Ethereum generally exploit vulnerabilities in individual applications rather than in the protocol itself. Hackers and app developers are locked in an arms race to develop new attacks and defenses. This means there is always important research and development required to keep apps safe from hacks. #### Background reading From 011709bb7bc8fb31fded22861bb4d8a58b545171 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:57:50 -0600 Subject: [PATCH 280/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 7525e33be49..0219a005c9c 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -369,11 +369,9 @@ Hacks on Ethereum generally exploit vulnerabilities in individual applications r #### Background reading -[Wormhole exploit report](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) - -[List of Ethereum contract hack post-mortems](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) - -[Rekt News](https://twitter.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) +- [Wormhole exploit report](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) +- [List of Ethereum contract hack post-mortems](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) +- [Rekt News](https://twitter.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) #### Recent research From 3beea277dceee1070ea2fc345e35e3ccc263bd3f Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:58:01 -0600 Subject: [PATCH 281/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 0219a005c9c..e509f0cc301 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -375,7 +375,7 @@ Hacks on Ethereum generally exploit vulnerabilities in individual applications r #### Recent research -[ethresear.ch Applications](https://ethresear.ch/c/applications/18) +- [ethresear.ch Applications](https://ethresear.ch/c/applications/18) ### Technology stack From 9b85e6e24d64f53271b3770b35268dc564ecf17e Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:58:36 -0600 Subject: [PATCH 282/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index e509f0cc301..17ed872a308 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -379,7 +379,7 @@ Hacks on Ethereum generally exploit vulnerabilities in individual applications r ### Technology stack -Apps on Ethereum are rarely fully decentralized because they rely on some centralized tooling or infrastructure. Decentralizing the full tech stack is an important research area. +Decentralizing the entire Ethereum tech stack is an important research area. Currently, dapps on Ethereum commonly have some points of centralization because they rely on centralized tooling or infrastructure. #### Background reading From 4e88126cfd3a47b759efb7af1e99e5519b7ba31a Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:58:46 -0600 Subject: [PATCH 283/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 17ed872a308..6e465d1199b 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -383,13 +383,10 @@ Decentralizing the entire Ethereum tech stack is an important research area. Cur #### Background reading -[Coinbase: Intro to Web3 Stack](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) - -[Ethereum stack](/developers/docs/ethereum-stack/) - -[Introduction to smart contracts](/developers/docs/smart-contracts/) - -[Introduction to decentralized storage](/developers/docs/storage/) +- [Ethereum stack](/developers/docs/ethereum-stack/) +-[Coinbase: Intro to Web3 Stack](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) +- [Introduction to smart contracts](/developers/docs/smart-contracts/) +- [Introduction to decentralized storage](/developers/docs/storage/) #### Recent research From a7ae9ffa3103077bfff7142b2624849d1f6f7411 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:58:56 -0600 Subject: [PATCH 284/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 6e465d1199b..9f214782123 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -390,7 +390,7 @@ Decentralizing the entire Ethereum tech stack is an important research area. Cur #### Recent research -[Smart contract composability](/developers/docs/smart-contracts/composability/) +- [Smart contract composability](/developers/docs/smart-contracts/composability/) ## Sources of Funding From aa8af2d6e12e30a72e7c09f2899dff8f4859fd22 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 12:59:40 -0600 Subject: [PATCH 285/298] Update src/content/community/research/index.md Co-authored-by: Joshua <62268199+minimalsm@users.noreply.github.com> --- src/content/community/research/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/research/index.md b/src/content/community/research/index.md index 9f214782123..a01d6bfff85 100644 --- a/src/content/community/research/index.md +++ b/src/content/community/research/index.md @@ -394,4 +394,4 @@ Decentralizing the entire Ethereum tech stack is an important research area. Cur ## Sources of Funding -You can get involved with Ethereum research and get paid for it! For example, the [Ethereum Foundation](/foundation/) recently ran an [Academic Grants](/community/grants/academic-grants-round/) funding round. Information on active and upcoming funding opportunities can be found on the [Ethereum grants page](/community/grants/). +You can get involved with Ethereum research and get paid for it! For example, [the Ethereum Foundation](/foundation/) recently ran an [Academic Grants funding round](/community/grants/academic-grants-round/). You can find information on active and upcoming funding opportunities on [the Ethereum grants page](/community/grants/). From fcb34a493e6faa8c2dca0cef30d721a34d91030c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:08:04 -0600 Subject: [PATCH 286/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 31d0805bb0b..6f86f7e81c0 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -97,7 +97,7 @@ For developers, there are many ways to add support for bridges: - Bridges alone might not be enough. dapps might need DEXs to offer more functionality such as cross-chain swaps. -4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers – the scarcest resource in crypto. +4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers—the scarcest resource in crypto. 5. **Integrating a bridge aggregator –** Another option for dapps is integrating a bridge aggregation solution that gives them access to multiple bridges. Bridge aggregators inherit the strengths of all the bridges and thus are not limited by any single bridge’s capabilities. Notably, the bridge aggregators typically maintain the bridge integrations, which saves the dapp from the hassle of staying on top of the technical and operational aspects of a bridge integration. From c0df31966c9d8878af5413b42cba7a3080a8a447 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:08:24 -0600 Subject: [PATCH 287/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 6f86f7e81c0..d905996e13f 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -70,10 +70,10 @@ To evaluate trustless bridges based on other factors, we must break them down in Bridges account for the top three [biggest hacks in DeFi](https://rekt.news/leaderboard/) and are still in the early stages of development. Using any bridge carries the following risks: -- **Smart Contract Risk –** While many bridges have successfully passed audits, all it takes is one flaw in a smart contract for assets to be exposed to hacks (ex: [Solana’s Wormhole Bridge](https://rekt.news/wormhole-rekt/)). -- **Systematic Financial Risks** – Many bridges use wrapped assets to mint canonical versions of the original asset on a new chain. This exposes the ecosystem to systematic risk, as we have seen wrapped versions of tokens exploited. -- **Trusted Third-Party Risk –** Some bridges utilize a trusted design that requires users to rely on the assumption that validators will not collude to steal user funds. The need for users to trust these third-party actors exposes them to risks such as rug pulls, censorship, and other malicious activities. -- **Open Issues –** Given that bridges are in the nascent stages of development, there are many unanswered questions related to how bridges will perform in different market conditions, like times of network congestion and during unforeseen events such as network-level attacks or state rollbacks. This uncertainty poses certain risks, the degree of which is still unknown. +- **Smart contract risk –** While many bridges have successfully passed audits, all it takes is one flaw in a smart contract for assets to be exposed to hacks (ex: [Solana’s Wormhole Bridge](https://rekt.news/wormhole-rekt/)). +- **Systematic financial risks** – Many bridges use wrapped assets to mint canonical versions of the original asset on a new chain. This exposes the ecosystem to systematic risk, as we have seen wrapped versions of tokens exploited. +- **Counterparty risk –** Some bridges utilize a trusted design that requires users to rely on the assumption that validators will not collude to steal user funds. The need for users to trust these third-party actors exposes them to risks such as rug pulls, censorship, and other malicious activities. +- **Open issues –** Given that bridges are in the nascent stages of development, there are many unanswered questions related to how bridges will perform in different market conditions, like times of network congestion and during unforeseen events such as network-level attacks or state rollbacks. This uncertainty poses certain risks, the degree of which is still unknown. ## How can dapps use bridges? {#how-can-dapps-use-bridges} From f3e3b5f1f42927adad85cf007a6569b8e7cf967b Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:08:55 -0600 Subject: [PATCH 288/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index d905996e13f..7a432748290 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -63,8 +63,8 @@ At a high level, bridges can be categorized as trusted and trustless. To evaluate trustless bridges based on other factors, we must break them down into generalized message passing bridges and liquidity networks. -- **Generalized Message Passing Bridges –** These bridges excel with security and the ability to transfer more complex data across chains. Typically, they are also good with cost-effectiveness. However, these strengths generally come at the cost of connectivity for light client bridges (ex: IBC) and speed drawbacks for optimistic bridges (ex: Nomad) that use fraud proofs. -- **Liquidity Networks –** These bridges use atomic swaps for transferring assets and are locally verified systems (i.e., they use the underlying blockchains’ validators to verify transactions). As a result, they excel with security and speed. Moreover, they are considered comparatively cost-effective and offer good connectivity. However, the major tradeoff is their ability to pass more complex data – as they don’t support cross-chain message passing. +- **Generalized message passing bridges –** These bridges excel with security and the ability to transfer more complex data across chains. Typically, they are also good with cost-effectiveness. However, these strengths generally come at the cost of connectivity for light client bridges (ex: IBC) and speed drawbacks for optimistic bridges (ex: Nomad) that use fraud proofs. +- **Liquidity networks –** These bridges use atomic swaps for transferring assets and are locally verified systems (i.e., they use the underlying blockchains’ validators to verify transactions). As a result, they excel with security and speed. Moreover, they are considered comparatively cost-effective and offer good connectivity. However, the major tradeoff is their inability to pass more complex data – as they don’t support cross-chain message passing. ## Risk with bridges {#risk-with-bridges} From 0e5e1173925a2b1bc3746908c0fda10dd5ee4aab Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:09:04 -0600 Subject: [PATCH 289/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 7a432748290..88522dac5ba 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -54,7 +54,7 @@ With bridges, there are no perfect solutions. Rather, there are only trade-offs - **Convenience –** How long does it take to complete a transaction, and how many transactions did a user need to sign? For a developer, how long does it take to integrate a bridge, and how complex is the process? - **Connectivity –** What are the different destination chains a bridge can connect (i.e., rollups, sidechains, other layer 1 blockchains, etc.), and how hard is it to integrate a new blockchain? - **Ability to pass more complex data –** Can a bridge enable the transfer of messages and more complex arbitrary data across chains, or does it only support cross-chain asset transfers? -- **Cost-Effectiveness –** How much does it cost to transfer assets across chains via a bridge? Typically, bridges charge a fixed or variable fee depending on gas costs and the liquidity of specific routes. It is also critical to evaluate the cost-effectiveness of a bridge based on the capital required to ensure its security. +- **Cost-effectiveness –** How much does it cost to transfer assets across chains via a bridge? Typically, bridges charge a fixed or variable fee depending on gas costs and the liquidity of specific routes. It is also critical to evaluate the cost-effectiveness of a bridge based on the capital required to ensure its security. At a high level, bridges can be categorized as trusted and trustless. From 8d8c105515a6064bbcf4bebb09c3ebd4e4b58cde Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:09:18 -0600 Subject: [PATCH 290/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index 88522dac5ba..f529c79fc95 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -33,9 +33,9 @@ For developers, bridges enable the following: While there are many [types of bridge designs](https://blog.li.fi/what-are-blockchain-bridges-and-how-can-we-classify-them-560dc6ec05fa), three ways to facilitate the cross-chain transfer of assets stand out: -- **Lock and Mint –** Lock assets on the source chain and mint assets on the destination chain. -- **Burn and Mint –** Burn assets on the source chain and mint assets on the destination chain. -- **Atomic Swaps –** Swap assets on the source chain for assets on the destination chain with another party. +- **Lock and mint –** Lock assets on the source chain and mint assets on the destination chain. +- **Burn and mint –** Burn assets on the source chain and mint assets on the destination chain. +- **Atomic swaps –** Swap assets on the source chain for assets on the destination chain with another party. ## Bridge types {#bridge-types} From 6e076b3560cd880e8ad8543dc92e89ba7ea703d7 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:09:33 -0600 Subject: [PATCH 291/298] Update src/content/developers/docs/bridges/index.md Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/content/developers/docs/bridges/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index f529c79fc95..c42423e0c65 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -41,10 +41,10 @@ While there are many [types of bridge designs](https://blog.li.fi/what-are-block Bridges can usually be classified into one of the following buckets: -- **Native Bridges –** These bridges are typically built to bootstrap liquidity on a particular blockchain, making it easier for users to move funds to the ecosystem. For example, the [Arbitrum Bridge](https://bridge.arbitrum.io/) is built to make it convenient for users to bridge from Ethereum Mainnet to Arbitrum. Other such bridges include Polygon PoS Bridge, [Optimism Gateway](https://gateway.optimism.io/), etc. -- **Validator or Oracle Based Bridges –** These bridges rely on an external validator set or oracles to validate cross-chain transfers. Examples: Multichain and Across. -- **Generalized Message Passing Bridges –** These bridges can transfer assets, along with messages and arbitrary data across chains. Examples: Nomad and LayerZero. -- **Liquidity Networks –** These bridges primarily focus on transferring assets from one chain to another via atomic swaps. Generally, they don’t support cross-chain message passing. Examples: Connext and Hop. +- **Native bridges –** These bridges are typically built to bootstrap liquidity on a particular blockchain, making it easier for users to move funds to the ecosystem. For example, the [Arbitrum Bridge](https://bridge.arbitrum.io/) is built to make it convenient for users to bridge from Ethereum Mainnet to Arbitrum. Other such bridges include Polygon PoS Bridge, [Optimism Gateway](https://gateway.optimism.io/), etc. +- **Validator or oracle based bridges –** These bridges rely on an external validator set or oracles to validate cross-chain transfers. Examples: Multichain and Across. +- **Generalized message passing bridges –** These bridges can transfer assets, along with messages and arbitrary data across chains. Examples: Nomad and LayerZero. +- **Liquidity networks –** These bridges primarily focus on transferring assets from one chain to another via atomic swaps. Generally, they don’t support cross-chain message passing. Examples: Connext and Hop. ## Trade-offs to consider {#trade-offs} From 99eea934db38f6dcddcb9efd617434b3d8ab04ef Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:15:02 -0600 Subject: [PATCH 292/298] fix spacing styling --- src/content/developers/docs/bridges/index.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/content/developers/docs/bridges/index.md b/src/content/developers/docs/bridges/index.md index c42423e0c65..16a1589f295 100644 --- a/src/content/developers/docs/bridges/index.md +++ b/src/content/developers/docs/bridges/index.md @@ -90,11 +90,8 @@ For developers, there are many ways to add support for bridges: 3. **Integrating a bridge –** This solution doesn’t require the dapp to send users to the external bridge and DEX interfaces. It allows dapps to improve the user onboarding experience. However, this approach has its limitations: - Assessment and maintenance of bridges are hard and time-consuming. - - Selecting one bridge creates a single point of failure and dependency. - - The dapp is limited by the bridge’s capabilities. - - Bridges alone might not be enough. dapps might need DEXs to offer more functionality such as cross-chain swaps. 4. **Integrating multiple bridges –** This solution solves many problems associated with integrating a single bridge. However, it also has limitations, as integrating multiple bridges is resource-consuming and creates technical and communication overheads for developers—the scarcest resource in crypto. From 28fceea72cbd0574739ec6439980dd9e9ea5ca5c Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 13:19:52 -0600 Subject: [PATCH 293/298] Delete gatsby-types.d.ts --- src/gatsby-types.d.ts | 10628 ---------------------------------------- 1 file changed, 10628 deletions(-) delete mode 100644 src/gatsby-types.d.ts diff --git a/src/gatsby-types.d.ts b/src/gatsby-types.d.ts deleted file mode 100644 index 723d2708c56..00000000000 --- a/src/gatsby-types.d.ts +++ /dev/null @@ -1,10628 +0,0 @@ -/* eslint-disable */ - -/* THIS FILE IS AUTOGENERATED. CHANGES WILL BE LOST ON SUBSEQUENT RUNS. */ - -declare namespace Queries { - type Maybe = T | null - type InputMaybe = T | null - type Exact = { [K in keyof T]: T[K] } - type MakeOptional = Omit & { - [SubKey in K]?: Maybe - } - type MakeMaybe = Omit & { - [SubKey in K]: Maybe - } - /** All built-in and custom scalars, mapped to their actual values */ - type Scalars = { - /** The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID. */ - ID: string - /** The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. */ - String: string - /** The `Boolean` scalar type represents `true` or `false`. */ - Boolean: boolean - /** The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. */ - Int: number - /** The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). */ - Float: number - /** A date string, such as 2007-12-03, compliant with the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ - Date: string - /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ - JSON: Record - } - - type AVIFOptions = { - readonly lossless: InputMaybe - readonly quality: InputMaybe - readonly speed: InputMaybe - } - - type AlltimeJson = Node & { - readonly children: ReadonlyArray - readonly currency: Maybe - readonly data: Maybe>> - readonly dateRange: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly mode: Maybe - readonly name: Maybe - readonly parent: Maybe - readonly totalCosts: Maybe - readonly totalPreTranslated: Maybe - readonly totalTMSavings: Maybe - readonly unit: Maybe - readonly url: Maybe - } - - type AlltimeJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type AlltimeJsonConnection_distinctArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonConnection_groupArgs = { - field: AlltimeJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type AlltimeJsonConnection_maxArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonConnection_minArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonConnection_sumArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonData = { - readonly languages: Maybe>> - readonly user: Maybe - } - - type AlltimeJsonDataFilterInput = { - readonly languages: InputMaybe - readonly user: InputMaybe - } - - type AlltimeJsonDataFilterListInput = { - readonly elemMatch: InputMaybe - } - - type AlltimeJsonDataLanguages = { - readonly approvalCosts: Maybe - readonly approved: Maybe - readonly language: Maybe - readonly targetTranslated: Maybe - readonly translated: Maybe - readonly translatedByMt: Maybe - readonly translationCosts: Maybe - } - - type AlltimeJsonDataLanguagesApprovalCosts = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type AlltimeJsonDataLanguagesApprovalCostsFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type AlltimeJsonDataLanguagesApproved = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type AlltimeJsonDataLanguagesApprovedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type AlltimeJsonDataLanguagesFilterInput = { - readonly approvalCosts: InputMaybe - readonly approved: InputMaybe - readonly language: InputMaybe - readonly targetTranslated: InputMaybe - readonly translated: InputMaybe - readonly translatedByMt: InputMaybe - readonly translationCosts: InputMaybe - } - - type AlltimeJsonDataLanguagesFilterListInput = { - readonly elemMatch: InputMaybe - } - - type AlltimeJsonDataLanguagesLanguage = { - readonly id: Maybe - readonly name: Maybe - readonly preTranslate: Maybe - readonly tmSavings: Maybe - readonly totalCosts: Maybe - } - - type AlltimeJsonDataLanguagesLanguageFilterInput = { - readonly id: InputMaybe - readonly name: InputMaybe - readonly preTranslate: InputMaybe - readonly tmSavings: InputMaybe - readonly totalCosts: InputMaybe - } - - type AlltimeJsonDataLanguagesTargetTranslated = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type AlltimeJsonDataLanguagesTargetTranslatedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type AlltimeJsonDataLanguagesTranslated = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type AlltimeJsonDataLanguagesTranslatedByMt = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type AlltimeJsonDataLanguagesTranslatedByMtFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type AlltimeJsonDataLanguagesTranslatedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type AlltimeJsonDataLanguagesTranslationCosts = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type AlltimeJsonDataLanguagesTranslationCostsFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type AlltimeJsonDataUser = { - readonly avatarUrl: Maybe - readonly fullName: Maybe - readonly id: Maybe - readonly preTranslated: Maybe - readonly totalCosts: Maybe - readonly userRole: Maybe - readonly username: Maybe - } - - type AlltimeJsonDataUserFilterInput = { - readonly avatarUrl: InputMaybe - readonly fullName: InputMaybe - readonly id: InputMaybe - readonly preTranslated: InputMaybe - readonly totalCosts: InputMaybe - readonly userRole: InputMaybe - readonly username: InputMaybe - } - - type AlltimeJsonDateRange = { - readonly from: Maybe - readonly to: Maybe - } - - type AlltimeJsonDateRange_fromArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type AlltimeJsonDateRange_toArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type AlltimeJsonDateRangeFilterInput = { - readonly from: InputMaybe - readonly to: InputMaybe - } - - type AlltimeJsonEdge = { - readonly next: Maybe - readonly node: AlltimeJson - readonly previous: Maybe - } - - type AlltimeJsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "currency" - | "data" - | "data.languages" - | "data.languages.approvalCosts.default" - | "data.languages.approvalCosts.tmMatch" - | "data.languages.approvalCosts.total" - | "data.languages.approved.default" - | "data.languages.approved.tmMatch" - | "data.languages.approved.total" - | "data.languages.language.id" - | "data.languages.language.name" - | "data.languages.language.preTranslate" - | "data.languages.language.tmSavings" - | "data.languages.language.totalCosts" - | "data.languages.targetTranslated.default" - | "data.languages.targetTranslated.tmMatch" - | "data.languages.targetTranslated.total" - | "data.languages.translatedByMt.default" - | "data.languages.translatedByMt.tmMatch" - | "data.languages.translatedByMt.total" - | "data.languages.translated.default" - | "data.languages.translated.tmMatch" - | "data.languages.translated.total" - | "data.languages.translationCosts.default" - | "data.languages.translationCosts.tmMatch" - | "data.languages.translationCosts.total" - | "data.user.avatarUrl" - | "data.user.fullName" - | "data.user.id" - | "data.user.preTranslated" - | "data.user.totalCosts" - | "data.user.userRole" - | "data.user.username" - | "dateRange.from" - | "dateRange.to" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "mode" - | "name" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "totalCosts" - | "totalPreTranslated" - | "totalTMSavings" - | "unit" - | "url" - - type AlltimeJsonFilterInput = { - readonly children: InputMaybe - readonly currency: InputMaybe - readonly data: InputMaybe - readonly dateRange: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly mode: InputMaybe - readonly name: InputMaybe - readonly parent: InputMaybe - readonly totalCosts: InputMaybe - readonly totalPreTranslated: InputMaybe - readonly totalTMSavings: InputMaybe - readonly unit: InputMaybe - readonly url: InputMaybe - } - - type AlltimeJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type AlltimeJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type AlltimeJsonGroupConnection_distinctArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonGroupConnection_groupArgs = { - field: AlltimeJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type AlltimeJsonGroupConnection_maxArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonGroupConnection_minArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonGroupConnection_sumArgs = { - field: AlltimeJsonFieldsEnum - } - - type AlltimeJsonSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type BlurredOptions = { - /** Force the output format for the low-res preview. Default is to use the same format as the input. You should rarely need to change this */ - readonly toFormat: InputMaybe - /** Width of the generated low-res preview. Default is 20px */ - readonly width: InputMaybe - } - - type BooleanQueryOperatorInput = { - readonly eq: InputMaybe - readonly in: InputMaybe>> - readonly ne: InputMaybe - readonly nin: InputMaybe>> - } - - type CexLayer2SupportJson = Node & { - readonly children: ReadonlyArray - readonly id: Scalars["ID"] - readonly internal: Internal - readonly name: Maybe - readonly parent: Maybe - readonly supports_deposits: Maybe>> - readonly supports_withdrawals: Maybe< - ReadonlyArray> - > - readonly url: Maybe - } - - type CexLayer2SupportJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type CexLayer2SupportJsonConnection_distinctArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonConnection_groupArgs = { - field: CexLayer2SupportJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type CexLayer2SupportJsonConnection_maxArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonConnection_minArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonConnection_sumArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonEdge = { - readonly next: Maybe - readonly node: CexLayer2SupportJson - readonly previous: Maybe - } - - type CexLayer2SupportJsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "name" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "supports_deposits" - | "supports_withdrawals" - | "url" - - type CexLayer2SupportJsonFilterInput = { - readonly children: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly name: InputMaybe - readonly parent: InputMaybe - readonly supports_deposits: InputMaybe - readonly supports_withdrawals: InputMaybe - readonly url: InputMaybe - } - - type CexLayer2SupportJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type CexLayer2SupportJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type CexLayer2SupportJsonGroupConnection_distinctArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonGroupConnection_groupArgs = { - field: CexLayer2SupportJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type CexLayer2SupportJsonGroupConnection_maxArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonGroupConnection_minArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonGroupConnection_sumArgs = { - field: CexLayer2SupportJsonFieldsEnum - } - - type CexLayer2SupportJsonSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type CommunityEventsJson = Node & { - readonly children: ReadonlyArray - readonly description: Maybe - readonly endDate: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly location: Maybe - readonly parent: Maybe - readonly sponsor: Maybe - readonly startDate: Maybe - readonly title: Maybe - readonly to: Maybe - } - - type CommunityEventsJson_endDateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type CommunityEventsJson_startDateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type CommunityEventsJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type CommunityEventsJsonConnection_distinctArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonConnection_groupArgs = { - field: CommunityEventsJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type CommunityEventsJsonConnection_maxArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonConnection_minArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonConnection_sumArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonEdge = { - readonly next: Maybe - readonly node: CommunityEventsJson - readonly previous: Maybe - } - - type CommunityEventsJsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "description" - | "endDate" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "location" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "sponsor" - | "startDate" - | "title" - | "to" - - type CommunityEventsJsonFilterInput = { - readonly children: InputMaybe - readonly description: InputMaybe - readonly endDate: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly location: InputMaybe - readonly parent: InputMaybe - readonly sponsor: InputMaybe - readonly startDate: InputMaybe - readonly title: InputMaybe - readonly to: InputMaybe - } - - type CommunityEventsJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type CommunityEventsJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type CommunityEventsJsonGroupConnection_distinctArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonGroupConnection_groupArgs = { - field: CommunityEventsJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type CommunityEventsJsonGroupConnection_maxArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonGroupConnection_minArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonGroupConnection_sumArgs = { - field: CommunityEventsJsonFieldsEnum - } - - type CommunityEventsJsonSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type CommunityMeetupsJson = Node & { - readonly children: ReadonlyArray - readonly emoji: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly link: Maybe - readonly location: Maybe - readonly parent: Maybe - readonly title: Maybe - } - - type CommunityMeetupsJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type CommunityMeetupsJsonConnection_distinctArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonConnection_groupArgs = { - field: CommunityMeetupsJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type CommunityMeetupsJsonConnection_maxArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonConnection_minArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonConnection_sumArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonEdge = { - readonly next: Maybe - readonly node: CommunityMeetupsJson - readonly previous: Maybe - } - - type CommunityMeetupsJsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "emoji" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "link" - | "location" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "title" - - type CommunityMeetupsJsonFilterInput = { - readonly children: InputMaybe - readonly emoji: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly link: InputMaybe - readonly location: InputMaybe - readonly parent: InputMaybe - readonly title: InputMaybe - } - - type CommunityMeetupsJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type CommunityMeetupsJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type CommunityMeetupsJsonGroupConnection_distinctArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonGroupConnection_groupArgs = { - field: CommunityMeetupsJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type CommunityMeetupsJsonGroupConnection_maxArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonGroupConnection_minArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonGroupConnection_sumArgs = { - field: CommunityMeetupsJsonFieldsEnum - } - - type CommunityMeetupsJsonSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type ConsensusBountyHuntersCsv = Node & { - readonly children: ReadonlyArray - readonly id: Scalars["ID"] - readonly internal: Internal - readonly name: Maybe - readonly parent: Maybe - readonly score: Maybe - readonly username: Maybe - } - - type ConsensusBountyHuntersCsvConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ConsensusBountyHuntersCsvConnection_distinctArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvConnection_groupArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ConsensusBountyHuntersCsvConnection_maxArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvConnection_minArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvConnection_sumArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvEdge = { - readonly next: Maybe - readonly node: ConsensusBountyHuntersCsv - readonly previous: Maybe - } - - type ConsensusBountyHuntersCsvFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "name" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "score" - | "username" - - type ConsensusBountyHuntersCsvFilterInput = { - readonly children: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly name: InputMaybe - readonly parent: InputMaybe - readonly score: InputMaybe - readonly username: InputMaybe - } - - type ConsensusBountyHuntersCsvFilterListInput = { - readonly elemMatch: InputMaybe - } - - type ConsensusBountyHuntersCsvGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ConsensusBountyHuntersCsvGroupConnection_distinctArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvGroupConnection_groupArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ConsensusBountyHuntersCsvGroupConnection_maxArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvGroupConnection_minArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvGroupConnection_sumArgs = { - field: ConsensusBountyHuntersCsvFieldsEnum - } - - type ConsensusBountyHuntersCsvSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type DataJson = Node & { - readonly children: ReadonlyArray - readonly commit: Maybe - readonly contributors: Maybe>> - readonly contributorsPerLine: Maybe - readonly files: Maybe>> - readonly id: Scalars["ID"] - readonly imageSize: Maybe - readonly internal: Internal - readonly keyGen: Maybe>> - readonly nodeTools: Maybe>> - readonly parent: Maybe - readonly pools: Maybe>> - readonly projectName: Maybe - readonly projectOwner: Maybe - readonly repoHost: Maybe - readonly repoType: Maybe - readonly saas: Maybe>> - readonly skipCi: Maybe - } - - type DataJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type DataJsonConnection_distinctArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonConnection_groupArgs = { - field: DataJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type DataJsonConnection_maxArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonConnection_minArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonConnection_sumArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonContributors = { - readonly avatar_url: Maybe - readonly contributions: Maybe>> - readonly login: Maybe - readonly name: Maybe - readonly profile: Maybe - } - - type DataJsonContributorsFilterInput = { - readonly avatar_url: InputMaybe - readonly contributions: InputMaybe - readonly login: InputMaybe - readonly name: InputMaybe - readonly profile: InputMaybe - } - - type DataJsonContributorsFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonEdge = { - readonly next: Maybe - readonly node: DataJson - readonly previous: Maybe - } - - type DataJsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "commit" - | "contributors" - | "contributorsPerLine" - | "contributors.avatar_url" - | "contributors.contributions" - | "contributors.login" - | "contributors.name" - | "contributors.profile" - | "files" - | "id" - | "imageSize" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "keyGen" - | "keyGen.audits" - | "keyGen.audits.name" - | "keyGen.audits.url" - | "keyGen.hasBugBounty" - | "keyGen.hue" - | "keyGen.isFoss" - | "keyGen.isPermissionless" - | "keyGen.isSelfCustody" - | "keyGen.isTrustless" - | "keyGen.launchDate" - | "keyGen.matomo.eventAction" - | "keyGen.matomo.eventCategory" - | "keyGen.matomo.eventName" - | "keyGen.name" - | "keyGen.platforms" - | "keyGen.socials.discord" - | "keyGen.socials.github" - | "keyGen.socials.twitter" - | "keyGen.svgPath" - | "keyGen.ui" - | "keyGen.url" - | "nodeTools" - | "nodeTools.additionalStake" - | "nodeTools.additionalStakeUnit" - | "nodeTools.audits" - | "nodeTools.audits.name" - | "nodeTools.audits.url" - | "nodeTools.easyClientSwitching" - | "nodeTools.hasBugBounty" - | "nodeTools.hue" - | "nodeTools.isFoss" - | "nodeTools.isPermissionless" - | "nodeTools.isTrustless" - | "nodeTools.launchDate" - | "nodeTools.matomo.eventAction" - | "nodeTools.matomo.eventCategory" - | "nodeTools.matomo.eventName" - | "nodeTools.minEth" - | "nodeTools.multiClient" - | "nodeTools.name" - | "nodeTools.platforms" - | "nodeTools.socials.discord" - | "nodeTools.socials.github" - | "nodeTools.socials.telegram" - | "nodeTools.socials.twitter" - | "nodeTools.svgPath" - | "nodeTools.tokens" - | "nodeTools.tokens.address" - | "nodeTools.tokens.name" - | "nodeTools.tokens.symbol" - | "nodeTools.ui" - | "nodeTools.url" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "pools" - | "pools.audits" - | "pools.audits.date" - | "pools.audits.name" - | "pools.audits.url" - | "pools.feePercentage" - | "pools.hasBugBounty" - | "pools.hasPermissionlessNodes" - | "pools.hue" - | "pools.isFoss" - | "pools.isTrustless" - | "pools.launchDate" - | "pools.matomo.eventAction" - | "pools.matomo.eventCategory" - | "pools.matomo.eventName" - | "pools.minEth" - | "pools.name" - | "pools.pctMajorityClient" - | "pools.platforms" - | "pools.socials.discord" - | "pools.socials.github" - | "pools.socials.reddit" - | "pools.socials.telegram" - | "pools.socials.twitter" - | "pools.svgPath" - | "pools.telegram" - | "pools.tokens" - | "pools.tokens.address" - | "pools.tokens.name" - | "pools.tokens.symbol" - | "pools.twitter" - | "pools.ui" - | "pools.url" - | "projectName" - | "projectOwner" - | "repoHost" - | "repoType" - | "saas" - | "saas.additionalStake" - | "saas.additionalStakeUnit" - | "saas.audits" - | "saas.audits.name" - | "saas.audits.url" - | "saas.hasBugBounty" - | "saas.hue" - | "saas.isFoss" - | "saas.isPermissionless" - | "saas.isSelfCustody" - | "saas.isTrustless" - | "saas.launchDate" - | "saas.matomo.eventAction" - | "saas.matomo.eventCategory" - | "saas.matomo.eventName" - | "saas.minEth" - | "saas.monthlyFee" - | "saas.monthlyFeeUnit" - | "saas.name" - | "saas.pctMajorityClient" - | "saas.platforms" - | "saas.socials.discord" - | "saas.socials.github" - | "saas.socials.telegram" - | "saas.socials.twitter" - | "saas.svgPath" - | "saas.ui" - | "saas.url" - | "skipCi" - - type DataJsonFilterInput = { - readonly children: InputMaybe - readonly commit: InputMaybe - readonly contributors: InputMaybe - readonly contributorsPerLine: InputMaybe - readonly files: InputMaybe - readonly id: InputMaybe - readonly imageSize: InputMaybe - readonly internal: InputMaybe - readonly keyGen: InputMaybe - readonly nodeTools: InputMaybe - readonly parent: InputMaybe - readonly pools: InputMaybe - readonly projectName: InputMaybe - readonly projectOwner: InputMaybe - readonly repoHost: InputMaybe - readonly repoType: InputMaybe - readonly saas: InputMaybe - readonly skipCi: InputMaybe - } - - type DataJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type DataJsonGroupConnection_distinctArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonGroupConnection_groupArgs = { - field: DataJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type DataJsonGroupConnection_maxArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonGroupConnection_minArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonGroupConnection_sumArgs = { - field: DataJsonFieldsEnum - } - - type DataJsonKeyGen = { - readonly audits: Maybe>> - readonly hasBugBounty: Maybe - readonly hue: Maybe - readonly isFoss: Maybe - readonly isPermissionless: Maybe - readonly isSelfCustody: Maybe - readonly isTrustless: Maybe - readonly launchDate: Maybe - readonly matomo: Maybe - readonly name: Maybe - readonly platforms: Maybe>> - readonly socials: Maybe - readonly svgPath: Maybe - readonly ui: Maybe>> - readonly url: Maybe - } - - type DataJsonKeyGen_launchDateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type DataJsonKeyGenAudits = { - readonly name: Maybe - readonly url: Maybe - } - - type DataJsonKeyGenAuditsFilterInput = { - readonly name: InputMaybe - readonly url: InputMaybe - } - - type DataJsonKeyGenAuditsFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonKeyGenFilterInput = { - readonly audits: InputMaybe - readonly hasBugBounty: InputMaybe - readonly hue: InputMaybe - readonly isFoss: InputMaybe - readonly isPermissionless: InputMaybe - readonly isSelfCustody: InputMaybe - readonly isTrustless: InputMaybe - readonly launchDate: InputMaybe - readonly matomo: InputMaybe - readonly name: InputMaybe - readonly platforms: InputMaybe - readonly socials: InputMaybe - readonly svgPath: InputMaybe - readonly ui: InputMaybe - readonly url: InputMaybe - } - - type DataJsonKeyGenFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonKeyGenMatomo = { - readonly eventAction: Maybe - readonly eventCategory: Maybe - readonly eventName: Maybe - } - - type DataJsonKeyGenMatomoFilterInput = { - readonly eventAction: InputMaybe - readonly eventCategory: InputMaybe - readonly eventName: InputMaybe - } - - type DataJsonKeyGenSocials = { - readonly discord: Maybe - readonly github: Maybe - readonly twitter: Maybe - } - - type DataJsonKeyGenSocialsFilterInput = { - readonly discord: InputMaybe - readonly github: InputMaybe - readonly twitter: InputMaybe - } - - type DataJsonNodeTools = { - readonly additionalStake: Maybe - readonly additionalStakeUnit: Maybe - readonly audits: Maybe>> - readonly easyClientSwitching: Maybe - readonly hasBugBounty: Maybe - readonly hue: Maybe - readonly isFoss: Maybe - readonly isPermissionless: Maybe - readonly isTrustless: Maybe - readonly launchDate: Maybe - readonly matomo: Maybe - readonly minEth: Maybe - readonly multiClient: Maybe - readonly name: Maybe - readonly platforms: Maybe>> - readonly socials: Maybe - readonly svgPath: Maybe - readonly tokens: Maybe>> - readonly ui: Maybe>> - readonly url: Maybe - } - - type DataJsonNodeTools_launchDateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type DataJsonNodeToolsAudits = { - readonly name: Maybe - readonly url: Maybe - } - - type DataJsonNodeToolsAuditsFilterInput = { - readonly name: InputMaybe - readonly url: InputMaybe - } - - type DataJsonNodeToolsAuditsFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonNodeToolsFilterInput = { - readonly additionalStake: InputMaybe - readonly additionalStakeUnit: InputMaybe - readonly audits: InputMaybe - readonly easyClientSwitching: InputMaybe - readonly hasBugBounty: InputMaybe - readonly hue: InputMaybe - readonly isFoss: InputMaybe - readonly isPermissionless: InputMaybe - readonly isTrustless: InputMaybe - readonly launchDate: InputMaybe - readonly matomo: InputMaybe - readonly minEth: InputMaybe - readonly multiClient: InputMaybe - readonly name: InputMaybe - readonly platforms: InputMaybe - readonly socials: InputMaybe - readonly svgPath: InputMaybe - readonly tokens: InputMaybe - readonly ui: InputMaybe - readonly url: InputMaybe - } - - type DataJsonNodeToolsFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonNodeToolsMatomo = { - readonly eventAction: Maybe - readonly eventCategory: Maybe - readonly eventName: Maybe - } - - type DataJsonNodeToolsMatomoFilterInput = { - readonly eventAction: InputMaybe - readonly eventCategory: InputMaybe - readonly eventName: InputMaybe - } - - type DataJsonNodeToolsSocials = { - readonly discord: Maybe - readonly github: Maybe - readonly telegram: Maybe - readonly twitter: Maybe - } - - type DataJsonNodeToolsSocialsFilterInput = { - readonly discord: InputMaybe - readonly github: InputMaybe - readonly telegram: InputMaybe - readonly twitter: InputMaybe - } - - type DataJsonNodeToolsTokens = { - readonly address: Maybe - readonly name: Maybe - readonly symbol: Maybe - } - - type DataJsonNodeToolsTokensFilterInput = { - readonly address: InputMaybe - readonly name: InputMaybe - readonly symbol: InputMaybe - } - - type DataJsonNodeToolsTokensFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonPools = { - readonly audits: Maybe>> - readonly feePercentage: Maybe - readonly hasBugBounty: Maybe - readonly hasPermissionlessNodes: Maybe - readonly hue: Maybe - readonly isFoss: Maybe - readonly isTrustless: Maybe - readonly launchDate: Maybe - readonly matomo: Maybe - readonly minEth: Maybe - readonly name: Maybe - readonly pctMajorityClient: Maybe - readonly platforms: Maybe>> - readonly socials: Maybe - readonly svgPath: Maybe - readonly telegram: Maybe - readonly tokens: Maybe>> - readonly twitter: Maybe - readonly ui: Maybe>> - readonly url: Maybe - } - - type DataJsonPools_launchDateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type DataJsonPoolsAudits = { - readonly date: Maybe - readonly name: Maybe - readonly url: Maybe - } - - type DataJsonPoolsAudits_dateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type DataJsonPoolsAuditsFilterInput = { - readonly date: InputMaybe - readonly name: InputMaybe - readonly url: InputMaybe - } - - type DataJsonPoolsAuditsFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonPoolsFilterInput = { - readonly audits: InputMaybe - readonly feePercentage: InputMaybe - readonly hasBugBounty: InputMaybe - readonly hasPermissionlessNodes: InputMaybe - readonly hue: InputMaybe - readonly isFoss: InputMaybe - readonly isTrustless: InputMaybe - readonly launchDate: InputMaybe - readonly matomo: InputMaybe - readonly minEth: InputMaybe - readonly name: InputMaybe - readonly pctMajorityClient: InputMaybe - readonly platforms: InputMaybe - readonly socials: InputMaybe - readonly svgPath: InputMaybe - readonly telegram: InputMaybe - readonly tokens: InputMaybe - readonly twitter: InputMaybe - readonly ui: InputMaybe - readonly url: InputMaybe - } - - type DataJsonPoolsFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonPoolsMatomo = { - readonly eventAction: Maybe - readonly eventCategory: Maybe - readonly eventName: Maybe - } - - type DataJsonPoolsMatomoFilterInput = { - readonly eventAction: InputMaybe - readonly eventCategory: InputMaybe - readonly eventName: InputMaybe - } - - type DataJsonPoolsSocials = { - readonly discord: Maybe - readonly github: Maybe - readonly reddit: Maybe - readonly telegram: Maybe - readonly twitter: Maybe - } - - type DataJsonPoolsSocialsFilterInput = { - readonly discord: InputMaybe - readonly github: InputMaybe - readonly reddit: InputMaybe - readonly telegram: InputMaybe - readonly twitter: InputMaybe - } - - type DataJsonPoolsTokens = { - readonly address: Maybe - readonly name: Maybe - readonly symbol: Maybe - } - - type DataJsonPoolsTokensFilterInput = { - readonly address: InputMaybe - readonly name: InputMaybe - readonly symbol: InputMaybe - } - - type DataJsonPoolsTokensFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonSaas = { - readonly additionalStake: Maybe - readonly additionalStakeUnit: Maybe - readonly audits: Maybe>> - readonly hasBugBounty: Maybe - readonly hue: Maybe - readonly isFoss: Maybe - readonly isPermissionless: Maybe - readonly isSelfCustody: Maybe - readonly isTrustless: Maybe - readonly launchDate: Maybe - readonly matomo: Maybe - readonly minEth: Maybe - readonly monthlyFee: Maybe - readonly monthlyFeeUnit: Maybe - readonly name: Maybe - readonly pctMajorityClient: Maybe - readonly platforms: Maybe>> - readonly socials: Maybe - readonly svgPath: Maybe - readonly ui: Maybe>> - readonly url: Maybe - } - - type DataJsonSaas_launchDateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type DataJsonSaasAudits = { - readonly name: Maybe - readonly url: Maybe - } - - type DataJsonSaasAuditsFilterInput = { - readonly name: InputMaybe - readonly url: InputMaybe - } - - type DataJsonSaasAuditsFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonSaasFilterInput = { - readonly additionalStake: InputMaybe - readonly additionalStakeUnit: InputMaybe - readonly audits: InputMaybe - readonly hasBugBounty: InputMaybe - readonly hue: InputMaybe - readonly isFoss: InputMaybe - readonly isPermissionless: InputMaybe - readonly isSelfCustody: InputMaybe - readonly isTrustless: InputMaybe - readonly launchDate: InputMaybe - readonly matomo: InputMaybe - readonly minEth: InputMaybe - readonly monthlyFee: InputMaybe - readonly monthlyFeeUnit: InputMaybe - readonly name: InputMaybe - readonly pctMajorityClient: InputMaybe - readonly platforms: InputMaybe - readonly socials: InputMaybe - readonly svgPath: InputMaybe - readonly ui: InputMaybe - readonly url: InputMaybe - } - - type DataJsonSaasFilterListInput = { - readonly elemMatch: InputMaybe - } - - type DataJsonSaasMatomo = { - readonly eventAction: Maybe - readonly eventCategory: Maybe - readonly eventName: Maybe - } - - type DataJsonSaasMatomoFilterInput = { - readonly eventAction: InputMaybe - readonly eventCategory: InputMaybe - readonly eventName: InputMaybe - } - - type DataJsonSaasSocials = { - readonly discord: Maybe - readonly github: Maybe - readonly telegram: Maybe - readonly twitter: Maybe - } - - type DataJsonSaasSocialsFilterInput = { - readonly discord: InputMaybe - readonly github: InputMaybe - readonly telegram: InputMaybe - readonly twitter: InputMaybe - } - - type DataJsonSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type DateQueryOperatorInput = { - readonly eq: InputMaybe - readonly gt: InputMaybe - readonly gte: InputMaybe - readonly in: InputMaybe>> - readonly lt: InputMaybe - readonly lte: InputMaybe - readonly ne: InputMaybe - readonly nin: InputMaybe>> - } - - type Directory = Node & { - readonly absolutePath: Scalars["String"] - readonly accessTime: Scalars["Date"] - readonly atime: Scalars["Date"] - readonly atimeMs: Scalars["Float"] - readonly base: Scalars["String"] - readonly birthTime: Scalars["Date"] - /** @deprecated Use `birthTime` instead */ - readonly birthtime: Maybe - /** @deprecated Use `birthTime` instead */ - readonly birthtimeMs: Maybe - readonly changeTime: Scalars["Date"] - readonly children: ReadonlyArray - readonly ctime: Scalars["Date"] - readonly ctimeMs: Scalars["Float"] - readonly dev: Scalars["Int"] - readonly dir: Scalars["String"] - readonly ext: Scalars["String"] - readonly extension: Scalars["String"] - readonly gid: Scalars["Int"] - readonly id: Scalars["ID"] - readonly ino: Scalars["Float"] - readonly internal: Internal - readonly mode: Scalars["Int"] - readonly modifiedTime: Scalars["Date"] - readonly mtime: Scalars["Date"] - readonly mtimeMs: Scalars["Float"] - readonly name: Scalars["String"] - readonly nlink: Scalars["Int"] - readonly parent: Maybe - readonly prettySize: Scalars["String"] - readonly rdev: Scalars["Int"] - readonly relativeDirectory: Scalars["String"] - readonly relativePath: Scalars["String"] - readonly root: Scalars["String"] - readonly size: Scalars["Int"] - readonly sourceInstanceName: Scalars["String"] - readonly uid: Scalars["Int"] - } - - type Directory_accessTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type Directory_atimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type Directory_birthTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type Directory_changeTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type Directory_ctimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type Directory_modifiedTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type Directory_mtimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type DirectoryConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type DirectoryConnection_distinctArgs = { - field: DirectoryFieldsEnum - } - - type DirectoryConnection_groupArgs = { - field: DirectoryFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type DirectoryConnection_maxArgs = { - field: DirectoryFieldsEnum - } - - type DirectoryConnection_minArgs = { - field: DirectoryFieldsEnum - } - - type DirectoryConnection_sumArgs = { - field: DirectoryFieldsEnum - } - - type DirectoryEdge = { - readonly next: Maybe - readonly node: Directory - readonly previous: Maybe - } - - type DirectoryFieldsEnum = - | "absolutePath" - | "accessTime" - | "atime" - | "atimeMs" - | "base" - | "birthTime" - | "birthtime" - | "birthtimeMs" - | "changeTime" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "ctime" - | "ctimeMs" - | "dev" - | "dir" - | "ext" - | "extension" - | "gid" - | "id" - | "ino" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "mode" - | "modifiedTime" - | "mtime" - | "mtimeMs" - | "name" - | "nlink" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "prettySize" - | "rdev" - | "relativeDirectory" - | "relativePath" - | "root" - | "size" - | "sourceInstanceName" - | "uid" - - type DirectoryFilterInput = { - readonly absolutePath: InputMaybe - readonly accessTime: InputMaybe - readonly atime: InputMaybe - readonly atimeMs: InputMaybe - readonly base: InputMaybe - readonly birthTime: InputMaybe - readonly birthtime: InputMaybe - readonly birthtimeMs: InputMaybe - readonly changeTime: InputMaybe - readonly children: InputMaybe - readonly ctime: InputMaybe - readonly ctimeMs: InputMaybe - readonly dev: InputMaybe - readonly dir: InputMaybe - readonly ext: InputMaybe - readonly extension: InputMaybe - readonly gid: InputMaybe - readonly id: InputMaybe - readonly ino: InputMaybe - readonly internal: InputMaybe - readonly mode: InputMaybe - readonly modifiedTime: InputMaybe - readonly mtime: InputMaybe - readonly mtimeMs: InputMaybe - readonly name: InputMaybe - readonly nlink: InputMaybe - readonly parent: InputMaybe - readonly prettySize: InputMaybe - readonly rdev: InputMaybe - readonly relativeDirectory: InputMaybe - readonly relativePath: InputMaybe - readonly root: InputMaybe - readonly size: InputMaybe - readonly sourceInstanceName: InputMaybe - readonly uid: InputMaybe - } - - type DirectoryGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type DirectoryGroupConnection_distinctArgs = { - field: DirectoryFieldsEnum - } - - type DirectoryGroupConnection_groupArgs = { - field: DirectoryFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type DirectoryGroupConnection_maxArgs = { - field: DirectoryFieldsEnum - } - - type DirectoryGroupConnection_minArgs = { - field: DirectoryFieldsEnum - } - - type DirectoryGroupConnection_sumArgs = { - field: DirectoryFieldsEnum - } - - type DirectorySortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type DuotoneGradient = { - readonly highlight: Scalars["String"] - readonly opacity: InputMaybe - readonly shadow: Scalars["String"] - } - - type ExchangesByCountryCsv = Node & { - readonly binance: Maybe - readonly binanceus: Maybe - readonly bitbuy: Maybe - readonly bitfinex: Maybe - readonly bitflyer: Maybe - readonly bitkub: Maybe - readonly bitso: Maybe - readonly bittrex: Maybe - readonly bitvavo: Maybe - readonly bybit: Maybe - readonly children: ReadonlyArray - readonly coinbase: Maybe - readonly coinmama: Maybe - readonly coinspot: Maybe - readonly country: Maybe - readonly cryptocom: Maybe - readonly easycrypto: Maybe - readonly ftx: Maybe - readonly ftxus: Maybe - readonly gateio: Maybe - readonly gemini: Maybe - readonly huobiglobal: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly itezcom: Maybe - readonly kraken: Maybe - readonly kucoin: Maybe - readonly moonpay: Maybe - readonly mtpelerin: Maybe - readonly okx: Maybe - readonly parent: Maybe - readonly rain: Maybe - readonly simplex: Maybe - readonly wazirx: Maybe - readonly wyre: Maybe - } - - type ExchangesByCountryCsvConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ExchangesByCountryCsvConnection_distinctArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvConnection_groupArgs = { - field: ExchangesByCountryCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ExchangesByCountryCsvConnection_maxArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvConnection_minArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvConnection_sumArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvEdge = { - readonly next: Maybe - readonly node: ExchangesByCountryCsv - readonly previous: Maybe - } - - type ExchangesByCountryCsvFieldsEnum = - | "binance" - | "binanceus" - | "bitbuy" - | "bitfinex" - | "bitflyer" - | "bitkub" - | "bitso" - | "bittrex" - | "bitvavo" - | "bybit" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "coinbase" - | "coinmama" - | "coinspot" - | "country" - | "cryptocom" - | "easycrypto" - | "ftx" - | "ftxus" - | "gateio" - | "gemini" - | "huobiglobal" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "itezcom" - | "kraken" - | "kucoin" - | "moonpay" - | "mtpelerin" - | "okx" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "rain" - | "simplex" - | "wazirx" - | "wyre" - - type ExchangesByCountryCsvFilterInput = { - readonly binance: InputMaybe - readonly binanceus: InputMaybe - readonly bitbuy: InputMaybe - readonly bitfinex: InputMaybe - readonly bitflyer: InputMaybe - readonly bitkub: InputMaybe - readonly bitso: InputMaybe - readonly bittrex: InputMaybe - readonly bitvavo: InputMaybe - readonly bybit: InputMaybe - readonly children: InputMaybe - readonly coinbase: InputMaybe - readonly coinmama: InputMaybe - readonly coinspot: InputMaybe - readonly country: InputMaybe - readonly cryptocom: InputMaybe - readonly easycrypto: InputMaybe - readonly ftx: InputMaybe - readonly ftxus: InputMaybe - readonly gateio: InputMaybe - readonly gemini: InputMaybe - readonly huobiglobal: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly itezcom: InputMaybe - readonly kraken: InputMaybe - readonly kucoin: InputMaybe - readonly moonpay: InputMaybe - readonly mtpelerin: InputMaybe - readonly okx: InputMaybe - readonly parent: InputMaybe - readonly rain: InputMaybe - readonly simplex: InputMaybe - readonly wazirx: InputMaybe - readonly wyre: InputMaybe - } - - type ExchangesByCountryCsvFilterListInput = { - readonly elemMatch: InputMaybe - } - - type ExchangesByCountryCsvGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ExchangesByCountryCsvGroupConnection_distinctArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvGroupConnection_groupArgs = { - field: ExchangesByCountryCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ExchangesByCountryCsvGroupConnection_maxArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvGroupConnection_minArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvGroupConnection_sumArgs = { - field: ExchangesByCountryCsvFieldsEnum - } - - type ExchangesByCountryCsvSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type ExecutionBountyHuntersCsv = Node & { - readonly children: ReadonlyArray - readonly id: Scalars["ID"] - readonly internal: Internal - readonly name: Maybe - readonly parent: Maybe - readonly score: Maybe - readonly username: Maybe - } - - type ExecutionBountyHuntersCsvConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ExecutionBountyHuntersCsvConnection_distinctArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvConnection_groupArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ExecutionBountyHuntersCsvConnection_maxArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvConnection_minArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvConnection_sumArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvEdge = { - readonly next: Maybe - readonly node: ExecutionBountyHuntersCsv - readonly previous: Maybe - } - - type ExecutionBountyHuntersCsvFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "name" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "score" - | "username" - - type ExecutionBountyHuntersCsvFilterInput = { - readonly children: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly name: InputMaybe - readonly parent: InputMaybe - readonly score: InputMaybe - readonly username: InputMaybe - } - - type ExecutionBountyHuntersCsvFilterListInput = { - readonly elemMatch: InputMaybe - } - - type ExecutionBountyHuntersCsvGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ExecutionBountyHuntersCsvGroupConnection_distinctArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvGroupConnection_groupArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ExecutionBountyHuntersCsvGroupConnection_maxArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvGroupConnection_minArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvGroupConnection_sumArgs = { - field: ExecutionBountyHuntersCsvFieldsEnum - } - - type ExecutionBountyHuntersCsvSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type ExternalTutorialsJson = Node & { - readonly author: Maybe - readonly authorGithub: Maybe - readonly children: ReadonlyArray - readonly description: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly lang: Maybe - readonly parent: Maybe - readonly publishDate: Maybe - readonly skillLevel: Maybe - readonly tags: Maybe>> - readonly timeToRead: Maybe - readonly title: Maybe - readonly url: Maybe - } - - type ExternalTutorialsJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ExternalTutorialsJsonConnection_distinctArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonConnection_groupArgs = { - field: ExternalTutorialsJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ExternalTutorialsJsonConnection_maxArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonConnection_minArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonConnection_sumArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonEdge = { - readonly next: Maybe - readonly node: ExternalTutorialsJson - readonly previous: Maybe - } - - type ExternalTutorialsJsonFieldsEnum = - | "author" - | "authorGithub" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "description" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "lang" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "publishDate" - | "skillLevel" - | "tags" - | "timeToRead" - | "title" - | "url" - - type ExternalTutorialsJsonFilterInput = { - readonly author: InputMaybe - readonly authorGithub: InputMaybe - readonly children: InputMaybe - readonly description: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly lang: InputMaybe - readonly parent: InputMaybe - readonly publishDate: InputMaybe - readonly skillLevel: InputMaybe - readonly tags: InputMaybe - readonly timeToRead: InputMaybe - readonly title: InputMaybe - readonly url: InputMaybe - } - - type ExternalTutorialsJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type ExternalTutorialsJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ExternalTutorialsJsonGroupConnection_distinctArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonGroupConnection_groupArgs = { - field: ExternalTutorialsJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ExternalTutorialsJsonGroupConnection_maxArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonGroupConnection_minArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonGroupConnection_sumArgs = { - field: ExternalTutorialsJsonFieldsEnum - } - - type ExternalTutorialsJsonSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type File = Node & { - readonly absolutePath: Scalars["String"] - readonly accessTime: Scalars["Date"] - readonly atime: Scalars["Date"] - readonly atimeMs: Scalars["Float"] - readonly base: Scalars["String"] - readonly birthTime: Scalars["Date"] - /** @deprecated Use `birthTime` instead */ - readonly birthtime: Maybe - /** @deprecated Use `birthTime` instead */ - readonly birthtimeMs: Maybe - readonly blksize: Maybe - readonly blocks: Maybe - readonly changeTime: Scalars["Date"] - /** Returns the first child node of type AlltimeJson or null if there are no children of given type on this node */ - readonly childAlltimeJson: Maybe - /** Returns the first child node of type CexLayer2SupportJson or null if there are no children of given type on this node */ - readonly childCexLayer2SupportJson: Maybe - /** Returns the first child node of type CommunityEventsJson or null if there are no children of given type on this node */ - readonly childCommunityEventsJson: Maybe - /** Returns the first child node of type CommunityMeetupsJson or null if there are no children of given type on this node */ - readonly childCommunityMeetupsJson: Maybe - /** Returns the first child node of type ConsensusBountyHuntersCsv or null if there are no children of given type on this node */ - readonly childConsensusBountyHuntersCsv: Maybe - /** Returns the first child node of type DataJson or null if there are no children of given type on this node */ - readonly childDataJson: Maybe - /** Returns the first child node of type ExchangesByCountryCsv or null if there are no children of given type on this node */ - readonly childExchangesByCountryCsv: Maybe - /** Returns the first child node of type ExecutionBountyHuntersCsv or null if there are no children of given type on this node */ - readonly childExecutionBountyHuntersCsv: Maybe - /** Returns the first child node of type ExternalTutorialsJson or null if there are no children of given type on this node */ - readonly childExternalTutorialsJson: Maybe - /** Returns the first child node of type ImageSharp or null if there are no children of given type on this node */ - readonly childImageSharp: Maybe - /** Returns the first child node of type Layer2Json or null if there are no children of given type on this node */ - readonly childLayer2Json: Maybe - /** Returns the first child node of type Mdx or null if there are no children of given type on this node */ - readonly childMdx: Maybe - /** Returns the first child node of type MonthJson or null if there are no children of given type on this node */ - readonly childMonthJson: Maybe - /** Returns the first child node of type QuarterJson or null if there are no children of given type on this node */ - readonly childQuarterJson: Maybe - /** Returns the first child node of type WalletsCsv or null if there are no children of given type on this node */ - readonly childWalletsCsv: Maybe - readonly children: ReadonlyArray - /** Returns all children nodes filtered by type AlltimeJson */ - readonly childrenAlltimeJson: Maybe>> - /** Returns all children nodes filtered by type CexLayer2SupportJson */ - readonly childrenCexLayer2SupportJson: Maybe< - ReadonlyArray> - > - /** Returns all children nodes filtered by type CommunityEventsJson */ - readonly childrenCommunityEventsJson: Maybe< - ReadonlyArray> - > - /** Returns all children nodes filtered by type CommunityMeetupsJson */ - readonly childrenCommunityMeetupsJson: Maybe< - ReadonlyArray> - > - /** Returns all children nodes filtered by type ConsensusBountyHuntersCsv */ - readonly childrenConsensusBountyHuntersCsv: Maybe< - ReadonlyArray> - > - /** Returns all children nodes filtered by type DataJson */ - readonly childrenDataJson: Maybe>> - /** Returns all children nodes filtered by type ExchangesByCountryCsv */ - readonly childrenExchangesByCountryCsv: Maybe< - ReadonlyArray> - > - /** Returns all children nodes filtered by type ExecutionBountyHuntersCsv */ - readonly childrenExecutionBountyHuntersCsv: Maybe< - ReadonlyArray> - > - /** Returns all children nodes filtered by type ExternalTutorialsJson */ - readonly childrenExternalTutorialsJson: Maybe< - ReadonlyArray> - > - /** Returns all children nodes filtered by type ImageSharp */ - readonly childrenImageSharp: Maybe>> - /** Returns all children nodes filtered by type Layer2Json */ - readonly childrenLayer2Json: Maybe>> - /** Returns all children nodes filtered by type Mdx */ - readonly childrenMdx: Maybe>> - /** Returns all children nodes filtered by type MonthJson */ - readonly childrenMonthJson: Maybe>> - /** Returns all children nodes filtered by type QuarterJson */ - readonly childrenQuarterJson: Maybe>> - /** Returns all children nodes filtered by type WalletsCsv */ - readonly childrenWalletsCsv: Maybe>> - readonly ctime: Scalars["Date"] - readonly ctimeMs: Scalars["Float"] - readonly dev: Scalars["Int"] - readonly dir: Scalars["String"] - readonly ext: Scalars["String"] - readonly extension: Scalars["String"] - readonly fields: Maybe - readonly gid: Scalars["Int"] - readonly id: Scalars["ID"] - readonly ino: Scalars["Float"] - readonly internal: Internal - readonly mode: Scalars["Int"] - readonly modifiedTime: Scalars["Date"] - readonly mtime: Scalars["Date"] - readonly mtimeMs: Scalars["Float"] - readonly name: Scalars["String"] - readonly nlink: Scalars["Int"] - readonly parent: Maybe - readonly prettySize: Scalars["String"] - /** Copy file to static directory and return public url to it */ - readonly publicURL: Maybe - readonly rdev: Scalars["Int"] - readonly relativeDirectory: Scalars["String"] - readonly relativePath: Scalars["String"] - readonly root: Scalars["String"] - readonly size: Scalars["Int"] - readonly sourceInstanceName: Scalars["String"] - readonly uid: Scalars["Int"] - } - - type File_accessTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type File_atimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type File_birthTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type File_changeTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type File_ctimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type File_modifiedTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type File_mtimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type FileConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type FileConnection_distinctArgs = { - field: FileFieldsEnum - } - - type FileConnection_groupArgs = { - field: FileFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type FileConnection_maxArgs = { - field: FileFieldsEnum - } - - type FileConnection_minArgs = { - field: FileFieldsEnum - } - - type FileConnection_sumArgs = { - field: FileFieldsEnum - } - - type FileEdge = { - readonly next: Maybe - readonly node: File - readonly previous: Maybe - } - - type FileFields = { - readonly gitLogLatestAuthorEmail: Maybe - readonly gitLogLatestAuthorName: Maybe - readonly gitLogLatestDate: Maybe - } - - type FileFields_gitLogLatestDateArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type FileFieldsEnum = - | "absolutePath" - | "accessTime" - | "atime" - | "atimeMs" - | "base" - | "birthTime" - | "birthtime" - | "birthtimeMs" - | "blksize" - | "blocks" - | "changeTime" - | "childAlltimeJson.children" - | "childAlltimeJson.children.children" - | "childAlltimeJson.children.children.children" - | "childAlltimeJson.children.children.id" - | "childAlltimeJson.children.id" - | "childAlltimeJson.children.internal.content" - | "childAlltimeJson.children.internal.contentDigest" - | "childAlltimeJson.children.internal.description" - | "childAlltimeJson.children.internal.fieldOwners" - | "childAlltimeJson.children.internal.ignoreType" - | "childAlltimeJson.children.internal.mediaType" - | "childAlltimeJson.children.internal.owner" - | "childAlltimeJson.children.internal.type" - | "childAlltimeJson.children.parent.children" - | "childAlltimeJson.children.parent.id" - | "childAlltimeJson.currency" - | "childAlltimeJson.data" - | "childAlltimeJson.data.languages" - | "childAlltimeJson.data.user.avatarUrl" - | "childAlltimeJson.data.user.fullName" - | "childAlltimeJson.data.user.id" - | "childAlltimeJson.data.user.preTranslated" - | "childAlltimeJson.data.user.totalCosts" - | "childAlltimeJson.data.user.userRole" - | "childAlltimeJson.data.user.username" - | "childAlltimeJson.dateRange.from" - | "childAlltimeJson.dateRange.to" - | "childAlltimeJson.id" - | "childAlltimeJson.internal.content" - | "childAlltimeJson.internal.contentDigest" - | "childAlltimeJson.internal.description" - | "childAlltimeJson.internal.fieldOwners" - | "childAlltimeJson.internal.ignoreType" - | "childAlltimeJson.internal.mediaType" - | "childAlltimeJson.internal.owner" - | "childAlltimeJson.internal.type" - | "childAlltimeJson.mode" - | "childAlltimeJson.name" - | "childAlltimeJson.parent.children" - | "childAlltimeJson.parent.children.children" - | "childAlltimeJson.parent.children.id" - | "childAlltimeJson.parent.id" - | "childAlltimeJson.parent.internal.content" - | "childAlltimeJson.parent.internal.contentDigest" - | "childAlltimeJson.parent.internal.description" - | "childAlltimeJson.parent.internal.fieldOwners" - | "childAlltimeJson.parent.internal.ignoreType" - | "childAlltimeJson.parent.internal.mediaType" - | "childAlltimeJson.parent.internal.owner" - | "childAlltimeJson.parent.internal.type" - | "childAlltimeJson.parent.parent.children" - | "childAlltimeJson.parent.parent.id" - | "childAlltimeJson.totalCosts" - | "childAlltimeJson.totalPreTranslated" - | "childAlltimeJson.totalTMSavings" - | "childAlltimeJson.unit" - | "childAlltimeJson.url" - | "childCexLayer2SupportJson.children" - | "childCexLayer2SupportJson.children.children" - | "childCexLayer2SupportJson.children.children.children" - | "childCexLayer2SupportJson.children.children.id" - | "childCexLayer2SupportJson.children.id" - | "childCexLayer2SupportJson.children.internal.content" - | "childCexLayer2SupportJson.children.internal.contentDigest" - | "childCexLayer2SupportJson.children.internal.description" - | "childCexLayer2SupportJson.children.internal.fieldOwners" - | "childCexLayer2SupportJson.children.internal.ignoreType" - | "childCexLayer2SupportJson.children.internal.mediaType" - | "childCexLayer2SupportJson.children.internal.owner" - | "childCexLayer2SupportJson.children.internal.type" - | "childCexLayer2SupportJson.children.parent.children" - | "childCexLayer2SupportJson.children.parent.id" - | "childCexLayer2SupportJson.id" - | "childCexLayer2SupportJson.internal.content" - | "childCexLayer2SupportJson.internal.contentDigest" - | "childCexLayer2SupportJson.internal.description" - | "childCexLayer2SupportJson.internal.fieldOwners" - | "childCexLayer2SupportJson.internal.ignoreType" - | "childCexLayer2SupportJson.internal.mediaType" - | "childCexLayer2SupportJson.internal.owner" - | "childCexLayer2SupportJson.internal.type" - | "childCexLayer2SupportJson.name" - | "childCexLayer2SupportJson.parent.children" - | "childCexLayer2SupportJson.parent.children.children" - | "childCexLayer2SupportJson.parent.children.id" - | "childCexLayer2SupportJson.parent.id" - | "childCexLayer2SupportJson.parent.internal.content" - | "childCexLayer2SupportJson.parent.internal.contentDigest" - | "childCexLayer2SupportJson.parent.internal.description" - | "childCexLayer2SupportJson.parent.internal.fieldOwners" - | "childCexLayer2SupportJson.parent.internal.ignoreType" - | "childCexLayer2SupportJson.parent.internal.mediaType" - | "childCexLayer2SupportJson.parent.internal.owner" - | "childCexLayer2SupportJson.parent.internal.type" - | "childCexLayer2SupportJson.parent.parent.children" - | "childCexLayer2SupportJson.parent.parent.id" - | "childCexLayer2SupportJson.supports_deposits" - | "childCexLayer2SupportJson.supports_withdrawals" - | "childCexLayer2SupportJson.url" - | "childCommunityEventsJson.children" - | "childCommunityEventsJson.children.children" - | "childCommunityEventsJson.children.children.children" - | "childCommunityEventsJson.children.children.id" - | "childCommunityEventsJson.children.id" - | "childCommunityEventsJson.children.internal.content" - | "childCommunityEventsJson.children.internal.contentDigest" - | "childCommunityEventsJson.children.internal.description" - | "childCommunityEventsJson.children.internal.fieldOwners" - | "childCommunityEventsJson.children.internal.ignoreType" - | "childCommunityEventsJson.children.internal.mediaType" - | "childCommunityEventsJson.children.internal.owner" - | "childCommunityEventsJson.children.internal.type" - | "childCommunityEventsJson.children.parent.children" - | "childCommunityEventsJson.children.parent.id" - | "childCommunityEventsJson.description" - | "childCommunityEventsJson.endDate" - | "childCommunityEventsJson.id" - | "childCommunityEventsJson.internal.content" - | "childCommunityEventsJson.internal.contentDigest" - | "childCommunityEventsJson.internal.description" - | "childCommunityEventsJson.internal.fieldOwners" - | "childCommunityEventsJson.internal.ignoreType" - | "childCommunityEventsJson.internal.mediaType" - | "childCommunityEventsJson.internal.owner" - | "childCommunityEventsJson.internal.type" - | "childCommunityEventsJson.location" - | "childCommunityEventsJson.parent.children" - | "childCommunityEventsJson.parent.children.children" - | "childCommunityEventsJson.parent.children.id" - | "childCommunityEventsJson.parent.id" - | "childCommunityEventsJson.parent.internal.content" - | "childCommunityEventsJson.parent.internal.contentDigest" - | "childCommunityEventsJson.parent.internal.description" - | "childCommunityEventsJson.parent.internal.fieldOwners" - | "childCommunityEventsJson.parent.internal.ignoreType" - | "childCommunityEventsJson.parent.internal.mediaType" - | "childCommunityEventsJson.parent.internal.owner" - | "childCommunityEventsJson.parent.internal.type" - | "childCommunityEventsJson.parent.parent.children" - | "childCommunityEventsJson.parent.parent.id" - | "childCommunityEventsJson.sponsor" - | "childCommunityEventsJson.startDate" - | "childCommunityEventsJson.title" - | "childCommunityEventsJson.to" - | "childCommunityMeetupsJson.children" - | "childCommunityMeetupsJson.children.children" - | "childCommunityMeetupsJson.children.children.children" - | "childCommunityMeetupsJson.children.children.id" - | "childCommunityMeetupsJson.children.id" - | "childCommunityMeetupsJson.children.internal.content" - | "childCommunityMeetupsJson.children.internal.contentDigest" - | "childCommunityMeetupsJson.children.internal.description" - | "childCommunityMeetupsJson.children.internal.fieldOwners" - | "childCommunityMeetupsJson.children.internal.ignoreType" - | "childCommunityMeetupsJson.children.internal.mediaType" - | "childCommunityMeetupsJson.children.internal.owner" - | "childCommunityMeetupsJson.children.internal.type" - | "childCommunityMeetupsJson.children.parent.children" - | "childCommunityMeetupsJson.children.parent.id" - | "childCommunityMeetupsJson.emoji" - | "childCommunityMeetupsJson.id" - | "childCommunityMeetupsJson.internal.content" - | "childCommunityMeetupsJson.internal.contentDigest" - | "childCommunityMeetupsJson.internal.description" - | "childCommunityMeetupsJson.internal.fieldOwners" - | "childCommunityMeetupsJson.internal.ignoreType" - | "childCommunityMeetupsJson.internal.mediaType" - | "childCommunityMeetupsJson.internal.owner" - | "childCommunityMeetupsJson.internal.type" - | "childCommunityMeetupsJson.link" - | "childCommunityMeetupsJson.location" - | "childCommunityMeetupsJson.parent.children" - | "childCommunityMeetupsJson.parent.children.children" - | "childCommunityMeetupsJson.parent.children.id" - | "childCommunityMeetupsJson.parent.id" - | "childCommunityMeetupsJson.parent.internal.content" - | "childCommunityMeetupsJson.parent.internal.contentDigest" - | "childCommunityMeetupsJson.parent.internal.description" - | "childCommunityMeetupsJson.parent.internal.fieldOwners" - | "childCommunityMeetupsJson.parent.internal.ignoreType" - | "childCommunityMeetupsJson.parent.internal.mediaType" - | "childCommunityMeetupsJson.parent.internal.owner" - | "childCommunityMeetupsJson.parent.internal.type" - | "childCommunityMeetupsJson.parent.parent.children" - | "childCommunityMeetupsJson.parent.parent.id" - | "childCommunityMeetupsJson.title" - | "childConsensusBountyHuntersCsv.children" - | "childConsensusBountyHuntersCsv.children.children" - | "childConsensusBountyHuntersCsv.children.children.children" - | "childConsensusBountyHuntersCsv.children.children.id" - | "childConsensusBountyHuntersCsv.children.id" - | "childConsensusBountyHuntersCsv.children.internal.content" - | "childConsensusBountyHuntersCsv.children.internal.contentDigest" - | "childConsensusBountyHuntersCsv.children.internal.description" - | "childConsensusBountyHuntersCsv.children.internal.fieldOwners" - | "childConsensusBountyHuntersCsv.children.internal.ignoreType" - | "childConsensusBountyHuntersCsv.children.internal.mediaType" - | "childConsensusBountyHuntersCsv.children.internal.owner" - | "childConsensusBountyHuntersCsv.children.internal.type" - | "childConsensusBountyHuntersCsv.children.parent.children" - | "childConsensusBountyHuntersCsv.children.parent.id" - | "childConsensusBountyHuntersCsv.id" - | "childConsensusBountyHuntersCsv.internal.content" - | "childConsensusBountyHuntersCsv.internal.contentDigest" - | "childConsensusBountyHuntersCsv.internal.description" - | "childConsensusBountyHuntersCsv.internal.fieldOwners" - | "childConsensusBountyHuntersCsv.internal.ignoreType" - | "childConsensusBountyHuntersCsv.internal.mediaType" - | "childConsensusBountyHuntersCsv.internal.owner" - | "childConsensusBountyHuntersCsv.internal.type" - | "childConsensusBountyHuntersCsv.name" - | "childConsensusBountyHuntersCsv.parent.children" - | "childConsensusBountyHuntersCsv.parent.children.children" - | "childConsensusBountyHuntersCsv.parent.children.id" - | "childConsensusBountyHuntersCsv.parent.id" - | "childConsensusBountyHuntersCsv.parent.internal.content" - | "childConsensusBountyHuntersCsv.parent.internal.contentDigest" - | "childConsensusBountyHuntersCsv.parent.internal.description" - | "childConsensusBountyHuntersCsv.parent.internal.fieldOwners" - | "childConsensusBountyHuntersCsv.parent.internal.ignoreType" - | "childConsensusBountyHuntersCsv.parent.internal.mediaType" - | "childConsensusBountyHuntersCsv.parent.internal.owner" - | "childConsensusBountyHuntersCsv.parent.internal.type" - | "childConsensusBountyHuntersCsv.parent.parent.children" - | "childConsensusBountyHuntersCsv.parent.parent.id" - | "childConsensusBountyHuntersCsv.score" - | "childConsensusBountyHuntersCsv.username" - | "childDataJson.children" - | "childDataJson.children.children" - | "childDataJson.children.children.children" - | "childDataJson.children.children.id" - | "childDataJson.children.id" - | "childDataJson.children.internal.content" - | "childDataJson.children.internal.contentDigest" - | "childDataJson.children.internal.description" - | "childDataJson.children.internal.fieldOwners" - | "childDataJson.children.internal.ignoreType" - | "childDataJson.children.internal.mediaType" - | "childDataJson.children.internal.owner" - | "childDataJson.children.internal.type" - | "childDataJson.children.parent.children" - | "childDataJson.children.parent.id" - | "childDataJson.commit" - | "childDataJson.contributors" - | "childDataJson.contributorsPerLine" - | "childDataJson.contributors.avatar_url" - | "childDataJson.contributors.contributions" - | "childDataJson.contributors.login" - | "childDataJson.contributors.name" - | "childDataJson.contributors.profile" - | "childDataJson.files" - | "childDataJson.id" - | "childDataJson.imageSize" - | "childDataJson.internal.content" - | "childDataJson.internal.contentDigest" - | "childDataJson.internal.description" - | "childDataJson.internal.fieldOwners" - | "childDataJson.internal.ignoreType" - | "childDataJson.internal.mediaType" - | "childDataJson.internal.owner" - | "childDataJson.internal.type" - | "childDataJson.keyGen" - | "childDataJson.keyGen.audits" - | "childDataJson.keyGen.audits.name" - | "childDataJson.keyGen.audits.url" - | "childDataJson.keyGen.hasBugBounty" - | "childDataJson.keyGen.hue" - | "childDataJson.keyGen.isFoss" - | "childDataJson.keyGen.isPermissionless" - | "childDataJson.keyGen.isSelfCustody" - | "childDataJson.keyGen.isTrustless" - | "childDataJson.keyGen.launchDate" - | "childDataJson.keyGen.matomo.eventAction" - | "childDataJson.keyGen.matomo.eventCategory" - | "childDataJson.keyGen.matomo.eventName" - | "childDataJson.keyGen.name" - | "childDataJson.keyGen.platforms" - | "childDataJson.keyGen.socials.discord" - | "childDataJson.keyGen.socials.github" - | "childDataJson.keyGen.socials.twitter" - | "childDataJson.keyGen.svgPath" - | "childDataJson.keyGen.ui" - | "childDataJson.keyGen.url" - | "childDataJson.nodeTools" - | "childDataJson.nodeTools.additionalStake" - | "childDataJson.nodeTools.additionalStakeUnit" - | "childDataJson.nodeTools.audits" - | "childDataJson.nodeTools.audits.name" - | "childDataJson.nodeTools.audits.url" - | "childDataJson.nodeTools.easyClientSwitching" - | "childDataJson.nodeTools.hasBugBounty" - | "childDataJson.nodeTools.hue" - | "childDataJson.nodeTools.isFoss" - | "childDataJson.nodeTools.isPermissionless" - | "childDataJson.nodeTools.isTrustless" - | "childDataJson.nodeTools.launchDate" - | "childDataJson.nodeTools.matomo.eventAction" - | "childDataJson.nodeTools.matomo.eventCategory" - | "childDataJson.nodeTools.matomo.eventName" - | "childDataJson.nodeTools.minEth" - | "childDataJson.nodeTools.multiClient" - | "childDataJson.nodeTools.name" - | "childDataJson.nodeTools.platforms" - | "childDataJson.nodeTools.socials.discord" - | "childDataJson.nodeTools.socials.github" - | "childDataJson.nodeTools.socials.telegram" - | "childDataJson.nodeTools.socials.twitter" - | "childDataJson.nodeTools.svgPath" - | "childDataJson.nodeTools.tokens" - | "childDataJson.nodeTools.tokens.address" - | "childDataJson.nodeTools.tokens.name" - | "childDataJson.nodeTools.tokens.symbol" - | "childDataJson.nodeTools.ui" - | "childDataJson.nodeTools.url" - | "childDataJson.parent.children" - | "childDataJson.parent.children.children" - | "childDataJson.parent.children.id" - | "childDataJson.parent.id" - | "childDataJson.parent.internal.content" - | "childDataJson.parent.internal.contentDigest" - | "childDataJson.parent.internal.description" - | "childDataJson.parent.internal.fieldOwners" - | "childDataJson.parent.internal.ignoreType" - | "childDataJson.parent.internal.mediaType" - | "childDataJson.parent.internal.owner" - | "childDataJson.parent.internal.type" - | "childDataJson.parent.parent.children" - | "childDataJson.parent.parent.id" - | "childDataJson.pools" - | "childDataJson.pools.audits" - | "childDataJson.pools.audits.date" - | "childDataJson.pools.audits.name" - | "childDataJson.pools.audits.url" - | "childDataJson.pools.feePercentage" - | "childDataJson.pools.hasBugBounty" - | "childDataJson.pools.hasPermissionlessNodes" - | "childDataJson.pools.hue" - | "childDataJson.pools.isFoss" - | "childDataJson.pools.isTrustless" - | "childDataJson.pools.launchDate" - | "childDataJson.pools.matomo.eventAction" - | "childDataJson.pools.matomo.eventCategory" - | "childDataJson.pools.matomo.eventName" - | "childDataJson.pools.minEth" - | "childDataJson.pools.name" - | "childDataJson.pools.pctMajorityClient" - | "childDataJson.pools.platforms" - | "childDataJson.pools.socials.discord" - | "childDataJson.pools.socials.github" - | "childDataJson.pools.socials.reddit" - | "childDataJson.pools.socials.telegram" - | "childDataJson.pools.socials.twitter" - | "childDataJson.pools.svgPath" - | "childDataJson.pools.telegram" - | "childDataJson.pools.tokens" - | "childDataJson.pools.tokens.address" - | "childDataJson.pools.tokens.name" - | "childDataJson.pools.tokens.symbol" - | "childDataJson.pools.twitter" - | "childDataJson.pools.ui" - | "childDataJson.pools.url" - | "childDataJson.projectName" - | "childDataJson.projectOwner" - | "childDataJson.repoHost" - | "childDataJson.repoType" - | "childDataJson.saas" - | "childDataJson.saas.additionalStake" - | "childDataJson.saas.additionalStakeUnit" - | "childDataJson.saas.audits" - | "childDataJson.saas.audits.name" - | "childDataJson.saas.audits.url" - | "childDataJson.saas.hasBugBounty" - | "childDataJson.saas.hue" - | "childDataJson.saas.isFoss" - | "childDataJson.saas.isPermissionless" - | "childDataJson.saas.isSelfCustody" - | "childDataJson.saas.isTrustless" - | "childDataJson.saas.launchDate" - | "childDataJson.saas.matomo.eventAction" - | "childDataJson.saas.matomo.eventCategory" - | "childDataJson.saas.matomo.eventName" - | "childDataJson.saas.minEth" - | "childDataJson.saas.monthlyFee" - | "childDataJson.saas.monthlyFeeUnit" - | "childDataJson.saas.name" - | "childDataJson.saas.pctMajorityClient" - | "childDataJson.saas.platforms" - | "childDataJson.saas.socials.discord" - | "childDataJson.saas.socials.github" - | "childDataJson.saas.socials.telegram" - | "childDataJson.saas.socials.twitter" - | "childDataJson.saas.svgPath" - | "childDataJson.saas.ui" - | "childDataJson.saas.url" - | "childDataJson.skipCi" - | "childExchangesByCountryCsv.binance" - | "childExchangesByCountryCsv.binanceus" - | "childExchangesByCountryCsv.bitbuy" - | "childExchangesByCountryCsv.bitfinex" - | "childExchangesByCountryCsv.bitflyer" - | "childExchangesByCountryCsv.bitkub" - | "childExchangesByCountryCsv.bitso" - | "childExchangesByCountryCsv.bittrex" - | "childExchangesByCountryCsv.bitvavo" - | "childExchangesByCountryCsv.bybit" - | "childExchangesByCountryCsv.children" - | "childExchangesByCountryCsv.children.children" - | "childExchangesByCountryCsv.children.children.children" - | "childExchangesByCountryCsv.children.children.id" - | "childExchangesByCountryCsv.children.id" - | "childExchangesByCountryCsv.children.internal.content" - | "childExchangesByCountryCsv.children.internal.contentDigest" - | "childExchangesByCountryCsv.children.internal.description" - | "childExchangesByCountryCsv.children.internal.fieldOwners" - | "childExchangesByCountryCsv.children.internal.ignoreType" - | "childExchangesByCountryCsv.children.internal.mediaType" - | "childExchangesByCountryCsv.children.internal.owner" - | "childExchangesByCountryCsv.children.internal.type" - | "childExchangesByCountryCsv.children.parent.children" - | "childExchangesByCountryCsv.children.parent.id" - | "childExchangesByCountryCsv.coinbase" - | "childExchangesByCountryCsv.coinmama" - | "childExchangesByCountryCsv.coinspot" - | "childExchangesByCountryCsv.country" - | "childExchangesByCountryCsv.cryptocom" - | "childExchangesByCountryCsv.easycrypto" - | "childExchangesByCountryCsv.ftx" - | "childExchangesByCountryCsv.ftxus" - | "childExchangesByCountryCsv.gateio" - | "childExchangesByCountryCsv.gemini" - | "childExchangesByCountryCsv.huobiglobal" - | "childExchangesByCountryCsv.id" - | "childExchangesByCountryCsv.internal.content" - | "childExchangesByCountryCsv.internal.contentDigest" - | "childExchangesByCountryCsv.internal.description" - | "childExchangesByCountryCsv.internal.fieldOwners" - | "childExchangesByCountryCsv.internal.ignoreType" - | "childExchangesByCountryCsv.internal.mediaType" - | "childExchangesByCountryCsv.internal.owner" - | "childExchangesByCountryCsv.internal.type" - | "childExchangesByCountryCsv.itezcom" - | "childExchangesByCountryCsv.kraken" - | "childExchangesByCountryCsv.kucoin" - | "childExchangesByCountryCsv.moonpay" - | "childExchangesByCountryCsv.mtpelerin" - | "childExchangesByCountryCsv.okx" - | "childExchangesByCountryCsv.parent.children" - | "childExchangesByCountryCsv.parent.children.children" - | "childExchangesByCountryCsv.parent.children.id" - | "childExchangesByCountryCsv.parent.id" - | "childExchangesByCountryCsv.parent.internal.content" - | "childExchangesByCountryCsv.parent.internal.contentDigest" - | "childExchangesByCountryCsv.parent.internal.description" - | "childExchangesByCountryCsv.parent.internal.fieldOwners" - | "childExchangesByCountryCsv.parent.internal.ignoreType" - | "childExchangesByCountryCsv.parent.internal.mediaType" - | "childExchangesByCountryCsv.parent.internal.owner" - | "childExchangesByCountryCsv.parent.internal.type" - | "childExchangesByCountryCsv.parent.parent.children" - | "childExchangesByCountryCsv.parent.parent.id" - | "childExchangesByCountryCsv.rain" - | "childExchangesByCountryCsv.simplex" - | "childExchangesByCountryCsv.wazirx" - | "childExchangesByCountryCsv.wyre" - | "childExecutionBountyHuntersCsv.children" - | "childExecutionBountyHuntersCsv.children.children" - | "childExecutionBountyHuntersCsv.children.children.children" - | "childExecutionBountyHuntersCsv.children.children.id" - | "childExecutionBountyHuntersCsv.children.id" - | "childExecutionBountyHuntersCsv.children.internal.content" - | "childExecutionBountyHuntersCsv.children.internal.contentDigest" - | "childExecutionBountyHuntersCsv.children.internal.description" - | "childExecutionBountyHuntersCsv.children.internal.fieldOwners" - | "childExecutionBountyHuntersCsv.children.internal.ignoreType" - | "childExecutionBountyHuntersCsv.children.internal.mediaType" - | "childExecutionBountyHuntersCsv.children.internal.owner" - | "childExecutionBountyHuntersCsv.children.internal.type" - | "childExecutionBountyHuntersCsv.children.parent.children" - | "childExecutionBountyHuntersCsv.children.parent.id" - | "childExecutionBountyHuntersCsv.id" - | "childExecutionBountyHuntersCsv.internal.content" - | "childExecutionBountyHuntersCsv.internal.contentDigest" - | "childExecutionBountyHuntersCsv.internal.description" - | "childExecutionBountyHuntersCsv.internal.fieldOwners" - | "childExecutionBountyHuntersCsv.internal.ignoreType" - | "childExecutionBountyHuntersCsv.internal.mediaType" - | "childExecutionBountyHuntersCsv.internal.owner" - | "childExecutionBountyHuntersCsv.internal.type" - | "childExecutionBountyHuntersCsv.name" - | "childExecutionBountyHuntersCsv.parent.children" - | "childExecutionBountyHuntersCsv.parent.children.children" - | "childExecutionBountyHuntersCsv.parent.children.id" - | "childExecutionBountyHuntersCsv.parent.id" - | "childExecutionBountyHuntersCsv.parent.internal.content" - | "childExecutionBountyHuntersCsv.parent.internal.contentDigest" - | "childExecutionBountyHuntersCsv.parent.internal.description" - | "childExecutionBountyHuntersCsv.parent.internal.fieldOwners" - | "childExecutionBountyHuntersCsv.parent.internal.ignoreType" - | "childExecutionBountyHuntersCsv.parent.internal.mediaType" - | "childExecutionBountyHuntersCsv.parent.internal.owner" - | "childExecutionBountyHuntersCsv.parent.internal.type" - | "childExecutionBountyHuntersCsv.parent.parent.children" - | "childExecutionBountyHuntersCsv.parent.parent.id" - | "childExecutionBountyHuntersCsv.score" - | "childExecutionBountyHuntersCsv.username" - | "childExternalTutorialsJson.author" - | "childExternalTutorialsJson.authorGithub" - | "childExternalTutorialsJson.children" - | "childExternalTutorialsJson.children.children" - | "childExternalTutorialsJson.children.children.children" - | "childExternalTutorialsJson.children.children.id" - | "childExternalTutorialsJson.children.id" - | "childExternalTutorialsJson.children.internal.content" - | "childExternalTutorialsJson.children.internal.contentDigest" - | "childExternalTutorialsJson.children.internal.description" - | "childExternalTutorialsJson.children.internal.fieldOwners" - | "childExternalTutorialsJson.children.internal.ignoreType" - | "childExternalTutorialsJson.children.internal.mediaType" - | "childExternalTutorialsJson.children.internal.owner" - | "childExternalTutorialsJson.children.internal.type" - | "childExternalTutorialsJson.children.parent.children" - | "childExternalTutorialsJson.children.parent.id" - | "childExternalTutorialsJson.description" - | "childExternalTutorialsJson.id" - | "childExternalTutorialsJson.internal.content" - | "childExternalTutorialsJson.internal.contentDigest" - | "childExternalTutorialsJson.internal.description" - | "childExternalTutorialsJson.internal.fieldOwners" - | "childExternalTutorialsJson.internal.ignoreType" - | "childExternalTutorialsJson.internal.mediaType" - | "childExternalTutorialsJson.internal.owner" - | "childExternalTutorialsJson.internal.type" - | "childExternalTutorialsJson.lang" - | "childExternalTutorialsJson.parent.children" - | "childExternalTutorialsJson.parent.children.children" - | "childExternalTutorialsJson.parent.children.id" - | "childExternalTutorialsJson.parent.id" - | "childExternalTutorialsJson.parent.internal.content" - | "childExternalTutorialsJson.parent.internal.contentDigest" - | "childExternalTutorialsJson.parent.internal.description" - | "childExternalTutorialsJson.parent.internal.fieldOwners" - | "childExternalTutorialsJson.parent.internal.ignoreType" - | "childExternalTutorialsJson.parent.internal.mediaType" - | "childExternalTutorialsJson.parent.internal.owner" - | "childExternalTutorialsJson.parent.internal.type" - | "childExternalTutorialsJson.parent.parent.children" - | "childExternalTutorialsJson.parent.parent.id" - | "childExternalTutorialsJson.publishDate" - | "childExternalTutorialsJson.skillLevel" - | "childExternalTutorialsJson.tags" - | "childExternalTutorialsJson.timeToRead" - | "childExternalTutorialsJson.title" - | "childExternalTutorialsJson.url" - | "childImageSharp.children" - | "childImageSharp.children.children" - | "childImageSharp.children.children.children" - | "childImageSharp.children.children.id" - | "childImageSharp.children.id" - | "childImageSharp.children.internal.content" - | "childImageSharp.children.internal.contentDigest" - | "childImageSharp.children.internal.description" - | "childImageSharp.children.internal.fieldOwners" - | "childImageSharp.children.internal.ignoreType" - | "childImageSharp.children.internal.mediaType" - | "childImageSharp.children.internal.owner" - | "childImageSharp.children.internal.type" - | "childImageSharp.children.parent.children" - | "childImageSharp.children.parent.id" - | "childImageSharp.fixed.aspectRatio" - | "childImageSharp.fixed.base64" - | "childImageSharp.fixed.height" - | "childImageSharp.fixed.originalName" - | "childImageSharp.fixed.src" - | "childImageSharp.fixed.srcSet" - | "childImageSharp.fixed.srcSetWebp" - | "childImageSharp.fixed.srcWebp" - | "childImageSharp.fixed.tracedSVG" - | "childImageSharp.fixed.width" - | "childImageSharp.fluid.aspectRatio" - | "childImageSharp.fluid.base64" - | "childImageSharp.fluid.originalImg" - | "childImageSharp.fluid.originalName" - | "childImageSharp.fluid.presentationHeight" - | "childImageSharp.fluid.presentationWidth" - | "childImageSharp.fluid.sizes" - | "childImageSharp.fluid.src" - | "childImageSharp.fluid.srcSet" - | "childImageSharp.fluid.srcSetWebp" - | "childImageSharp.fluid.srcWebp" - | "childImageSharp.fluid.tracedSVG" - | "childImageSharp.gatsbyImageData" - | "childImageSharp.id" - | "childImageSharp.internal.content" - | "childImageSharp.internal.contentDigest" - | "childImageSharp.internal.description" - | "childImageSharp.internal.fieldOwners" - | "childImageSharp.internal.ignoreType" - | "childImageSharp.internal.mediaType" - | "childImageSharp.internal.owner" - | "childImageSharp.internal.type" - | "childImageSharp.original.height" - | "childImageSharp.original.src" - | "childImageSharp.original.width" - | "childImageSharp.parent.children" - | "childImageSharp.parent.children.children" - | "childImageSharp.parent.children.id" - | "childImageSharp.parent.id" - | "childImageSharp.parent.internal.content" - | "childImageSharp.parent.internal.contentDigest" - | "childImageSharp.parent.internal.description" - | "childImageSharp.parent.internal.fieldOwners" - | "childImageSharp.parent.internal.ignoreType" - | "childImageSharp.parent.internal.mediaType" - | "childImageSharp.parent.internal.owner" - | "childImageSharp.parent.internal.type" - | "childImageSharp.parent.parent.children" - | "childImageSharp.parent.parent.id" - | "childImageSharp.resize.aspectRatio" - | "childImageSharp.resize.height" - | "childImageSharp.resize.originalName" - | "childImageSharp.resize.src" - | "childImageSharp.resize.tracedSVG" - | "childImageSharp.resize.width" - | "childLayer2Json.children" - | "childLayer2Json.children.children" - | "childLayer2Json.children.children.children" - | "childLayer2Json.children.children.id" - | "childLayer2Json.children.id" - | "childLayer2Json.children.internal.content" - | "childLayer2Json.children.internal.contentDigest" - | "childLayer2Json.children.internal.description" - | "childLayer2Json.children.internal.fieldOwners" - | "childLayer2Json.children.internal.ignoreType" - | "childLayer2Json.children.internal.mediaType" - | "childLayer2Json.children.internal.owner" - | "childLayer2Json.children.internal.type" - | "childLayer2Json.children.parent.children" - | "childLayer2Json.children.parent.id" - | "childLayer2Json.id" - | "childLayer2Json.internal.content" - | "childLayer2Json.internal.contentDigest" - | "childLayer2Json.internal.description" - | "childLayer2Json.internal.fieldOwners" - | "childLayer2Json.internal.ignoreType" - | "childLayer2Json.internal.mediaType" - | "childLayer2Json.internal.owner" - | "childLayer2Json.internal.type" - | "childLayer2Json.optimistic" - | "childLayer2Json.optimistic.background" - | "childLayer2Json.optimistic.blockExplorer" - | "childLayer2Json.optimistic.bridge" - | "childLayer2Json.optimistic.bridgeWallets" - | "childLayer2Json.optimistic.description" - | "childLayer2Json.optimistic.developerDocs" - | "childLayer2Json.optimistic.ecosystemPortal" - | "childLayer2Json.optimistic.imageKey" - | "childLayer2Json.optimistic.l2beat" - | "childLayer2Json.optimistic.name" - | "childLayer2Json.optimistic.noteKey" - | "childLayer2Json.optimistic.purpose" - | "childLayer2Json.optimistic.tokenLists" - | "childLayer2Json.optimistic.website" - | "childLayer2Json.parent.children" - | "childLayer2Json.parent.children.children" - | "childLayer2Json.parent.children.id" - | "childLayer2Json.parent.id" - | "childLayer2Json.parent.internal.content" - | "childLayer2Json.parent.internal.contentDigest" - | "childLayer2Json.parent.internal.description" - | "childLayer2Json.parent.internal.fieldOwners" - | "childLayer2Json.parent.internal.ignoreType" - | "childLayer2Json.parent.internal.mediaType" - | "childLayer2Json.parent.internal.owner" - | "childLayer2Json.parent.internal.type" - | "childLayer2Json.parent.parent.children" - | "childLayer2Json.parent.parent.id" - | "childLayer2Json.zk" - | "childLayer2Json.zk.background" - | "childLayer2Json.zk.blockExplorer" - | "childLayer2Json.zk.bridge" - | "childLayer2Json.zk.bridgeWallets" - | "childLayer2Json.zk.description" - | "childLayer2Json.zk.developerDocs" - | "childLayer2Json.zk.ecosystemPortal" - | "childLayer2Json.zk.imageKey" - | "childLayer2Json.zk.l2beat" - | "childLayer2Json.zk.name" - | "childLayer2Json.zk.noteKey" - | "childLayer2Json.zk.purpose" - | "childLayer2Json.zk.tokenLists" - | "childLayer2Json.zk.website" - | "childMdx.body" - | "childMdx.children" - | "childMdx.children.children" - | "childMdx.children.children.children" - | "childMdx.children.children.id" - | "childMdx.children.id" - | "childMdx.children.internal.content" - | "childMdx.children.internal.contentDigest" - | "childMdx.children.internal.description" - | "childMdx.children.internal.fieldOwners" - | "childMdx.children.internal.ignoreType" - | "childMdx.children.internal.mediaType" - | "childMdx.children.internal.owner" - | "childMdx.children.internal.type" - | "childMdx.children.parent.children" - | "childMdx.children.parent.id" - | "childMdx.excerpt" - | "childMdx.fields.isOutdated" - | "childMdx.fields.readingTime.minutes" - | "childMdx.fields.readingTime.text" - | "childMdx.fields.readingTime.time" - | "childMdx.fields.readingTime.words" - | "childMdx.fields.relativePath" - | "childMdx.fields.slug" - | "childMdx.fileAbsolutePath" - | "childMdx.frontmatter.address" - | "childMdx.frontmatter.alt" - | "childMdx.frontmatter.author" - | "childMdx.frontmatter.authors" - | "childMdx.frontmatter.compensation" - | "childMdx.frontmatter.description" - | "childMdx.frontmatter.emoji" - | "childMdx.frontmatter.image.absolutePath" - | "childMdx.frontmatter.image.accessTime" - | "childMdx.frontmatter.image.atime" - | "childMdx.frontmatter.image.atimeMs" - | "childMdx.frontmatter.image.base" - | "childMdx.frontmatter.image.birthTime" - | "childMdx.frontmatter.image.birthtime" - | "childMdx.frontmatter.image.birthtimeMs" - | "childMdx.frontmatter.image.blksize" - | "childMdx.frontmatter.image.blocks" - | "childMdx.frontmatter.image.changeTime" - | "childMdx.frontmatter.image.children" - | "childMdx.frontmatter.image.childrenAlltimeJson" - | "childMdx.frontmatter.image.childrenCexLayer2SupportJson" - | "childMdx.frontmatter.image.childrenCommunityEventsJson" - | "childMdx.frontmatter.image.childrenCommunityMeetupsJson" - | "childMdx.frontmatter.image.childrenConsensusBountyHuntersCsv" - | "childMdx.frontmatter.image.childrenDataJson" - | "childMdx.frontmatter.image.childrenExchangesByCountryCsv" - | "childMdx.frontmatter.image.childrenExecutionBountyHuntersCsv" - | "childMdx.frontmatter.image.childrenExternalTutorialsJson" - | "childMdx.frontmatter.image.childrenImageSharp" - | "childMdx.frontmatter.image.childrenLayer2Json" - | "childMdx.frontmatter.image.childrenMdx" - | "childMdx.frontmatter.image.childrenMonthJson" - | "childMdx.frontmatter.image.childrenQuarterJson" - | "childMdx.frontmatter.image.childrenWalletsCsv" - | "childMdx.frontmatter.image.ctime" - | "childMdx.frontmatter.image.ctimeMs" - | "childMdx.frontmatter.image.dev" - | "childMdx.frontmatter.image.dir" - | "childMdx.frontmatter.image.ext" - | "childMdx.frontmatter.image.extension" - | "childMdx.frontmatter.image.gid" - | "childMdx.frontmatter.image.id" - | "childMdx.frontmatter.image.ino" - | "childMdx.frontmatter.image.mode" - | "childMdx.frontmatter.image.modifiedTime" - | "childMdx.frontmatter.image.mtime" - | "childMdx.frontmatter.image.mtimeMs" - | "childMdx.frontmatter.image.name" - | "childMdx.frontmatter.image.nlink" - | "childMdx.frontmatter.image.prettySize" - | "childMdx.frontmatter.image.publicURL" - | "childMdx.frontmatter.image.rdev" - | "childMdx.frontmatter.image.relativeDirectory" - | "childMdx.frontmatter.image.relativePath" - | "childMdx.frontmatter.image.root" - | "childMdx.frontmatter.image.size" - | "childMdx.frontmatter.image.sourceInstanceName" - | "childMdx.frontmatter.image.uid" - | "childMdx.frontmatter.incomplete" - | "childMdx.frontmatter.isOutdated" - | "childMdx.frontmatter.lang" - | "childMdx.frontmatter.link" - | "childMdx.frontmatter.location" - | "childMdx.frontmatter.position" - | "childMdx.frontmatter.published" - | "childMdx.frontmatter.sidebar" - | "childMdx.frontmatter.sidebarDepth" - | "childMdx.frontmatter.skill" - | "childMdx.frontmatter.source" - | "childMdx.frontmatter.sourceUrl" - | "childMdx.frontmatter.summaryPoint1" - | "childMdx.frontmatter.summaryPoint2" - | "childMdx.frontmatter.summaryPoint3" - | "childMdx.frontmatter.summaryPoint4" - | "childMdx.frontmatter.summaryPoints" - | "childMdx.frontmatter.tags" - | "childMdx.frontmatter.template" - | "childMdx.frontmatter.title" - | "childMdx.frontmatter.type" - | "childMdx.headings" - | "childMdx.headings.depth" - | "childMdx.headings.value" - | "childMdx.html" - | "childMdx.id" - | "childMdx.internal.content" - | "childMdx.internal.contentDigest" - | "childMdx.internal.description" - | "childMdx.internal.fieldOwners" - | "childMdx.internal.ignoreType" - | "childMdx.internal.mediaType" - | "childMdx.internal.owner" - | "childMdx.internal.type" - | "childMdx.mdxAST" - | "childMdx.parent.children" - | "childMdx.parent.children.children" - | "childMdx.parent.children.id" - | "childMdx.parent.id" - | "childMdx.parent.internal.content" - | "childMdx.parent.internal.contentDigest" - | "childMdx.parent.internal.description" - | "childMdx.parent.internal.fieldOwners" - | "childMdx.parent.internal.ignoreType" - | "childMdx.parent.internal.mediaType" - | "childMdx.parent.internal.owner" - | "childMdx.parent.internal.type" - | "childMdx.parent.parent.children" - | "childMdx.parent.parent.id" - | "childMdx.rawBody" - | "childMdx.slug" - | "childMdx.tableOfContents" - | "childMdx.timeToRead" - | "childMdx.wordCount.paragraphs" - | "childMdx.wordCount.sentences" - | "childMdx.wordCount.words" - | "childMonthJson.children" - | "childMonthJson.children.children" - | "childMonthJson.children.children.children" - | "childMonthJson.children.children.id" - | "childMonthJson.children.id" - | "childMonthJson.children.internal.content" - | "childMonthJson.children.internal.contentDigest" - | "childMonthJson.children.internal.description" - | "childMonthJson.children.internal.fieldOwners" - | "childMonthJson.children.internal.ignoreType" - | "childMonthJson.children.internal.mediaType" - | "childMonthJson.children.internal.owner" - | "childMonthJson.children.internal.type" - | "childMonthJson.children.parent.children" - | "childMonthJson.children.parent.id" - | "childMonthJson.currency" - | "childMonthJson.data" - | "childMonthJson.data.languages" - | "childMonthJson.data.user.avatarUrl" - | "childMonthJson.data.user.fullName" - | "childMonthJson.data.user.id" - | "childMonthJson.data.user.preTranslated" - | "childMonthJson.data.user.totalCosts" - | "childMonthJson.data.user.userRole" - | "childMonthJson.data.user.username" - | "childMonthJson.dateRange.from" - | "childMonthJson.dateRange.to" - | "childMonthJson.id" - | "childMonthJson.internal.content" - | "childMonthJson.internal.contentDigest" - | "childMonthJson.internal.description" - | "childMonthJson.internal.fieldOwners" - | "childMonthJson.internal.ignoreType" - | "childMonthJson.internal.mediaType" - | "childMonthJson.internal.owner" - | "childMonthJson.internal.type" - | "childMonthJson.mode" - | "childMonthJson.name" - | "childMonthJson.parent.children" - | "childMonthJson.parent.children.children" - | "childMonthJson.parent.children.id" - | "childMonthJson.parent.id" - | "childMonthJson.parent.internal.content" - | "childMonthJson.parent.internal.contentDigest" - | "childMonthJson.parent.internal.description" - | "childMonthJson.parent.internal.fieldOwners" - | "childMonthJson.parent.internal.ignoreType" - | "childMonthJson.parent.internal.mediaType" - | "childMonthJson.parent.internal.owner" - | "childMonthJson.parent.internal.type" - | "childMonthJson.parent.parent.children" - | "childMonthJson.parent.parent.id" - | "childMonthJson.totalCosts" - | "childMonthJson.totalPreTranslated" - | "childMonthJson.totalTMSavings" - | "childMonthJson.unit" - | "childMonthJson.url" - | "childQuarterJson.children" - | "childQuarterJson.children.children" - | "childQuarterJson.children.children.children" - | "childQuarterJson.children.children.id" - | "childQuarterJson.children.id" - | "childQuarterJson.children.internal.content" - | "childQuarterJson.children.internal.contentDigest" - | "childQuarterJson.children.internal.description" - | "childQuarterJson.children.internal.fieldOwners" - | "childQuarterJson.children.internal.ignoreType" - | "childQuarterJson.children.internal.mediaType" - | "childQuarterJson.children.internal.owner" - | "childQuarterJson.children.internal.type" - | "childQuarterJson.children.parent.children" - | "childQuarterJson.children.parent.id" - | "childQuarterJson.currency" - | "childQuarterJson.data" - | "childQuarterJson.data.languages" - | "childQuarterJson.data.user.avatarUrl" - | "childQuarterJson.data.user.fullName" - | "childQuarterJson.data.user.id" - | "childQuarterJson.data.user.preTranslated" - | "childQuarterJson.data.user.totalCosts" - | "childQuarterJson.data.user.userRole" - | "childQuarterJson.data.user.username" - | "childQuarterJson.dateRange.from" - | "childQuarterJson.dateRange.to" - | "childQuarterJson.id" - | "childQuarterJson.internal.content" - | "childQuarterJson.internal.contentDigest" - | "childQuarterJson.internal.description" - | "childQuarterJson.internal.fieldOwners" - | "childQuarterJson.internal.ignoreType" - | "childQuarterJson.internal.mediaType" - | "childQuarterJson.internal.owner" - | "childQuarterJson.internal.type" - | "childQuarterJson.mode" - | "childQuarterJson.name" - | "childQuarterJson.parent.children" - | "childQuarterJson.parent.children.children" - | "childQuarterJson.parent.children.id" - | "childQuarterJson.parent.id" - | "childQuarterJson.parent.internal.content" - | "childQuarterJson.parent.internal.contentDigest" - | "childQuarterJson.parent.internal.description" - | "childQuarterJson.parent.internal.fieldOwners" - | "childQuarterJson.parent.internal.ignoreType" - | "childQuarterJson.parent.internal.mediaType" - | "childQuarterJson.parent.internal.owner" - | "childQuarterJson.parent.internal.type" - | "childQuarterJson.parent.parent.children" - | "childQuarterJson.parent.parent.id" - | "childQuarterJson.totalCosts" - | "childQuarterJson.totalPreTranslated" - | "childQuarterJson.totalTMSavings" - | "childQuarterJson.unit" - | "childQuarterJson.url" - | "childWalletsCsv.brand_color" - | "childWalletsCsv.children" - | "childWalletsCsv.children.children" - | "childWalletsCsv.children.children.children" - | "childWalletsCsv.children.children.id" - | "childWalletsCsv.children.id" - | "childWalletsCsv.children.internal.content" - | "childWalletsCsv.children.internal.contentDigest" - | "childWalletsCsv.children.internal.description" - | "childWalletsCsv.children.internal.fieldOwners" - | "childWalletsCsv.children.internal.ignoreType" - | "childWalletsCsv.children.internal.mediaType" - | "childWalletsCsv.children.internal.owner" - | "childWalletsCsv.children.internal.type" - | "childWalletsCsv.children.parent.children" - | "childWalletsCsv.children.parent.id" - | "childWalletsCsv.has_bank_withdrawals" - | "childWalletsCsv.has_card_deposits" - | "childWalletsCsv.has_defi_integrations" - | "childWalletsCsv.has_desktop" - | "childWalletsCsv.has_dex_integrations" - | "childWalletsCsv.has_explore_dapps" - | "childWalletsCsv.has_hardware" - | "childWalletsCsv.has_high_volume_purchases" - | "childWalletsCsv.has_limits_protection" - | "childWalletsCsv.has_mobile" - | "childWalletsCsv.has_multisig" - | "childWalletsCsv.has_web" - | "childWalletsCsv.id" - | "childWalletsCsv.internal.content" - | "childWalletsCsv.internal.contentDigest" - | "childWalletsCsv.internal.description" - | "childWalletsCsv.internal.fieldOwners" - | "childWalletsCsv.internal.ignoreType" - | "childWalletsCsv.internal.mediaType" - | "childWalletsCsv.internal.owner" - | "childWalletsCsv.internal.type" - | "childWalletsCsv.name" - | "childWalletsCsv.parent.children" - | "childWalletsCsv.parent.children.children" - | "childWalletsCsv.parent.children.id" - | "childWalletsCsv.parent.id" - | "childWalletsCsv.parent.internal.content" - | "childWalletsCsv.parent.internal.contentDigest" - | "childWalletsCsv.parent.internal.description" - | "childWalletsCsv.parent.internal.fieldOwners" - | "childWalletsCsv.parent.internal.ignoreType" - | "childWalletsCsv.parent.internal.mediaType" - | "childWalletsCsv.parent.internal.owner" - | "childWalletsCsv.parent.internal.type" - | "childWalletsCsv.parent.parent.children" - | "childWalletsCsv.parent.parent.id" - | "childWalletsCsv.url" - | "children" - | "childrenAlltimeJson" - | "childrenAlltimeJson.children" - | "childrenAlltimeJson.children.children" - | "childrenAlltimeJson.children.children.children" - | "childrenAlltimeJson.children.children.id" - | "childrenAlltimeJson.children.id" - | "childrenAlltimeJson.children.internal.content" - | "childrenAlltimeJson.children.internal.contentDigest" - | "childrenAlltimeJson.children.internal.description" - | "childrenAlltimeJson.children.internal.fieldOwners" - | "childrenAlltimeJson.children.internal.ignoreType" - | "childrenAlltimeJson.children.internal.mediaType" - | "childrenAlltimeJson.children.internal.owner" - | "childrenAlltimeJson.children.internal.type" - | "childrenAlltimeJson.children.parent.children" - | "childrenAlltimeJson.children.parent.id" - | "childrenAlltimeJson.currency" - | "childrenAlltimeJson.data" - | "childrenAlltimeJson.data.languages" - | "childrenAlltimeJson.data.user.avatarUrl" - | "childrenAlltimeJson.data.user.fullName" - | "childrenAlltimeJson.data.user.id" - | "childrenAlltimeJson.data.user.preTranslated" - | "childrenAlltimeJson.data.user.totalCosts" - | "childrenAlltimeJson.data.user.userRole" - | "childrenAlltimeJson.data.user.username" - | "childrenAlltimeJson.dateRange.from" - | "childrenAlltimeJson.dateRange.to" - | "childrenAlltimeJson.id" - | "childrenAlltimeJson.internal.content" - | "childrenAlltimeJson.internal.contentDigest" - | "childrenAlltimeJson.internal.description" - | "childrenAlltimeJson.internal.fieldOwners" - | "childrenAlltimeJson.internal.ignoreType" - | "childrenAlltimeJson.internal.mediaType" - | "childrenAlltimeJson.internal.owner" - | "childrenAlltimeJson.internal.type" - | "childrenAlltimeJson.mode" - | "childrenAlltimeJson.name" - | "childrenAlltimeJson.parent.children" - | "childrenAlltimeJson.parent.children.children" - | "childrenAlltimeJson.parent.children.id" - | "childrenAlltimeJson.parent.id" - | "childrenAlltimeJson.parent.internal.content" - | "childrenAlltimeJson.parent.internal.contentDigest" - | "childrenAlltimeJson.parent.internal.description" - | "childrenAlltimeJson.parent.internal.fieldOwners" - | "childrenAlltimeJson.parent.internal.ignoreType" - | "childrenAlltimeJson.parent.internal.mediaType" - | "childrenAlltimeJson.parent.internal.owner" - | "childrenAlltimeJson.parent.internal.type" - | "childrenAlltimeJson.parent.parent.children" - | "childrenAlltimeJson.parent.parent.id" - | "childrenAlltimeJson.totalCosts" - | "childrenAlltimeJson.totalPreTranslated" - | "childrenAlltimeJson.totalTMSavings" - | "childrenAlltimeJson.unit" - | "childrenAlltimeJson.url" - | "childrenCexLayer2SupportJson" - | "childrenCexLayer2SupportJson.children" - | "childrenCexLayer2SupportJson.children.children" - | "childrenCexLayer2SupportJson.children.children.children" - | "childrenCexLayer2SupportJson.children.children.id" - | "childrenCexLayer2SupportJson.children.id" - | "childrenCexLayer2SupportJson.children.internal.content" - | "childrenCexLayer2SupportJson.children.internal.contentDigest" - | "childrenCexLayer2SupportJson.children.internal.description" - | "childrenCexLayer2SupportJson.children.internal.fieldOwners" - | "childrenCexLayer2SupportJson.children.internal.ignoreType" - | "childrenCexLayer2SupportJson.children.internal.mediaType" - | "childrenCexLayer2SupportJson.children.internal.owner" - | "childrenCexLayer2SupportJson.children.internal.type" - | "childrenCexLayer2SupportJson.children.parent.children" - | "childrenCexLayer2SupportJson.children.parent.id" - | "childrenCexLayer2SupportJson.id" - | "childrenCexLayer2SupportJson.internal.content" - | "childrenCexLayer2SupportJson.internal.contentDigest" - | "childrenCexLayer2SupportJson.internal.description" - | "childrenCexLayer2SupportJson.internal.fieldOwners" - | "childrenCexLayer2SupportJson.internal.ignoreType" - | "childrenCexLayer2SupportJson.internal.mediaType" - | "childrenCexLayer2SupportJson.internal.owner" - | "childrenCexLayer2SupportJson.internal.type" - | "childrenCexLayer2SupportJson.name" - | "childrenCexLayer2SupportJson.parent.children" - | "childrenCexLayer2SupportJson.parent.children.children" - | "childrenCexLayer2SupportJson.parent.children.id" - | "childrenCexLayer2SupportJson.parent.id" - | "childrenCexLayer2SupportJson.parent.internal.content" - | "childrenCexLayer2SupportJson.parent.internal.contentDigest" - | "childrenCexLayer2SupportJson.parent.internal.description" - | "childrenCexLayer2SupportJson.parent.internal.fieldOwners" - | "childrenCexLayer2SupportJson.parent.internal.ignoreType" - | "childrenCexLayer2SupportJson.parent.internal.mediaType" - | "childrenCexLayer2SupportJson.parent.internal.owner" - | "childrenCexLayer2SupportJson.parent.internal.type" - | "childrenCexLayer2SupportJson.parent.parent.children" - | "childrenCexLayer2SupportJson.parent.parent.id" - | "childrenCexLayer2SupportJson.supports_deposits" - | "childrenCexLayer2SupportJson.supports_withdrawals" - | "childrenCexLayer2SupportJson.url" - | "childrenCommunityEventsJson" - | "childrenCommunityEventsJson.children" - | "childrenCommunityEventsJson.children.children" - | "childrenCommunityEventsJson.children.children.children" - | "childrenCommunityEventsJson.children.children.id" - | "childrenCommunityEventsJson.children.id" - | "childrenCommunityEventsJson.children.internal.content" - | "childrenCommunityEventsJson.children.internal.contentDigest" - | "childrenCommunityEventsJson.children.internal.description" - | "childrenCommunityEventsJson.children.internal.fieldOwners" - | "childrenCommunityEventsJson.children.internal.ignoreType" - | "childrenCommunityEventsJson.children.internal.mediaType" - | "childrenCommunityEventsJson.children.internal.owner" - | "childrenCommunityEventsJson.children.internal.type" - | "childrenCommunityEventsJson.children.parent.children" - | "childrenCommunityEventsJson.children.parent.id" - | "childrenCommunityEventsJson.description" - | "childrenCommunityEventsJson.endDate" - | "childrenCommunityEventsJson.id" - | "childrenCommunityEventsJson.internal.content" - | "childrenCommunityEventsJson.internal.contentDigest" - | "childrenCommunityEventsJson.internal.description" - | "childrenCommunityEventsJson.internal.fieldOwners" - | "childrenCommunityEventsJson.internal.ignoreType" - | "childrenCommunityEventsJson.internal.mediaType" - | "childrenCommunityEventsJson.internal.owner" - | "childrenCommunityEventsJson.internal.type" - | "childrenCommunityEventsJson.location" - | "childrenCommunityEventsJson.parent.children" - | "childrenCommunityEventsJson.parent.children.children" - | "childrenCommunityEventsJson.parent.children.id" - | "childrenCommunityEventsJson.parent.id" - | "childrenCommunityEventsJson.parent.internal.content" - | "childrenCommunityEventsJson.parent.internal.contentDigest" - | "childrenCommunityEventsJson.parent.internal.description" - | "childrenCommunityEventsJson.parent.internal.fieldOwners" - | "childrenCommunityEventsJson.parent.internal.ignoreType" - | "childrenCommunityEventsJson.parent.internal.mediaType" - | "childrenCommunityEventsJson.parent.internal.owner" - | "childrenCommunityEventsJson.parent.internal.type" - | "childrenCommunityEventsJson.parent.parent.children" - | "childrenCommunityEventsJson.parent.parent.id" - | "childrenCommunityEventsJson.sponsor" - | "childrenCommunityEventsJson.startDate" - | "childrenCommunityEventsJson.title" - | "childrenCommunityEventsJson.to" - | "childrenCommunityMeetupsJson" - | "childrenCommunityMeetupsJson.children" - | "childrenCommunityMeetupsJson.children.children" - | "childrenCommunityMeetupsJson.children.children.children" - | "childrenCommunityMeetupsJson.children.children.id" - | "childrenCommunityMeetupsJson.children.id" - | "childrenCommunityMeetupsJson.children.internal.content" - | "childrenCommunityMeetupsJson.children.internal.contentDigest" - | "childrenCommunityMeetupsJson.children.internal.description" - | "childrenCommunityMeetupsJson.children.internal.fieldOwners" - | "childrenCommunityMeetupsJson.children.internal.ignoreType" - | "childrenCommunityMeetupsJson.children.internal.mediaType" - | "childrenCommunityMeetupsJson.children.internal.owner" - | "childrenCommunityMeetupsJson.children.internal.type" - | "childrenCommunityMeetupsJson.children.parent.children" - | "childrenCommunityMeetupsJson.children.parent.id" - | "childrenCommunityMeetupsJson.emoji" - | "childrenCommunityMeetupsJson.id" - | "childrenCommunityMeetupsJson.internal.content" - | "childrenCommunityMeetupsJson.internal.contentDigest" - | "childrenCommunityMeetupsJson.internal.description" - | "childrenCommunityMeetupsJson.internal.fieldOwners" - | "childrenCommunityMeetupsJson.internal.ignoreType" - | "childrenCommunityMeetupsJson.internal.mediaType" - | "childrenCommunityMeetupsJson.internal.owner" - | "childrenCommunityMeetupsJson.internal.type" - | "childrenCommunityMeetupsJson.link" - | "childrenCommunityMeetupsJson.location" - | "childrenCommunityMeetupsJson.parent.children" - | "childrenCommunityMeetupsJson.parent.children.children" - | "childrenCommunityMeetupsJson.parent.children.id" - | "childrenCommunityMeetupsJson.parent.id" - | "childrenCommunityMeetupsJson.parent.internal.content" - | "childrenCommunityMeetupsJson.parent.internal.contentDigest" - | "childrenCommunityMeetupsJson.parent.internal.description" - | "childrenCommunityMeetupsJson.parent.internal.fieldOwners" - | "childrenCommunityMeetupsJson.parent.internal.ignoreType" - | "childrenCommunityMeetupsJson.parent.internal.mediaType" - | "childrenCommunityMeetupsJson.parent.internal.owner" - | "childrenCommunityMeetupsJson.parent.internal.type" - | "childrenCommunityMeetupsJson.parent.parent.children" - | "childrenCommunityMeetupsJson.parent.parent.id" - | "childrenCommunityMeetupsJson.title" - | "childrenConsensusBountyHuntersCsv" - | "childrenConsensusBountyHuntersCsv.children" - | "childrenConsensusBountyHuntersCsv.children.children" - | "childrenConsensusBountyHuntersCsv.children.children.children" - | "childrenConsensusBountyHuntersCsv.children.children.id" - | "childrenConsensusBountyHuntersCsv.children.id" - | "childrenConsensusBountyHuntersCsv.children.internal.content" - | "childrenConsensusBountyHuntersCsv.children.internal.contentDigest" - | "childrenConsensusBountyHuntersCsv.children.internal.description" - | "childrenConsensusBountyHuntersCsv.children.internal.fieldOwners" - | "childrenConsensusBountyHuntersCsv.children.internal.ignoreType" - | "childrenConsensusBountyHuntersCsv.children.internal.mediaType" - | "childrenConsensusBountyHuntersCsv.children.internal.owner" - | "childrenConsensusBountyHuntersCsv.children.internal.type" - | "childrenConsensusBountyHuntersCsv.children.parent.children" - | "childrenConsensusBountyHuntersCsv.children.parent.id" - | "childrenConsensusBountyHuntersCsv.id" - | "childrenConsensusBountyHuntersCsv.internal.content" - | "childrenConsensusBountyHuntersCsv.internal.contentDigest" - | "childrenConsensusBountyHuntersCsv.internal.description" - | "childrenConsensusBountyHuntersCsv.internal.fieldOwners" - | "childrenConsensusBountyHuntersCsv.internal.ignoreType" - | "childrenConsensusBountyHuntersCsv.internal.mediaType" - | "childrenConsensusBountyHuntersCsv.internal.owner" - | "childrenConsensusBountyHuntersCsv.internal.type" - | "childrenConsensusBountyHuntersCsv.name" - | "childrenConsensusBountyHuntersCsv.parent.children" - | "childrenConsensusBountyHuntersCsv.parent.children.children" - | "childrenConsensusBountyHuntersCsv.parent.children.id" - | "childrenConsensusBountyHuntersCsv.parent.id" - | "childrenConsensusBountyHuntersCsv.parent.internal.content" - | "childrenConsensusBountyHuntersCsv.parent.internal.contentDigest" - | "childrenConsensusBountyHuntersCsv.parent.internal.description" - | "childrenConsensusBountyHuntersCsv.parent.internal.fieldOwners" - | "childrenConsensusBountyHuntersCsv.parent.internal.ignoreType" - | "childrenConsensusBountyHuntersCsv.parent.internal.mediaType" - | "childrenConsensusBountyHuntersCsv.parent.internal.owner" - | "childrenConsensusBountyHuntersCsv.parent.internal.type" - | "childrenConsensusBountyHuntersCsv.parent.parent.children" - | "childrenConsensusBountyHuntersCsv.parent.parent.id" - | "childrenConsensusBountyHuntersCsv.score" - | "childrenConsensusBountyHuntersCsv.username" - | "childrenDataJson" - | "childrenDataJson.children" - | "childrenDataJson.children.children" - | "childrenDataJson.children.children.children" - | "childrenDataJson.children.children.id" - | "childrenDataJson.children.id" - | "childrenDataJson.children.internal.content" - | "childrenDataJson.children.internal.contentDigest" - | "childrenDataJson.children.internal.description" - | "childrenDataJson.children.internal.fieldOwners" - | "childrenDataJson.children.internal.ignoreType" - | "childrenDataJson.children.internal.mediaType" - | "childrenDataJson.children.internal.owner" - | "childrenDataJson.children.internal.type" - | "childrenDataJson.children.parent.children" - | "childrenDataJson.children.parent.id" - | "childrenDataJson.commit" - | "childrenDataJson.contributors" - | "childrenDataJson.contributorsPerLine" - | "childrenDataJson.contributors.avatar_url" - | "childrenDataJson.contributors.contributions" - | "childrenDataJson.contributors.login" - | "childrenDataJson.contributors.name" - | "childrenDataJson.contributors.profile" - | "childrenDataJson.files" - | "childrenDataJson.id" - | "childrenDataJson.imageSize" - | "childrenDataJson.internal.content" - | "childrenDataJson.internal.contentDigest" - | "childrenDataJson.internal.description" - | "childrenDataJson.internal.fieldOwners" - | "childrenDataJson.internal.ignoreType" - | "childrenDataJson.internal.mediaType" - | "childrenDataJson.internal.owner" - | "childrenDataJson.internal.type" - | "childrenDataJson.keyGen" - | "childrenDataJson.keyGen.audits" - | "childrenDataJson.keyGen.audits.name" - | "childrenDataJson.keyGen.audits.url" - | "childrenDataJson.keyGen.hasBugBounty" - | "childrenDataJson.keyGen.hue" - | "childrenDataJson.keyGen.isFoss" - | "childrenDataJson.keyGen.isPermissionless" - | "childrenDataJson.keyGen.isSelfCustody" - | "childrenDataJson.keyGen.isTrustless" - | "childrenDataJson.keyGen.launchDate" - | "childrenDataJson.keyGen.matomo.eventAction" - | "childrenDataJson.keyGen.matomo.eventCategory" - | "childrenDataJson.keyGen.matomo.eventName" - | "childrenDataJson.keyGen.name" - | "childrenDataJson.keyGen.platforms" - | "childrenDataJson.keyGen.socials.discord" - | "childrenDataJson.keyGen.socials.github" - | "childrenDataJson.keyGen.socials.twitter" - | "childrenDataJson.keyGen.svgPath" - | "childrenDataJson.keyGen.ui" - | "childrenDataJson.keyGen.url" - | "childrenDataJson.nodeTools" - | "childrenDataJson.nodeTools.additionalStake" - | "childrenDataJson.nodeTools.additionalStakeUnit" - | "childrenDataJson.nodeTools.audits" - | "childrenDataJson.nodeTools.audits.name" - | "childrenDataJson.nodeTools.audits.url" - | "childrenDataJson.nodeTools.easyClientSwitching" - | "childrenDataJson.nodeTools.hasBugBounty" - | "childrenDataJson.nodeTools.hue" - | "childrenDataJson.nodeTools.isFoss" - | "childrenDataJson.nodeTools.isPermissionless" - | "childrenDataJson.nodeTools.isTrustless" - | "childrenDataJson.nodeTools.launchDate" - | "childrenDataJson.nodeTools.matomo.eventAction" - | "childrenDataJson.nodeTools.matomo.eventCategory" - | "childrenDataJson.nodeTools.matomo.eventName" - | "childrenDataJson.nodeTools.minEth" - | "childrenDataJson.nodeTools.multiClient" - | "childrenDataJson.nodeTools.name" - | "childrenDataJson.nodeTools.platforms" - | "childrenDataJson.nodeTools.socials.discord" - | "childrenDataJson.nodeTools.socials.github" - | "childrenDataJson.nodeTools.socials.telegram" - | "childrenDataJson.nodeTools.socials.twitter" - | "childrenDataJson.nodeTools.svgPath" - | "childrenDataJson.nodeTools.tokens" - | "childrenDataJson.nodeTools.tokens.address" - | "childrenDataJson.nodeTools.tokens.name" - | "childrenDataJson.nodeTools.tokens.symbol" - | "childrenDataJson.nodeTools.ui" - | "childrenDataJson.nodeTools.url" - | "childrenDataJson.parent.children" - | "childrenDataJson.parent.children.children" - | "childrenDataJson.parent.children.id" - | "childrenDataJson.parent.id" - | "childrenDataJson.parent.internal.content" - | "childrenDataJson.parent.internal.contentDigest" - | "childrenDataJson.parent.internal.description" - | "childrenDataJson.parent.internal.fieldOwners" - | "childrenDataJson.parent.internal.ignoreType" - | "childrenDataJson.parent.internal.mediaType" - | "childrenDataJson.parent.internal.owner" - | "childrenDataJson.parent.internal.type" - | "childrenDataJson.parent.parent.children" - | "childrenDataJson.parent.parent.id" - | "childrenDataJson.pools" - | "childrenDataJson.pools.audits" - | "childrenDataJson.pools.audits.date" - | "childrenDataJson.pools.audits.name" - | "childrenDataJson.pools.audits.url" - | "childrenDataJson.pools.feePercentage" - | "childrenDataJson.pools.hasBugBounty" - | "childrenDataJson.pools.hasPermissionlessNodes" - | "childrenDataJson.pools.hue" - | "childrenDataJson.pools.isFoss" - | "childrenDataJson.pools.isTrustless" - | "childrenDataJson.pools.launchDate" - | "childrenDataJson.pools.matomo.eventAction" - | "childrenDataJson.pools.matomo.eventCategory" - | "childrenDataJson.pools.matomo.eventName" - | "childrenDataJson.pools.minEth" - | "childrenDataJson.pools.name" - | "childrenDataJson.pools.pctMajorityClient" - | "childrenDataJson.pools.platforms" - | "childrenDataJson.pools.socials.discord" - | "childrenDataJson.pools.socials.github" - | "childrenDataJson.pools.socials.reddit" - | "childrenDataJson.pools.socials.telegram" - | "childrenDataJson.pools.socials.twitter" - | "childrenDataJson.pools.svgPath" - | "childrenDataJson.pools.telegram" - | "childrenDataJson.pools.tokens" - | "childrenDataJson.pools.tokens.address" - | "childrenDataJson.pools.tokens.name" - | "childrenDataJson.pools.tokens.symbol" - | "childrenDataJson.pools.twitter" - | "childrenDataJson.pools.ui" - | "childrenDataJson.pools.url" - | "childrenDataJson.projectName" - | "childrenDataJson.projectOwner" - | "childrenDataJson.repoHost" - | "childrenDataJson.repoType" - | "childrenDataJson.saas" - | "childrenDataJson.saas.additionalStake" - | "childrenDataJson.saas.additionalStakeUnit" - | "childrenDataJson.saas.audits" - | "childrenDataJson.saas.audits.name" - | "childrenDataJson.saas.audits.url" - | "childrenDataJson.saas.hasBugBounty" - | "childrenDataJson.saas.hue" - | "childrenDataJson.saas.isFoss" - | "childrenDataJson.saas.isPermissionless" - | "childrenDataJson.saas.isSelfCustody" - | "childrenDataJson.saas.isTrustless" - | "childrenDataJson.saas.launchDate" - | "childrenDataJson.saas.matomo.eventAction" - | "childrenDataJson.saas.matomo.eventCategory" - | "childrenDataJson.saas.matomo.eventName" - | "childrenDataJson.saas.minEth" - | "childrenDataJson.saas.monthlyFee" - | "childrenDataJson.saas.monthlyFeeUnit" - | "childrenDataJson.saas.name" - | "childrenDataJson.saas.pctMajorityClient" - | "childrenDataJson.saas.platforms" - | "childrenDataJson.saas.socials.discord" - | "childrenDataJson.saas.socials.github" - | "childrenDataJson.saas.socials.telegram" - | "childrenDataJson.saas.socials.twitter" - | "childrenDataJson.saas.svgPath" - | "childrenDataJson.saas.ui" - | "childrenDataJson.saas.url" - | "childrenDataJson.skipCi" - | "childrenExchangesByCountryCsv" - | "childrenExchangesByCountryCsv.binance" - | "childrenExchangesByCountryCsv.binanceus" - | "childrenExchangesByCountryCsv.bitbuy" - | "childrenExchangesByCountryCsv.bitfinex" - | "childrenExchangesByCountryCsv.bitflyer" - | "childrenExchangesByCountryCsv.bitkub" - | "childrenExchangesByCountryCsv.bitso" - | "childrenExchangesByCountryCsv.bittrex" - | "childrenExchangesByCountryCsv.bitvavo" - | "childrenExchangesByCountryCsv.bybit" - | "childrenExchangesByCountryCsv.children" - | "childrenExchangesByCountryCsv.children.children" - | "childrenExchangesByCountryCsv.children.children.children" - | "childrenExchangesByCountryCsv.children.children.id" - | "childrenExchangesByCountryCsv.children.id" - | "childrenExchangesByCountryCsv.children.internal.content" - | "childrenExchangesByCountryCsv.children.internal.contentDigest" - | "childrenExchangesByCountryCsv.children.internal.description" - | "childrenExchangesByCountryCsv.children.internal.fieldOwners" - | "childrenExchangesByCountryCsv.children.internal.ignoreType" - | "childrenExchangesByCountryCsv.children.internal.mediaType" - | "childrenExchangesByCountryCsv.children.internal.owner" - | "childrenExchangesByCountryCsv.children.internal.type" - | "childrenExchangesByCountryCsv.children.parent.children" - | "childrenExchangesByCountryCsv.children.parent.id" - | "childrenExchangesByCountryCsv.coinbase" - | "childrenExchangesByCountryCsv.coinmama" - | "childrenExchangesByCountryCsv.coinspot" - | "childrenExchangesByCountryCsv.country" - | "childrenExchangesByCountryCsv.cryptocom" - | "childrenExchangesByCountryCsv.easycrypto" - | "childrenExchangesByCountryCsv.ftx" - | "childrenExchangesByCountryCsv.ftxus" - | "childrenExchangesByCountryCsv.gateio" - | "childrenExchangesByCountryCsv.gemini" - | "childrenExchangesByCountryCsv.huobiglobal" - | "childrenExchangesByCountryCsv.id" - | "childrenExchangesByCountryCsv.internal.content" - | "childrenExchangesByCountryCsv.internal.contentDigest" - | "childrenExchangesByCountryCsv.internal.description" - | "childrenExchangesByCountryCsv.internal.fieldOwners" - | "childrenExchangesByCountryCsv.internal.ignoreType" - | "childrenExchangesByCountryCsv.internal.mediaType" - | "childrenExchangesByCountryCsv.internal.owner" - | "childrenExchangesByCountryCsv.internal.type" - | "childrenExchangesByCountryCsv.itezcom" - | "childrenExchangesByCountryCsv.kraken" - | "childrenExchangesByCountryCsv.kucoin" - | "childrenExchangesByCountryCsv.moonpay" - | "childrenExchangesByCountryCsv.mtpelerin" - | "childrenExchangesByCountryCsv.okx" - | "childrenExchangesByCountryCsv.parent.children" - | "childrenExchangesByCountryCsv.parent.children.children" - | "childrenExchangesByCountryCsv.parent.children.id" - | "childrenExchangesByCountryCsv.parent.id" - | "childrenExchangesByCountryCsv.parent.internal.content" - | "childrenExchangesByCountryCsv.parent.internal.contentDigest" - | "childrenExchangesByCountryCsv.parent.internal.description" - | "childrenExchangesByCountryCsv.parent.internal.fieldOwners" - | "childrenExchangesByCountryCsv.parent.internal.ignoreType" - | "childrenExchangesByCountryCsv.parent.internal.mediaType" - | "childrenExchangesByCountryCsv.parent.internal.owner" - | "childrenExchangesByCountryCsv.parent.internal.type" - | "childrenExchangesByCountryCsv.parent.parent.children" - | "childrenExchangesByCountryCsv.parent.parent.id" - | "childrenExchangesByCountryCsv.rain" - | "childrenExchangesByCountryCsv.simplex" - | "childrenExchangesByCountryCsv.wazirx" - | "childrenExchangesByCountryCsv.wyre" - | "childrenExecutionBountyHuntersCsv" - | "childrenExecutionBountyHuntersCsv.children" - | "childrenExecutionBountyHuntersCsv.children.children" - | "childrenExecutionBountyHuntersCsv.children.children.children" - | "childrenExecutionBountyHuntersCsv.children.children.id" - | "childrenExecutionBountyHuntersCsv.children.id" - | "childrenExecutionBountyHuntersCsv.children.internal.content" - | "childrenExecutionBountyHuntersCsv.children.internal.contentDigest" - | "childrenExecutionBountyHuntersCsv.children.internal.description" - | "childrenExecutionBountyHuntersCsv.children.internal.fieldOwners" - | "childrenExecutionBountyHuntersCsv.children.internal.ignoreType" - | "childrenExecutionBountyHuntersCsv.children.internal.mediaType" - | "childrenExecutionBountyHuntersCsv.children.internal.owner" - | "childrenExecutionBountyHuntersCsv.children.internal.type" - | "childrenExecutionBountyHuntersCsv.children.parent.children" - | "childrenExecutionBountyHuntersCsv.children.parent.id" - | "childrenExecutionBountyHuntersCsv.id" - | "childrenExecutionBountyHuntersCsv.internal.content" - | "childrenExecutionBountyHuntersCsv.internal.contentDigest" - | "childrenExecutionBountyHuntersCsv.internal.description" - | "childrenExecutionBountyHuntersCsv.internal.fieldOwners" - | "childrenExecutionBountyHuntersCsv.internal.ignoreType" - | "childrenExecutionBountyHuntersCsv.internal.mediaType" - | "childrenExecutionBountyHuntersCsv.internal.owner" - | "childrenExecutionBountyHuntersCsv.internal.type" - | "childrenExecutionBountyHuntersCsv.name" - | "childrenExecutionBountyHuntersCsv.parent.children" - | "childrenExecutionBountyHuntersCsv.parent.children.children" - | "childrenExecutionBountyHuntersCsv.parent.children.id" - | "childrenExecutionBountyHuntersCsv.parent.id" - | "childrenExecutionBountyHuntersCsv.parent.internal.content" - | "childrenExecutionBountyHuntersCsv.parent.internal.contentDigest" - | "childrenExecutionBountyHuntersCsv.parent.internal.description" - | "childrenExecutionBountyHuntersCsv.parent.internal.fieldOwners" - | "childrenExecutionBountyHuntersCsv.parent.internal.ignoreType" - | "childrenExecutionBountyHuntersCsv.parent.internal.mediaType" - | "childrenExecutionBountyHuntersCsv.parent.internal.owner" - | "childrenExecutionBountyHuntersCsv.parent.internal.type" - | "childrenExecutionBountyHuntersCsv.parent.parent.children" - | "childrenExecutionBountyHuntersCsv.parent.parent.id" - | "childrenExecutionBountyHuntersCsv.score" - | "childrenExecutionBountyHuntersCsv.username" - | "childrenExternalTutorialsJson" - | "childrenExternalTutorialsJson.author" - | "childrenExternalTutorialsJson.authorGithub" - | "childrenExternalTutorialsJson.children" - | "childrenExternalTutorialsJson.children.children" - | "childrenExternalTutorialsJson.children.children.children" - | "childrenExternalTutorialsJson.children.children.id" - | "childrenExternalTutorialsJson.children.id" - | "childrenExternalTutorialsJson.children.internal.content" - | "childrenExternalTutorialsJson.children.internal.contentDigest" - | "childrenExternalTutorialsJson.children.internal.description" - | "childrenExternalTutorialsJson.children.internal.fieldOwners" - | "childrenExternalTutorialsJson.children.internal.ignoreType" - | "childrenExternalTutorialsJson.children.internal.mediaType" - | "childrenExternalTutorialsJson.children.internal.owner" - | "childrenExternalTutorialsJson.children.internal.type" - | "childrenExternalTutorialsJson.children.parent.children" - | "childrenExternalTutorialsJson.children.parent.id" - | "childrenExternalTutorialsJson.description" - | "childrenExternalTutorialsJson.id" - | "childrenExternalTutorialsJson.internal.content" - | "childrenExternalTutorialsJson.internal.contentDigest" - | "childrenExternalTutorialsJson.internal.description" - | "childrenExternalTutorialsJson.internal.fieldOwners" - | "childrenExternalTutorialsJson.internal.ignoreType" - | "childrenExternalTutorialsJson.internal.mediaType" - | "childrenExternalTutorialsJson.internal.owner" - | "childrenExternalTutorialsJson.internal.type" - | "childrenExternalTutorialsJson.lang" - | "childrenExternalTutorialsJson.parent.children" - | "childrenExternalTutorialsJson.parent.children.children" - | "childrenExternalTutorialsJson.parent.children.id" - | "childrenExternalTutorialsJson.parent.id" - | "childrenExternalTutorialsJson.parent.internal.content" - | "childrenExternalTutorialsJson.parent.internal.contentDigest" - | "childrenExternalTutorialsJson.parent.internal.description" - | "childrenExternalTutorialsJson.parent.internal.fieldOwners" - | "childrenExternalTutorialsJson.parent.internal.ignoreType" - | "childrenExternalTutorialsJson.parent.internal.mediaType" - | "childrenExternalTutorialsJson.parent.internal.owner" - | "childrenExternalTutorialsJson.parent.internal.type" - | "childrenExternalTutorialsJson.parent.parent.children" - | "childrenExternalTutorialsJson.parent.parent.id" - | "childrenExternalTutorialsJson.publishDate" - | "childrenExternalTutorialsJson.skillLevel" - | "childrenExternalTutorialsJson.tags" - | "childrenExternalTutorialsJson.timeToRead" - | "childrenExternalTutorialsJson.title" - | "childrenExternalTutorialsJson.url" - | "childrenImageSharp" - | "childrenImageSharp.children" - | "childrenImageSharp.children.children" - | "childrenImageSharp.children.children.children" - | "childrenImageSharp.children.children.id" - | "childrenImageSharp.children.id" - | "childrenImageSharp.children.internal.content" - | "childrenImageSharp.children.internal.contentDigest" - | "childrenImageSharp.children.internal.description" - | "childrenImageSharp.children.internal.fieldOwners" - | "childrenImageSharp.children.internal.ignoreType" - | "childrenImageSharp.children.internal.mediaType" - | "childrenImageSharp.children.internal.owner" - | "childrenImageSharp.children.internal.type" - | "childrenImageSharp.children.parent.children" - | "childrenImageSharp.children.parent.id" - | "childrenImageSharp.fixed.aspectRatio" - | "childrenImageSharp.fixed.base64" - | "childrenImageSharp.fixed.height" - | "childrenImageSharp.fixed.originalName" - | "childrenImageSharp.fixed.src" - | "childrenImageSharp.fixed.srcSet" - | "childrenImageSharp.fixed.srcSetWebp" - | "childrenImageSharp.fixed.srcWebp" - | "childrenImageSharp.fixed.tracedSVG" - | "childrenImageSharp.fixed.width" - | "childrenImageSharp.fluid.aspectRatio" - | "childrenImageSharp.fluid.base64" - | "childrenImageSharp.fluid.originalImg" - | "childrenImageSharp.fluid.originalName" - | "childrenImageSharp.fluid.presentationHeight" - | "childrenImageSharp.fluid.presentationWidth" - | "childrenImageSharp.fluid.sizes" - | "childrenImageSharp.fluid.src" - | "childrenImageSharp.fluid.srcSet" - | "childrenImageSharp.fluid.srcSetWebp" - | "childrenImageSharp.fluid.srcWebp" - | "childrenImageSharp.fluid.tracedSVG" - | "childrenImageSharp.gatsbyImageData" - | "childrenImageSharp.id" - | "childrenImageSharp.internal.content" - | "childrenImageSharp.internal.contentDigest" - | "childrenImageSharp.internal.description" - | "childrenImageSharp.internal.fieldOwners" - | "childrenImageSharp.internal.ignoreType" - | "childrenImageSharp.internal.mediaType" - | "childrenImageSharp.internal.owner" - | "childrenImageSharp.internal.type" - | "childrenImageSharp.original.height" - | "childrenImageSharp.original.src" - | "childrenImageSharp.original.width" - | "childrenImageSharp.parent.children" - | "childrenImageSharp.parent.children.children" - | "childrenImageSharp.parent.children.id" - | "childrenImageSharp.parent.id" - | "childrenImageSharp.parent.internal.content" - | "childrenImageSharp.parent.internal.contentDigest" - | "childrenImageSharp.parent.internal.description" - | "childrenImageSharp.parent.internal.fieldOwners" - | "childrenImageSharp.parent.internal.ignoreType" - | "childrenImageSharp.parent.internal.mediaType" - | "childrenImageSharp.parent.internal.owner" - | "childrenImageSharp.parent.internal.type" - | "childrenImageSharp.parent.parent.children" - | "childrenImageSharp.parent.parent.id" - | "childrenImageSharp.resize.aspectRatio" - | "childrenImageSharp.resize.height" - | "childrenImageSharp.resize.originalName" - | "childrenImageSharp.resize.src" - | "childrenImageSharp.resize.tracedSVG" - | "childrenImageSharp.resize.width" - | "childrenLayer2Json" - | "childrenLayer2Json.children" - | "childrenLayer2Json.children.children" - | "childrenLayer2Json.children.children.children" - | "childrenLayer2Json.children.children.id" - | "childrenLayer2Json.children.id" - | "childrenLayer2Json.children.internal.content" - | "childrenLayer2Json.children.internal.contentDigest" - | "childrenLayer2Json.children.internal.description" - | "childrenLayer2Json.children.internal.fieldOwners" - | "childrenLayer2Json.children.internal.ignoreType" - | "childrenLayer2Json.children.internal.mediaType" - | "childrenLayer2Json.children.internal.owner" - | "childrenLayer2Json.children.internal.type" - | "childrenLayer2Json.children.parent.children" - | "childrenLayer2Json.children.parent.id" - | "childrenLayer2Json.id" - | "childrenLayer2Json.internal.content" - | "childrenLayer2Json.internal.contentDigest" - | "childrenLayer2Json.internal.description" - | "childrenLayer2Json.internal.fieldOwners" - | "childrenLayer2Json.internal.ignoreType" - | "childrenLayer2Json.internal.mediaType" - | "childrenLayer2Json.internal.owner" - | "childrenLayer2Json.internal.type" - | "childrenLayer2Json.optimistic" - | "childrenLayer2Json.optimistic.background" - | "childrenLayer2Json.optimistic.blockExplorer" - | "childrenLayer2Json.optimistic.bridge" - | "childrenLayer2Json.optimistic.bridgeWallets" - | "childrenLayer2Json.optimistic.description" - | "childrenLayer2Json.optimistic.developerDocs" - | "childrenLayer2Json.optimistic.ecosystemPortal" - | "childrenLayer2Json.optimistic.imageKey" - | "childrenLayer2Json.optimistic.l2beat" - | "childrenLayer2Json.optimistic.name" - | "childrenLayer2Json.optimistic.noteKey" - | "childrenLayer2Json.optimistic.purpose" - | "childrenLayer2Json.optimistic.tokenLists" - | "childrenLayer2Json.optimistic.website" - | "childrenLayer2Json.parent.children" - | "childrenLayer2Json.parent.children.children" - | "childrenLayer2Json.parent.children.id" - | "childrenLayer2Json.parent.id" - | "childrenLayer2Json.parent.internal.content" - | "childrenLayer2Json.parent.internal.contentDigest" - | "childrenLayer2Json.parent.internal.description" - | "childrenLayer2Json.parent.internal.fieldOwners" - | "childrenLayer2Json.parent.internal.ignoreType" - | "childrenLayer2Json.parent.internal.mediaType" - | "childrenLayer2Json.parent.internal.owner" - | "childrenLayer2Json.parent.internal.type" - | "childrenLayer2Json.parent.parent.children" - | "childrenLayer2Json.parent.parent.id" - | "childrenLayer2Json.zk" - | "childrenLayer2Json.zk.background" - | "childrenLayer2Json.zk.blockExplorer" - | "childrenLayer2Json.zk.bridge" - | "childrenLayer2Json.zk.bridgeWallets" - | "childrenLayer2Json.zk.description" - | "childrenLayer2Json.zk.developerDocs" - | "childrenLayer2Json.zk.ecosystemPortal" - | "childrenLayer2Json.zk.imageKey" - | "childrenLayer2Json.zk.l2beat" - | "childrenLayer2Json.zk.name" - | "childrenLayer2Json.zk.noteKey" - | "childrenLayer2Json.zk.purpose" - | "childrenLayer2Json.zk.tokenLists" - | "childrenLayer2Json.zk.website" - | "childrenMdx" - | "childrenMdx.body" - | "childrenMdx.children" - | "childrenMdx.children.children" - | "childrenMdx.children.children.children" - | "childrenMdx.children.children.id" - | "childrenMdx.children.id" - | "childrenMdx.children.internal.content" - | "childrenMdx.children.internal.contentDigest" - | "childrenMdx.children.internal.description" - | "childrenMdx.children.internal.fieldOwners" - | "childrenMdx.children.internal.ignoreType" - | "childrenMdx.children.internal.mediaType" - | "childrenMdx.children.internal.owner" - | "childrenMdx.children.internal.type" - | "childrenMdx.children.parent.children" - | "childrenMdx.children.parent.id" - | "childrenMdx.excerpt" - | "childrenMdx.fields.isOutdated" - | "childrenMdx.fields.readingTime.minutes" - | "childrenMdx.fields.readingTime.text" - | "childrenMdx.fields.readingTime.time" - | "childrenMdx.fields.readingTime.words" - | "childrenMdx.fields.relativePath" - | "childrenMdx.fields.slug" - | "childrenMdx.fileAbsolutePath" - | "childrenMdx.frontmatter.address" - | "childrenMdx.frontmatter.alt" - | "childrenMdx.frontmatter.author" - | "childrenMdx.frontmatter.authors" - | "childrenMdx.frontmatter.compensation" - | "childrenMdx.frontmatter.description" - | "childrenMdx.frontmatter.emoji" - | "childrenMdx.frontmatter.image.absolutePath" - | "childrenMdx.frontmatter.image.accessTime" - | "childrenMdx.frontmatter.image.atime" - | "childrenMdx.frontmatter.image.atimeMs" - | "childrenMdx.frontmatter.image.base" - | "childrenMdx.frontmatter.image.birthTime" - | "childrenMdx.frontmatter.image.birthtime" - | "childrenMdx.frontmatter.image.birthtimeMs" - | "childrenMdx.frontmatter.image.blksize" - | "childrenMdx.frontmatter.image.blocks" - | "childrenMdx.frontmatter.image.changeTime" - | "childrenMdx.frontmatter.image.children" - | "childrenMdx.frontmatter.image.childrenAlltimeJson" - | "childrenMdx.frontmatter.image.childrenCexLayer2SupportJson" - | "childrenMdx.frontmatter.image.childrenCommunityEventsJson" - | "childrenMdx.frontmatter.image.childrenCommunityMeetupsJson" - | "childrenMdx.frontmatter.image.childrenConsensusBountyHuntersCsv" - | "childrenMdx.frontmatter.image.childrenDataJson" - | "childrenMdx.frontmatter.image.childrenExchangesByCountryCsv" - | "childrenMdx.frontmatter.image.childrenExecutionBountyHuntersCsv" - | "childrenMdx.frontmatter.image.childrenExternalTutorialsJson" - | "childrenMdx.frontmatter.image.childrenImageSharp" - | "childrenMdx.frontmatter.image.childrenLayer2Json" - | "childrenMdx.frontmatter.image.childrenMdx" - | "childrenMdx.frontmatter.image.childrenMonthJson" - | "childrenMdx.frontmatter.image.childrenQuarterJson" - | "childrenMdx.frontmatter.image.childrenWalletsCsv" - | "childrenMdx.frontmatter.image.ctime" - | "childrenMdx.frontmatter.image.ctimeMs" - | "childrenMdx.frontmatter.image.dev" - | "childrenMdx.frontmatter.image.dir" - | "childrenMdx.frontmatter.image.ext" - | "childrenMdx.frontmatter.image.extension" - | "childrenMdx.frontmatter.image.gid" - | "childrenMdx.frontmatter.image.id" - | "childrenMdx.frontmatter.image.ino" - | "childrenMdx.frontmatter.image.mode" - | "childrenMdx.frontmatter.image.modifiedTime" - | "childrenMdx.frontmatter.image.mtime" - | "childrenMdx.frontmatter.image.mtimeMs" - | "childrenMdx.frontmatter.image.name" - | "childrenMdx.frontmatter.image.nlink" - | "childrenMdx.frontmatter.image.prettySize" - | "childrenMdx.frontmatter.image.publicURL" - | "childrenMdx.frontmatter.image.rdev" - | "childrenMdx.frontmatter.image.relativeDirectory" - | "childrenMdx.frontmatter.image.relativePath" - | "childrenMdx.frontmatter.image.root" - | "childrenMdx.frontmatter.image.size" - | "childrenMdx.frontmatter.image.sourceInstanceName" - | "childrenMdx.frontmatter.image.uid" - | "childrenMdx.frontmatter.incomplete" - | "childrenMdx.frontmatter.isOutdated" - | "childrenMdx.frontmatter.lang" - | "childrenMdx.frontmatter.link" - | "childrenMdx.frontmatter.location" - | "childrenMdx.frontmatter.position" - | "childrenMdx.frontmatter.published" - | "childrenMdx.frontmatter.sidebar" - | "childrenMdx.frontmatter.sidebarDepth" - | "childrenMdx.frontmatter.skill" - | "childrenMdx.frontmatter.source" - | "childrenMdx.frontmatter.sourceUrl" - | "childrenMdx.frontmatter.summaryPoint1" - | "childrenMdx.frontmatter.summaryPoint2" - | "childrenMdx.frontmatter.summaryPoint3" - | "childrenMdx.frontmatter.summaryPoint4" - | "childrenMdx.frontmatter.summaryPoints" - | "childrenMdx.frontmatter.tags" - | "childrenMdx.frontmatter.template" - | "childrenMdx.frontmatter.title" - | "childrenMdx.frontmatter.type" - | "childrenMdx.headings" - | "childrenMdx.headings.depth" - | "childrenMdx.headings.value" - | "childrenMdx.html" - | "childrenMdx.id" - | "childrenMdx.internal.content" - | "childrenMdx.internal.contentDigest" - | "childrenMdx.internal.description" - | "childrenMdx.internal.fieldOwners" - | "childrenMdx.internal.ignoreType" - | "childrenMdx.internal.mediaType" - | "childrenMdx.internal.owner" - | "childrenMdx.internal.type" - | "childrenMdx.mdxAST" - | "childrenMdx.parent.children" - | "childrenMdx.parent.children.children" - | "childrenMdx.parent.children.id" - | "childrenMdx.parent.id" - | "childrenMdx.parent.internal.content" - | "childrenMdx.parent.internal.contentDigest" - | "childrenMdx.parent.internal.description" - | "childrenMdx.parent.internal.fieldOwners" - | "childrenMdx.parent.internal.ignoreType" - | "childrenMdx.parent.internal.mediaType" - | "childrenMdx.parent.internal.owner" - | "childrenMdx.parent.internal.type" - | "childrenMdx.parent.parent.children" - | "childrenMdx.parent.parent.id" - | "childrenMdx.rawBody" - | "childrenMdx.slug" - | "childrenMdx.tableOfContents" - | "childrenMdx.timeToRead" - | "childrenMdx.wordCount.paragraphs" - | "childrenMdx.wordCount.sentences" - | "childrenMdx.wordCount.words" - | "childrenMonthJson" - | "childrenMonthJson.children" - | "childrenMonthJson.children.children" - | "childrenMonthJson.children.children.children" - | "childrenMonthJson.children.children.id" - | "childrenMonthJson.children.id" - | "childrenMonthJson.children.internal.content" - | "childrenMonthJson.children.internal.contentDigest" - | "childrenMonthJson.children.internal.description" - | "childrenMonthJson.children.internal.fieldOwners" - | "childrenMonthJson.children.internal.ignoreType" - | "childrenMonthJson.children.internal.mediaType" - | "childrenMonthJson.children.internal.owner" - | "childrenMonthJson.children.internal.type" - | "childrenMonthJson.children.parent.children" - | "childrenMonthJson.children.parent.id" - | "childrenMonthJson.currency" - | "childrenMonthJson.data" - | "childrenMonthJson.data.languages" - | "childrenMonthJson.data.user.avatarUrl" - | "childrenMonthJson.data.user.fullName" - | "childrenMonthJson.data.user.id" - | "childrenMonthJson.data.user.preTranslated" - | "childrenMonthJson.data.user.totalCosts" - | "childrenMonthJson.data.user.userRole" - | "childrenMonthJson.data.user.username" - | "childrenMonthJson.dateRange.from" - | "childrenMonthJson.dateRange.to" - | "childrenMonthJson.id" - | "childrenMonthJson.internal.content" - | "childrenMonthJson.internal.contentDigest" - | "childrenMonthJson.internal.description" - | "childrenMonthJson.internal.fieldOwners" - | "childrenMonthJson.internal.ignoreType" - | "childrenMonthJson.internal.mediaType" - | "childrenMonthJson.internal.owner" - | "childrenMonthJson.internal.type" - | "childrenMonthJson.mode" - | "childrenMonthJson.name" - | "childrenMonthJson.parent.children" - | "childrenMonthJson.parent.children.children" - | "childrenMonthJson.parent.children.id" - | "childrenMonthJson.parent.id" - | "childrenMonthJson.parent.internal.content" - | "childrenMonthJson.parent.internal.contentDigest" - | "childrenMonthJson.parent.internal.description" - | "childrenMonthJson.parent.internal.fieldOwners" - | "childrenMonthJson.parent.internal.ignoreType" - | "childrenMonthJson.parent.internal.mediaType" - | "childrenMonthJson.parent.internal.owner" - | "childrenMonthJson.parent.internal.type" - | "childrenMonthJson.parent.parent.children" - | "childrenMonthJson.parent.parent.id" - | "childrenMonthJson.totalCosts" - | "childrenMonthJson.totalPreTranslated" - | "childrenMonthJson.totalTMSavings" - | "childrenMonthJson.unit" - | "childrenMonthJson.url" - | "childrenQuarterJson" - | "childrenQuarterJson.children" - | "childrenQuarterJson.children.children" - | "childrenQuarterJson.children.children.children" - | "childrenQuarterJson.children.children.id" - | "childrenQuarterJson.children.id" - | "childrenQuarterJson.children.internal.content" - | "childrenQuarterJson.children.internal.contentDigest" - | "childrenQuarterJson.children.internal.description" - | "childrenQuarterJson.children.internal.fieldOwners" - | "childrenQuarterJson.children.internal.ignoreType" - | "childrenQuarterJson.children.internal.mediaType" - | "childrenQuarterJson.children.internal.owner" - | "childrenQuarterJson.children.internal.type" - | "childrenQuarterJson.children.parent.children" - | "childrenQuarterJson.children.parent.id" - | "childrenQuarterJson.currency" - | "childrenQuarterJson.data" - | "childrenQuarterJson.data.languages" - | "childrenQuarterJson.data.user.avatarUrl" - | "childrenQuarterJson.data.user.fullName" - | "childrenQuarterJson.data.user.id" - | "childrenQuarterJson.data.user.preTranslated" - | "childrenQuarterJson.data.user.totalCosts" - | "childrenQuarterJson.data.user.userRole" - | "childrenQuarterJson.data.user.username" - | "childrenQuarterJson.dateRange.from" - | "childrenQuarterJson.dateRange.to" - | "childrenQuarterJson.id" - | "childrenQuarterJson.internal.content" - | "childrenQuarterJson.internal.contentDigest" - | "childrenQuarterJson.internal.description" - | "childrenQuarterJson.internal.fieldOwners" - | "childrenQuarterJson.internal.ignoreType" - | "childrenQuarterJson.internal.mediaType" - | "childrenQuarterJson.internal.owner" - | "childrenQuarterJson.internal.type" - | "childrenQuarterJson.mode" - | "childrenQuarterJson.name" - | "childrenQuarterJson.parent.children" - | "childrenQuarterJson.parent.children.children" - | "childrenQuarterJson.parent.children.id" - | "childrenQuarterJson.parent.id" - | "childrenQuarterJson.parent.internal.content" - | "childrenQuarterJson.parent.internal.contentDigest" - | "childrenQuarterJson.parent.internal.description" - | "childrenQuarterJson.parent.internal.fieldOwners" - | "childrenQuarterJson.parent.internal.ignoreType" - | "childrenQuarterJson.parent.internal.mediaType" - | "childrenQuarterJson.parent.internal.owner" - | "childrenQuarterJson.parent.internal.type" - | "childrenQuarterJson.parent.parent.children" - | "childrenQuarterJson.parent.parent.id" - | "childrenQuarterJson.totalCosts" - | "childrenQuarterJson.totalPreTranslated" - | "childrenQuarterJson.totalTMSavings" - | "childrenQuarterJson.unit" - | "childrenQuarterJson.url" - | "childrenWalletsCsv" - | "childrenWalletsCsv.brand_color" - | "childrenWalletsCsv.children" - | "childrenWalletsCsv.children.children" - | "childrenWalletsCsv.children.children.children" - | "childrenWalletsCsv.children.children.id" - | "childrenWalletsCsv.children.id" - | "childrenWalletsCsv.children.internal.content" - | "childrenWalletsCsv.children.internal.contentDigest" - | "childrenWalletsCsv.children.internal.description" - | "childrenWalletsCsv.children.internal.fieldOwners" - | "childrenWalletsCsv.children.internal.ignoreType" - | "childrenWalletsCsv.children.internal.mediaType" - | "childrenWalletsCsv.children.internal.owner" - | "childrenWalletsCsv.children.internal.type" - | "childrenWalletsCsv.children.parent.children" - | "childrenWalletsCsv.children.parent.id" - | "childrenWalletsCsv.has_bank_withdrawals" - | "childrenWalletsCsv.has_card_deposits" - | "childrenWalletsCsv.has_defi_integrations" - | "childrenWalletsCsv.has_desktop" - | "childrenWalletsCsv.has_dex_integrations" - | "childrenWalletsCsv.has_explore_dapps" - | "childrenWalletsCsv.has_hardware" - | "childrenWalletsCsv.has_high_volume_purchases" - | "childrenWalletsCsv.has_limits_protection" - | "childrenWalletsCsv.has_mobile" - | "childrenWalletsCsv.has_multisig" - | "childrenWalletsCsv.has_web" - | "childrenWalletsCsv.id" - | "childrenWalletsCsv.internal.content" - | "childrenWalletsCsv.internal.contentDigest" - | "childrenWalletsCsv.internal.description" - | "childrenWalletsCsv.internal.fieldOwners" - | "childrenWalletsCsv.internal.ignoreType" - | "childrenWalletsCsv.internal.mediaType" - | "childrenWalletsCsv.internal.owner" - | "childrenWalletsCsv.internal.type" - | "childrenWalletsCsv.name" - | "childrenWalletsCsv.parent.children" - | "childrenWalletsCsv.parent.children.children" - | "childrenWalletsCsv.parent.children.id" - | "childrenWalletsCsv.parent.id" - | "childrenWalletsCsv.parent.internal.content" - | "childrenWalletsCsv.parent.internal.contentDigest" - | "childrenWalletsCsv.parent.internal.description" - | "childrenWalletsCsv.parent.internal.fieldOwners" - | "childrenWalletsCsv.parent.internal.ignoreType" - | "childrenWalletsCsv.parent.internal.mediaType" - | "childrenWalletsCsv.parent.internal.owner" - | "childrenWalletsCsv.parent.internal.type" - | "childrenWalletsCsv.parent.parent.children" - | "childrenWalletsCsv.parent.parent.id" - | "childrenWalletsCsv.url" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "ctime" - | "ctimeMs" - | "dev" - | "dir" - | "ext" - | "extension" - | "fields.gitLogLatestAuthorEmail" - | "fields.gitLogLatestAuthorName" - | "fields.gitLogLatestDate" - | "gid" - | "id" - | "ino" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "mode" - | "modifiedTime" - | "mtime" - | "mtimeMs" - | "name" - | "nlink" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "prettySize" - | "publicURL" - | "rdev" - | "relativeDirectory" - | "relativePath" - | "root" - | "size" - | "sourceInstanceName" - | "uid" - - type FileFieldsFilterInput = { - readonly gitLogLatestAuthorEmail: InputMaybe - readonly gitLogLatestAuthorName: InputMaybe - readonly gitLogLatestDate: InputMaybe - } - - type FileFilterInput = { - readonly absolutePath: InputMaybe - readonly accessTime: InputMaybe - readonly atime: InputMaybe - readonly atimeMs: InputMaybe - readonly base: InputMaybe - readonly birthTime: InputMaybe - readonly birthtime: InputMaybe - readonly birthtimeMs: InputMaybe - readonly blksize: InputMaybe - readonly blocks: InputMaybe - readonly changeTime: InputMaybe - readonly childAlltimeJson: InputMaybe - readonly childCexLayer2SupportJson: InputMaybe - readonly childCommunityEventsJson: InputMaybe - readonly childCommunityMeetupsJson: InputMaybe - readonly childConsensusBountyHuntersCsv: InputMaybe - readonly childDataJson: InputMaybe - readonly childExchangesByCountryCsv: InputMaybe - readonly childExecutionBountyHuntersCsv: InputMaybe - readonly childExternalTutorialsJson: InputMaybe - readonly childImageSharp: InputMaybe - readonly childLayer2Json: InputMaybe - readonly childMdx: InputMaybe - readonly childMonthJson: InputMaybe - readonly childQuarterJson: InputMaybe - readonly childWalletsCsv: InputMaybe - readonly children: InputMaybe - readonly childrenAlltimeJson: InputMaybe - readonly childrenCexLayer2SupportJson: InputMaybe - readonly childrenCommunityEventsJson: InputMaybe - readonly childrenCommunityMeetupsJson: InputMaybe - readonly childrenConsensusBountyHuntersCsv: InputMaybe - readonly childrenDataJson: InputMaybe - readonly childrenExchangesByCountryCsv: InputMaybe - readonly childrenExecutionBountyHuntersCsv: InputMaybe - readonly childrenExternalTutorialsJson: InputMaybe - readonly childrenImageSharp: InputMaybe - readonly childrenLayer2Json: InputMaybe - readonly childrenMdx: InputMaybe - readonly childrenMonthJson: InputMaybe - readonly childrenQuarterJson: InputMaybe - readonly childrenWalletsCsv: InputMaybe - readonly ctime: InputMaybe - readonly ctimeMs: InputMaybe - readonly dev: InputMaybe - readonly dir: InputMaybe - readonly ext: InputMaybe - readonly extension: InputMaybe - readonly fields: InputMaybe - readonly gid: InputMaybe - readonly id: InputMaybe - readonly ino: InputMaybe - readonly internal: InputMaybe - readonly mode: InputMaybe - readonly modifiedTime: InputMaybe - readonly mtime: InputMaybe - readonly mtimeMs: InputMaybe - readonly name: InputMaybe - readonly nlink: InputMaybe - readonly parent: InputMaybe - readonly prettySize: InputMaybe - readonly publicURL: InputMaybe - readonly rdev: InputMaybe - readonly relativeDirectory: InputMaybe - readonly relativePath: InputMaybe - readonly root: InputMaybe - readonly size: InputMaybe - readonly sourceInstanceName: InputMaybe - readonly uid: InputMaybe - } - - type FileGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type FileGroupConnection_distinctArgs = { - field: FileFieldsEnum - } - - type FileGroupConnection_groupArgs = { - field: FileFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type FileGroupConnection_maxArgs = { - field: FileFieldsEnum - } - - type FileGroupConnection_minArgs = { - field: FileFieldsEnum - } - - type FileGroupConnection_sumArgs = { - field: FileFieldsEnum - } - - type FileSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type FloatQueryOperatorInput = { - readonly eq: InputMaybe - readonly gt: InputMaybe - readonly gte: InputMaybe - readonly in: InputMaybe>> - readonly lt: InputMaybe - readonly lte: InputMaybe - readonly ne: InputMaybe - readonly nin: InputMaybe>> - } - - type Frontmatter = { - readonly address: Maybe - readonly alt: Maybe - readonly author: Maybe - readonly authors: Maybe - readonly compensation: Maybe - readonly description: Maybe - readonly emoji: Maybe - readonly image: Maybe - readonly incomplete: Maybe - readonly isOutdated: Maybe - readonly lang: Maybe - readonly link: Maybe - readonly location: Maybe - readonly position: Maybe - readonly published: Maybe - readonly sidebar: Maybe - readonly sidebarDepth: Maybe - readonly skill: Maybe - readonly source: Maybe - readonly sourceUrl: Maybe - readonly summaryPoint1: Scalars["String"] - readonly summaryPoint2: Scalars["String"] - readonly summaryPoint3: Scalars["String"] - readonly summaryPoint4: Scalars["String"] - readonly summaryPoints: Maybe>> - readonly tags: Maybe>> - readonly template: Maybe - readonly title: Maybe - readonly type: Maybe - } - - type FrontmatterFilterInput = { - readonly address: InputMaybe - readonly alt: InputMaybe - readonly author: InputMaybe - readonly authors: InputMaybe - readonly compensation: InputMaybe - readonly description: InputMaybe - readonly emoji: InputMaybe - readonly image: InputMaybe - readonly incomplete: InputMaybe - readonly isOutdated: InputMaybe - readonly lang: InputMaybe - readonly link: InputMaybe - readonly location: InputMaybe - readonly position: InputMaybe - readonly published: InputMaybe - readonly sidebar: InputMaybe - readonly sidebarDepth: InputMaybe - readonly skill: InputMaybe - readonly source: InputMaybe - readonly sourceUrl: InputMaybe - readonly summaryPoint1: InputMaybe - readonly summaryPoint2: InputMaybe - readonly summaryPoint3: InputMaybe - readonly summaryPoint4: InputMaybe - readonly summaryPoints: InputMaybe - readonly tags: InputMaybe - readonly template: InputMaybe - readonly title: InputMaybe - readonly type: InputMaybe - } - - type GatsbyImageFormat = - | "auto" - | "avif" - | "jpg" - | "NO_CHANGE" - | "png" - | "webp" - - type GatsbyImageLayout = "constrained" | "fixed" | "fullWidth" - - type GatsbyImagePlaceholder = - | "blurred" - | "dominantColor" - | "none" - | "tracedSVG" - - type HeadingsMdx = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" - - type ImageCropFocus = 17 | "CENTER" | 2 | 16 | 1 | 5 | 8 | 3 | 6 | 7 | 4 - - type ImageFit = "contain" | "cover" | "fill" | "inside" | "outside" - - type ImageFormat = "AUTO" | "avif" | "jpg" | "NO_CHANGE" | "png" | "webp" - - type ImageLayout = "constrained" | "fixed" | "fullWidth" - - type ImagePlaceholder = "blurred" | "dominantColor" | "none" | "tracedSVG" - - type ImageSharp = Node & { - readonly children: ReadonlyArray - readonly fixed: Maybe - readonly fluid: Maybe - readonly gatsbyImageData: Scalars["JSON"] - readonly id: Scalars["ID"] - readonly internal: Internal - readonly original: Maybe - readonly parent: Maybe - readonly resize: Maybe - } - - type ImageSharp_fixedArgs = { - background?: InputMaybe - base64Width: InputMaybe - cropFocus?: InputMaybe - duotone: InputMaybe - fit?: InputMaybe - grayscale?: InputMaybe - height: InputMaybe - jpegProgressive?: InputMaybe - jpegQuality: InputMaybe - pngCompressionSpeed?: InputMaybe - pngQuality: InputMaybe - quality: InputMaybe - rotate?: InputMaybe - toFormat?: InputMaybe - toFormatBase64?: InputMaybe - traceSVG: InputMaybe - trim?: InputMaybe - webpQuality: InputMaybe - width: InputMaybe - } - - type ImageSharp_fluidArgs = { - background?: InputMaybe - base64Width: InputMaybe - cropFocus?: InputMaybe - duotone: InputMaybe - fit?: InputMaybe - grayscale?: InputMaybe - jpegProgressive?: InputMaybe - jpegQuality: InputMaybe - maxHeight: InputMaybe - maxWidth: InputMaybe - pngCompressionSpeed?: InputMaybe - pngQuality: InputMaybe - quality: InputMaybe - rotate?: InputMaybe - sizes?: InputMaybe - srcSetBreakpoints?: InputMaybe>> - toFormat?: InputMaybe - toFormatBase64?: InputMaybe - traceSVG: InputMaybe - trim?: InputMaybe - webpQuality: InputMaybe - } - - type ImageSharp_gatsbyImageDataArgs = { - aspectRatio: InputMaybe - avifOptions: InputMaybe - backgroundColor: InputMaybe - blurredOptions: InputMaybe - breakpoints: InputMaybe>> - formats: InputMaybe>> - height: InputMaybe - jpgOptions: InputMaybe - layout?: InputMaybe - outputPixelDensities: InputMaybe< - ReadonlyArray> - > - placeholder: InputMaybe - pngOptions: InputMaybe - quality: InputMaybe - sizes: InputMaybe - tracedSVGOptions: InputMaybe - transformOptions: InputMaybe - webpOptions: InputMaybe - width: InputMaybe - } - - type ImageSharp_resizeArgs = { - background?: InputMaybe - base64?: InputMaybe - cropFocus?: InputMaybe - duotone: InputMaybe - fit?: InputMaybe - grayscale?: InputMaybe - height: InputMaybe - jpegProgressive?: InputMaybe - jpegQuality: InputMaybe - pngCompressionLevel?: InputMaybe - pngCompressionSpeed?: InputMaybe - pngQuality: InputMaybe - quality: InputMaybe - rotate?: InputMaybe - toFormat?: InputMaybe - traceSVG: InputMaybe - trim?: InputMaybe - webpQuality: InputMaybe - width: InputMaybe - } - - type ImageSharpConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ImageSharpConnection_distinctArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpConnection_groupArgs = { - field: ImageSharpFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ImageSharpConnection_maxArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpConnection_minArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpConnection_sumArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpEdge = { - readonly next: Maybe - readonly node: ImageSharp - readonly previous: Maybe - } - - type ImageSharpFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "fixed.aspectRatio" - | "fixed.base64" - | "fixed.height" - | "fixed.originalName" - | "fixed.src" - | "fixed.srcSet" - | "fixed.srcSetWebp" - | "fixed.srcWebp" - | "fixed.tracedSVG" - | "fixed.width" - | "fluid.aspectRatio" - | "fluid.base64" - | "fluid.originalImg" - | "fluid.originalName" - | "fluid.presentationHeight" - | "fluid.presentationWidth" - | "fluid.sizes" - | "fluid.src" - | "fluid.srcSet" - | "fluid.srcSetWebp" - | "fluid.srcWebp" - | "fluid.tracedSVG" - | "gatsbyImageData" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "original.height" - | "original.src" - | "original.width" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "resize.aspectRatio" - | "resize.height" - | "resize.originalName" - | "resize.src" - | "resize.tracedSVG" - | "resize.width" - - type ImageSharpFilterInput = { - readonly children: InputMaybe - readonly fixed: InputMaybe - readonly fluid: InputMaybe - readonly gatsbyImageData: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly original: InputMaybe - readonly parent: InputMaybe - readonly resize: InputMaybe - } - - type ImageSharpFilterListInput = { - readonly elemMatch: InputMaybe - } - - type ImageSharpFixed = { - readonly aspectRatio: Maybe - readonly base64: Maybe - readonly height: Scalars["Float"] - readonly originalName: Maybe - readonly src: Scalars["String"] - readonly srcSet: Scalars["String"] - readonly srcSetWebp: Maybe - readonly srcWebp: Maybe - readonly tracedSVG: Maybe - readonly width: Scalars["Float"] - } - - type ImageSharpFixedFilterInput = { - readonly aspectRatio: InputMaybe - readonly base64: InputMaybe - readonly height: InputMaybe - readonly originalName: InputMaybe - readonly src: InputMaybe - readonly srcSet: InputMaybe - readonly srcSetWebp: InputMaybe - readonly srcWebp: InputMaybe - readonly tracedSVG: InputMaybe - readonly width: InputMaybe - } - - type ImageSharpFluid = { - readonly aspectRatio: Scalars["Float"] - readonly base64: Maybe - readonly originalImg: Maybe - readonly originalName: Maybe - readonly presentationHeight: Scalars["Int"] - readonly presentationWidth: Scalars["Int"] - readonly sizes: Scalars["String"] - readonly src: Scalars["String"] - readonly srcSet: Scalars["String"] - readonly srcSetWebp: Maybe - readonly srcWebp: Maybe - readonly tracedSVG: Maybe - } - - type ImageSharpFluidFilterInput = { - readonly aspectRatio: InputMaybe - readonly base64: InputMaybe - readonly originalImg: InputMaybe - readonly originalName: InputMaybe - readonly presentationHeight: InputMaybe - readonly presentationWidth: InputMaybe - readonly sizes: InputMaybe - readonly src: InputMaybe - readonly srcSet: InputMaybe - readonly srcSetWebp: InputMaybe - readonly srcWebp: InputMaybe - readonly tracedSVG: InputMaybe - } - - type ImageSharpGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type ImageSharpGroupConnection_distinctArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpGroupConnection_groupArgs = { - field: ImageSharpFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type ImageSharpGroupConnection_maxArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpGroupConnection_minArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpGroupConnection_sumArgs = { - field: ImageSharpFieldsEnum - } - - type ImageSharpOriginal = { - readonly height: Maybe - readonly src: Maybe - readonly width: Maybe - } - - type ImageSharpOriginalFilterInput = { - readonly height: InputMaybe - readonly src: InputMaybe - readonly width: InputMaybe - } - - type ImageSharpResize = { - readonly aspectRatio: Maybe - readonly height: Maybe - readonly originalName: Maybe - readonly src: Maybe - readonly tracedSVG: Maybe - readonly width: Maybe - } - - type ImageSharpResizeFilterInput = { - readonly aspectRatio: InputMaybe - readonly height: InputMaybe - readonly originalName: InputMaybe - readonly src: InputMaybe - readonly tracedSVG: InputMaybe - readonly width: InputMaybe - } - - type ImageSharpSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type IntQueryOperatorInput = { - readonly eq: InputMaybe - readonly gt: InputMaybe - readonly gte: InputMaybe - readonly in: InputMaybe>> - readonly lt: InputMaybe - readonly lte: InputMaybe - readonly ne: InputMaybe - readonly nin: InputMaybe>> - } - - type Internal = { - readonly content: Maybe - readonly contentDigest: Scalars["String"] - readonly description: Maybe - readonly fieldOwners: Maybe>> - readonly ignoreType: Maybe - readonly mediaType: Maybe - readonly owner: Scalars["String"] - readonly type: Scalars["String"] - } - - type InternalFilterInput = { - readonly content: InputMaybe - readonly contentDigest: InputMaybe - readonly description: InputMaybe - readonly fieldOwners: InputMaybe - readonly ignoreType: InputMaybe - readonly mediaType: InputMaybe - readonly owner: InputMaybe - readonly type: InputMaybe - } - - type JPGOptions = { - readonly progressive: InputMaybe - readonly quality: InputMaybe - } - - type JSONQueryOperatorInput = { - readonly eq: InputMaybe - readonly glob: InputMaybe - readonly in: InputMaybe>> - readonly ne: InputMaybe - readonly nin: InputMaybe>> - readonly regex: InputMaybe - } - - type Layer2Json = Node & { - readonly children: ReadonlyArray - readonly id: Scalars["ID"] - readonly internal: Internal - readonly optimistic: Maybe>> - readonly parent: Maybe - readonly zk: Maybe>> - } - - type Layer2JsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type Layer2JsonConnection_distinctArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonConnection_groupArgs = { - field: Layer2JsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type Layer2JsonConnection_maxArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonConnection_minArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonConnection_sumArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonEdge = { - readonly next: Maybe - readonly node: Layer2Json - readonly previous: Maybe - } - - type Layer2JsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "optimistic" - | "optimistic.background" - | "optimistic.blockExplorer" - | "optimistic.bridge" - | "optimistic.bridgeWallets" - | "optimistic.description" - | "optimistic.developerDocs" - | "optimistic.ecosystemPortal" - | "optimistic.imageKey" - | "optimistic.l2beat" - | "optimistic.name" - | "optimistic.noteKey" - | "optimistic.purpose" - | "optimistic.tokenLists" - | "optimistic.website" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "zk" - | "zk.background" - | "zk.blockExplorer" - | "zk.bridge" - | "zk.bridgeWallets" - | "zk.description" - | "zk.developerDocs" - | "zk.ecosystemPortal" - | "zk.imageKey" - | "zk.l2beat" - | "zk.name" - | "zk.noteKey" - | "zk.purpose" - | "zk.tokenLists" - | "zk.website" - - type Layer2JsonFilterInput = { - readonly children: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly optimistic: InputMaybe - readonly parent: InputMaybe - readonly zk: InputMaybe - } - - type Layer2JsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type Layer2JsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type Layer2JsonGroupConnection_distinctArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonGroupConnection_groupArgs = { - field: Layer2JsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type Layer2JsonGroupConnection_maxArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonGroupConnection_minArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonGroupConnection_sumArgs = { - field: Layer2JsonFieldsEnum - } - - type Layer2JsonOptimistic = { - readonly background: Maybe - readonly blockExplorer: Maybe - readonly bridge: Maybe - readonly bridgeWallets: Maybe>> - readonly description: Maybe - readonly developerDocs: Maybe - readonly ecosystemPortal: Maybe - readonly imageKey: Maybe - readonly l2beat: Maybe - readonly name: Maybe - readonly noteKey: Maybe - readonly purpose: Maybe>> - readonly tokenLists: Maybe - readonly website: Maybe - } - - type Layer2JsonOptimisticFilterInput = { - readonly background: InputMaybe - readonly blockExplorer: InputMaybe - readonly bridge: InputMaybe - readonly bridgeWallets: InputMaybe - readonly description: InputMaybe - readonly developerDocs: InputMaybe - readonly ecosystemPortal: InputMaybe - readonly imageKey: InputMaybe - readonly l2beat: InputMaybe - readonly name: InputMaybe - readonly noteKey: InputMaybe - readonly purpose: InputMaybe - readonly tokenLists: InputMaybe - readonly website: InputMaybe - } - - type Layer2JsonOptimisticFilterListInput = { - readonly elemMatch: InputMaybe - } - - type Layer2JsonSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type Layer2JsonZk = { - readonly background: Maybe - readonly blockExplorer: Maybe - readonly bridge: Maybe - readonly bridgeWallets: Maybe>> - readonly description: Maybe - readonly developerDocs: Maybe - readonly ecosystemPortal: Maybe - readonly imageKey: Maybe - readonly l2beat: Maybe - readonly name: Maybe - readonly noteKey: Maybe - readonly purpose: Maybe>> - readonly tokenLists: Maybe - readonly website: Maybe - } - - type Layer2JsonZkFilterInput = { - readonly background: InputMaybe - readonly blockExplorer: InputMaybe - readonly bridge: InputMaybe - readonly bridgeWallets: InputMaybe - readonly description: InputMaybe - readonly developerDocs: InputMaybe - readonly ecosystemPortal: InputMaybe - readonly imageKey: InputMaybe - readonly l2beat: InputMaybe - readonly name: InputMaybe - readonly noteKey: InputMaybe - readonly purpose: InputMaybe - readonly tokenLists: InputMaybe - readonly website: InputMaybe - } - - type Layer2JsonZkFilterListInput = { - readonly elemMatch: InputMaybe - } - - type Mdx = Node & { - readonly body: Scalars["String"] - readonly children: ReadonlyArray - readonly excerpt: Scalars["String"] - readonly fields: Maybe - readonly fileAbsolutePath: Scalars["String"] - readonly frontmatter: Maybe - readonly headings: Maybe>> - readonly html: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly mdxAST: Maybe - readonly parent: Maybe - readonly rawBody: Scalars["String"] - readonly slug: Maybe - readonly tableOfContents: Maybe - readonly timeToRead: Maybe - readonly wordCount: Maybe - } - - type Mdx_excerptArgs = { - pruneLength?: InputMaybe - truncate?: InputMaybe - } - - type Mdx_headingsArgs = { - depth: InputMaybe - } - - type Mdx_tableOfContentsArgs = { - maxDepth: InputMaybe - } - - type MdxConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type MdxConnection_distinctArgs = { - field: MdxFieldsEnum - } - - type MdxConnection_groupArgs = { - field: MdxFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type MdxConnection_maxArgs = { - field: MdxFieldsEnum - } - - type MdxConnection_minArgs = { - field: MdxFieldsEnum - } - - type MdxConnection_sumArgs = { - field: MdxFieldsEnum - } - - type MdxEdge = { - readonly next: Maybe - readonly node: Mdx - readonly previous: Maybe - } - - type MdxFields = { - readonly isOutdated: Maybe - readonly readingTime: Maybe - readonly relativePath: Maybe - readonly slug: Maybe - } - - type MdxFieldsEnum = - | "body" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "excerpt" - | "fields.isOutdated" - | "fields.readingTime.minutes" - | "fields.readingTime.text" - | "fields.readingTime.time" - | "fields.readingTime.words" - | "fields.relativePath" - | "fields.slug" - | "fileAbsolutePath" - | "frontmatter.address" - | "frontmatter.alt" - | "frontmatter.author" - | "frontmatter.authors" - | "frontmatter.compensation" - | "frontmatter.description" - | "frontmatter.emoji" - | "frontmatter.image.absolutePath" - | "frontmatter.image.accessTime" - | "frontmatter.image.atime" - | "frontmatter.image.atimeMs" - | "frontmatter.image.base" - | "frontmatter.image.birthTime" - | "frontmatter.image.birthtime" - | "frontmatter.image.birthtimeMs" - | "frontmatter.image.blksize" - | "frontmatter.image.blocks" - | "frontmatter.image.changeTime" - | "frontmatter.image.childAlltimeJson.children" - | "frontmatter.image.childAlltimeJson.currency" - | "frontmatter.image.childAlltimeJson.data" - | "frontmatter.image.childAlltimeJson.id" - | "frontmatter.image.childAlltimeJson.mode" - | "frontmatter.image.childAlltimeJson.name" - | "frontmatter.image.childAlltimeJson.totalCosts" - | "frontmatter.image.childAlltimeJson.totalPreTranslated" - | "frontmatter.image.childAlltimeJson.totalTMSavings" - | "frontmatter.image.childAlltimeJson.unit" - | "frontmatter.image.childAlltimeJson.url" - | "frontmatter.image.childCexLayer2SupportJson.children" - | "frontmatter.image.childCexLayer2SupportJson.id" - | "frontmatter.image.childCexLayer2SupportJson.name" - | "frontmatter.image.childCexLayer2SupportJson.supports_deposits" - | "frontmatter.image.childCexLayer2SupportJson.supports_withdrawals" - | "frontmatter.image.childCexLayer2SupportJson.url" - | "frontmatter.image.childCommunityEventsJson.children" - | "frontmatter.image.childCommunityEventsJson.description" - | "frontmatter.image.childCommunityEventsJson.endDate" - | "frontmatter.image.childCommunityEventsJson.id" - | "frontmatter.image.childCommunityEventsJson.location" - | "frontmatter.image.childCommunityEventsJson.sponsor" - | "frontmatter.image.childCommunityEventsJson.startDate" - | "frontmatter.image.childCommunityEventsJson.title" - | "frontmatter.image.childCommunityEventsJson.to" - | "frontmatter.image.childCommunityMeetupsJson.children" - | "frontmatter.image.childCommunityMeetupsJson.emoji" - | "frontmatter.image.childCommunityMeetupsJson.id" - | "frontmatter.image.childCommunityMeetupsJson.link" - | "frontmatter.image.childCommunityMeetupsJson.location" - | "frontmatter.image.childCommunityMeetupsJson.title" - | "frontmatter.image.childConsensusBountyHuntersCsv.children" - | "frontmatter.image.childConsensusBountyHuntersCsv.id" - | "frontmatter.image.childConsensusBountyHuntersCsv.name" - | "frontmatter.image.childConsensusBountyHuntersCsv.score" - | "frontmatter.image.childConsensusBountyHuntersCsv.username" - | "frontmatter.image.childDataJson.children" - | "frontmatter.image.childDataJson.commit" - | "frontmatter.image.childDataJson.contributors" - | "frontmatter.image.childDataJson.contributorsPerLine" - | "frontmatter.image.childDataJson.files" - | "frontmatter.image.childDataJson.id" - | "frontmatter.image.childDataJson.imageSize" - | "frontmatter.image.childDataJson.keyGen" - | "frontmatter.image.childDataJson.nodeTools" - | "frontmatter.image.childDataJson.pools" - | "frontmatter.image.childDataJson.projectName" - | "frontmatter.image.childDataJson.projectOwner" - | "frontmatter.image.childDataJson.repoHost" - | "frontmatter.image.childDataJson.repoType" - | "frontmatter.image.childDataJson.saas" - | "frontmatter.image.childDataJson.skipCi" - | "frontmatter.image.childExchangesByCountryCsv.binance" - | "frontmatter.image.childExchangesByCountryCsv.binanceus" - | "frontmatter.image.childExchangesByCountryCsv.bitbuy" - | "frontmatter.image.childExchangesByCountryCsv.bitfinex" - | "frontmatter.image.childExchangesByCountryCsv.bitflyer" - | "frontmatter.image.childExchangesByCountryCsv.bitkub" - | "frontmatter.image.childExchangesByCountryCsv.bitso" - | "frontmatter.image.childExchangesByCountryCsv.bittrex" - | "frontmatter.image.childExchangesByCountryCsv.bitvavo" - | "frontmatter.image.childExchangesByCountryCsv.bybit" - | "frontmatter.image.childExchangesByCountryCsv.children" - | "frontmatter.image.childExchangesByCountryCsv.coinbase" - | "frontmatter.image.childExchangesByCountryCsv.coinmama" - | "frontmatter.image.childExchangesByCountryCsv.coinspot" - | "frontmatter.image.childExchangesByCountryCsv.country" - | "frontmatter.image.childExchangesByCountryCsv.cryptocom" - | "frontmatter.image.childExchangesByCountryCsv.easycrypto" - | "frontmatter.image.childExchangesByCountryCsv.ftx" - | "frontmatter.image.childExchangesByCountryCsv.ftxus" - | "frontmatter.image.childExchangesByCountryCsv.gateio" - | "frontmatter.image.childExchangesByCountryCsv.gemini" - | "frontmatter.image.childExchangesByCountryCsv.huobiglobal" - | "frontmatter.image.childExchangesByCountryCsv.id" - | "frontmatter.image.childExchangesByCountryCsv.itezcom" - | "frontmatter.image.childExchangesByCountryCsv.kraken" - | "frontmatter.image.childExchangesByCountryCsv.kucoin" - | "frontmatter.image.childExchangesByCountryCsv.moonpay" - | "frontmatter.image.childExchangesByCountryCsv.mtpelerin" - | "frontmatter.image.childExchangesByCountryCsv.okx" - | "frontmatter.image.childExchangesByCountryCsv.rain" - | "frontmatter.image.childExchangesByCountryCsv.simplex" - | "frontmatter.image.childExchangesByCountryCsv.wazirx" - | "frontmatter.image.childExchangesByCountryCsv.wyre" - | "frontmatter.image.childExecutionBountyHuntersCsv.children" - | "frontmatter.image.childExecutionBountyHuntersCsv.id" - | "frontmatter.image.childExecutionBountyHuntersCsv.name" - | "frontmatter.image.childExecutionBountyHuntersCsv.score" - | "frontmatter.image.childExecutionBountyHuntersCsv.username" - | "frontmatter.image.childExternalTutorialsJson.author" - | "frontmatter.image.childExternalTutorialsJson.authorGithub" - | "frontmatter.image.childExternalTutorialsJson.children" - | "frontmatter.image.childExternalTutorialsJson.description" - | "frontmatter.image.childExternalTutorialsJson.id" - | "frontmatter.image.childExternalTutorialsJson.lang" - | "frontmatter.image.childExternalTutorialsJson.publishDate" - | "frontmatter.image.childExternalTutorialsJson.skillLevel" - | "frontmatter.image.childExternalTutorialsJson.tags" - | "frontmatter.image.childExternalTutorialsJson.timeToRead" - | "frontmatter.image.childExternalTutorialsJson.title" - | "frontmatter.image.childExternalTutorialsJson.url" - | "frontmatter.image.childImageSharp.children" - | "frontmatter.image.childImageSharp.gatsbyImageData" - | "frontmatter.image.childImageSharp.id" - | "frontmatter.image.childLayer2Json.children" - | "frontmatter.image.childLayer2Json.id" - | "frontmatter.image.childLayer2Json.optimistic" - | "frontmatter.image.childLayer2Json.zk" - | "frontmatter.image.childMdx.body" - | "frontmatter.image.childMdx.children" - | "frontmatter.image.childMdx.excerpt" - | "frontmatter.image.childMdx.fileAbsolutePath" - | "frontmatter.image.childMdx.headings" - | "frontmatter.image.childMdx.html" - | "frontmatter.image.childMdx.id" - | "frontmatter.image.childMdx.mdxAST" - | "frontmatter.image.childMdx.rawBody" - | "frontmatter.image.childMdx.slug" - | "frontmatter.image.childMdx.tableOfContents" - | "frontmatter.image.childMdx.timeToRead" - | "frontmatter.image.childMonthJson.children" - | "frontmatter.image.childMonthJson.currency" - | "frontmatter.image.childMonthJson.data" - | "frontmatter.image.childMonthJson.id" - | "frontmatter.image.childMonthJson.mode" - | "frontmatter.image.childMonthJson.name" - | "frontmatter.image.childMonthJson.totalCosts" - | "frontmatter.image.childMonthJson.totalPreTranslated" - | "frontmatter.image.childMonthJson.totalTMSavings" - | "frontmatter.image.childMonthJson.unit" - | "frontmatter.image.childMonthJson.url" - | "frontmatter.image.childQuarterJson.children" - | "frontmatter.image.childQuarterJson.currency" - | "frontmatter.image.childQuarterJson.data" - | "frontmatter.image.childQuarterJson.id" - | "frontmatter.image.childQuarterJson.mode" - | "frontmatter.image.childQuarterJson.name" - | "frontmatter.image.childQuarterJson.totalCosts" - | "frontmatter.image.childQuarterJson.totalPreTranslated" - | "frontmatter.image.childQuarterJson.totalTMSavings" - | "frontmatter.image.childQuarterJson.unit" - | "frontmatter.image.childQuarterJson.url" - | "frontmatter.image.childWalletsCsv.brand_color" - | "frontmatter.image.childWalletsCsv.children" - | "frontmatter.image.childWalletsCsv.has_bank_withdrawals" - | "frontmatter.image.childWalletsCsv.has_card_deposits" - | "frontmatter.image.childWalletsCsv.has_defi_integrations" - | "frontmatter.image.childWalletsCsv.has_desktop" - | "frontmatter.image.childWalletsCsv.has_dex_integrations" - | "frontmatter.image.childWalletsCsv.has_explore_dapps" - | "frontmatter.image.childWalletsCsv.has_hardware" - | "frontmatter.image.childWalletsCsv.has_high_volume_purchases" - | "frontmatter.image.childWalletsCsv.has_limits_protection" - | "frontmatter.image.childWalletsCsv.has_mobile" - | "frontmatter.image.childWalletsCsv.has_multisig" - | "frontmatter.image.childWalletsCsv.has_web" - | "frontmatter.image.childWalletsCsv.id" - | "frontmatter.image.childWalletsCsv.name" - | "frontmatter.image.childWalletsCsv.url" - | "frontmatter.image.children" - | "frontmatter.image.childrenAlltimeJson" - | "frontmatter.image.childrenAlltimeJson.children" - | "frontmatter.image.childrenAlltimeJson.currency" - | "frontmatter.image.childrenAlltimeJson.data" - | "frontmatter.image.childrenAlltimeJson.id" - | "frontmatter.image.childrenAlltimeJson.mode" - | "frontmatter.image.childrenAlltimeJson.name" - | "frontmatter.image.childrenAlltimeJson.totalCosts" - | "frontmatter.image.childrenAlltimeJson.totalPreTranslated" - | "frontmatter.image.childrenAlltimeJson.totalTMSavings" - | "frontmatter.image.childrenAlltimeJson.unit" - | "frontmatter.image.childrenAlltimeJson.url" - | "frontmatter.image.childrenCexLayer2SupportJson" - | "frontmatter.image.childrenCexLayer2SupportJson.children" - | "frontmatter.image.childrenCexLayer2SupportJson.id" - | "frontmatter.image.childrenCexLayer2SupportJson.name" - | "frontmatter.image.childrenCexLayer2SupportJson.supports_deposits" - | "frontmatter.image.childrenCexLayer2SupportJson.supports_withdrawals" - | "frontmatter.image.childrenCexLayer2SupportJson.url" - | "frontmatter.image.childrenCommunityEventsJson" - | "frontmatter.image.childrenCommunityEventsJson.children" - | "frontmatter.image.childrenCommunityEventsJson.description" - | "frontmatter.image.childrenCommunityEventsJson.endDate" - | "frontmatter.image.childrenCommunityEventsJson.id" - | "frontmatter.image.childrenCommunityEventsJson.location" - | "frontmatter.image.childrenCommunityEventsJson.sponsor" - | "frontmatter.image.childrenCommunityEventsJson.startDate" - | "frontmatter.image.childrenCommunityEventsJson.title" - | "frontmatter.image.childrenCommunityEventsJson.to" - | "frontmatter.image.childrenCommunityMeetupsJson" - | "frontmatter.image.childrenCommunityMeetupsJson.children" - | "frontmatter.image.childrenCommunityMeetupsJson.emoji" - | "frontmatter.image.childrenCommunityMeetupsJson.id" - | "frontmatter.image.childrenCommunityMeetupsJson.link" - | "frontmatter.image.childrenCommunityMeetupsJson.location" - | "frontmatter.image.childrenCommunityMeetupsJson.title" - | "frontmatter.image.childrenConsensusBountyHuntersCsv" - | "frontmatter.image.childrenConsensusBountyHuntersCsv.children" - | "frontmatter.image.childrenConsensusBountyHuntersCsv.id" - | "frontmatter.image.childrenConsensusBountyHuntersCsv.name" - | "frontmatter.image.childrenConsensusBountyHuntersCsv.score" - | "frontmatter.image.childrenConsensusBountyHuntersCsv.username" - | "frontmatter.image.childrenDataJson" - | "frontmatter.image.childrenDataJson.children" - | "frontmatter.image.childrenDataJson.commit" - | "frontmatter.image.childrenDataJson.contributors" - | "frontmatter.image.childrenDataJson.contributorsPerLine" - | "frontmatter.image.childrenDataJson.files" - | "frontmatter.image.childrenDataJson.id" - | "frontmatter.image.childrenDataJson.imageSize" - | "frontmatter.image.childrenDataJson.keyGen" - | "frontmatter.image.childrenDataJson.nodeTools" - | "frontmatter.image.childrenDataJson.pools" - | "frontmatter.image.childrenDataJson.projectName" - | "frontmatter.image.childrenDataJson.projectOwner" - | "frontmatter.image.childrenDataJson.repoHost" - | "frontmatter.image.childrenDataJson.repoType" - | "frontmatter.image.childrenDataJson.saas" - | "frontmatter.image.childrenDataJson.skipCi" - | "frontmatter.image.childrenExchangesByCountryCsv" - | "frontmatter.image.childrenExchangesByCountryCsv.binance" - | "frontmatter.image.childrenExchangesByCountryCsv.binanceus" - | "frontmatter.image.childrenExchangesByCountryCsv.bitbuy" - | "frontmatter.image.childrenExchangesByCountryCsv.bitfinex" - | "frontmatter.image.childrenExchangesByCountryCsv.bitflyer" - | "frontmatter.image.childrenExchangesByCountryCsv.bitkub" - | "frontmatter.image.childrenExchangesByCountryCsv.bitso" - | "frontmatter.image.childrenExchangesByCountryCsv.bittrex" - | "frontmatter.image.childrenExchangesByCountryCsv.bitvavo" - | "frontmatter.image.childrenExchangesByCountryCsv.bybit" - | "frontmatter.image.childrenExchangesByCountryCsv.children" - | "frontmatter.image.childrenExchangesByCountryCsv.coinbase" - | "frontmatter.image.childrenExchangesByCountryCsv.coinmama" - | "frontmatter.image.childrenExchangesByCountryCsv.coinspot" - | "frontmatter.image.childrenExchangesByCountryCsv.country" - | "frontmatter.image.childrenExchangesByCountryCsv.cryptocom" - | "frontmatter.image.childrenExchangesByCountryCsv.easycrypto" - | "frontmatter.image.childrenExchangesByCountryCsv.ftx" - | "frontmatter.image.childrenExchangesByCountryCsv.ftxus" - | "frontmatter.image.childrenExchangesByCountryCsv.gateio" - | "frontmatter.image.childrenExchangesByCountryCsv.gemini" - | "frontmatter.image.childrenExchangesByCountryCsv.huobiglobal" - | "frontmatter.image.childrenExchangesByCountryCsv.id" - | "frontmatter.image.childrenExchangesByCountryCsv.itezcom" - | "frontmatter.image.childrenExchangesByCountryCsv.kraken" - | "frontmatter.image.childrenExchangesByCountryCsv.kucoin" - | "frontmatter.image.childrenExchangesByCountryCsv.moonpay" - | "frontmatter.image.childrenExchangesByCountryCsv.mtpelerin" - | "frontmatter.image.childrenExchangesByCountryCsv.okx" - | "frontmatter.image.childrenExchangesByCountryCsv.rain" - | "frontmatter.image.childrenExchangesByCountryCsv.simplex" - | "frontmatter.image.childrenExchangesByCountryCsv.wazirx" - | "frontmatter.image.childrenExchangesByCountryCsv.wyre" - | "frontmatter.image.childrenExecutionBountyHuntersCsv" - | "frontmatter.image.childrenExecutionBountyHuntersCsv.children" - | "frontmatter.image.childrenExecutionBountyHuntersCsv.id" - | "frontmatter.image.childrenExecutionBountyHuntersCsv.name" - | "frontmatter.image.childrenExecutionBountyHuntersCsv.score" - | "frontmatter.image.childrenExecutionBountyHuntersCsv.username" - | "frontmatter.image.childrenExternalTutorialsJson" - | "frontmatter.image.childrenExternalTutorialsJson.author" - | "frontmatter.image.childrenExternalTutorialsJson.authorGithub" - | "frontmatter.image.childrenExternalTutorialsJson.children" - | "frontmatter.image.childrenExternalTutorialsJson.description" - | "frontmatter.image.childrenExternalTutorialsJson.id" - | "frontmatter.image.childrenExternalTutorialsJson.lang" - | "frontmatter.image.childrenExternalTutorialsJson.publishDate" - | "frontmatter.image.childrenExternalTutorialsJson.skillLevel" - | "frontmatter.image.childrenExternalTutorialsJson.tags" - | "frontmatter.image.childrenExternalTutorialsJson.timeToRead" - | "frontmatter.image.childrenExternalTutorialsJson.title" - | "frontmatter.image.childrenExternalTutorialsJson.url" - | "frontmatter.image.childrenImageSharp" - | "frontmatter.image.childrenImageSharp.children" - | "frontmatter.image.childrenImageSharp.gatsbyImageData" - | "frontmatter.image.childrenImageSharp.id" - | "frontmatter.image.childrenLayer2Json" - | "frontmatter.image.childrenLayer2Json.children" - | "frontmatter.image.childrenLayer2Json.id" - | "frontmatter.image.childrenLayer2Json.optimistic" - | "frontmatter.image.childrenLayer2Json.zk" - | "frontmatter.image.childrenMdx" - | "frontmatter.image.childrenMdx.body" - | "frontmatter.image.childrenMdx.children" - | "frontmatter.image.childrenMdx.excerpt" - | "frontmatter.image.childrenMdx.fileAbsolutePath" - | "frontmatter.image.childrenMdx.headings" - | "frontmatter.image.childrenMdx.html" - | "frontmatter.image.childrenMdx.id" - | "frontmatter.image.childrenMdx.mdxAST" - | "frontmatter.image.childrenMdx.rawBody" - | "frontmatter.image.childrenMdx.slug" - | "frontmatter.image.childrenMdx.tableOfContents" - | "frontmatter.image.childrenMdx.timeToRead" - | "frontmatter.image.childrenMonthJson" - | "frontmatter.image.childrenMonthJson.children" - | "frontmatter.image.childrenMonthJson.currency" - | "frontmatter.image.childrenMonthJson.data" - | "frontmatter.image.childrenMonthJson.id" - | "frontmatter.image.childrenMonthJson.mode" - | "frontmatter.image.childrenMonthJson.name" - | "frontmatter.image.childrenMonthJson.totalCosts" - | "frontmatter.image.childrenMonthJson.totalPreTranslated" - | "frontmatter.image.childrenMonthJson.totalTMSavings" - | "frontmatter.image.childrenMonthJson.unit" - | "frontmatter.image.childrenMonthJson.url" - | "frontmatter.image.childrenQuarterJson" - | "frontmatter.image.childrenQuarterJson.children" - | "frontmatter.image.childrenQuarterJson.currency" - | "frontmatter.image.childrenQuarterJson.data" - | "frontmatter.image.childrenQuarterJson.id" - | "frontmatter.image.childrenQuarterJson.mode" - | "frontmatter.image.childrenQuarterJson.name" - | "frontmatter.image.childrenQuarterJson.totalCosts" - | "frontmatter.image.childrenQuarterJson.totalPreTranslated" - | "frontmatter.image.childrenQuarterJson.totalTMSavings" - | "frontmatter.image.childrenQuarterJson.unit" - | "frontmatter.image.childrenQuarterJson.url" - | "frontmatter.image.childrenWalletsCsv" - | "frontmatter.image.childrenWalletsCsv.brand_color" - | "frontmatter.image.childrenWalletsCsv.children" - | "frontmatter.image.childrenWalletsCsv.has_bank_withdrawals" - | "frontmatter.image.childrenWalletsCsv.has_card_deposits" - | "frontmatter.image.childrenWalletsCsv.has_defi_integrations" - | "frontmatter.image.childrenWalletsCsv.has_desktop" - | "frontmatter.image.childrenWalletsCsv.has_dex_integrations" - | "frontmatter.image.childrenWalletsCsv.has_explore_dapps" - | "frontmatter.image.childrenWalletsCsv.has_hardware" - | "frontmatter.image.childrenWalletsCsv.has_high_volume_purchases" - | "frontmatter.image.childrenWalletsCsv.has_limits_protection" - | "frontmatter.image.childrenWalletsCsv.has_mobile" - | "frontmatter.image.childrenWalletsCsv.has_multisig" - | "frontmatter.image.childrenWalletsCsv.has_web" - | "frontmatter.image.childrenWalletsCsv.id" - | "frontmatter.image.childrenWalletsCsv.name" - | "frontmatter.image.childrenWalletsCsv.url" - | "frontmatter.image.children.children" - | "frontmatter.image.children.id" - | "frontmatter.image.ctime" - | "frontmatter.image.ctimeMs" - | "frontmatter.image.dev" - | "frontmatter.image.dir" - | "frontmatter.image.ext" - | "frontmatter.image.extension" - | "frontmatter.image.fields.gitLogLatestAuthorEmail" - | "frontmatter.image.fields.gitLogLatestAuthorName" - | "frontmatter.image.fields.gitLogLatestDate" - | "frontmatter.image.gid" - | "frontmatter.image.id" - | "frontmatter.image.ino" - | "frontmatter.image.internal.content" - | "frontmatter.image.internal.contentDigest" - | "frontmatter.image.internal.description" - | "frontmatter.image.internal.fieldOwners" - | "frontmatter.image.internal.ignoreType" - | "frontmatter.image.internal.mediaType" - | "frontmatter.image.internal.owner" - | "frontmatter.image.internal.type" - | "frontmatter.image.mode" - | "frontmatter.image.modifiedTime" - | "frontmatter.image.mtime" - | "frontmatter.image.mtimeMs" - | "frontmatter.image.name" - | "frontmatter.image.nlink" - | "frontmatter.image.parent.children" - | "frontmatter.image.parent.id" - | "frontmatter.image.prettySize" - | "frontmatter.image.publicURL" - | "frontmatter.image.rdev" - | "frontmatter.image.relativeDirectory" - | "frontmatter.image.relativePath" - | "frontmatter.image.root" - | "frontmatter.image.size" - | "frontmatter.image.sourceInstanceName" - | "frontmatter.image.uid" - | "frontmatter.incomplete" - | "frontmatter.isOutdated" - | "frontmatter.lang" - | "frontmatter.link" - | "frontmatter.location" - | "frontmatter.position" - | "frontmatter.published" - | "frontmatter.sidebar" - | "frontmatter.sidebarDepth" - | "frontmatter.skill" - | "frontmatter.source" - | "frontmatter.sourceUrl" - | "frontmatter.summaryPoint1" - | "frontmatter.summaryPoint2" - | "frontmatter.summaryPoint3" - | "frontmatter.summaryPoint4" - | "frontmatter.summaryPoints" - | "frontmatter.tags" - | "frontmatter.template" - | "frontmatter.title" - | "frontmatter.type" - | "headings" - | "headings.depth" - | "headings.value" - | "html" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "mdxAST" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "rawBody" - | "slug" - | "tableOfContents" - | "timeToRead" - | "wordCount.paragraphs" - | "wordCount.sentences" - | "wordCount.words" - - type MdxFieldsFilterInput = { - readonly isOutdated: InputMaybe - readonly readingTime: InputMaybe - readonly relativePath: InputMaybe - readonly slug: InputMaybe - } - - type MdxFieldsReadingTime = { - readonly minutes: Maybe - readonly text: Maybe - readonly time: Maybe - readonly words: Maybe - } - - type MdxFieldsReadingTimeFilterInput = { - readonly minutes: InputMaybe - readonly text: InputMaybe - readonly time: InputMaybe - readonly words: InputMaybe - } - - type MdxFilterInput = { - readonly body: InputMaybe - readonly children: InputMaybe - readonly excerpt: InputMaybe - readonly fields: InputMaybe - readonly fileAbsolutePath: InputMaybe - readonly frontmatter: InputMaybe - readonly headings: InputMaybe - readonly html: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly mdxAST: InputMaybe - readonly parent: InputMaybe - readonly rawBody: InputMaybe - readonly slug: InputMaybe - readonly tableOfContents: InputMaybe - readonly timeToRead: InputMaybe - readonly wordCount: InputMaybe - } - - type MdxFilterListInput = { - readonly elemMatch: InputMaybe - } - - type MdxFrontmatter = { - readonly title: Scalars["String"] - } - - type MdxGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type MdxGroupConnection_distinctArgs = { - field: MdxFieldsEnum - } - - type MdxGroupConnection_groupArgs = { - field: MdxFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type MdxGroupConnection_maxArgs = { - field: MdxFieldsEnum - } - - type MdxGroupConnection_minArgs = { - field: MdxFieldsEnum - } - - type MdxGroupConnection_sumArgs = { - field: MdxFieldsEnum - } - - type MdxHeadingMdx = { - readonly depth: Maybe - readonly value: Maybe - } - - type MdxHeadingMdxFilterInput = { - readonly depth: InputMaybe - readonly value: InputMaybe - } - - type MdxHeadingMdxFilterListInput = { - readonly elemMatch: InputMaybe - } - - type MdxSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type MdxWordCount = { - readonly paragraphs: Maybe - readonly sentences: Maybe - readonly words: Maybe - } - - type MdxWordCountFilterInput = { - readonly paragraphs: InputMaybe - readonly sentences: InputMaybe - readonly words: InputMaybe - } - - type MonthJson = Node & { - readonly children: ReadonlyArray - readonly currency: Maybe - readonly data: Maybe>> - readonly dateRange: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly mode: Maybe - readonly name: Maybe - readonly parent: Maybe - readonly totalCosts: Maybe - readonly totalPreTranslated: Maybe - readonly totalTMSavings: Maybe - readonly unit: Maybe - readonly url: Maybe - } - - type MonthJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type MonthJsonConnection_distinctArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonConnection_groupArgs = { - field: MonthJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type MonthJsonConnection_maxArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonConnection_minArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonConnection_sumArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonData = { - readonly languages: Maybe>> - readonly user: Maybe - } - - type MonthJsonDataFilterInput = { - readonly languages: InputMaybe - readonly user: InputMaybe - } - - type MonthJsonDataFilterListInput = { - readonly elemMatch: InputMaybe - } - - type MonthJsonDataLanguages = { - readonly approvalCosts: Maybe - readonly approved: Maybe - readonly language: Maybe - readonly targetTranslated: Maybe - readonly translated: Maybe - readonly translatedByMt: Maybe - readonly translationCosts: Maybe - } - - type MonthJsonDataLanguagesApprovalCosts = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type MonthJsonDataLanguagesApprovalCostsFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type MonthJsonDataLanguagesApproved = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type MonthJsonDataLanguagesApprovedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type MonthJsonDataLanguagesFilterInput = { - readonly approvalCosts: InputMaybe - readonly approved: InputMaybe - readonly language: InputMaybe - readonly targetTranslated: InputMaybe - readonly translated: InputMaybe - readonly translatedByMt: InputMaybe - readonly translationCosts: InputMaybe - } - - type MonthJsonDataLanguagesFilterListInput = { - readonly elemMatch: InputMaybe - } - - type MonthJsonDataLanguagesLanguage = { - readonly id: Maybe - readonly name: Maybe - readonly preTranslate: Maybe - readonly tmSavings: Maybe - readonly totalCosts: Maybe - } - - type MonthJsonDataLanguagesLanguageFilterInput = { - readonly id: InputMaybe - readonly name: InputMaybe - readonly preTranslate: InputMaybe - readonly tmSavings: InputMaybe - readonly totalCosts: InputMaybe - } - - type MonthJsonDataLanguagesTargetTranslated = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type MonthJsonDataLanguagesTargetTranslatedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type MonthJsonDataLanguagesTranslated = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type MonthJsonDataLanguagesTranslatedByMt = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type MonthJsonDataLanguagesTranslatedByMtFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type MonthJsonDataLanguagesTranslatedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type MonthJsonDataLanguagesTranslationCosts = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type MonthJsonDataLanguagesTranslationCostsFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type MonthJsonDataUser = { - readonly avatarUrl: Maybe - readonly fullName: Maybe - readonly id: Maybe - readonly preTranslated: Maybe - readonly totalCosts: Maybe - readonly userRole: Maybe - readonly username: Maybe - } - - type MonthJsonDataUserFilterInput = { - readonly avatarUrl: InputMaybe - readonly fullName: InputMaybe - readonly id: InputMaybe - readonly preTranslated: InputMaybe - readonly totalCosts: InputMaybe - readonly userRole: InputMaybe - readonly username: InputMaybe - } - - type MonthJsonDateRange = { - readonly from: Maybe - readonly to: Maybe - } - - type MonthJsonDateRange_fromArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type MonthJsonDateRange_toArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type MonthJsonDateRangeFilterInput = { - readonly from: InputMaybe - readonly to: InputMaybe - } - - type MonthJsonEdge = { - readonly next: Maybe - readonly node: MonthJson - readonly previous: Maybe - } - - type MonthJsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "currency" - | "data" - | "data.languages" - | "data.languages.approvalCosts.default" - | "data.languages.approvalCosts.tmMatch" - | "data.languages.approvalCosts.total" - | "data.languages.approved.default" - | "data.languages.approved.tmMatch" - | "data.languages.approved.total" - | "data.languages.language.id" - | "data.languages.language.name" - | "data.languages.language.preTranslate" - | "data.languages.language.tmSavings" - | "data.languages.language.totalCosts" - | "data.languages.targetTranslated.default" - | "data.languages.targetTranslated.tmMatch" - | "data.languages.targetTranslated.total" - | "data.languages.translatedByMt.default" - | "data.languages.translatedByMt.tmMatch" - | "data.languages.translatedByMt.total" - | "data.languages.translated.default" - | "data.languages.translated.tmMatch" - | "data.languages.translated.total" - | "data.languages.translationCosts.default" - | "data.languages.translationCosts.tmMatch" - | "data.languages.translationCosts.total" - | "data.user.avatarUrl" - | "data.user.fullName" - | "data.user.id" - | "data.user.preTranslated" - | "data.user.totalCosts" - | "data.user.userRole" - | "data.user.username" - | "dateRange.from" - | "dateRange.to" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "mode" - | "name" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "totalCosts" - | "totalPreTranslated" - | "totalTMSavings" - | "unit" - | "url" - - type MonthJsonFilterInput = { - readonly children: InputMaybe - readonly currency: InputMaybe - readonly data: InputMaybe - readonly dateRange: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly mode: InputMaybe - readonly name: InputMaybe - readonly parent: InputMaybe - readonly totalCosts: InputMaybe - readonly totalPreTranslated: InputMaybe - readonly totalTMSavings: InputMaybe - readonly unit: InputMaybe - readonly url: InputMaybe - } - - type MonthJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type MonthJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type MonthJsonGroupConnection_distinctArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonGroupConnection_groupArgs = { - field: MonthJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type MonthJsonGroupConnection_maxArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonGroupConnection_minArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonGroupConnection_sumArgs = { - field: MonthJsonFieldsEnum - } - - type MonthJsonSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - /** Node Interface */ - type Node = { - readonly children: ReadonlyArray - readonly id: Scalars["ID"] - readonly internal: Internal - readonly parent: Maybe - } - - type NodeFilterInput = { - readonly children: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly parent: InputMaybe - } - - type NodeFilterListInput = { - readonly elemMatch: InputMaybe - } - - type PNGOptions = { - readonly compressionSpeed: InputMaybe - readonly quality: InputMaybe - } - - type PageInfo = { - readonly currentPage: Scalars["Int"] - readonly hasNextPage: Scalars["Boolean"] - readonly hasPreviousPage: Scalars["Boolean"] - readonly itemCount: Scalars["Int"] - readonly pageCount: Scalars["Int"] - readonly perPage: Maybe - readonly totalCount: Scalars["Int"] - } - - type Potrace = { - readonly alphaMax: InputMaybe - readonly background: InputMaybe - readonly blackOnWhite: InputMaybe - readonly color: InputMaybe - readonly optCurve: InputMaybe - readonly optTolerance: InputMaybe - readonly threshold: InputMaybe - readonly turdSize: InputMaybe - readonly turnPolicy: InputMaybe - } - - type PotraceTurnPolicy = - | "black" - | "left" - | "majority" - | "minority" - | "right" - | "white" - - type QuarterJson = Node & { - readonly children: ReadonlyArray - readonly currency: Maybe - readonly data: Maybe>> - readonly dateRange: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly mode: Maybe - readonly name: Maybe - readonly parent: Maybe - readonly totalCosts: Maybe - readonly totalPreTranslated: Maybe - readonly totalTMSavings: Maybe - readonly unit: Maybe - readonly url: Maybe - } - - type QuarterJsonConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type QuarterJsonConnection_distinctArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonConnection_groupArgs = { - field: QuarterJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type QuarterJsonConnection_maxArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonConnection_minArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonConnection_sumArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonData = { - readonly languages: Maybe>> - readonly user: Maybe - } - - type QuarterJsonDataFilterInput = { - readonly languages: InputMaybe - readonly user: InputMaybe - } - - type QuarterJsonDataFilterListInput = { - readonly elemMatch: InputMaybe - } - - type QuarterJsonDataLanguages = { - readonly approvalCosts: Maybe - readonly approved: Maybe - readonly language: Maybe - readonly targetTranslated: Maybe - readonly translated: Maybe - readonly translatedByMt: Maybe - readonly translationCosts: Maybe - } - - type QuarterJsonDataLanguagesApprovalCosts = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type QuarterJsonDataLanguagesApprovalCostsFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type QuarterJsonDataLanguagesApproved = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type QuarterJsonDataLanguagesApprovedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type QuarterJsonDataLanguagesFilterInput = { - readonly approvalCosts: InputMaybe - readonly approved: InputMaybe - readonly language: InputMaybe - readonly targetTranslated: InputMaybe - readonly translated: InputMaybe - readonly translatedByMt: InputMaybe - readonly translationCosts: InputMaybe - } - - type QuarterJsonDataLanguagesFilterListInput = { - readonly elemMatch: InputMaybe - } - - type QuarterJsonDataLanguagesLanguage = { - readonly id: Maybe - readonly name: Maybe - readonly preTranslate: Maybe - readonly tmSavings: Maybe - readonly totalCosts: Maybe - } - - type QuarterJsonDataLanguagesLanguageFilterInput = { - readonly id: InputMaybe - readonly name: InputMaybe - readonly preTranslate: InputMaybe - readonly tmSavings: InputMaybe - readonly totalCosts: InputMaybe - } - - type QuarterJsonDataLanguagesTargetTranslated = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type QuarterJsonDataLanguagesTargetTranslatedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type QuarterJsonDataLanguagesTranslated = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type QuarterJsonDataLanguagesTranslatedByMt = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type QuarterJsonDataLanguagesTranslatedByMtFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type QuarterJsonDataLanguagesTranslatedFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type QuarterJsonDataLanguagesTranslationCosts = { - readonly default: Maybe - readonly tmMatch: Maybe - readonly total: Maybe - } - - type QuarterJsonDataLanguagesTranslationCostsFilterInput = { - readonly default: InputMaybe - readonly tmMatch: InputMaybe - readonly total: InputMaybe - } - - type QuarterJsonDataUser = { - readonly avatarUrl: Maybe - readonly fullName: Maybe - readonly id: Maybe - readonly preTranslated: Maybe - readonly totalCosts: Maybe - readonly userRole: Maybe - readonly username: Maybe - } - - type QuarterJsonDataUserFilterInput = { - readonly avatarUrl: InputMaybe - readonly fullName: InputMaybe - readonly id: InputMaybe - readonly preTranslated: InputMaybe - readonly totalCosts: InputMaybe - readonly userRole: InputMaybe - readonly username: InputMaybe - } - - type QuarterJsonDateRange = { - readonly from: Maybe - readonly to: Maybe - } - - type QuarterJsonDateRange_fromArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type QuarterJsonDateRange_toArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type QuarterJsonDateRangeFilterInput = { - readonly from: InputMaybe - readonly to: InputMaybe - } - - type QuarterJsonEdge = { - readonly next: Maybe - readonly node: QuarterJson - readonly previous: Maybe - } - - type QuarterJsonFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "currency" - | "data" - | "data.languages" - | "data.languages.approvalCosts.default" - | "data.languages.approvalCosts.tmMatch" - | "data.languages.approvalCosts.total" - | "data.languages.approved.default" - | "data.languages.approved.tmMatch" - | "data.languages.approved.total" - | "data.languages.language.id" - | "data.languages.language.name" - | "data.languages.language.preTranslate" - | "data.languages.language.tmSavings" - | "data.languages.language.totalCosts" - | "data.languages.targetTranslated.default" - | "data.languages.targetTranslated.tmMatch" - | "data.languages.targetTranslated.total" - | "data.languages.translatedByMt.default" - | "data.languages.translatedByMt.tmMatch" - | "data.languages.translatedByMt.total" - | "data.languages.translated.default" - | "data.languages.translated.tmMatch" - | "data.languages.translated.total" - | "data.languages.translationCosts.default" - | "data.languages.translationCosts.tmMatch" - | "data.languages.translationCosts.total" - | "data.user.avatarUrl" - | "data.user.fullName" - | "data.user.id" - | "data.user.preTranslated" - | "data.user.totalCosts" - | "data.user.userRole" - | "data.user.username" - | "dateRange.from" - | "dateRange.to" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "mode" - | "name" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "totalCosts" - | "totalPreTranslated" - | "totalTMSavings" - | "unit" - | "url" - - type QuarterJsonFilterInput = { - readonly children: InputMaybe - readonly currency: InputMaybe - readonly data: InputMaybe - readonly dateRange: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly mode: InputMaybe - readonly name: InputMaybe - readonly parent: InputMaybe - readonly totalCosts: InputMaybe - readonly totalPreTranslated: InputMaybe - readonly totalTMSavings: InputMaybe - readonly unit: InputMaybe - readonly url: InputMaybe - } - - type QuarterJsonFilterListInput = { - readonly elemMatch: InputMaybe - } - - type QuarterJsonGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type QuarterJsonGroupConnection_distinctArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonGroupConnection_groupArgs = { - field: QuarterJsonFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type QuarterJsonGroupConnection_maxArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonGroupConnection_minArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonGroupConnection_sumArgs = { - field: QuarterJsonFieldsEnum - } - - type QuarterJsonSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type Query = { - readonly allAlltimeJson: AlltimeJsonConnection - readonly allCexLayer2SupportJson: CexLayer2SupportJsonConnection - readonly allCommunityEventsJson: CommunityEventsJsonConnection - readonly allCommunityMeetupsJson: CommunityMeetupsJsonConnection - readonly allConsensusBountyHuntersCsv: ConsensusBountyHuntersCsvConnection - readonly allDataJson: DataJsonConnection - readonly allDirectory: DirectoryConnection - readonly allExchangesByCountryCsv: ExchangesByCountryCsvConnection - readonly allExecutionBountyHuntersCsv: ExecutionBountyHuntersCsvConnection - readonly allExternalTutorialsJson: ExternalTutorialsJsonConnection - readonly allFile: FileConnection - readonly allImageSharp: ImageSharpConnection - readonly allLayer2Json: Layer2JsonConnection - readonly allMdx: MdxConnection - readonly allMonthJson: MonthJsonConnection - readonly allQuarterJson: QuarterJsonConnection - readonly allSite: SiteConnection - readonly allSiteBuildMetadata: SiteBuildMetadataConnection - readonly allSiteFunction: SiteFunctionConnection - readonly allSitePage: SitePageConnection - readonly allSitePlugin: SitePluginConnection - readonly allWalletsCsv: WalletsCsvConnection - readonly alltimeJson: Maybe - readonly cexLayer2SupportJson: Maybe - readonly communityEventsJson: Maybe - readonly communityMeetupsJson: Maybe - readonly consensusBountyHuntersCsv: Maybe - readonly dataJson: Maybe - readonly directory: Maybe - readonly exchangesByCountryCsv: Maybe - readonly executionBountyHuntersCsv: Maybe - readonly externalTutorialsJson: Maybe - readonly file: Maybe - readonly imageSharp: Maybe - readonly layer2Json: Maybe - readonly mdx: Maybe - readonly monthJson: Maybe - readonly quarterJson: Maybe - readonly site: Maybe - readonly siteBuildMetadata: Maybe - readonly siteFunction: Maybe - readonly sitePage: Maybe - readonly sitePlugin: Maybe - readonly walletsCsv: Maybe - } - - type Query_allAlltimeJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allCexLayer2SupportJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allCommunityEventsJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allCommunityMeetupsJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allConsensusBountyHuntersCsvArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allDataJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allDirectoryArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allExchangesByCountryCsvArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allExecutionBountyHuntersCsvArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allExternalTutorialsJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allFileArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allImageSharpArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allLayer2JsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allMdxArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allMonthJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allQuarterJsonArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allSiteArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allSiteBuildMetadataArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allSiteFunctionArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allSitePageArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allSitePluginArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_allWalletsCsvArgs = { - filter: InputMaybe - limit: InputMaybe - skip: InputMaybe - sort: InputMaybe - } - - type Query_alltimeJsonArgs = { - children: InputMaybe - currency: InputMaybe - data: InputMaybe - dateRange: InputMaybe - id: InputMaybe - internal: InputMaybe - mode: InputMaybe - name: InputMaybe - parent: InputMaybe - totalCosts: InputMaybe - totalPreTranslated: InputMaybe - totalTMSavings: InputMaybe - unit: InputMaybe - url: InputMaybe - } - - type Query_cexLayer2SupportJsonArgs = { - children: InputMaybe - id: InputMaybe - internal: InputMaybe - name: InputMaybe - parent: InputMaybe - supports_deposits: InputMaybe - supports_withdrawals: InputMaybe - url: InputMaybe - } - - type Query_communityEventsJsonArgs = { - children: InputMaybe - description: InputMaybe - endDate: InputMaybe - id: InputMaybe - internal: InputMaybe - location: InputMaybe - parent: InputMaybe - sponsor: InputMaybe - startDate: InputMaybe - title: InputMaybe - to: InputMaybe - } - - type Query_communityMeetupsJsonArgs = { - children: InputMaybe - emoji: InputMaybe - id: InputMaybe - internal: InputMaybe - link: InputMaybe - location: InputMaybe - parent: InputMaybe - title: InputMaybe - } - - type Query_consensusBountyHuntersCsvArgs = { - children: InputMaybe - id: InputMaybe - internal: InputMaybe - name: InputMaybe - parent: InputMaybe - score: InputMaybe - username: InputMaybe - } - - type Query_dataJsonArgs = { - children: InputMaybe - commit: InputMaybe - contributors: InputMaybe - contributorsPerLine: InputMaybe - files: InputMaybe - id: InputMaybe - imageSize: InputMaybe - internal: InputMaybe - keyGen: InputMaybe - nodeTools: InputMaybe - parent: InputMaybe - pools: InputMaybe - projectName: InputMaybe - projectOwner: InputMaybe - repoHost: InputMaybe - repoType: InputMaybe - saas: InputMaybe - skipCi: InputMaybe - } - - type Query_directoryArgs = { - absolutePath: InputMaybe - accessTime: InputMaybe - atime: InputMaybe - atimeMs: InputMaybe - base: InputMaybe - birthTime: InputMaybe - birthtime: InputMaybe - birthtimeMs: InputMaybe - changeTime: InputMaybe - children: InputMaybe - ctime: InputMaybe - ctimeMs: InputMaybe - dev: InputMaybe - dir: InputMaybe - ext: InputMaybe - extension: InputMaybe - gid: InputMaybe - id: InputMaybe - ino: InputMaybe - internal: InputMaybe - mode: InputMaybe - modifiedTime: InputMaybe - mtime: InputMaybe - mtimeMs: InputMaybe - name: InputMaybe - nlink: InputMaybe - parent: InputMaybe - prettySize: InputMaybe - rdev: InputMaybe - relativeDirectory: InputMaybe - relativePath: InputMaybe - root: InputMaybe - size: InputMaybe - sourceInstanceName: InputMaybe - uid: InputMaybe - } - - type Query_exchangesByCountryCsvArgs = { - binance: InputMaybe - binanceus: InputMaybe - bitbuy: InputMaybe - bitfinex: InputMaybe - bitflyer: InputMaybe - bitkub: InputMaybe - bitso: InputMaybe - bittrex: InputMaybe - bitvavo: InputMaybe - bybit: InputMaybe - children: InputMaybe - coinbase: InputMaybe - coinmama: InputMaybe - coinspot: InputMaybe - country: InputMaybe - cryptocom: InputMaybe - easycrypto: InputMaybe - ftx: InputMaybe - ftxus: InputMaybe - gateio: InputMaybe - gemini: InputMaybe - huobiglobal: InputMaybe - id: InputMaybe - internal: InputMaybe - itezcom: InputMaybe - kraken: InputMaybe - kucoin: InputMaybe - moonpay: InputMaybe - mtpelerin: InputMaybe - okx: InputMaybe - parent: InputMaybe - rain: InputMaybe - simplex: InputMaybe - wazirx: InputMaybe - wyre: InputMaybe - } - - type Query_executionBountyHuntersCsvArgs = { - children: InputMaybe - id: InputMaybe - internal: InputMaybe - name: InputMaybe - parent: InputMaybe - score: InputMaybe - username: InputMaybe - } - - type Query_externalTutorialsJsonArgs = { - author: InputMaybe - authorGithub: InputMaybe - children: InputMaybe - description: InputMaybe - id: InputMaybe - internal: InputMaybe - lang: InputMaybe - parent: InputMaybe - publishDate: InputMaybe - skillLevel: InputMaybe - tags: InputMaybe - timeToRead: InputMaybe - title: InputMaybe - url: InputMaybe - } - - type Query_fileArgs = { - absolutePath: InputMaybe - accessTime: InputMaybe - atime: InputMaybe - atimeMs: InputMaybe - base: InputMaybe - birthTime: InputMaybe - birthtime: InputMaybe - birthtimeMs: InputMaybe - blksize: InputMaybe - blocks: InputMaybe - changeTime: InputMaybe - childAlltimeJson: InputMaybe - childCexLayer2SupportJson: InputMaybe - childCommunityEventsJson: InputMaybe - childCommunityMeetupsJson: InputMaybe - childConsensusBountyHuntersCsv: InputMaybe - childDataJson: InputMaybe - childExchangesByCountryCsv: InputMaybe - childExecutionBountyHuntersCsv: InputMaybe - childExternalTutorialsJson: InputMaybe - childImageSharp: InputMaybe - childLayer2Json: InputMaybe - childMdx: InputMaybe - childMonthJson: InputMaybe - childQuarterJson: InputMaybe - childWalletsCsv: InputMaybe - children: InputMaybe - childrenAlltimeJson: InputMaybe - childrenCexLayer2SupportJson: InputMaybe - childrenCommunityEventsJson: InputMaybe - childrenCommunityMeetupsJson: InputMaybe - childrenConsensusBountyHuntersCsv: InputMaybe - childrenDataJson: InputMaybe - childrenExchangesByCountryCsv: InputMaybe - childrenExecutionBountyHuntersCsv: InputMaybe - childrenExternalTutorialsJson: InputMaybe - childrenImageSharp: InputMaybe - childrenLayer2Json: InputMaybe - childrenMdx: InputMaybe - childrenMonthJson: InputMaybe - childrenQuarterJson: InputMaybe - childrenWalletsCsv: InputMaybe - ctime: InputMaybe - ctimeMs: InputMaybe - dev: InputMaybe - dir: InputMaybe - ext: InputMaybe - extension: InputMaybe - fields: InputMaybe - gid: InputMaybe - id: InputMaybe - ino: InputMaybe - internal: InputMaybe - mode: InputMaybe - modifiedTime: InputMaybe - mtime: InputMaybe - mtimeMs: InputMaybe - name: InputMaybe - nlink: InputMaybe - parent: InputMaybe - prettySize: InputMaybe - publicURL: InputMaybe - rdev: InputMaybe - relativeDirectory: InputMaybe - relativePath: InputMaybe - root: InputMaybe - size: InputMaybe - sourceInstanceName: InputMaybe - uid: InputMaybe - } - - type Query_imageSharpArgs = { - children: InputMaybe - fixed: InputMaybe - fluid: InputMaybe - gatsbyImageData: InputMaybe - id: InputMaybe - internal: InputMaybe - original: InputMaybe - parent: InputMaybe - resize: InputMaybe - } - - type Query_layer2JsonArgs = { - children: InputMaybe - id: InputMaybe - internal: InputMaybe - optimistic: InputMaybe - parent: InputMaybe - zk: InputMaybe - } - - type Query_mdxArgs = { - body: InputMaybe - children: InputMaybe - excerpt: InputMaybe - fields: InputMaybe - fileAbsolutePath: InputMaybe - frontmatter: InputMaybe - headings: InputMaybe - html: InputMaybe - id: InputMaybe - internal: InputMaybe - mdxAST: InputMaybe - parent: InputMaybe - rawBody: InputMaybe - slug: InputMaybe - tableOfContents: InputMaybe - timeToRead: InputMaybe - wordCount: InputMaybe - } - - type Query_monthJsonArgs = { - children: InputMaybe - currency: InputMaybe - data: InputMaybe - dateRange: InputMaybe - id: InputMaybe - internal: InputMaybe - mode: InputMaybe - name: InputMaybe - parent: InputMaybe - totalCosts: InputMaybe - totalPreTranslated: InputMaybe - totalTMSavings: InputMaybe - unit: InputMaybe - url: InputMaybe - } - - type Query_quarterJsonArgs = { - children: InputMaybe - currency: InputMaybe - data: InputMaybe - dateRange: InputMaybe - id: InputMaybe - internal: InputMaybe - mode: InputMaybe - name: InputMaybe - parent: InputMaybe - totalCosts: InputMaybe - totalPreTranslated: InputMaybe - totalTMSavings: InputMaybe - unit: InputMaybe - url: InputMaybe - } - - type Query_siteArgs = { - buildTime: InputMaybe - children: InputMaybe - flags: InputMaybe - graphqlTypegen: InputMaybe - host: InputMaybe - id: InputMaybe - internal: InputMaybe - jsxRuntime: InputMaybe - parent: InputMaybe - pathPrefix: InputMaybe - polyfill: InputMaybe - port: InputMaybe - siteMetadata: InputMaybe - trailingSlash: InputMaybe - } - - type Query_siteBuildMetadataArgs = { - buildTime: InputMaybe - children: InputMaybe - id: InputMaybe - internal: InputMaybe - parent: InputMaybe - } - - type Query_siteFunctionArgs = { - absoluteCompiledFilePath: InputMaybe - children: InputMaybe - functionRoute: InputMaybe - id: InputMaybe - internal: InputMaybe - matchPath: InputMaybe - originalAbsoluteFilePath: InputMaybe - originalRelativeFilePath: InputMaybe - parent: InputMaybe - pluginName: InputMaybe - relativeCompiledFilePath: InputMaybe - } - - type Query_sitePageArgs = { - children: InputMaybe - component: InputMaybe - componentChunkName: InputMaybe - id: InputMaybe - internal: InputMaybe - internalComponentName: InputMaybe - matchPath: InputMaybe - pageContext: InputMaybe - parent: InputMaybe - path: InputMaybe - pluginCreator: InputMaybe - } - - type Query_sitePluginArgs = { - browserAPIs: InputMaybe - children: InputMaybe - id: InputMaybe - internal: InputMaybe - name: InputMaybe - nodeAPIs: InputMaybe - packageJson: InputMaybe - parent: InputMaybe - pluginFilepath: InputMaybe - pluginOptions: InputMaybe - resolve: InputMaybe - ssrAPIs: InputMaybe - version: InputMaybe - } - - type Query_walletsCsvArgs = { - brand_color: InputMaybe - children: InputMaybe - has_bank_withdrawals: InputMaybe - has_card_deposits: InputMaybe - has_defi_integrations: InputMaybe - has_desktop: InputMaybe - has_dex_integrations: InputMaybe - has_explore_dapps: InputMaybe - has_hardware: InputMaybe - has_high_volume_purchases: InputMaybe - has_limits_protection: InputMaybe - has_mobile: InputMaybe - has_multisig: InputMaybe - has_web: InputMaybe - id: InputMaybe - internal: InputMaybe - name: InputMaybe - parent: InputMaybe - url: InputMaybe - } - - type Site = Node & { - readonly buildTime: Maybe - readonly children: ReadonlyArray - readonly flags: Maybe - readonly graphqlTypegen: Maybe - readonly host: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly jsxRuntime: Maybe - readonly parent: Maybe - readonly pathPrefix: Maybe - readonly polyfill: Maybe - readonly port: Maybe - readonly siteMetadata: Maybe - readonly trailingSlash: Maybe - } - - type Site_buildTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type SiteBuildMetadata = Node & { - readonly buildTime: Maybe - readonly children: ReadonlyArray - readonly id: Scalars["ID"] - readonly internal: Internal - readonly parent: Maybe - } - - type SiteBuildMetadata_buildTimeArgs = { - difference: InputMaybe - formatString: InputMaybe - fromNow: InputMaybe - locale: InputMaybe - } - - type SiteBuildMetadataConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SiteBuildMetadataConnection_distinctArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataConnection_groupArgs = { - field: SiteBuildMetadataFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SiteBuildMetadataConnection_maxArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataConnection_minArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataConnection_sumArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataEdge = { - readonly next: Maybe - readonly node: SiteBuildMetadata - readonly previous: Maybe - } - - type SiteBuildMetadataFieldsEnum = - | "buildTime" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - - type SiteBuildMetadataFilterInput = { - readonly buildTime: InputMaybe - readonly children: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly parent: InputMaybe - } - - type SiteBuildMetadataGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SiteBuildMetadataGroupConnection_distinctArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataGroupConnection_groupArgs = { - field: SiteBuildMetadataFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SiteBuildMetadataGroupConnection_maxArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataGroupConnection_minArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataGroupConnection_sumArgs = { - field: SiteBuildMetadataFieldsEnum - } - - type SiteBuildMetadataSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type SiteConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SiteConnection_distinctArgs = { - field: SiteFieldsEnum - } - - type SiteConnection_groupArgs = { - field: SiteFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SiteConnection_maxArgs = { - field: SiteFieldsEnum - } - - type SiteConnection_minArgs = { - field: SiteFieldsEnum - } - - type SiteConnection_sumArgs = { - field: SiteFieldsEnum - } - - type SiteEdge = { - readonly next: Maybe - readonly node: Site - readonly previous: Maybe - } - - type SiteFieldsEnum = - | "buildTime" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "flags.FAST_DEV" - | "graphqlTypegen" - | "host" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "jsxRuntime" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "pathPrefix" - | "polyfill" - | "port" - | "siteMetadata.author" - | "siteMetadata.defaultLanguage" - | "siteMetadata.description" - | "siteMetadata.editContentUrl" - | "siteMetadata.siteUrl" - | "siteMetadata.supportedLanguages" - | "siteMetadata.title" - | "siteMetadata.url" - | "trailingSlash" - - type SiteFilterInput = { - readonly buildTime: InputMaybe - readonly children: InputMaybe - readonly flags: InputMaybe - readonly graphqlTypegen: InputMaybe - readonly host: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly jsxRuntime: InputMaybe - readonly parent: InputMaybe - readonly pathPrefix: InputMaybe - readonly polyfill: InputMaybe - readonly port: InputMaybe - readonly siteMetadata: InputMaybe - readonly trailingSlash: InputMaybe - } - - type SiteFlags = { - readonly FAST_DEV: Maybe - } - - type SiteFlagsFilterInput = { - readonly FAST_DEV: InputMaybe - } - - type SiteFunction = Node & { - readonly absoluteCompiledFilePath: Scalars["String"] - readonly children: ReadonlyArray - readonly functionRoute: Scalars["String"] - readonly id: Scalars["ID"] - readonly internal: Internal - readonly matchPath: Maybe - readonly originalAbsoluteFilePath: Scalars["String"] - readonly originalRelativeFilePath: Scalars["String"] - readonly parent: Maybe - readonly pluginName: Scalars["String"] - readonly relativeCompiledFilePath: Scalars["String"] - } - - type SiteFunctionConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SiteFunctionConnection_distinctArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionConnection_groupArgs = { - field: SiteFunctionFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SiteFunctionConnection_maxArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionConnection_minArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionConnection_sumArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionEdge = { - readonly next: Maybe - readonly node: SiteFunction - readonly previous: Maybe - } - - type SiteFunctionFieldsEnum = - | "absoluteCompiledFilePath" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "functionRoute" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "matchPath" - | "originalAbsoluteFilePath" - | "originalRelativeFilePath" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "pluginName" - | "relativeCompiledFilePath" - - type SiteFunctionFilterInput = { - readonly absoluteCompiledFilePath: InputMaybe - readonly children: InputMaybe - readonly functionRoute: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly matchPath: InputMaybe - readonly originalAbsoluteFilePath: InputMaybe - readonly originalRelativeFilePath: InputMaybe - readonly parent: InputMaybe - readonly pluginName: InputMaybe - readonly relativeCompiledFilePath: InputMaybe - } - - type SiteFunctionGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SiteFunctionGroupConnection_distinctArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionGroupConnection_groupArgs = { - field: SiteFunctionFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SiteFunctionGroupConnection_maxArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionGroupConnection_minArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionGroupConnection_sumArgs = { - field: SiteFunctionFieldsEnum - } - - type SiteFunctionSortInput = { - readonly fields: InputMaybe< - ReadonlyArray> - > - readonly order: InputMaybe>> - } - - type SiteGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SiteGroupConnection_distinctArgs = { - field: SiteFieldsEnum - } - - type SiteGroupConnection_groupArgs = { - field: SiteFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SiteGroupConnection_maxArgs = { - field: SiteFieldsEnum - } - - type SiteGroupConnection_minArgs = { - field: SiteFieldsEnum - } - - type SiteGroupConnection_sumArgs = { - field: SiteFieldsEnum - } - - type SitePage = Node & { - readonly children: ReadonlyArray - readonly component: Scalars["String"] - readonly componentChunkName: Scalars["String"] - readonly id: Scalars["ID"] - readonly internal: Internal - readonly internalComponentName: Scalars["String"] - readonly matchPath: Maybe - readonly pageContext: Maybe - readonly parent: Maybe - readonly path: Scalars["String"] - readonly pluginCreator: Maybe - } - - type SitePageConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SitePageConnection_distinctArgs = { - field: SitePageFieldsEnum - } - - type SitePageConnection_groupArgs = { - field: SitePageFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SitePageConnection_maxArgs = { - field: SitePageFieldsEnum - } - - type SitePageConnection_minArgs = { - field: SitePageFieldsEnum - } - - type SitePageConnection_sumArgs = { - field: SitePageFieldsEnum - } - - type SitePageEdge = { - readonly next: Maybe - readonly node: SitePage - readonly previous: Maybe - } - - type SitePageFieldsEnum = - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "component" - | "componentChunkName" - | "id" - | "internalComponentName" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "matchPath" - | "pageContext" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "path" - | "pluginCreator.browserAPIs" - | "pluginCreator.children" - | "pluginCreator.children.children" - | "pluginCreator.children.children.children" - | "pluginCreator.children.children.id" - | "pluginCreator.children.id" - | "pluginCreator.children.internal.content" - | "pluginCreator.children.internal.contentDigest" - | "pluginCreator.children.internal.description" - | "pluginCreator.children.internal.fieldOwners" - | "pluginCreator.children.internal.ignoreType" - | "pluginCreator.children.internal.mediaType" - | "pluginCreator.children.internal.owner" - | "pluginCreator.children.internal.type" - | "pluginCreator.children.parent.children" - | "pluginCreator.children.parent.id" - | "pluginCreator.id" - | "pluginCreator.internal.content" - | "pluginCreator.internal.contentDigest" - | "pluginCreator.internal.description" - | "pluginCreator.internal.fieldOwners" - | "pluginCreator.internal.ignoreType" - | "pluginCreator.internal.mediaType" - | "pluginCreator.internal.owner" - | "pluginCreator.internal.type" - | "pluginCreator.name" - | "pluginCreator.nodeAPIs" - | "pluginCreator.packageJson" - | "pluginCreator.parent.children" - | "pluginCreator.parent.children.children" - | "pluginCreator.parent.children.id" - | "pluginCreator.parent.id" - | "pluginCreator.parent.internal.content" - | "pluginCreator.parent.internal.contentDigest" - | "pluginCreator.parent.internal.description" - | "pluginCreator.parent.internal.fieldOwners" - | "pluginCreator.parent.internal.ignoreType" - | "pluginCreator.parent.internal.mediaType" - | "pluginCreator.parent.internal.owner" - | "pluginCreator.parent.internal.type" - | "pluginCreator.parent.parent.children" - | "pluginCreator.parent.parent.id" - | "pluginCreator.pluginFilepath" - | "pluginCreator.pluginOptions" - | "pluginCreator.resolve" - | "pluginCreator.ssrAPIs" - | "pluginCreator.version" - - type SitePageFilterInput = { - readonly children: InputMaybe - readonly component: InputMaybe - readonly componentChunkName: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly internalComponentName: InputMaybe - readonly matchPath: InputMaybe - readonly pageContext: InputMaybe - readonly parent: InputMaybe - readonly path: InputMaybe - readonly pluginCreator: InputMaybe - } - - type SitePageGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SitePageGroupConnection_distinctArgs = { - field: SitePageFieldsEnum - } - - type SitePageGroupConnection_groupArgs = { - field: SitePageFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SitePageGroupConnection_maxArgs = { - field: SitePageFieldsEnum - } - - type SitePageGroupConnection_minArgs = { - field: SitePageFieldsEnum - } - - type SitePageGroupConnection_sumArgs = { - field: SitePageFieldsEnum - } - - type SitePageSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type SitePlugin = Node & { - readonly browserAPIs: Maybe>> - readonly children: ReadonlyArray - readonly id: Scalars["ID"] - readonly internal: Internal - readonly name: Maybe - readonly nodeAPIs: Maybe>> - readonly packageJson: Maybe - readonly parent: Maybe - readonly pluginFilepath: Maybe - readonly pluginOptions: Maybe - readonly resolve: Maybe - readonly ssrAPIs: Maybe>> - readonly version: Maybe - } - - type SitePluginConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SitePluginConnection_distinctArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginConnection_groupArgs = { - field: SitePluginFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SitePluginConnection_maxArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginConnection_minArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginConnection_sumArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginEdge = { - readonly next: Maybe - readonly node: SitePlugin - readonly previous: Maybe - } - - type SitePluginFieldsEnum = - | "browserAPIs" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "name" - | "nodeAPIs" - | "packageJson" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "pluginFilepath" - | "pluginOptions" - | "resolve" - | "ssrAPIs" - | "version" - - type SitePluginFilterInput = { - readonly browserAPIs: InputMaybe - readonly children: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly name: InputMaybe - readonly nodeAPIs: InputMaybe - readonly packageJson: InputMaybe - readonly parent: InputMaybe - readonly pluginFilepath: InputMaybe - readonly pluginOptions: InputMaybe - readonly resolve: InputMaybe - readonly ssrAPIs: InputMaybe - readonly version: InputMaybe - } - - type SitePluginGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type SitePluginGroupConnection_distinctArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginGroupConnection_groupArgs = { - field: SitePluginFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type SitePluginGroupConnection_maxArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginGroupConnection_minArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginGroupConnection_sumArgs = { - field: SitePluginFieldsEnum - } - - type SitePluginSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type SiteSiteMetadata = { - readonly author: Maybe - readonly defaultLanguage: Maybe - readonly description: Maybe - readonly editContentUrl: Maybe - readonly siteUrl: Maybe - readonly supportedLanguages: Maybe>> - readonly title: Maybe - readonly url: Maybe - } - - type SiteSiteMetadataFilterInput = { - readonly author: InputMaybe - readonly defaultLanguage: InputMaybe - readonly description: InputMaybe - readonly editContentUrl: InputMaybe - readonly siteUrl: InputMaybe - readonly supportedLanguages: InputMaybe - readonly title: InputMaybe - readonly url: InputMaybe - } - - type SiteSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type SortOrderEnum = "ASC" | "DESC" - - type StringQueryOperatorInput = { - readonly eq: InputMaybe - readonly glob: InputMaybe - readonly in: InputMaybe>> - readonly ne: InputMaybe - readonly nin: InputMaybe>> - readonly regex: InputMaybe - } - - type TransformOptions = { - readonly cropFocus: InputMaybe - readonly duotone: InputMaybe - readonly fit: InputMaybe - readonly grayscale: InputMaybe - readonly rotate: InputMaybe - readonly trim: InputMaybe - } - - type WalletsCsv = Node & { - readonly brand_color: Maybe - readonly children: ReadonlyArray - readonly has_bank_withdrawals: Maybe - readonly has_card_deposits: Maybe - readonly has_defi_integrations: Maybe - readonly has_desktop: Maybe - readonly has_dex_integrations: Maybe - readonly has_explore_dapps: Maybe - readonly has_hardware: Maybe - readonly has_high_volume_purchases: Maybe - readonly has_limits_protection: Maybe - readonly has_mobile: Maybe - readonly has_multisig: Maybe - readonly has_web: Maybe - readonly id: Scalars["ID"] - readonly internal: Internal - readonly name: Maybe - readonly parent: Maybe - readonly url: Maybe - } - - type WalletsCsvConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type WalletsCsvConnection_distinctArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvConnection_groupArgs = { - field: WalletsCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type WalletsCsvConnection_maxArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvConnection_minArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvConnection_sumArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvEdge = { - readonly next: Maybe - readonly node: WalletsCsv - readonly previous: Maybe - } - - type WalletsCsvFieldsEnum = - | "brand_color" - | "children" - | "children.children" - | "children.children.children" - | "children.children.children.children" - | "children.children.children.id" - | "children.children.id" - | "children.children.internal.content" - | "children.children.internal.contentDigest" - | "children.children.internal.description" - | "children.children.internal.fieldOwners" - | "children.children.internal.ignoreType" - | "children.children.internal.mediaType" - | "children.children.internal.owner" - | "children.children.internal.type" - | "children.children.parent.children" - | "children.children.parent.id" - | "children.id" - | "children.internal.content" - | "children.internal.contentDigest" - | "children.internal.description" - | "children.internal.fieldOwners" - | "children.internal.ignoreType" - | "children.internal.mediaType" - | "children.internal.owner" - | "children.internal.type" - | "children.parent.children" - | "children.parent.children.children" - | "children.parent.children.id" - | "children.parent.id" - | "children.parent.internal.content" - | "children.parent.internal.contentDigest" - | "children.parent.internal.description" - | "children.parent.internal.fieldOwners" - | "children.parent.internal.ignoreType" - | "children.parent.internal.mediaType" - | "children.parent.internal.owner" - | "children.parent.internal.type" - | "children.parent.parent.children" - | "children.parent.parent.id" - | "has_bank_withdrawals" - | "has_card_deposits" - | "has_defi_integrations" - | "has_desktop" - | "has_dex_integrations" - | "has_explore_dapps" - | "has_hardware" - | "has_high_volume_purchases" - | "has_limits_protection" - | "has_mobile" - | "has_multisig" - | "has_web" - | "id" - | "internal.content" - | "internal.contentDigest" - | "internal.description" - | "internal.fieldOwners" - | "internal.ignoreType" - | "internal.mediaType" - | "internal.owner" - | "internal.type" - | "name" - | "parent.children" - | "parent.children.children" - | "parent.children.children.children" - | "parent.children.children.id" - | "parent.children.id" - | "parent.children.internal.content" - | "parent.children.internal.contentDigest" - | "parent.children.internal.description" - | "parent.children.internal.fieldOwners" - | "parent.children.internal.ignoreType" - | "parent.children.internal.mediaType" - | "parent.children.internal.owner" - | "parent.children.internal.type" - | "parent.children.parent.children" - | "parent.children.parent.id" - | "parent.id" - | "parent.internal.content" - | "parent.internal.contentDigest" - | "parent.internal.description" - | "parent.internal.fieldOwners" - | "parent.internal.ignoreType" - | "parent.internal.mediaType" - | "parent.internal.owner" - | "parent.internal.type" - | "parent.parent.children" - | "parent.parent.children.children" - | "parent.parent.children.id" - | "parent.parent.id" - | "parent.parent.internal.content" - | "parent.parent.internal.contentDigest" - | "parent.parent.internal.description" - | "parent.parent.internal.fieldOwners" - | "parent.parent.internal.ignoreType" - | "parent.parent.internal.mediaType" - | "parent.parent.internal.owner" - | "parent.parent.internal.type" - | "parent.parent.parent.children" - | "parent.parent.parent.id" - | "url" - - type WalletsCsvFilterInput = { - readonly brand_color: InputMaybe - readonly children: InputMaybe - readonly has_bank_withdrawals: InputMaybe - readonly has_card_deposits: InputMaybe - readonly has_defi_integrations: InputMaybe - readonly has_desktop: InputMaybe - readonly has_dex_integrations: InputMaybe - readonly has_explore_dapps: InputMaybe - readonly has_hardware: InputMaybe - readonly has_high_volume_purchases: InputMaybe - readonly has_limits_protection: InputMaybe - readonly has_mobile: InputMaybe - readonly has_multisig: InputMaybe - readonly has_web: InputMaybe - readonly id: InputMaybe - readonly internal: InputMaybe - readonly name: InputMaybe - readonly parent: InputMaybe - readonly url: InputMaybe - } - - type WalletsCsvFilterListInput = { - readonly elemMatch: InputMaybe - } - - type WalletsCsvGroupConnection = { - readonly distinct: ReadonlyArray - readonly edges: ReadonlyArray - readonly field: Scalars["String"] - readonly fieldValue: Maybe - readonly group: ReadonlyArray - readonly max: Maybe - readonly min: Maybe - readonly nodes: ReadonlyArray - readonly pageInfo: PageInfo - readonly sum: Maybe - readonly totalCount: Scalars["Int"] - } - - type WalletsCsvGroupConnection_distinctArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvGroupConnection_groupArgs = { - field: WalletsCsvFieldsEnum - limit: InputMaybe - skip: InputMaybe - } - - type WalletsCsvGroupConnection_maxArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvGroupConnection_minArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvGroupConnection_sumArgs = { - field: WalletsCsvFieldsEnum - } - - type WalletsCsvSortInput = { - readonly fields: InputMaybe>> - readonly order: InputMaybe>> - } - - type WebPOptions = { - readonly quality: InputMaybe - } - - type DataLogoFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type TokenLogoFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type cardListImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type FooterQueryQueryVariables = Exact<{ [key: string]: never }> - - type FooterQueryQuery = { - readonly allSiteBuildMetadata: { - readonly edges: ReadonlyArray<{ - readonly node: { readonly buildTime: string | null } - }> - } - } - - type dappImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type editorImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type useCaseImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type actionCardImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type calloutImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type listImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type assetItemFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type learningToolImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type ClientLogosFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type ClientLogosSmallFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type devtoolImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type listItemImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type IndexPageQueryVariables = Exact<{ [key: string]: never }> - - type IndexPageQuery = { - readonly hero: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly ethereum: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly enterprise: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly dogefixed: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly robotfixed: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly ethfixed: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly devfixed: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly future: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly impact: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly finance: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly hackathon: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly infrastructure: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly infrastructurefixed: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - readonly merge: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - } - - type ClientsFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type sourceImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type DocsPageQueryVariables = Exact<{ - relativePath: InputMaybe - }> - - type DocsPageQuery = { - readonly siteData: { - readonly siteMetadata: { readonly editContentUrl: string | null } | null - } | null - readonly pageData: { - readonly body: string - readonly tableOfContents: Record | null - readonly fields: { readonly slug: string | null } | null - readonly frontmatter: { - readonly title: string | null - readonly description: string | null - readonly lang: string | null - readonly incomplete: boolean | null - readonly sidebar: boolean | null - readonly sidebarDepth: number | null - readonly isOutdated: boolean | null - } | null - } | null - } - - type StaticPageQueryVariables = Exact<{ - relativePath: InputMaybe - }> - - type StaticPageQuery = { - readonly siteData: { - readonly siteMetadata: { readonly editContentUrl: string | null } | null - } | null - readonly pageData: { - readonly body: string - readonly tableOfContents: Record | null - readonly fields: { readonly slug: string | null } | null - readonly frontmatter: { - readonly title: string | null - readonly description: string | null - readonly lang: string | null - readonly sidebar: boolean | null - readonly sidebarDepth: number | null - readonly isOutdated: boolean | null - } | null - readonly parent: - | { - readonly mtime: string - readonly fields: { readonly gitLogLatestDate: string | null } | null - } - | {} - | null - } | null - } - - type TutorialPageQueryVariables = Exact<{ - relativePath: InputMaybe - }> - - type TutorialPageQuery = { - readonly siteData: { - readonly siteMetadata: { readonly editContentUrl: string | null } | null - } | null - readonly pageData: { - readonly body: string - readonly tableOfContents: Record | null - readonly fields: { - readonly slug: string | null - readonly readingTime: { readonly minutes: number | null } | null - } | null - readonly frontmatter: { - readonly title: string | null - readonly description: string | null - readonly lang: string | null - readonly tags: ReadonlyArray | null - readonly author: string | null - readonly source: string | null - readonly sourceUrl: string | null - readonly skill: string | null - readonly published: string | null - readonly sidebar: boolean | null - readonly sidebarDepth: number | null - readonly address: string | null - readonly isOutdated: boolean | null - } | null - } | null - } - - type UpgradePageQueryVariables = Exact<{ - relativePath: InputMaybe - }> - - type UpgradePageQuery = { - readonly mdx: { - readonly body: string - readonly tableOfContents: Record | null - readonly fields: { readonly slug: string | null } | null - readonly frontmatter: { - readonly title: string | null - readonly description: string | null - readonly lang: string | null - readonly sidebar: boolean | null - readonly sidebarDepth: number | null - readonly summaryPoint1: string - readonly summaryPoint2: string - readonly summaryPoint3: string - readonly summaryPoint4: string - readonly isOutdated: boolean | null - readonly image: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - } | null - readonly parent: - | { - readonly mtime: string - readonly fields: { readonly gitLogLatestDate: string | null } | null - } - | {} - | null - } | null - } - - type StakingPageQueryVariables = Exact<{ - relativePath: InputMaybe - }> - - type StakingPageQuery = { - readonly siteData: { - readonly siteMetadata: { readonly editContentUrl: string | null } | null - } | null - readonly pageData: { - readonly body: string - readonly tableOfContents: Record | null - readonly fields: { readonly slug: string | null } | null - readonly frontmatter: { - readonly title: string | null - readonly description: string | null - readonly lang: string | null - readonly sidebar: boolean | null - readonly emoji: string | null - readonly sidebarDepth: number | null - readonly summaryPoints: ReadonlyArray | null - readonly alt: string | null - readonly image: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - } | null - readonly parent: - | { - readonly mtime: string - readonly fields: { readonly gitLogLatestDate: string | null } | null - } - | {} - | null - } | null - } - - type UseCasePageQueryVariables = Exact<{ - relativePath: InputMaybe - }> - - type UseCasePageQuery = { - readonly siteData: { - readonly siteMetadata: { readonly editContentUrl: string | null } | null - } | null - readonly pageData: { - readonly body: string - readonly tableOfContents: Record | null - readonly fields: { readonly slug: string | null } | null - readonly frontmatter: { - readonly title: string | null - readonly description: string | null - readonly lang: string | null - readonly sidebar: boolean | null - readonly emoji: string | null - readonly sidebarDepth: number | null - readonly summaryPoint1: string - readonly summaryPoint2: string - readonly summaryPoint3: string - readonly alt: string | null - readonly isOutdated: boolean | null - readonly image: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - } | null - readonly parent: - | { - readonly mtime: string - readonly fields: { readonly gitLogLatestDate: string | null } | null - } - | {} - | null - } | null - } - - type JobPageQueryVariables = Exact<{ - relativePath: InputMaybe - }> - - type JobPageQuery = { - readonly mdx: { - readonly body: string - readonly tableOfContents: Record | null - readonly fields: { readonly slug: string | null } | null - readonly frontmatter: { - readonly title: string | null - readonly description: string | null - readonly sidebar: boolean | null - readonly sidebarDepth: number | null - readonly position: string | null - readonly location: string | null - readonly compensation: string | null - readonly type: string | null - readonly link: string | null - readonly image: { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } | null - } | null - readonly parent: - | { - readonly mtime: string - readonly fields: { readonly gitLogLatestDate: string | null } | null - } - | {} - | null - } | null - } - - type GatsbyImageSharpFixedFragment = { - readonly base64: string | null - readonly width: number - readonly height: number - readonly src: string - readonly srcSet: string - } - - type GatsbyImageSharpFixed_tracedSVGFragment = { - readonly tracedSVG: string | null - readonly width: number - readonly height: number - readonly src: string - readonly srcSet: string - } - - type GatsbyImageSharpFixed_withWebpFragment = { - readonly base64: string | null - readonly width: number - readonly height: number - readonly src: string - readonly srcSet: string - readonly srcWebp: string | null - readonly srcSetWebp: string | null - } - - type GatsbyImageSharpFixed_withWebp_tracedSVGFragment = { - readonly tracedSVG: string | null - readonly width: number - readonly height: number - readonly src: string - readonly srcSet: string - readonly srcWebp: string | null - readonly srcSetWebp: string | null - } - - type GatsbyImageSharpFixed_noBase64Fragment = { - readonly width: number - readonly height: number - readonly src: string - readonly srcSet: string - } - - type GatsbyImageSharpFixed_withWebp_noBase64Fragment = { - readonly width: number - readonly height: number - readonly src: string - readonly srcSet: string - readonly srcWebp: string | null - readonly srcSetWebp: string | null - } - - type GatsbyImageSharpFluidFragment = { - readonly base64: string | null - readonly aspectRatio: number - readonly src: string - readonly srcSet: string - readonly sizes: string - } - - type GatsbyImageSharpFluidLimitPresentationSizeFragment = { - readonly maxHeight: number - readonly maxWidth: number - } - - type GatsbyImageSharpFluid_tracedSVGFragment = { - readonly tracedSVG: string | null - readonly aspectRatio: number - readonly src: string - readonly srcSet: string - readonly sizes: string - } - - type GatsbyImageSharpFluid_withWebpFragment = { - readonly base64: string | null - readonly aspectRatio: number - readonly src: string - readonly srcSet: string - readonly srcWebp: string | null - readonly srcSetWebp: string | null - readonly sizes: string - } - - type GatsbyImageSharpFluid_withWebp_tracedSVGFragment = { - readonly tracedSVG: string | null - readonly aspectRatio: number - readonly src: string - readonly srcSet: string - readonly srcWebp: string | null - readonly srcSetWebp: string | null - readonly sizes: string - } - - type GatsbyImageSharpFluid_noBase64Fragment = { - readonly aspectRatio: number - readonly src: string - readonly srcSet: string - readonly sizes: string - } - - type GatsbyImageSharpFluid_withWebp_noBase64Fragment = { - readonly aspectRatio: number - readonly src: string - readonly srcSet: string - readonly srcWebp: string | null - readonly srcSetWebp: string | null - readonly sizes: string - } - - type walletCardImageFragment = { - readonly childImageSharp: { - readonly gatsbyImageData: Record - } | null - } - - type AllMdxQueryVariables = Exact<{ [key: string]: never }> - - type AllMdxQuery = { - readonly allMdx: { - readonly edges: ReadonlyArray<{ - readonly node: { - readonly fields: { - readonly isOutdated: boolean | null - readonly slug: string | null - readonly relativePath: string | null - } | null - readonly frontmatter: { - readonly lang: string | null - readonly template: string | null - } | null - } - }> - } - } -} From a8f142145ab9c257c7ed8d2ef0f4dd67bcffb171 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 2 Jun 2022 14:31:39 -0700 Subject: [PATCH 294/298] Convert case for component prop [Fixes #6545] --- src/components/ExpandableCard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ExpandableCard.js b/src/components/ExpandableCard.js index f3e94437ee8..17101dd1c9a 100644 --- a/src/components/ExpandableCard.js +++ b/src/components/ExpandableCard.js @@ -93,7 +93,7 @@ const ExpandableCard = ({ children, contentPreview, title, - Svg, + svg: Svg, alt, eventCategory, eventName, From ab6ae1328a80ab6d6d2feeea9294228e359f5425 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 2 Jun 2022 15:31:43 -0600 Subject: [PATCH 295/298] update month and alltime data for translation leaderboard --- .../alltime/alltime-data.json | 13418 ++++++++++++---- .../translation-reports/month/month-data.json | 11824 +++++++------- 2 files changed, 15754 insertions(+), 9488 deletions(-) diff --git a/src/data/translation-reports/alltime/alltime-data.json b/src/data/translation-reports/alltime/alltime-data.json index e24bf4bc13e..0671ee549ad 100644 --- a/src/data/translation-reports/alltime/alltime-data.json +++ b/src/data/translation-reports/alltime/alltime-data.json @@ -4,13 +4,13 @@ "unit": "words", "dateRange": { "from": "2019-06-27", - "to": "2022-05-01" + "to": "2022-06-01" }, "currency": "USD", "mode": "simple", - "totalCosts": 6146941, + "totalCosts": 6562954, "totalTMSavings": 0, - "totalPreTranslated": 1137261, + "totalPreTranslated": 1299001, "data": [ { "user": { @@ -311,6 +311,58 @@ } ] }, + { + "user": { + "id": 15293526, + "username": "1032617422", + "fullName": "1032617422", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293526/medium/9e1560b3c7f8e0915244339e340263ae_default.png", + "preTranslated": 0, + "totalCosts": 25 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 25 + }, + "translated": { + "tmMatch": 0, + "default": 25, + "total": 25 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 28, + "total": 28 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 25, + "total": 25 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 25, + "total": 25 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15250140, @@ -319,7 +371,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250140/medium/93c4b05cd40e194f906c25902dbbda9a_default.png", "preTranslated": 0, - "totalCosts": 222 + "totalCosts": 848 }, "languages": [ { @@ -328,22 +380,22 @@ "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 222 + "totalCosts": 848 }, "translated": { "tmMatch": 11, - "default": 211, - "total": 222 + "default": 837, + "total": 848 }, "targetTranslated": { "tmMatch": 21, - "default": 181, - "total": 202 + "default": 736, + "total": 757 }, "translatedByMt": { "tmMatch": 0, - "default": 50, - "total": 50 + "default": 246, + "total": 246 }, "approved": { "tmMatch": 0, @@ -352,8 +404,8 @@ }, "translationCosts": { "tmMatch": 11, - "default": 211, - "total": 222 + "default": 837, + "total": 848 }, "approvalCosts": { "tmMatch": 0, @@ -904,7 +956,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137520/medium/45578cd00916c31bdd162d1ead2c563b_default.png", "preTranslated": 0, - "totalCosts": 104 + "totalCosts": 198 }, "languages": [ { @@ -913,17 +965,17 @@ "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 104 + "totalCosts": 198 }, "translated": { "tmMatch": 0, - "default": 104, - "total": 104 + "default": 198, + "total": 198 }, "targetTranslated": { "tmMatch": 0, - "default": 104, - "total": 104 + "default": 239, + "total": 239 }, "translatedByMt": { "tmMatch": 0, @@ -937,8 +989,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 104, - "total": 104 + "default": 198, + "total": 198 }, "approvalCosts": { "tmMatch": 0, @@ -1557,7 +1609,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 77 + "total": 81 }, "translationCosts": { "tmMatch": 9, @@ -1905,7 +1957,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15038029/medium/39a0baeb76a5f50b79e8e8589553619a_default.png", "preTranslated": 0, - "totalCosts": 45850 + "totalCosts": 79896 }, "languages": [ { @@ -1914,32 +1966,32 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 45850 + "totalCosts": 79896 }, "translated": { - "tmMatch": 15327, - "default": 30523, - "total": 45850 + "tmMatch": 24292, + "default": 55604, + "total": 79896 }, "targetTranslated": { - "tmMatch": 15101, - "default": 29848, - "total": 44949 + "tmMatch": 23554, + "default": 53935, + "total": 77489 }, "translatedByMt": { - "tmMatch": 1, - "default": 4, - "total": 5 + "tmMatch": 11, + "default": 21, + "total": 32 }, "approved": { "tmMatch": 0, "default": 0, - "total": 65312 + "total": 107459 }, "translationCosts": { - "tmMatch": 15327, - "default": 30523, - "total": 45850 + "tmMatch": 24292, + "default": 55604, + "total": 79896 }, "approvalCosts": { "tmMatch": 0, @@ -2256,7 +2308,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15005475/medium/9443753a1b4b3c1d14a6c5932971813f_default.png", "preTranslated": 0, - "totalCosts": 72080 + "totalCosts": 106997 }, "languages": [ { @@ -2304,32 +2356,32 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 71331 + "totalCosts": 106248 }, "translated": { - "tmMatch": 22011, - "default": 49320, - "total": 71331 + "tmMatch": 25150, + "default": 81098, + "total": 106248 }, "targetTranslated": { - "tmMatch": 18577, - "default": 40262, - "total": 58839 + "tmMatch": 21230, + "default": 64587, + "total": 85817 }, "translatedByMt": { - "tmMatch": 9, + "tmMatch": 14, "default": 0, - "total": 9 + "total": 14 }, "approved": { "tmMatch": 0, "default": 0, - "total": 108280 + "total": 167389 }, "translationCosts": { - "tmMatch": 22011, - "default": 49320, - "total": 71331 + "tmMatch": 25150, + "default": 81098, + "total": 106248 }, "approvalCosts": { "tmMatch": 0, @@ -2451,7 +2503,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15005335/medium/1df3f196a54707c412ad265030074c6d_default.png", "preTranslated": 0, - "totalCosts": 47111 + "totalCosts": 47128 }, "languages": [ { @@ -2460,17 +2512,17 @@ "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 47111 + "totalCosts": 47128 }, "translated": { "tmMatch": 9743, - "default": 37368, - "total": 47111 + "default": 37385, + "total": 47128 }, "targetTranslated": { "tmMatch": 10762, - "default": 40206, - "total": 50968 + "default": 40224, + "total": 50986 }, "translatedByMt": { "tmMatch": 36, @@ -2480,12 +2532,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 79844 + "total": 79861 }, "translationCosts": { "tmMatch": 9743, - "default": 37368, - "total": 47111 + "default": 37385, + "total": 47128 }, "approvalCosts": { "tmMatch": 0, @@ -2854,7 +2906,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15038647/medium/6e83773b7f4db25bdece30475a0840df_default.png", "preTranslated": 0, - "totalCosts": 37227 + "totalCosts": 46765 }, "languages": [ { @@ -2863,32 +2915,32 @@ "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 37227 + "totalCosts": 46765 }, "translated": { - "tmMatch": 7261, - "default": 29966, - "total": 37227 + "tmMatch": 9802, + "default": 36963, + "total": 46765 }, "targetTranslated": { - "tmMatch": 19707, - "default": 79548, - "total": 99255 + "tmMatch": 27073, + "default": 99408, + "total": 126481 }, "translatedByMt": { - "tmMatch": 34, - "default": 132, - "total": 166 + "tmMatch": 42, + "default": 135, + "total": 177 }, "approved": { "tmMatch": 0, "default": 0, - "total": 47691 + "total": 58124 }, "translationCosts": { - "tmMatch": 7261, - "default": 29966, - "total": 37227 + "tmMatch": 9802, + "default": 36963, + "total": 46765 }, "approvalCosts": { "tmMatch": 0, @@ -2997,7 +3049,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241658/medium/39de011db222be51f6dfe886cfe26499_default.png", "preTranslated": 0, - "totalCosts": 99 + "totalCosts": 10275 }, "languages": [ { @@ -3006,17 +3058,17 @@ "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 99 + "totalCosts": 10275 }, "translated": { - "tmMatch": 3, - "default": 96, - "total": 99 + "tmMatch": 598, + "default": 9677, + "total": 10275 }, "targetTranslated": { - "tmMatch": 5, - "default": 148, - "total": 153 + "tmMatch": 1001, + "default": 15231, + "total": 16232 }, "translatedByMt": { "tmMatch": 0, @@ -3026,12 +3078,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 175 + "total": 10358 }, "translationCosts": { - "tmMatch": 3, - "default": 96, - "total": 99 + "tmMatch": 598, + "default": 9677, + "total": 10275 }, "approvalCosts": { "tmMatch": 0, @@ -3049,7 +3101,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15005293/medium/6f19beccc7174b9ab2a3022bad4e34a0_default.png", "preTranslated": 0, - "totalCosts": 749 + "totalCosts": 847 }, "languages": [ { @@ -3058,32 +3110,84 @@ "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 749 + "totalCosts": 847 }, "translated": { - "tmMatch": 89, - "default": 660, - "total": 749 + "tmMatch": 92, + "default": 755, + "total": 847 }, "targetTranslated": { - "tmMatch": 107, - "default": 713, - "total": 820 + "tmMatch": 110, + "default": 830, + "total": 940 }, "translatedByMt": { - "tmMatch": 16, - "default": 39, - "total": 55 + "tmMatch": 18, + "default": 55, + "total": 73 }, "approved": { "tmMatch": 0, "default": 0, - "total": 1388 + "total": 1655 }, "translationCosts": { - "tmMatch": 89, - "default": 660, - "total": 749 + "tmMatch": 92, + "default": 755, + "total": 847 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 15256998, + "username": "Aco_gmtraductions", + "fullName": "Aco_gmtraductions", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15256998/medium/1080c1f5f785cd542b310f0c840db93f_default.png", + "preTranslated": 0, + "totalCosts": 3240 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 3240 + }, + "translated": { + "tmMatch": 2301, + "default": 939, + "total": 3240 + }, + "targetTranslated": { + "tmMatch": 2698, + "default": 1084, + "total": 3782 + }, + "translatedByMt": { + "tmMatch": 40, + "default": 17, + "total": 57 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 6728 + }, + "translationCosts": { + "tmMatch": 2301, + "default": 939, + "total": 3240 }, "approvalCosts": { "tmMatch": 0, @@ -3483,6 +3587,58 @@ } ] }, + { + "user": { + "id": 15269034, + "username": "Aiden_Lee", + "fullName": "Aiden_Lee", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269034/medium/98d984d00012bd37cbb5f3f343bd367e_default.png", + "preTranslated": 0, + "totalCosts": 33 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 33 + }, + "translated": { + "tmMatch": 0, + "default": 33, + "total": 33 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 55, + "total": 55 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 33, + "total": 33 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15243012, @@ -4115,7 +4271,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15059845/medium/246f779f1566229dfd8c4a84423e7255_default.png", "preTranslated": 0, - "totalCosts": 95 + "totalCosts": 242 }, "languages": [ { @@ -4124,17 +4280,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 95 + "totalCosts": 242 }, "translated": { - "tmMatch": 47, - "default": 48, - "total": 95 + "tmMatch": 181, + "default": 61, + "total": 242 }, "targetTranslated": { - "tmMatch": 57, - "default": 61, - "total": 118 + "tmMatch": 212, + "default": 80, + "total": 292 }, "translatedByMt": { "tmMatch": 2, @@ -4147,9 +4303,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 47, - "default": 48, - "total": 95 + "tmMatch": 181, + "default": 61, + "total": 242 }, "approvalCosts": { "tmMatch": 0, @@ -5342,6 +5498,58 @@ } ] }, + { + "user": { + "id": 15269964, + "username": "Ariiellus", + "fullName": "Ariiellus", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269964/medium/dc88b955bacb0f0b8dce76604a3434bc.jpg", + "preTranslated": 0, + "totalCosts": 209 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 209 + }, + "translated": { + "tmMatch": 0, + "default": 209, + "total": 209 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 232, + "total": 232 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 131, + "total": 131 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 209, + "total": 209 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14550974, @@ -6252,6 +6460,58 @@ } ] }, + { + "user": { + "id": 15262388, + "username": "Axelfly02", + "fullName": "Axelfly02", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15262388/medium/a6a9a6be100373d4291353eb0030e7ca_default.png", + "preTranslated": 0, + "totalCosts": 13 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 13 + }, + "translated": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 16, + "total": 16 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14907079, @@ -8379,7 +8639,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14838806/medium/f1b727400eeeff54d73ab03020db79b3.PNG", "preTranslated": 0, - "totalCosts": 614 + "totalCosts": 1153 }, "languages": [ { @@ -8388,17 +8648,17 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 614 + "totalCosts": 1153 }, "translated": { - "tmMatch": 49, - "default": 565, - "total": 614 + "tmMatch": 321, + "default": 832, + "total": 1153 }, "targetTranslated": { - "tmMatch": 45, - "default": 476, - "total": 521 + "tmMatch": 260, + "default": 710, + "total": 970 }, "translatedByMt": { "tmMatch": 0, @@ -8411,9 +8671,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 49, - "default": 565, - "total": 614 + "tmMatch": 321, + "default": 832, + "total": 1153 }, "approvalCosts": { "tmMatch": 0, @@ -10615,7 +10875,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14958061/medium/120296ee25b4bfc07225bfbc8a6d5666_default.png", "preTranslated": 0, - "totalCosts": 9375 + "totalCosts": 11048 }, "languages": [ { @@ -10624,17 +10884,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 9375 + "totalCosts": 11048 }, "translated": { - "tmMatch": 210, - "default": 9165, - "total": 9375 + "tmMatch": 221, + "default": 10827, + "total": 11048 }, "targetTranslated": { - "tmMatch": 325, - "default": 14388, - "total": 14713 + "tmMatch": 341, + "default": 16873, + "total": 17214 }, "translatedByMt": { "tmMatch": 14, @@ -10647,9 +10907,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 210, - "default": 9165, - "total": 9375 + "tmMatch": 221, + "default": 10827, + "total": 11048 }, "approvalCosts": { "tmMatch": 0, @@ -13662,6 +13922,58 @@ } ] }, + { + "user": { + "id": 15270694, + "username": "Frank25184", + "fullName": "Frank25184", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15270694/medium/fb741f05f9acf8e0393a72b4381b3405_default.png", + "preTranslated": 0, + "totalCosts": 37 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 37 + }, + "translated": { + "tmMatch": 0, + "default": 37, + "total": 37 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 63, + "total": 63 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 37, + "total": 37 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15088607, @@ -13930,7 +14242,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14410638/medium/d8c39570ef80883365984b216908c123_default.png", "preTranslated": 0, - "totalCosts": 414 + "totalCosts": 461 }, "languages": [ { @@ -13939,17 +14251,17 @@ "name": "Hebrew", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 414 + "totalCosts": 461 }, "translated": { "tmMatch": 33, - "default": 381, - "total": 414 + "default": 428, + "total": 461 }, "targetTranslated": { "tmMatch": 26, - "default": 357, - "total": 383 + "default": 397, + "total": 423 }, "translatedByMt": { "tmMatch": 0, @@ -13963,8 +14275,8 @@ }, "translationCosts": { "tmMatch": 33, - "default": 381, - "total": 414 + "default": 428, + "total": 461 }, "approvalCosts": { "tmMatch": 0, @@ -14182,6 +14494,58 @@ } ] }, + { + "user": { + "id": 15267214, + "username": "GihOB", + "fullName": "GihOB", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15267214/medium/5e39792fb994591df54a7e4e3eed8ebd_default.png", + "preTranslated": 0, + "totalCosts": 793 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 793 + }, + "translated": { + "tmMatch": 0, + "default": 793, + "total": 793 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 854, + "total": 854 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 235, + "total": 235 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 793, + "total": 793 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 13461670, @@ -14190,7 +14554,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/9093f2d7047615a270b4c00bc2abd595_default.png", "preTranslated": 0, - "totalCosts": 127532 + "totalCosts": 129127 }, "languages": [ { @@ -14199,17 +14563,17 @@ "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 127532 + "totalCosts": 129127 }, "translated": { - "tmMatch": 7665, - "default": 119867, - "total": 127532 + "tmMatch": 7887, + "default": 121240, + "total": 129127 }, "targetTranslated": { - "tmMatch": 8094, - "default": 118766, - "total": 126860 + "tmMatch": 8332, + "default": 120237, + "total": 128569 }, "translatedByMt": { "tmMatch": 0, @@ -14222,9 +14586,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7665, - "default": 119867, - "total": 127532 + "tmMatch": 7887, + "default": 121240, + "total": 129127 }, "approvalCosts": { "tmMatch": 0, @@ -14242,7 +14606,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15116307/medium/46b6a030b92eb4909c82bcc68026e4eb_default.png", "preTranslated": 0, - "totalCosts": 3546 + "totalCosts": 4123 }, "languages": [ { @@ -14251,17 +14615,17 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3546 + "totalCosts": 4123 }, "translated": { - "tmMatch": 88, - "default": 3458, - "total": 3546 + "tmMatch": 98, + "default": 4025, + "total": 4123 }, "targetTranslated": { - "tmMatch": 71, - "default": 3314, - "total": 3385 + "tmMatch": 81, + "default": 3856, + "total": 3937 }, "translatedByMt": { "tmMatch": 0, @@ -14274,9 +14638,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 88, - "default": 3458, - "total": 3546 + "tmMatch": 98, + "default": 4025, + "total": 4123 }, "approvalCosts": { "tmMatch": 0, @@ -15644,9 +16008,9 @@ "username": "Horus267", "fullName": "Horus267", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686790/medium/fe0348d2db7a7a2a0a66e1331149b4aa_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686790/medium/9695742f9165e3cf2585e31e74898270.png", "preTranslated": 0, - "totalCosts": 1253 + "totalCosts": 5862 }, "languages": [ { @@ -15655,22 +16019,22 @@ "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1253 + "totalCosts": 5862 }, "translated": { - "tmMatch": 96, - "default": 1157, - "total": 1253 + "tmMatch": 259, + "default": 5603, + "total": 5862 }, "targetTranslated": { - "tmMatch": 79, - "default": 970, - "total": 1049 + "tmMatch": 247, + "default": 4923, + "total": 5170 }, "translatedByMt": { - "tmMatch": 0, - "default": 5, - "total": 5 + "tmMatch": 1, + "default": 24, + "total": 25 }, "approved": { "tmMatch": 0, @@ -15678,9 +16042,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 96, - "default": 1157, - "total": 1253 + "tmMatch": 259, + "default": 5603, + "total": 5862 }, "approvalCosts": { "tmMatch": 0, @@ -16725,7 +17089,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15222542/medium/c4b538278714558f9a5430c0cef783de.JPG", "preTranslated": 0, - "totalCosts": 10278 + "totalCosts": 44392 }, "languages": [ { @@ -16734,22 +17098,22 @@ "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 10278 + "totalCosts": 44392 }, "translated": { - "tmMatch": 322, - "default": 9956, - "total": 10278 + "tmMatch": 2580, + "default": 41812, + "total": 44392 }, "targetTranslated": { - "tmMatch": 518, - "default": 16893, - "total": 17411 + "tmMatch": 4759, + "default": 76480, + "total": 81239 }, "translatedByMt": { - "tmMatch": 14, - "default": 9, - "total": 23 + "tmMatch": 61, + "default": 17, + "total": 78 }, "approved": { "tmMatch": 0, @@ -16757,9 +17121,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 322, - "default": 9956, - "total": 10278 + "tmMatch": 2580, + "default": 41812, + "total": 44392 }, "approvalCosts": { "tmMatch": 0, @@ -16873,6 +17237,58 @@ } ] }, + { + "user": { + "id": 15115629, + "username": "JohnChan", + "fullName": "JohnChan", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15115629/medium/05d93403114bfeae6efff2965a1759e0_default.png", + "preTranslated": 0, + "totalCosts": 24 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 24 + }, + "translated": { + "tmMatch": 0, + "default": 24, + "total": 24 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 42, + "total": 42 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 24, + "total": 24 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15159572, @@ -21904,6 +22320,58 @@ } ] }, + { + "user": { + "id": 15266142, + "username": "Lin_stardust", + "fullName": "Lin_stardust", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266142/medium/1a263e63194c2b4df9f60bb460c9cab4_default.png", + "preTranslated": 0, + "totalCosts": 22 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 22 + }, + "translated": { + "tmMatch": 22, + "default": 0, + "total": 22 + }, + "targetTranslated": { + "tmMatch": 33, + "default": 0, + "total": 33 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 22, + "default": 0, + "total": 22 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14891070, @@ -23607,6 +24075,97 @@ } ] }, + { + "user": { + "id": 15290634, + "username": "Mamadou1w12", + "fullName": "Mamadou1w12", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15290634/medium/5cec072c476db776c53a25d7d2efd625_default.png", + "preTranslated": 0, + "totalCosts": 99 + }, + "languages": [ + { + "language": { + "id": "ar", + "name": "Arabic", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 53 + }, + "translated": { + "tmMatch": 0, + "default": 53, + "total": 53 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 32, + "total": 32 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 53, + "total": 53 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "fil", + "name": "Filipino", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 46 + }, + "translated": { + "tmMatch": 30, + "default": 16, + "total": 46 + }, + "targetTranslated": { + "tmMatch": 38, + "default": 18, + "total": 56 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 30, + "default": 16, + "total": 46 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15066717, @@ -25201,7 +25760,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15240262/medium/8878a45f57e62f22e31686cc9d3a27f1_default.png", "preTranslated": 0, - "totalCosts": 7077 + "totalCosts": 12518 }, "languages": [ { @@ -25210,32 +25769,32 @@ "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 7077 + "totalCosts": 12518 }, "translated": { - "tmMatch": 1442, - "default": 5635, - "total": 7077 + "tmMatch": 1951, + "default": 10567, + "total": 12518 }, "targetTranslated": { - "tmMatch": 1587, - "default": 6258, - "total": 7845 + "tmMatch": 2127, + "default": 11418, + "total": 13545 }, "translatedByMt": { - "tmMatch": 7, - "default": 70, - "total": 77 + "tmMatch": 16, + "default": 120, + "total": 136 }, "approved": { "tmMatch": 0, "default": 0, - "total": 19215 + "total": 48671 }, "translationCosts": { - "tmMatch": 1442, - "default": 5635, - "total": 7077 + "tmMatch": 1951, + "default": 10567, + "total": 12518 }, "approvalCosts": { "tmMatch": 0, @@ -25349,6 +25908,58 @@ } ] }, + { + "user": { + "id": 15293804, + "username": "Morpheus1024", + "fullName": "Morpheus1024", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293804/medium/ee5fdd409a493c3a7829be569d7b8dac_default.png", + "preTranslated": 0, + "totalCosts": 310 + }, + "languages": [ + { + "language": { + "id": "pl", + "name": "Polish", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 310 + }, + "translated": { + "tmMatch": 1, + "default": 309, + "total": 310 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 238, + "total": 239 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 25, + "total": 25 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 309, + "total": 310 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14720182, @@ -27385,7 +27996,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15075281/medium/5ba3cb81d30b3f0d41667f5035f298e7_default.png", "preTranslated": 0, - "totalCosts": 1028 + "totalCosts": 1534 }, "languages": [ { @@ -27394,22 +28005,22 @@ "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1028 + "totalCosts": 1534 }, "translated": { "tmMatch": 54, - "default": 974, - "total": 1028 + "default": 1480, + "total": 1534 }, "targetTranslated": { "tmMatch": 73, - "default": 1045, - "total": 1118 + "default": 1530, + "total": 1603 }, "translatedByMt": { "tmMatch": 31, - "default": 348, - "total": 379 + "default": 398, + "total": 429 }, "approved": { "tmMatch": 0, @@ -27418,8 +28029,8 @@ }, "translationCosts": { "tmMatch": 54, - "default": 974, - "total": 1028 + "default": 1480, + "total": 1534 }, "approvalCosts": { "tmMatch": 0, @@ -27489,7 +28100,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055847/medium/fca34f3df4d32ab5f9b476d91f7b5372_default.png", "preTranslated": 0, - "totalCosts": 428 + "totalCosts": 666 }, "languages": [ { @@ -27498,22 +28109,22 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 428 + "totalCosts": 666 }, "translated": { - "tmMatch": 3, - "default": 425, - "total": 428 + "tmMatch": 6, + "default": 660, + "total": 666 }, "targetTranslated": { - "tmMatch": 3, - "default": 383, - "total": 386 + "tmMatch": 6, + "default": 611, + "total": 617 }, "translatedByMt": { - "tmMatch": 0, - "default": 36, - "total": 36 + "tmMatch": 3, + "default": 134, + "total": 137 }, "approved": { "tmMatch": 0, @@ -27521,9 +28132,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 425, - "total": 428 + "tmMatch": 6, + "default": 660, + "total": 666 }, "approvalCosts": { "tmMatch": 0, @@ -28113,7 +28724,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15078579/medium/4235cb264948447a8dac3433590acd2e_default.png", "preTranslated": 0, - "totalCosts": 81 + "totalCosts": 212 }, "languages": [ { @@ -28122,22 +28733,22 @@ "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 81 + "totalCosts": 212 }, "translated": { - "tmMatch": 2, - "default": 79, - "total": 81 + "tmMatch": 4, + "default": 208, + "total": 212 }, "targetTranslated": { - "tmMatch": 2, - "default": 93, - "total": 95 + "tmMatch": 5, + "default": 251, + "total": 256 }, "translatedByMt": { - "tmMatch": 0, - "default": 21, - "total": 21 + "tmMatch": 2, + "default": 42, + "total": 44 }, "approved": { "tmMatch": 0, @@ -28145,9 +28756,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 79, - "total": 81 + "tmMatch": 4, + "default": 208, + "total": 212 }, "approvalCosts": { "tmMatch": 0, @@ -29238,32 +29849,32 @@ }, { "user": { - "id": 14052846, + "id": 14673820, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14052846/medium/8e5aee394126f8d7e5c0f83f4d05b0af_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14673820/medium/bf7953eacf85bdaa67186b7ab3b04e69_default.png", "preTranslated": 0, - "totalCosts": 2 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "hu", - "name": "Hungarian", + "id": "ms", + "name": "Malay", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 1 }, "translated": { - "tmMatch": 1, + "tmMatch": 0, "default": 1, - "total": 2 + "total": 1 }, "targetTranslated": { - "tmMatch": 1, + "tmMatch": 0, "default": 1, - "total": 2 + "total": 1 }, "translatedByMt": { "tmMatch": 0, @@ -29276,9 +29887,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, + "tmMatch": 0, "default": 1, - "total": 2 + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -29290,84 +29901,32 @@ }, { "user": { - "id": 14565546, + "id": 13994593, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14565546/medium/94a5c2fe3866f519839581548e28db22_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13994593/medium/9338c2dd21dcb47daa7e39f735592deb_default.png", "preTranslated": 0, - "totalCosts": 20 + "totalCosts": 76 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 20 + "totalCosts": 76 }, "translated": { - "tmMatch": 2, - "default": 18, - "total": 20 - }, - "targetTranslated": { - "tmMatch": 2, - "default": 25, - "total": 27 - }, - "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 2, - "default": 18, - "total": 20 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 14674448, - "username": "REMOVED_USER", - "fullName": "REMOVED_USER", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14674448/medium/dd51469de6677a7c47335f7be75fb723_default.png", - "preTranslated": 0, - "totalCosts": 3 - }, - "languages": [ - { - "language": { - "id": "ms", - "name": "Malay", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 3 - }, - "translated": { - "tmMatch": 3, - "default": 0, - "total": 3 + "default": 76, + "total": 76 }, "targetTranslated": { - "tmMatch": 4, - "default": 0, - "total": 4 + "tmMatch": 0, + "default": 72, + "total": 72 }, "translatedByMt": { "tmMatch": 0, @@ -29380,61 +29939,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 0, - "total": 3 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 14332116, - "username": "REMOVED_USER", - "fullName": "REMOVED_USER", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14332116/medium/55e7a2f384e77a129075ec10a878ea54_default.png", - "preTranslated": 0, - "totalCosts": 100 - }, - "languages": [ - { - "language": { - "id": "ar", - "name": "Arabic", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 100 - }, - "translated": { - "tmMatch": 69, - "default": 31, - "total": 100 - }, - "targetTranslated": { - "tmMatch": 70, - "default": 27, - "total": 97 - }, - "translatedByMt": { - "tmMatch": 44, - "default": 0, - "total": 44 - }, - "approved": { "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 69, - "default": 31, - "total": 100 + "default": 76, + "total": 76 }, "approvalCosts": { "tmMatch": 0, @@ -29446,32 +29953,32 @@ }, { "user": { - "id": 15137952, + "id": 13992969, "username": "REMOVED_USER", "fullName": "REMOVED_USER", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137952/medium/75885c80c3b3eb3993f78261ca2dcf8b_default.png", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13992969/medium/680c9dcc9bdc7ed58b74ee77b90b2e7a_default.png", "preTranslated": 0, - "totalCosts": 20 + "totalCosts": 309 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "el", + "name": "Greek", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 20 + "totalCosts": 309 }, "translated": { - "tmMatch": 11, - "default": 9, - "total": 20 + "tmMatch": 12, + "default": 297, + "total": 309 }, "targetTranslated": { - "tmMatch": 8, - "default": 9, - "total": 17 + "tmMatch": 14, + "default": 336, + "total": 350 }, "translatedByMt": { "tmMatch": 0, @@ -29481,12 +29988,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1113 }, "translationCosts": { - "tmMatch": 11, - "default": 9, - "total": 20 + "tmMatch": 12, + "default": 297, + "total": 309 }, "approvalCosts": { "tmMatch": 0, @@ -29498,32 +30005,32 @@ }, { "user": { - "id": 14574530, + "id": 14562648, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14574530/medium/77023b2df20b1d8f10ca1a8811dc816c_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14562648/medium/be92f5ba98faf4108b2d12a425b12614_default.png", "preTranslated": 0, - "totalCosts": 4 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "sv-SE", + "name": "Swedish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 2 }, "translated": { - "tmMatch": 4, + "tmMatch": 2, "default": 0, - "total": 4 + "total": 2 }, "targetTranslated": { - "tmMatch": 4, + "tmMatch": 2, "default": 0, - "total": 4 + "total": 2 }, "translatedByMt": { "tmMatch": 0, @@ -29536,9 +30043,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, + "tmMatch": 2, "default": 0, - "total": 4 + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -29550,37 +30057,37 @@ }, { "user": { - "id": 15039177, + "id": 14903462, "username": "REMOVED_USER", "fullName": "REMOVED_USER", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15039177/medium/92c1f93061fe53532e0e4665a992e62d_default.png", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14903462/medium/6742c78a316d368b0cd6ec8e8afadaa7_default.png", "preTranslated": 0, - "totalCosts": 10 + "totalCosts": 825 }, "languages": [ { "language": { - "id": "bg", - "name": "Bulgarian", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 10 + "totalCosts": 825 }, "translated": { - "tmMatch": 0, - "default": 10, - "total": 10 + "tmMatch": 154, + "default": 671, + "total": 825 }, "targetTranslated": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 160, + "default": 653, + "total": 813 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 65, + "total": 65 }, "approved": { "tmMatch": 0, @@ -29588,9 +30095,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 10, - "total": 10 + "tmMatch": 154, + "default": 671, + "total": 825 }, "approvalCosts": { "tmMatch": 0, @@ -29602,37 +30109,37 @@ }, { "user": { - "id": 15133983, + "id": 15097865, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15133983/medium/37e9bec73f4e23ccbe0b7210de3779e5_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15097865/medium/274cfc0f3777b471761cd25e8c66e259_default.png", "preTranslated": 0, - "totalCosts": 29 + "totalCosts": 61 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "ur-PK", + "name": "Urdu (Pakistan)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 29 + "totalCosts": 61 }, "translated": { "tmMatch": 0, - "default": 29, - "total": 29 + "default": 61, + "total": 61 }, "targetTranslated": { "tmMatch": 0, - "default": 35, - "total": 35 + "default": 84, + "total": 84 }, "translatedByMt": { "tmMatch": 0, - "default": 24, - "total": 24 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -29641,8 +30148,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 29, - "total": 29 + "default": 61, + "total": 61 }, "approvalCosts": { "tmMatch": 0, @@ -29654,99 +30161,47 @@ }, { "user": { - "id": 14271416, + "id": 14180423, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14271416/medium/a1a5307ba8bfe470df5fc923a91f59a3_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14180423/medium/e1a996c9fe2798a7a46d65adcc50d6e7_default.png", "preTranslated": 0, - "totalCosts": 215 + "totalCosts": 122 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "bn", + "name": "Bengali", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 215 + "totalCosts": 122 }, "translated": { - "tmMatch": 116, - "default": 99, - "total": 215 + "tmMatch": 95, + "default": 27, + "total": 122 }, "targetTranslated": { - "tmMatch": 121, - "default": 112, - "total": 233 + "tmMatch": 197, + "default": 69, + "total": 266 }, "translatedByMt": { - "tmMatch": 1, - "default": 10, - "total": 11 - }, - "approved": { "tmMatch": 0, "default": 0, "total": 0 }, - "translationCosts": { - "tmMatch": 116, - "default": 99, - "total": 215 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 14974527, - "username": "REMOVED_USER", - "fullName": "REMOVED_USER", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14974527/medium/2875087239dbb983b10890fe3251c465_default.png", - "preTranslated": 0, - "totalCosts": 24 - }, - "languages": [ - { - "language": { - "id": "de", - "name": "German", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 24 - }, - "translated": { - "tmMatch": 0, - "default": 24, - "total": 24 - }, - "targetTranslated": { - "tmMatch": 0, - "default": 29, - "total": 29 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 9, - "total": 9 - }, "approved": { "tmMatch": 0, "default": 0, "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 24, - "total": 24 + "tmMatch": 95, + "default": 27, + "total": 122 }, "approvalCosts": { "tmMatch": 0, @@ -29862,37 +30317,89 @@ }, { "user": { - "id": 14775416, + "id": 14086827, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14775416/medium/098376c965039521a2b10c70b3a215c0_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14086827/medium/f8c6a14ce0c8b533534db75005bfc052_default.png", "preTranslated": 0, - "totalCosts": 7 + "totalCosts": 1646 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 7 + "totalCosts": 1646 }, "translated": { - "tmMatch": 3, - "default": 4, - "total": 7 + "tmMatch": 112, + "default": 1534, + "total": 1646 }, "targetTranslated": { - "tmMatch": 4, - "default": 6, - "total": 10 + "tmMatch": 132, + "default": 1682, + "total": 1814 }, "translatedByMt": { + "tmMatch": 7, + "default": 553, + "total": 560 + }, + "approved": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 112, + "default": 1534, + "total": 1646 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 15130283, + "username": "REMOVED_USER", + "fullName": "REMOVED_USER", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15130283/medium/11a0d021f765c8c3e05676b0fa48225c_default.png", + "preTranslated": 0, + "totalCosts": 6328 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 6328 + }, + "translated": { + "tmMatch": 324, + "default": 6004, + "total": 6328 + }, + "targetTranslated": { + "tmMatch": 351, + "default": 5990, + "total": 6341 + }, + "translatedByMt": { + "tmMatch": 2, + "default": 1308, + "total": 1310 }, "approved": { "tmMatch": 0, @@ -29900,9 +30407,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 4, - "total": 7 + "tmMatch": 324, + "default": 6004, + "total": 6328 }, "approvalCosts": { "tmMatch": 0, @@ -29914,19 +30421,19 @@ }, { "user": { - "id": 13887845, + "id": 14799822, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13887845/medium/6275f1224ad528dab501ee356e6e4527_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14799822/medium/e6cde770b05f575eae9acaead53c8030_default.png", "preTranslated": 0, "totalCosts": 205 }, "languages": [ { "language": { - "id": "fa", - "name": "Persian", + "id": "vi", + "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, "totalCosts": 205 @@ -29937,9 +30444,9 @@ "total": 205 }, "targetTranslated": { - "tmMatch": 4, - "default": 220, - "total": 224 + "tmMatch": 8, + "default": 254, + "total": 262 }, "translatedByMt": { "tmMatch": 0, @@ -29966,13 +30473,13 @@ }, { "user": { - "id": 14718106, + "id": 15262168, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14718106/medium/e12c965c90d383b40b1add01b6bd79f2_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15262168/medium/2e0ec17fe3b2c53981b5ea76db07aedd_default.png", "preTranslated": 0, - "totalCosts": 416 + "totalCosts": 47 }, "languages": [ { @@ -29981,22 +30488,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 416 + "totalCosts": 47 }, "translated": { - "tmMatch": 14, - "default": 402, - "total": 416 + "tmMatch": 0, + "default": 47, + "total": 47 }, "targetTranslated": { - "tmMatch": 15, - "default": 365, - "total": 380 + "tmMatch": 0, + "default": 60, + "total": 60 }, "translatedByMt": { - "tmMatch": 9, - "default": 312, - "total": 321 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -30004,9 +30511,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 14, - "default": 402, - "total": 416 + "tmMatch": 0, + "default": 47, + "total": 47 }, "approvalCosts": { "tmMatch": 0, @@ -30018,47 +30525,99 @@ }, { "user": { - "id": 13992969, + "id": 14634606, "username": "REMOVED_USER", "fullName": "REMOVED_USER", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13992969/medium/680c9dcc9bdc7ed58b74ee77b90b2e7a_default.png", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14634606/medium/0278903861ea616720e6703397ad8e0c_default.png", "preTranslated": 0, - "totalCosts": 309 + "totalCosts": 44 }, "languages": [ { "language": { - "id": "el", - "name": "Greek", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 309 + "totalCosts": 44 }, "translated": { - "tmMatch": 12, - "default": 297, - "total": 309 + "tmMatch": 0, + "default": 44, + "total": 44 }, "targetTranslated": { - "tmMatch": 14, - "default": 336, - "total": 350 + "tmMatch": 0, + "default": 55, + "total": 55 }, "translatedByMt": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 44, + "total": 44 + }, + "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 + } + } + ] + }, + { + "user": { + "id": 14623014, + "username": "REMOVED_USER", + "fullName": "REMOVED_USER", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14623014/medium/4466ac6bde24a38e0004586621172d10_default.png", + "preTranslated": 0, + "totalCosts": 135 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 135 + }, + "translated": { + "tmMatch": 2, + "default": 133, + "total": 135 + }, + "targetTranslated": { + "tmMatch": 3, + "default": 165, + "total": 168 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 73, + "total": 73 }, "approved": { "tmMatch": 0, "default": 0, - "total": 1113 + "total": 0 }, "translationCosts": { - "tmMatch": 12, - "default": 297, - "total": 309 + "tmMatch": 2, + "default": 133, + "total": 135 }, "approvalCosts": { "tmMatch": 0, @@ -30070,32 +30629,136 @@ }, { "user": { - "id": 13994593, + "id": 14271416, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13994593/medium/9338c2dd21dcb47daa7e39f735592deb_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14271416/medium/a1a5307ba8bfe470df5fc923a91f59a3_default.png", "preTranslated": 0, - "totalCosts": 76 + "totalCosts": 215 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 76 + "totalCosts": 215 }, "translated": { + "tmMatch": 116, + "default": 99, + "total": 215 + }, + "targetTranslated": { + "tmMatch": 121, + "default": 112, + "total": 233 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 10, + "total": 11 + }, + "approved": { "tmMatch": 0, - "default": 76, - "total": 76 + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 116, + "default": 99, + "total": 215 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 14695278, + "username": "REMOVED_USER", + "fullName": "REMOVED_USER", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14695278/medium/edbb9fea221918fb2623c5a450077be0_default.png", + "preTranslated": 0, + "totalCosts": 16 + }, + "languages": [ + { + "language": { + "id": "de", + "name": "German", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 16 + }, + "translated": { + "tmMatch": 2, + "default": 14, + "total": 16 }, "targetTranslated": { + "tmMatch": 2, + "default": 12, + "total": 14 + }, + "translatedByMt": { "tmMatch": 0, - "default": 72, - "total": 72 + "default": 12, + "total": 12 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 14, + "total": 16 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 14574530, + "username": "REMOVED_USER", + "fullName": "REMOVED_USER", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14574530/medium/77023b2df20b1d8f10ca1a8811dc816c_default.png", + "preTranslated": 0, + "totalCosts": 4 + }, + "languages": [ + { + "language": { + "id": "zh-TW", + "name": "Chinese Traditional", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 4 + }, + "translated": { + "tmMatch": 4, + "default": 0, + "total": 4 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 0, + "total": 4 }, "translatedByMt": { "tmMatch": 0, @@ -30108,9 +30771,61 @@ "total": 0 }, "translationCosts": { + "tmMatch": 4, + "default": 0, + "total": 4 + }, + "approvalCosts": { "tmMatch": 0, - "default": 76, - "total": 76 + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 14974527, + "username": "REMOVED_USER", + "fullName": "REMOVED_USER", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14974527/medium/2875087239dbb983b10890fe3251c465_default.png", + "preTranslated": 0, + "totalCosts": 24 + }, + "languages": [ + { + "language": { + "id": "de", + "name": "German", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 24 + }, + "translated": { + "tmMatch": 0, + "default": 24, + "total": 24 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 29, + "total": 29 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 9, + "total": 9 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 24, + "total": 24 }, "approvalCosts": { "tmMatch": 0, @@ -30122,37 +30837,37 @@ }, { "user": { - "id": 14634606, + "id": 14759260, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14634606/medium/0278903861ea616720e6703397ad8e0c_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14759260/medium/ffdb80891e630e2360902002141ce1e9_default.png", "preTranslated": 0, - "totalCosts": 44 + "totalCosts": 3 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "el", + "name": "Greek", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 44 + "totalCosts": 3 }, "translated": { "tmMatch": 0, - "default": 44, - "total": 44 + "default": 3, + "total": 3 }, "targetTranslated": { "tmMatch": 0, - "default": 55, - "total": 55 + "default": 6, + "total": 6 }, "translatedByMt": { "tmMatch": 0, - "default": 10, - "total": 10 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -30161,8 +30876,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 44, - "total": 44 + "default": 3, + "total": 3 }, "approvalCosts": { "tmMatch": 0, @@ -30174,37 +30889,37 @@ }, { "user": { - "id": 14726400, + "id": 15132329, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14726400/medium/e4d5b2e85562bf1d089805be9379c250_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15132329/medium/445d08f58d8572d5b5dc7886ecb89c56_default.png", "preTranslated": 0, - "totalCosts": 1423 + "totalCosts": 15 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1423 + "totalCosts": 15 }, "translated": { - "tmMatch": 55, - "default": 1368, - "total": 1423 + "tmMatch": 0, + "default": 15, + "total": 15 }, "targetTranslated": { - "tmMatch": 56, - "default": 1299, - "total": 1355 + "tmMatch": 0, + "default": 17, + "total": 17 }, "translatedByMt": { - "tmMatch": 1, - "default": 135, - "total": 136 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -30212,9 +30927,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 55, - "default": 1368, - "total": 1423 + "tmMatch": 0, + "default": 15, + "total": 15 }, "approvalCosts": { "tmMatch": 0, @@ -30226,37 +30941,37 @@ }, { "user": { - "id": 15087623, + "id": 14775416, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15087623/medium/8caa3a0fb762e8d85d6826b58ec2531c_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14775416/medium/098376c965039521a2b10c70b3a215c0_default.png", "preTranslated": 0, - "totalCosts": 907 + "totalCosts": 7 }, "languages": [ { "language": { - "id": "ar", - "name": "Arabic", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 907 + "totalCosts": 7 }, "translated": { - "tmMatch": 27, - "default": 880, - "total": 907 + "tmMatch": 3, + "default": 4, + "total": 7 }, "targetTranslated": { - "tmMatch": 29, - "default": 801, - "total": 830 + "tmMatch": 4, + "default": 6, + "total": 10 }, "translatedByMt": { - "tmMatch": 6, - "default": 214, - "total": 220 + "tmMatch": 0, + "default": 4, + "total": 4 }, "approved": { "tmMatch": 0, @@ -30264,9 +30979,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 27, - "default": 880, - "total": 907 + "tmMatch": 3, + "default": 4, + "total": 7 }, "approvalCosts": { "tmMatch": 0, @@ -30278,32 +30993,32 @@ }, { "user": { - "id": 14728440, + "id": 14671048, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14728440/medium/8059e7b71182aedefb20c3c37277035a_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14671048/medium/4b499fdf3ebdaed56f61174f958db54f_default.png", "preTranslated": 0, - "totalCosts": 26 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "ta", - "name": "Tamil", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 26 + "totalCosts": 1 }, "translated": { - "tmMatch": 8, - "default": 18, - "total": 26 + "tmMatch": 0, + "default": 1, + "total": 1 }, "targetTranslated": { - "tmMatch": 23, - "default": 43, - "total": 66 + "tmMatch": 0, + "default": 113, + "total": 113 }, "translatedByMt": { "tmMatch": 0, @@ -30316,9 +31031,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 18, - "total": 26 + "tmMatch": 0, + "default": 1, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -30382,37 +31097,37 @@ }, { "user": { - "id": 13878813, + "id": 14728440, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13878813/medium/c83a9f07779bb2686a04165ce63b6114_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14728440/medium/8059e7b71182aedefb20c3c37277035a_default.png", "preTranslated": 0, - "totalCosts": 602 + "totalCosts": 26 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "ta", + "name": "Tamil", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 602 + "totalCosts": 26 }, "translated": { - "tmMatch": 572, - "default": 30, - "total": 602 + "tmMatch": 8, + "default": 18, + "total": 26 }, "targetTranslated": { - "tmMatch": 515, - "default": 30, - "total": 545 + "tmMatch": 23, + "default": 43, + "total": 66 }, "translatedByMt": { - "tmMatch": 6, + "tmMatch": 0, "default": 0, - "total": 6 + "total": 0 }, "approved": { "tmMatch": 0, @@ -30420,9 +31135,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 572, - "default": 30, - "total": 602 + "tmMatch": 8, + "default": 18, + "total": 26 }, "approvalCosts": { "tmMatch": 0, @@ -30434,37 +31149,37 @@ }, { "user": { - "id": 14543516, + "id": 15094061, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14543516/medium/cae3f125866f087cbd41c943e500dbc6_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15094061/medium/281b10239e6f907197d6d7abbd7c6c2e_default.png", "preTranslated": 0, - "totalCosts": 148 + "totalCosts": 167 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 148 + "totalCosts": 167 }, "translated": { - "tmMatch": 5, - "default": 143, - "total": 148 + "tmMatch": 15, + "default": 152, + "total": 167 }, "targetTranslated": { - "tmMatch": 6, - "default": 94, - "total": 100 + "tmMatch": 18, + "default": 170, + "total": 188 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 126, + "total": 126 }, "approved": { "tmMatch": 0, @@ -30472,9 +31187,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 143, - "total": 148 + "tmMatch": 15, + "default": 152, + "total": 167 }, "approvalCosts": { "tmMatch": 0, @@ -30486,37 +31201,37 @@ }, { "user": { - "id": 14581570, + "id": 14756100, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14581570/medium/1cceb14f6487b0e8cd795e72b434656a_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14756100/medium/75ce2754e30ef112ab7edbcdecfa5664_default.png", "preTranslated": 0, - "totalCosts": 1 + "totalCosts": 32 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 32 }, "translated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 0, + "default": 32, + "total": 32 }, "targetTranslated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 0, + "default": 36, + "total": 36 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 6, + "total": 6 }, "approved": { "tmMatch": 0, @@ -30524,9 +31239,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 0, + "default": 32, + "total": 32 }, "approvalCosts": { "tmMatch": 0, @@ -30538,37 +31253,37 @@ }, { "user": { - "id": 14698688, + "id": 13878813, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14698688/medium/35cff4c27844e4a4b20d204a85955184_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13878813/medium/c83a9f07779bb2686a04165ce63b6114_default.png", "preTranslated": 0, - "totalCosts": 381 + "totalCosts": 602 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 381 + "totalCosts": 602 }, "translated": { - "tmMatch": 5, - "default": 376, - "total": 381 + "tmMatch": 572, + "default": 30, + "total": 602 }, "targetTranslated": { - "tmMatch": 7, - "default": 379, - "total": 386 + "tmMatch": 515, + "default": 30, + "total": 545 }, "translatedByMt": { - "tmMatch": 0, - "default": 145, - "total": 145 + "tmMatch": 6, + "default": 0, + "total": 6 }, "approved": { "tmMatch": 0, @@ -30576,9 +31291,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 376, - "total": 381 + "tmMatch": 572, + "default": 30, + "total": 602 }, "approvalCosts": { "tmMatch": 0, @@ -30590,37 +31305,37 @@ }, { "user": { - "id": 14903462, + "id": 14332116, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14903462/medium/6742c78a316d368b0cd6ec8e8afadaa7_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14332116/medium/55e7a2f384e77a129075ec10a878ea54_default.png", "preTranslated": 0, - "totalCosts": 825 + "totalCosts": 100 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 825 + "totalCosts": 100 }, "translated": { - "tmMatch": 154, - "default": 671, - "total": 825 + "tmMatch": 69, + "default": 31, + "total": 100 }, "targetTranslated": { - "tmMatch": 160, - "default": 653, - "total": 813 + "tmMatch": 70, + "default": 27, + "total": 97 }, "translatedByMt": { - "tmMatch": 0, - "default": 65, - "total": 65 + "tmMatch": 44, + "default": 0, + "total": 44 }, "approved": { "tmMatch": 0, @@ -30628,9 +31343,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 154, - "default": 671, - "total": 825 + "tmMatch": 69, + "default": 31, + "total": 100 }, "approvalCosts": { "tmMatch": 0, @@ -30642,37 +31357,37 @@ }, { "user": { - "id": 14695278, + "id": 13887845, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14695278/medium/edbb9fea221918fb2623c5a450077be0_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13887845/medium/6275f1224ad528dab501ee356e6e4527_default.png", "preTranslated": 0, - "totalCosts": 16 + "totalCosts": 205 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "fa", + "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 16 + "totalCosts": 205 }, "translated": { - "tmMatch": 2, - "default": 14, - "total": 16 + "tmMatch": 4, + "default": 201, + "total": 205 }, "targetTranslated": { - "tmMatch": 2, - "default": 12, - "total": 14 + "tmMatch": 4, + "default": 220, + "total": 224 }, "translatedByMt": { "tmMatch": 0, - "default": 12, - "total": 12 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -30680,9 +31395,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 14, - "total": 16 + "tmMatch": 4, + "default": 201, + "total": 205 }, "approvalCosts": { "tmMatch": 0, @@ -30694,37 +31409,37 @@ }, { "user": { - "id": 14562648, + "id": 15095663, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14562648/medium/be92f5ba98faf4108b2d12a425b12614_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15095663/medium/138e9cc622bae5c6233bcbd43607ac2e_default.png", "preTranslated": 0, - "totalCosts": 2 + "totalCosts": 332 }, "languages": [ { "language": { - "id": "sv-SE", - "name": "Swedish", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 332 }, "translated": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 1, + "default": 331, + "total": 332 }, "targetTranslated": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 1, + "default": 285, + "total": 286 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 215, + "total": 216 }, "approved": { "tmMatch": 0, @@ -30732,9 +31447,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 1, + "default": 331, + "total": 332 }, "approvalCosts": { "tmMatch": 0, @@ -30746,13 +31461,13 @@ }, { "user": { - "id": 15094061, + "id": 14565546, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15094061/medium/281b10239e6f907197d6d7abbd7c6c2e_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14565546/medium/94a5c2fe3866f519839581548e28db22_default.png", "preTranslated": 0, - "totalCosts": 167 + "totalCosts": 20 }, "languages": [ { @@ -30761,22 +31476,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 167 + "totalCosts": 20 }, "translated": { - "tmMatch": 15, - "default": 152, - "total": 167 + "tmMatch": 2, + "default": 18, + "total": 20 }, "targetTranslated": { - "tmMatch": 18, - "default": 170, - "total": 188 + "tmMatch": 2, + "default": 25, + "total": 27 }, "translatedByMt": { "tmMatch": 0, - "default": 126, - "total": 126 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -30784,9 +31499,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 15, - "default": 152, - "total": 167 + "tmMatch": 2, + "default": 18, + "total": 20 }, "approvalCosts": { "tmMatch": 0, @@ -30798,37 +31513,37 @@ }, { "user": { - "id": 14147457, + "id": 14581570, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14147457/medium/967be158de3d00e0b8f264b8d1187a6e_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14581570/medium/1cceb14f6487b0e8cd795e72b434656a_default.png", "preTranslated": 0, - "totalCosts": 11 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "pl", - "name": "Polish", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 11 + "totalCosts": 1 }, "translated": { - "tmMatch": 0, - "default": 11, - "total": 11 + "tmMatch": 1, + "default": 0, + "total": 1 }, "targetTranslated": { - "tmMatch": 0, - "default": 16, - "total": 16 + "tmMatch": 1, + "default": 0, + "total": 1 }, "translatedByMt": { "tmMatch": 0, - "default": 10, - "total": 10 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -30836,9 +31551,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 11, - "total": 11 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -30902,37 +31617,37 @@ }, { "user": { - "id": 15095663, + "id": 14698688, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15095663/medium/138e9cc622bae5c6233bcbd43607ac2e_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14698688/medium/35cff4c27844e4a4b20d204a85955184_default.png", "preTranslated": 0, - "totalCosts": 332 + "totalCosts": 381 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 332 + "totalCosts": 381 }, "translated": { - "tmMatch": 1, - "default": 331, - "total": 332 + "tmMatch": 5, + "default": 376, + "total": 381 }, "targetTranslated": { - "tmMatch": 1, - "default": 285, - "total": 286 + "tmMatch": 7, + "default": 379, + "total": 386 }, "translatedByMt": { - "tmMatch": 1, - "default": 215, - "total": 216 + "tmMatch": 0, + "default": 145, + "total": 145 }, "approved": { "tmMatch": 0, @@ -30940,9 +31655,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 331, - "total": 332 + "tmMatch": 5, + "default": 376, + "total": 381 }, "approvalCosts": { "tmMatch": 0, @@ -30954,13 +31669,13 @@ }, { "user": { - "id": 14673820, + "id": 14674448, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14673820/medium/bf7953eacf85bdaa67186b7ab3b04e69_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14674448/medium/dd51469de6677a7c47335f7be75fb723_default.png", "preTranslated": 0, - "totalCosts": 1 + "totalCosts": 3 }, "languages": [ { @@ -30969,17 +31684,17 @@ "name": "Malay", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 3 }, "translated": { - "tmMatch": 0, - "default": 1, - "total": 1 + "tmMatch": 3, + "default": 0, + "total": 3 }, "targetTranslated": { - "tmMatch": 0, - "default": 1, - "total": 1 + "tmMatch": 4, + "default": 0, + "total": 4 }, "translatedByMt": { "tmMatch": 0, @@ -30992,9 +31707,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 1, - "total": 1 + "tmMatch": 3, + "default": 0, + "total": 3 }, "approvalCosts": { "tmMatch": 0, @@ -31006,32 +31721,32 @@ }, { "user": { - "id": 15097865, + "id": 14052846, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15097865/medium/274cfc0f3777b471761cd25e8c66e259_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14052846/medium/8e5aee394126f8d7e5c0f83f4d05b0af_default.png", "preTranslated": 0, - "totalCosts": 61 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "ur-PK", - "name": "Urdu (Pakistan)", + "id": "hu", + "name": "Hungarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 61 + "totalCosts": 2 }, "translated": { - "tmMatch": 0, - "default": 61, - "total": 61 + "tmMatch": 1, + "default": 1, + "total": 2 }, "targetTranslated": { - "tmMatch": 0, - "default": 84, - "total": 84 + "tmMatch": 1, + "default": 1, + "total": 2 }, "translatedByMt": { "tmMatch": 0, @@ -31044,9 +31759,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 61, - "total": 61 + "tmMatch": 1, + "default": 1, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -31058,32 +31773,32 @@ }, { "user": { - "id": 14671048, + "id": 14543516, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14671048/medium/4b499fdf3ebdaed56f61174f958db54f_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14543516/medium/cae3f125866f087cbd41c943e500dbc6_default.png", "preTranslated": 0, - "totalCosts": 1 + "totalCosts": 148 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 148 }, "translated": { - "tmMatch": 0, - "default": 1, - "total": 1 + "tmMatch": 5, + "default": 143, + "total": 148 }, "targetTranslated": { - "tmMatch": 0, - "default": 113, - "total": 113 + "tmMatch": 6, + "default": 94, + "total": 100 }, "translatedByMt": { "tmMatch": 0, @@ -31096,9 +31811,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 1, - "total": 1 + "tmMatch": 5, + "default": 143, + "total": 148 }, "approvalCosts": { "tmMatch": 0, @@ -31110,32 +31825,32 @@ }, { "user": { - "id": 14799822, + "id": 14759682, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14799822/medium/e6cde770b05f575eae9acaead53c8030_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14759682/medium/1334743fe037d9694e78f5f4e638a1de_default.png", "preTranslated": 0, - "totalCosts": 205 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "vi", - "name": "Vietnamese", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 205 + "totalCosts": 1 }, "translated": { - "tmMatch": 4, - "default": 201, - "total": 205 + "tmMatch": 1, + "default": 0, + "total": 1 }, "targetTranslated": { - "tmMatch": 8, - "default": 254, - "total": 262 + "tmMatch": 1, + "default": 0, + "total": 1 }, "translatedByMt": { "tmMatch": 0, @@ -31148,9 +31863,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 201, - "total": 205 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -31162,37 +31877,37 @@ }, { "user": { - "id": 14086827, + "id": 14726400, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14086827/medium/f8c6a14ce0c8b533534db75005bfc052_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14726400/medium/e4d5b2e85562bf1d089805be9379c250_default.png", "preTranslated": 0, - "totalCosts": 1646 + "totalCosts": 1423 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1646 + "totalCosts": 1423 }, "translated": { - "tmMatch": 112, - "default": 1534, - "total": 1646 + "tmMatch": 55, + "default": 1368, + "total": 1423 }, "targetTranslated": { - "tmMatch": 132, - "default": 1682, - "total": 1814 + "tmMatch": 56, + "default": 1299, + "total": 1355 }, "translatedByMt": { - "tmMatch": 7, - "default": 553, - "total": 560 + "tmMatch": 1, + "default": 135, + "total": 136 }, "approved": { "tmMatch": 0, @@ -31200,9 +31915,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 112, - "default": 1534, - "total": 1646 + "tmMatch": 55, + "default": 1368, + "total": 1423 }, "approvalCosts": { "tmMatch": 0, @@ -31214,37 +31929,37 @@ }, { "user": { - "id": 14623014, + "id": 14147457, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14623014/medium/4466ac6bde24a38e0004586621172d10_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14147457/medium/967be158de3d00e0b8f264b8d1187a6e_default.png", "preTranslated": 0, - "totalCosts": 135 + "totalCosts": 11 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 135 + "totalCosts": 11 }, "translated": { - "tmMatch": 2, - "default": 133, - "total": 135 + "tmMatch": 0, + "default": 11, + "total": 11 }, "targetTranslated": { - "tmMatch": 3, - "default": 165, - "total": 168 + "tmMatch": 0, + "default": 16, + "total": 16 }, "translatedByMt": { "tmMatch": 0, - "default": 73, - "total": 73 + "default": 10, + "total": 10 }, "approved": { "tmMatch": 0, @@ -31252,9 +31967,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 133, - "total": 135 + "tmMatch": 0, + "default": 11, + "total": 11 }, "approvalCosts": { "tmMatch": 0, @@ -31266,37 +31981,37 @@ }, { "user": { - "id": 14756100, + "id": 14763978, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14756100/medium/75ce2754e30ef112ab7edbcdecfa5664_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14763978/medium/a0c64ad62688786614df1aa310da9fa5_default.png", "preTranslated": 0, - "totalCosts": 32 + "totalCosts": 262 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 32 + "totalCosts": 262 }, "translated": { - "tmMatch": 0, - "default": 32, - "total": 32 + "tmMatch": 3, + "default": 259, + "total": 262 }, "targetTranslated": { - "tmMatch": 0, - "default": 36, - "total": 36 + "tmMatch": 3, + "default": 252, + "total": 255 }, "translatedByMt": { "tmMatch": 0, - "default": 6, - "total": 6 + "default": 68, + "total": 68 }, "approved": { "tmMatch": 0, @@ -31304,9 +32019,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 32, - "total": 32 + "tmMatch": 3, + "default": 259, + "total": 262 }, "approvalCosts": { "tmMatch": 0, @@ -31318,37 +32033,37 @@ }, { "user": { - "id": 15132329, + "id": 15133983, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15132329/medium/445d08f58d8572d5b5dc7886ecb89c56_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15133983/medium/37e9bec73f4e23ccbe0b7210de3779e5_default.png", "preTranslated": 0, - "totalCosts": 15 + "totalCosts": 29 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 15 + "totalCosts": 29 }, "translated": { "tmMatch": 0, - "default": 15, - "total": 15 + "default": 29, + "total": 29 }, "targetTranslated": { "tmMatch": 0, - "default": 17, - "total": 17 + "default": 35, + "total": 35 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 24, + "total": 24 }, "approved": { "tmMatch": 0, @@ -31357,8 +32072,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 15, - "total": 15 + "default": 29, + "total": 29 }, "approvalCosts": { "tmMatch": 0, @@ -31370,37 +32085,37 @@ }, { "user": { - "id": 15130283, + "id": 15137952, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15130283/medium/11a0d021f765c8c3e05676b0fa48225c_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137952/medium/75885c80c3b3eb3993f78261ca2dcf8b_default.png", "preTranslated": 0, - "totalCosts": 6328 + "totalCosts": 20 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6328 + "totalCosts": 20 }, "translated": { - "tmMatch": 324, - "default": 6004, - "total": 6328 + "tmMatch": 11, + "default": 9, + "total": 20 }, "targetTranslated": { - "tmMatch": 351, - "default": 5990, - "total": 6341 + "tmMatch": 8, + "default": 9, + "total": 17 }, "translatedByMt": { - "tmMatch": 2, - "default": 1308, - "total": 1310 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -31408,9 +32123,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 324, - "default": 6004, - "total": 6328 + "tmMatch": 11, + "default": 9, + "total": 20 }, "approvalCosts": { "tmMatch": 0, @@ -31422,32 +32137,32 @@ }, { "user": { - "id": 14180423, + "id": 15039177, "username": "REMOVED_USER", "fullName": "REMOVED_USER", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14180423/medium/e1a996c9fe2798a7a46d65adcc50d6e7_default.png", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15039177/medium/92c1f93061fe53532e0e4665a992e62d_default.png", "preTranslated": 0, - "totalCosts": 122 + "totalCosts": 10 }, "languages": [ { "language": { - "id": "bn", - "name": "Bengali", + "id": "bg", + "name": "Bulgarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 122 + "totalCosts": 10 }, "translated": { - "tmMatch": 95, - "default": 27, - "total": 122 + "tmMatch": 0, + "default": 10, + "total": 10 }, "targetTranslated": { - "tmMatch": 197, - "default": 69, - "total": 266 + "tmMatch": 0, + "default": 8, + "total": 8 }, "translatedByMt": { "tmMatch": 0, @@ -31460,9 +32175,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 95, - "default": 27, - "total": 122 + "tmMatch": 0, + "default": 10, + "total": 10 }, "approvalCosts": { "tmMatch": 0, @@ -31474,37 +32189,37 @@ }, { "user": { - "id": 14759260, + "id": 15087623, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14759260/medium/ffdb80891e630e2360902002141ce1e9_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15087623/medium/8caa3a0fb762e8d85d6826b58ec2531c_default.png", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 907 }, "languages": [ { "language": { - "id": "el", - "name": "Greek", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 907 }, "translated": { - "tmMatch": 0, - "default": 3, - "total": 3 + "tmMatch": 27, + "default": 880, + "total": 907 }, "targetTranslated": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 29, + "default": 801, + "total": 830 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 6, + "default": 214, + "total": 220 }, "approved": { "tmMatch": 0, @@ -31512,9 +32227,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 3, - "total": 3 + "tmMatch": 27, + "default": 880, + "total": 907 }, "approvalCosts": { "tmMatch": 0, @@ -31526,37 +32241,37 @@ }, { "user": { - "id": 14759682, + "id": 14718106, "username": "REMOVED_USER", "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14759682/medium/1334743fe037d9694e78f5f4e638a1de_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14718106/medium/e12c965c90d383b40b1add01b6bd79f2_default.png", "preTranslated": 0, - "totalCosts": 1 + "totalCosts": 416 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 416 }, "translated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 14, + "default": 402, + "total": 416 }, "targetTranslated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 15, + "default": 365, + "total": 380 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 9, + "default": 312, + "total": 321 }, "approved": { "tmMatch": 0, @@ -31564,9 +32279,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 14, + "default": 402, + "total": 416 }, "approvalCosts": { "tmMatch": 0, @@ -32408,6 +33123,58 @@ } ] }, + { + "user": { + "id": 15259990, + "username": "Richard1974", + "fullName": "Richard1974", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15259990/medium/0d8b52e9be147119030973956fbcf99a_default.png", + "preTranslated": 0, + "totalCosts": 107 + }, + "languages": [ + { + "language": { + "id": "ko", + "name": "Korean", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 107 + }, + "translated": { + "tmMatch": 1, + "default": 106, + "total": 107 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 86, + "total": 88 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 106, + "total": 107 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14848120, @@ -33851,6 +34618,58 @@ } ] }, + { + "user": { + "id": 15272926, + "username": "ShawnZeng", + "fullName": "ShawnZeng", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15272926/medium/f024abfd326c405a000100d965139729_default.png", + "preTranslated": 0, + "totalCosts": 13 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 13 + }, + "translated": { + "tmMatch": 9, + "default": 4, + "total": 13 + }, + "targetTranslated": { + "tmMatch": 16, + "default": 8, + "total": 24 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 9, + "default": 4, + "total": 13 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14690126, @@ -34119,7 +34938,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15163680/medium/9fd320be027266a173f4f0176f21dc7e_default.png", "preTranslated": 0, - "totalCosts": 4 + "totalCosts": 11 }, "languages": [ { @@ -34128,17 +34947,17 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 11 }, "translated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 11, + "total": 11 }, "targetTranslated": { "tmMatch": 0, - "default": 6, - "total": 6 + "default": 12, + "total": 12 }, "translatedByMt": { "tmMatch": 0, @@ -34152,8 +34971,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 11, + "total": 11 }, "approvalCosts": { "tmMatch": 0, @@ -34267,6 +35086,58 @@ } ] }, + { + "user": { + "id": 15263412, + "username": "Snyule", + "fullName": "Snyule", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15263412/medium/fc73ecb3f3d3a6d4b9e702d0ff5ae3d3_default.png", + "preTranslated": 0, + "totalCosts": 387 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 387 + }, + "translated": { + "tmMatch": 10, + "default": 377, + "total": 387 + }, + "targetTranslated": { + "tmMatch": 17, + "default": 437, + "total": 454 + }, + "translatedByMt": { + "tmMatch": 4, + "default": 4, + "total": 8 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 10, + "default": 377, + "total": 387 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14949549, @@ -34587,7 +35458,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14513016/medium/6dc941964ac63bc3d51926dc9fffa374.jpg", "preTranslated": 0, - "totalCosts": 159 + "totalCosts": 163 }, "languages": [ { @@ -34596,22 +35467,22 @@ "name": "Odia", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 159 + "totalCosts": 163 }, "translated": { - "tmMatch": 104, - "default": 55, - "total": 159 + "tmMatch": 105, + "default": 58, + "total": 163 }, "targetTranslated": { - "tmMatch": 117, - "default": 68, - "total": 185 + "tmMatch": 118, + "default": 74, + "total": 192 }, "translatedByMt": { - "tmMatch": 8, + "tmMatch": 9, "default": 0, - "total": 8 + "total": 9 }, "approved": { "tmMatch": 0, @@ -34619,9 +35490,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 104, - "default": 55, - "total": 159 + "tmMatch": 105, + "default": 58, + "total": 163 }, "approvalCosts": { "tmMatch": 0, @@ -35627,7 +36498,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15216098/medium/18cf5fa965fc5b04fff91071b4d8ce15_default.png", "preTranslated": 0, - "totalCosts": 108 + "totalCosts": 201 }, "languages": [ { @@ -35636,17 +36507,17 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 108 + "totalCosts": 201 }, "translated": { "tmMatch": 8, - "default": 100, - "total": 108 + "default": 193, + "total": 201 }, "targetTranslated": { "tmMatch": 8, - "default": 95, - "total": 103 + "default": 192, + "total": 200 }, "translatedByMt": { "tmMatch": 0, @@ -35660,8 +36531,8 @@ }, "translationCosts": { "tmMatch": 8, - "default": 100, - "total": 108 + "default": 193, + "total": 201 }, "approvalCosts": { "tmMatch": 0, @@ -35939,7 +36810,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14843078/medium/4fdb35b37819b2de36280beeef727d1d_default.png", "preTranslated": 0, - "totalCosts": 1718 + "totalCosts": 2623 }, "languages": [ { @@ -35948,17 +36819,17 @@ "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1718 + "totalCosts": 2623 }, "translated": { - "tmMatch": 45, - "default": 1673, - "total": 1718 + "tmMatch": 73, + "default": 2550, + "total": 2623 }, "targetTranslated": { - "tmMatch": 41, - "default": 1511, - "total": 1552 + "tmMatch": 69, + "default": 2300, + "total": 2369 }, "translatedByMt": { "tmMatch": 0, @@ -35971,9 +36842,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 45, - "default": 1673, - "total": 1718 + "tmMatch": 73, + "default": 2550, + "total": 2623 }, "approvalCosts": { "tmMatch": 0, @@ -36503,6 +37374,58 @@ } ] }, + { + "user": { + "id": 15261054, + "username": "Ustunol123", + "fullName": "Ustunol123", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15261054/medium/6ae9cd035968300694e8a375b1356e81_default.png", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "tr", + "name": "Turkish", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14746172, @@ -36667,7 +37590,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14681570/medium/3ed2f13f3a9383c0d3a23bd130df78d2_default.png", "preTranslated": 0, - "totalCosts": 42195 + "totalCosts": 42921 }, "languages": [ { @@ -36676,22 +37599,22 @@ "name": "Bulgarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 42195 + "totalCosts": 42921 }, "translated": { - "tmMatch": 1936, - "default": 40259, - "total": 42195 + "tmMatch": 1937, + "default": 40984, + "total": 42921 }, "targetTranslated": { - "tmMatch": 2069, - "default": 39637, - "total": 41706 + "tmMatch": 2070, + "default": 40385, + "total": 42455 }, "translatedByMt": { - "tmMatch": 37, + "tmMatch": 38, "default": 3, - "total": 40 + "total": 41 }, "approved": { "tmMatch": 0, @@ -36699,9 +37622,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1936, - "default": 40259, - "total": 42195 + "tmMatch": 1937, + "default": 40984, + "total": 42921 }, "approvalCosts": { "tmMatch": 0, @@ -37075,6 +37998,97 @@ } ] }, + { + "user": { + "id": 14514124, + "username": "ViktorOn", + "fullName": "ViktorOn", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png", + "preTranslated": 0, + "totalCosts": 41848 + }, + "languages": [ + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 41827 + }, + "translated": { + "tmMatch": 2805, + "default": 39022, + "total": 41827 + }, + "targetTranslated": { + "tmMatch": 2560, + "default": 34068, + "total": 36628 + }, + "translatedByMt": { + "tmMatch": 171, + "default": 1979, + "total": 2150 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2805, + "default": 39022, + "total": 41827 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "uk", + "name": "Ukrainian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 21 + }, + "translated": { + "tmMatch": 1, + "default": 20, + "total": 21 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 21, + "total": 22 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 20, + "total": 21 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14228166, @@ -37330,7 +38344,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15205992/medium/465c1df5cf56d2c9fc47af524525db21_default.png", "preTranslated": 0, - "totalCosts": 5 + "totalCosts": 2904 }, "languages": [ { @@ -37339,22 +38353,22 @@ "name": "Hindi", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 5 + "totalCosts": 2904 }, "translated": { - "tmMatch": 0, - "default": 5, - "total": 5 + "tmMatch": 10, + "default": 2894, + "total": 2904 }, "targetTranslated": { - "tmMatch": 0, - "default": 3, - "total": 3 + "tmMatch": 21, + "default": 4819, + "total": 4840 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 10, + "default": 1, + "total": 11 }, "approved": { "tmMatch": 0, @@ -37362,9 +38376,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 5, - "total": 5 + "tmMatch": 10, + "default": 2894, + "total": 2904 }, "approvalCosts": { "tmMatch": 0, @@ -37694,7 +38708,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13997401/medium/2ab4ff5d8770f710be0d12e4ec9f2123.png", "preTranslated": 0, - "totalCosts": 936 + "totalCosts": 5408 }, "languages": [ { @@ -37703,22 +38717,22 @@ "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 936 + "totalCosts": 5408 }, "translated": { - "tmMatch": 3, - "default": 933, - "total": 936 + "tmMatch": 366, + "default": 5042, + "total": 5408 }, "targetTranslated": { - "tmMatch": 3, - "default": 695, - "total": 698 + "tmMatch": 299, + "default": 3777, + "total": 4076 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 18, + "default": 4, + "total": 22 }, "approved": { "tmMatch": 0, @@ -37726,9 +38740,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 933, - "total": 936 + "tmMatch": 366, + "default": 5042, + "total": 5408 }, "approvalCosts": { "tmMatch": 0, @@ -39090,6 +40104,58 @@ } ] }, + { + "user": { + "id": 15265032, + "username": "a0101054", + "fullName": "a0101054", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15265032/medium/e0b578c29e2f7cc5313c1d36778a08ec_default.png", + "preTranslated": 0, + "totalCosts": 68 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 68 + }, + "translated": { + "tmMatch": 0, + "default": 68, + "total": 68 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 124, + "total": 124 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 68, + "total": 68 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14596176, @@ -39512,7 +40578,7 @@ "username": "ademaro", "fullName": "ademaro", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/26732/medium/cb710d7d7f0934a11e45da7d9f3dee36_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/26732/medium/54572acbca741eeb63ee9894174909b1.jpg", "preTranslated": 0, "totalCosts": 2 }, @@ -42374,7 +43440,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15159056/medium/a055cc2e6c5ab28d0ebcb99d0eec29e3_default.png", "preTranslated": 0, - "totalCosts": 945 + "totalCosts": 992 }, "languages": [ { @@ -42383,17 +43449,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 945 + "totalCosts": 992 }, "translated": { "tmMatch": 21, - "default": 924, - "total": 945 + "default": 971, + "total": 992 }, "targetTranslated": { "tmMatch": 28, - "default": 930, - "total": 958 + "default": 989, + "total": 1017 }, "translatedByMt": { "tmMatch": 0, @@ -42407,8 +43473,8 @@ }, "translationCosts": { "tmMatch": 21, - "default": 924, - "total": 945 + "default": 971, + "total": 992 }, "approvalCosts": { "tmMatch": 0, @@ -42894,7 +43960,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15213904/medium/117111831f2e742e9b8e8685f5fc38f7_default.png", "preTranslated": 0, - "totalCosts": 106 + "totalCosts": 251 }, "languages": [ { @@ -42903,22 +43969,22 @@ "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 106 + "totalCosts": 251 }, "translated": { - "tmMatch": 4, - "default": 102, - "total": 106 + "tmMatch": 7, + "default": 244, + "total": 251 }, "targetTranslated": { - "tmMatch": 4, - "default": 105, - "total": 109 + "tmMatch": 8, + "default": 229, + "total": 237 }, "translatedByMt": { - "tmMatch": 1, - "default": 21, - "total": 22 + "tmMatch": 4, + "default": 53, + "total": 57 }, "approved": { "tmMatch": 0, @@ -42926,9 +43992,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 102, - "total": 106 + "tmMatch": 7, + "default": 244, + "total": 251 }, "approvalCosts": { "tmMatch": 0, @@ -43354,6 +44420,58 @@ } ] }, + { + "user": { + "id": 15282510, + "username": "beychan", + "fullName": "beychan", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15282510/medium/309bf61e9bada7966a88a1b417f0c428_default.png", + "preTranslated": 0, + "totalCosts": 27 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 27 + }, + "translated": { + "tmMatch": 0, + "default": 27, + "total": 27 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 76, + "total": 76 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 27, + "total": 27 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14342808, @@ -43458,6 +44576,58 @@ } ] }, + { + "user": { + "id": 15293074, + "username": "biaggi888", + "fullName": "biaggi888", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293074/medium/65e0b01cfdb6524654e39feb02c50f2c_default.png", + "preTranslated": 0, + "totalCosts": 17 + }, + "languages": [ + { + "language": { + "id": "sq", + "name": "Albanian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 17 + }, + "translated": { + "tmMatch": 1, + "default": 16, + "total": 17 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 24, + "total": 28 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 16, + "total": 17 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14062736, @@ -43557,31 +44727,70 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242372/medium/23bf740e9d096ee0b3de7b9f5528c8c9.JPG", "preTranslated": 0, - "totalCosts": 1760 + "totalCosts": 5138 }, "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 371 + }, + "translated": { + "tmMatch": 0, + "default": 371, + "total": 371 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 589, + "total": 589 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 371, + "total": 371 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, { "language": { "id": "zh-TW", "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1758 + "totalCosts": 4765 }, "translated": { - "tmMatch": 2, - "default": 1756, - "total": 1758 + "tmMatch": 45, + "default": 4720, + "total": 4765 }, "targetTranslated": { - "tmMatch": 6, - "default": 3039, - "total": 3045 + "tmMatch": 77, + "default": 7921, + "total": 7998 }, "translatedByMt": { - "tmMatch": 1, + "tmMatch": 2, "default": 0, - "total": 1 + "total": 2 }, "approved": { "tmMatch": 0, @@ -43589,9 +44798,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 1756, - "total": 1758 + "tmMatch": 45, + "default": 4720, + "total": 4765 }, "approvalCosts": { "tmMatch": 0, @@ -44251,6 +45460,58 @@ } ] }, + { + "user": { + "id": 15280264, + "username": "budzako", + "fullName": "budzako", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15280264/medium/abba43c9c134494a85e713123d20f496_default.png", + "preTranslated": 0, + "totalCosts": 967 + }, + "languages": [ + { + "language": { + "id": "sk", + "name": "Slovak", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 967 + }, + "translated": { + "tmMatch": 10, + "default": 957, + "total": 967 + }, + "targetTranslated": { + "tmMatch": 13, + "default": 837, + "total": 850 + }, + "translatedByMt": { + "tmMatch": 4, + "default": 0, + "total": 4 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 10, + "default": 957, + "total": 967 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15166196, @@ -44563,6 +45824,58 @@ } ] }, + { + "user": { + "id": 15269576, + "username": "camolina", + "fullName": "camolina", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269576/medium/1a3566292dbbb3d62c42cba932c6509c_default.png", + "preTranslated": 0, + "totalCosts": 501 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 501 + }, + "translated": { + "tmMatch": 0, + "default": 501, + "total": 501 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 538, + "total": 538 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 38, + "total": 38 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 501, + "total": 501 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14707288, @@ -45915,6 +47228,58 @@ } ] }, + { + "user": { + "id": 15267594, + "username": "coolboylcy", + "fullName": "coolboylcy", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15267594/medium/eebade3a00e7375bce232552e84333c1_default.png", + "preTranslated": 0, + "totalCosts": 99 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 99 + }, + "translated": { + "tmMatch": 78, + "default": 21, + "total": 99 + }, + "targetTranslated": { + "tmMatch": 126, + "default": 40, + "total": 166 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 78, + "default": 21, + "total": 99 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14555382, @@ -49425,58 +50790,6 @@ } ] }, - { - "user": { - "id": 14807258, - "username": "fccxw", - "fullName": "fccxw", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14807258/medium/67b5a182d2d042f3ef1436a3b3137247_default.png", - "preTranslated": 0, - "totalCosts": 4 - }, - "languages": [ - { - "language": { - "id": "id", - "name": "Indonesian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 4 - }, - "translated": { - "tmMatch": 1, - "default": 3, - "total": 4 - }, - "targetTranslated": { - "tmMatch": 1, - "default": 6, - "total": 7 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 1, - "default": 3, - "total": 4 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 14958987, @@ -49587,7 +50900,7 @@ "username": "fez", "fullName": "fez", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15039555/medium/9381d764b136c7368f4e200c1de36d29.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15039555/medium/574205fdde5df5926c2052e94d7d9478.jpg", "preTranslated": 0, "totalCosts": 705 }, @@ -49880,6 +51193,58 @@ } ] }, + { + "user": { + "id": 15264510, + "username": "frapes", + "fullName": "frapes", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264510/medium/cc979a11f950f93531a26e1c4a7f2bf5_default.png", + "preTranslated": 0, + "totalCosts": 256 + }, + "languages": [ + { + "language": { + "id": "de", + "name": "German", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 256 + }, + "translated": { + "tmMatch": 4, + "default": 252, + "total": 256 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 241, + "total": 245 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 4, + "default": 252, + "total": 256 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15117007, @@ -50088,6 +51453,58 @@ } ] }, + { + "user": { + "id": 15255782, + "username": "fuliyuan_brian", + "fullName": "fuliyuan_brian", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15255782/medium/c33621c71c135ba33ed7936551dcbc03_default.png", + "preTranslated": 0, + "totalCosts": 10 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 10 + }, + "translated": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 17, + "total": 17 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15091777, @@ -50400,6 +51817,58 @@ } ] }, + { + "user": { + "id": 15271124, + "username": "gael.jggs", + "fullName": "gael.jggs", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271124/medium/40d1d2789aa8aa4e636b32dd7d925186_default.png", + "preTranslated": 0, + "totalCosts": 99 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 99 + }, + "translated": { + "tmMatch": 0, + "default": 99, + "total": 99 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 104, + "total": 104 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 14, + "total": 14 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 99, + "total": 99 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14598938, @@ -51115,6 +52584,58 @@ } ] }, + { + "user": { + "id": 15264472, + "username": "gmillan", + "fullName": "gmillan", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264472/medium/3a99aa3a16742c83778956464bd5d055_default.png", + "preTranslated": 0, + "totalCosts": 68 + }, + "languages": [ + { + "language": { + "id": "ca", + "name": "Catalan", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 68 + }, + "translated": { + "tmMatch": 0, + "default": 68, + "total": 68 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 62, + "total": 62 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 68, + "total": 68 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14338040, @@ -51271,6 +52792,58 @@ } ] }, + { + "user": { + "id": 15262046, + "username": "gpcito", + "fullName": "gpcito", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15262046/medium/f7822227b3408bb16ea6ea08d0ab5362_default.png", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 3, + "default": 0, + "total": 3 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14625410, @@ -52727,6 +54300,58 @@ } ] }, + { + "user": { + "id": 15281398, + "username": "iamwon", + "fullName": "iamwon", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15281398/medium/e6d2ec4003b9f3e73cb469226adceb77_default.png", + "preTranslated": 0, + "totalCosts": 104 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 104 + }, + "translated": { + "tmMatch": 0, + "default": 104, + "total": 104 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 145, + "total": 145 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 104, + "total": 104 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15117645, @@ -54243,7 +55868,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14657804/medium/005d9fa70fdc5a4fcd818f63cf61e1a0.jpg", "preTranslated": 0, - "totalCosts": 28771 + "totalCosts": 31846 }, "languages": [ { @@ -54252,22 +55877,22 @@ "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 28771 + "totalCosts": 31846 }, "translated": { - "tmMatch": 980, - "default": 27791, - "total": 28771 + "tmMatch": 2022, + "default": 29824, + "total": 31846 }, "targetTranslated": { - "tmMatch": 1024, - "default": 28189, - "total": 29213 + "tmMatch": 2068, + "default": 30257, + "total": 32325 }, "translatedByMt": { - "tmMatch": 74, - "default": 5081, - "total": 5155 + "tmMatch": 82, + "default": 5390, + "total": 5472 }, "approved": { "tmMatch": 0, @@ -54275,9 +55900,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 980, - "default": 27791, - "total": 28771 + "tmMatch": 2022, + "default": 29824, + "total": 31846 }, "approvalCosts": { "tmMatch": 0, @@ -54703,6 +56328,97 @@ } ] }, + { + "user": { + "id": 15258752, + "username": "joserrbv", + "fullName": "joserrbv", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15258752/medium/ec21ac21287dcdbd73ab57b6fb0dc50e_default.png", + "preTranslated": 0, + "totalCosts": 1214 + }, + "languages": [ + { + "language": { + "id": "hy-AM", + "name": "Armenian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 105 + }, + "translated": { + "tmMatch": 0, + "default": 105, + "total": 105 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 96, + "total": 96 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 105, + "total": 105 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1109 + }, + "translated": { + "tmMatch": 127, + "default": 982, + "total": 1109 + }, + "targetTranslated": { + "tmMatch": 146, + "default": 1002, + "total": 1148 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 72, + "total": 72 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 127, + "default": 982, + "total": 1109 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14588194, @@ -55023,7 +56739,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14050969/medium/f49104ea84ba3a57e31f1591aa35eeb7_default.png", "preTranslated": 0, - "totalCosts": 514 + "totalCosts": 539 }, "languages": [ { @@ -55032,17 +56748,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 514 + "totalCosts": 539 }, "translated": { - "tmMatch": 137, - "default": 377, - "total": 514 + "tmMatch": 143, + "default": 396, + "total": 539 }, "targetTranslated": { - "tmMatch": 151, - "default": 424, - "total": 575 + "tmMatch": 156, + "default": 454, + "total": 610 }, "translatedByMt": { "tmMatch": 1, @@ -55055,9 +56771,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 137, - "default": 377, - "total": 514 + "tmMatch": 143, + "default": 396, + "total": 539 }, "approvalCosts": { "tmMatch": 0, @@ -55535,6 +57251,58 @@ } ] }, + { + "user": { + "id": 15294248, + "username": "kempo17", + "fullName": "kempo17", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15294248/medium/5b2b23f53504fd6a13a351ee58209ec7_default.png", + "preTranslated": 0, + "totalCosts": 350 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 350 + }, + "translated": { + "tmMatch": 17, + "default": 333, + "total": 350 + }, + "targetTranslated": { + "tmMatch": 18, + "default": 382, + "total": 400 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 17, + "total": 17 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 17, + "default": 333, + "total": 350 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15239524, @@ -56471,6 +58239,58 @@ } ] }, + { + "user": { + "id": 14909719, + "username": "kropecl", + "fullName": "kropecl", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14909719/medium/0f8afaa00b58cb146a279a1d5df3095c_default.png", + "preTranslated": 0, + "totalCosts": 9 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 9 + }, + "translated": { + "tmMatch": 9, + "default": 0, + "total": 9 + }, + "targetTranslated": { + "tmMatch": 10, + "default": 0, + "total": 10 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 9, + "default": 0, + "total": 9 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14851382, @@ -59664,7 +61484,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15253292/medium/de74f7ea5b7ad42560797300a1809cc7_default.png", "preTranslated": 0, - "totalCosts": 102 + "totalCosts": 104 }, "languages": [ { @@ -59673,17 +61493,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 102 + "totalCosts": 104 }, "translated": { - "tmMatch": 7, + "tmMatch": 9, "default": 95, - "total": 102 + "total": 104 }, "targetTranslated": { - "tmMatch": 20, + "tmMatch": 25, "default": 144, - "total": 164 + "total": 169 }, "translatedByMt": { "tmMatch": 0, @@ -59696,9 +61516,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, + "tmMatch": 9, "default": 95, - "total": 102 + "total": 104 }, "approvalCosts": { "tmMatch": 0, @@ -62243,6 +64063,58 @@ } ] }, + { + "user": { + "id": 15170642, + "username": "nanoni", + "fullName": "nanoni", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15170642/medium/f05625305ab41aecc0da6d53fd9fbcc6_default.png", + "preTranslated": 0, + "totalCosts": 47 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 47 + }, + "translated": { + "tmMatch": 3, + "default": 44, + "total": 47 + }, + "targetTranslated": { + "tmMatch": 17, + "default": 98, + "total": 115 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 3, + "default": 44, + "total": 47 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14594710, @@ -62503,6 +64375,58 @@ } ] }, + { + "user": { + "id": 15275038, + "username": "nc163", + "fullName": "nc163", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15275038/medium/daa5a569f8935885fed1aa122b8787ba_default.png", + "preTranslated": 0, + "totalCosts": 37 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 37 + }, + "translated": { + "tmMatch": 37, + "default": 0, + "total": 37 + }, + "targetTranslated": { + "tmMatch": 93, + "default": 0, + "total": 93 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 37, + "default": 0, + "total": 37 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 13928105, @@ -62821,7 +64745,7 @@ "username": "nikaose", "fullName": "nikaose", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13583128/medium/a22da1664a072bb23ea9352106009457_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13583128/medium/4df00293603f22463b972e7a655bc0e6.jpg", "preTranslated": 0, "totalCosts": 34 }, @@ -63075,6 +64999,58 @@ } ] }, + { + "user": { + "id": 15168364, + "username": "nloureiro", + "fullName": "nloureiro", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15168364/medium/1420a4d4d2a31499067c4c62c59ae2c5.jpg", + "preTranslated": 0, + "totalCosts": 162 + }, + "languages": [ + { + "language": { + "id": "pt-PT", + "name": "Portuguese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 162 + }, + "translated": { + "tmMatch": 0, + "default": 162, + "total": 162 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 145, + "total": 145 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 8, + "total": 8 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 162, + "total": 162 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15053089, @@ -65649,6 +67625,58 @@ } ] }, + { + "user": { + "id": 13986387, + "username": "rafarocha", + "fullName": "rafarocha", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/a0c3812dc8e52a7ab934944250304328.jpeg", + "preTranslated": 0, + "totalCosts": 10376 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 10376 + }, + "translated": { + "tmMatch": 275, + "default": 10101, + "total": 10376 + }, + "targetTranslated": { + "tmMatch": 300, + "default": 10454, + "total": 10754 + }, + "translatedByMt": { + "tmMatch": 21, + "default": 136, + "total": 157 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 275, + "default": 10101, + "total": 10376 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14947603, @@ -66780,6 +68808,58 @@ } ] }, + { + "user": { + "id": 14634932, + "username": "s.alshoikan", + "fullName": "s.alshoikan", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14634932/medium/d1a8c1ad7b88ee2cf9a9e7d8d969f040_default.png", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "ar", + "name": "Arabic", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 0, + "default": 2, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 3, + "total": 3 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 2, + "total": 2 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15211006, @@ -66840,7 +68920,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15245586/medium/255e604fc64ada6f55a802ea9de2204a_default.png", "preTranslated": 0, - "totalCosts": 851 + "totalCosts": 935 }, "languages": [ { @@ -66849,22 +68929,22 @@ "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 851 + "totalCosts": 935 }, "translated": { "tmMatch": 0, - "default": 851, - "total": 851 + "default": 935, + "total": 935 }, "targetTranslated": { "tmMatch": 0, - "default": 920, - "total": 920 + "default": 1004, + "total": 1004 }, "translatedByMt": { "tmMatch": 0, - "default": 292, - "total": 292 + "default": 348, + "total": 348 }, "approved": { "tmMatch": 0, @@ -66873,8 +68953,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 851, - "total": 851 + "default": 935, + "total": 935 }, "approvalCosts": { "tmMatch": 0, @@ -67976,6 +70056,58 @@ } ] }, + { + "user": { + "id": 15281848, + "username": "sethuram", + "fullName": "sethuram", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15281848/medium/446710b4652cb7811f2eba3c3c7c15de_default.png", + "preTranslated": 0, + "totalCosts": 1 + }, + "languages": [ + { + "language": { + "id": "ta", + "name": "Tamil", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1 + }, + "translated": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14726760, @@ -69128,7 +71260,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15186456/medium/1c30fc8a15e1b20ca205dece7e1844f6_default.png", "preTranslated": 0, - "totalCosts": 9714 + "totalCosts": 9723 }, "languages": [ { @@ -69137,17 +71269,17 @@ "name": "Galician", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 9713 + "totalCosts": 9722 }, "translated": { "tmMatch": 327, - "default": 9386, - "total": 9713 + "default": 9395, + "total": 9722 }, "targetTranslated": { "tmMatch": 346, - "default": 9971, - "total": 10317 + "default": 9982, + "total": 10328 }, "translatedByMt": { "tmMatch": 2, @@ -69161,8 +71293,8 @@ }, "translationCosts": { "tmMatch": 327, - "default": 9386, - "total": 9713 + "default": 9395, + "total": 9722 }, "approvalCosts": { "tmMatch": 0, @@ -69999,7 +72131,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15224386/medium/52b2ec0ff1b2d2f6893458a3a632a2eb_default.png", "preTranslated": 0, - "totalCosts": 268 + "totalCosts": 504 }, "languages": [ { @@ -70008,17 +72140,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 24 + "totalCosts": 260 }, "translated": { - "tmMatch": 0, - "default": 24, - "total": 24 + "tmMatch": 119, + "default": 141, + "total": 260 }, "targetTranslated": { - "tmMatch": 0, - "default": 48, - "total": 48 + "tmMatch": 220, + "default": 241, + "total": 461 }, "translatedByMt": { "tmMatch": 0, @@ -70031,9 +72163,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 24, - "total": 24 + "tmMatch": 119, + "default": 141, + "total": 260 }, "approvalCosts": { "tmMatch": 0, @@ -72344,6 +74476,58 @@ } ] }, + { + "user": { + "id": 15259076, + "username": "villey", + "fullName": "villey", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15259076/medium/7942615c469be9780574387ab0448d69_default.png", + "preTranslated": 0, + "totalCosts": 195 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 195 + }, + "translated": { + "tmMatch": 0, + "default": 195, + "total": 195 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 235, + "total": 235 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 195, + "total": 195 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14648126, @@ -73735,6 +75919,58 @@ } ] }, + { + "user": { + "id": 15280274, + "username": "yaseenammaar", + "fullName": "yaseenammaar", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15280274/medium/ff3bb7a12364b4c064801d9c1ac22d7d_default.png", + "preTranslated": 0, + "totalCosts": 115 + }, + "languages": [ + { + "language": { + "id": "hi", + "name": "Hindi", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 115 + }, + "translated": { + "tmMatch": 1, + "default": 114, + "total": 115 + }, + "targetTranslated": { + "tmMatch": 3, + "default": 195, + "total": 198 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 114, + "total": 115 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14513238, @@ -73982,6 +76218,58 @@ } ] }, + { + "user": { + "id": 15266036, + "username": "yikaicao", + "fullName": "yikaicao", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266036/medium/b9b98db89c2a86d497709b0ff6b94efa_default.png", + "preTranslated": 0, + "totalCosts": 8 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 8 + }, + "translated": { + "tmMatch": 8, + "default": 0, + "total": 8 + }, + "targetTranslated": { + "tmMatch": 17, + "default": 0, + "total": 17 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 8, + "default": 0, + "total": 8 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15112345, @@ -74450,6 +76738,58 @@ } ] }, + { + "user": { + "id": 15257248, + "username": "zainulasror87", + "fullName": "zainulasror87", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15257248/medium/768f734448a30316c54953d4069c5165_default.png", + "preTranslated": 0, + "totalCosts": 35 + }, + "languages": [ + { + "language": { + "id": "id", + "name": "Indonesian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 35 + }, + "translated": { + "tmMatch": 2, + "default": 33, + "total": 35 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 33, + "total": 35 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 33, + "total": 35 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14895934, @@ -74541,6 +76881,58 @@ } ] }, + { + "user": { + "id": 14712604, + "username": "zazadjo", + "fullName": "zazadjo", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14712604/medium/a7ff73990f53a0641d6c851a749f0900_default.png", + "preTranslated": 0, + "totalCosts": 17 + }, + "languages": [ + { + "language": { + "id": "ka", + "name": "Georgian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 17 + }, + "translated": { + "tmMatch": 0, + "default": 17, + "total": 17 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 1, + "total": 1 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 17, + "total": 17 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14814760, @@ -75477,6 +77869,58 @@ } ] }, + { + "user": { + "id": 12502848, + "username": "hran", + "fullName": "A A (hran)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12502848/medium/e25c87063e21305865042f47152e0b2a_default.png", + "preTranslated": 0, + "totalCosts": 9 + }, + "languages": [ + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 9 + }, + "translated": { + "tmMatch": 7, + "default": 2, + "total": 9 + }, + "targetTranslated": { + "tmMatch": 7, + "default": 2, + "total": 9 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 7, + "default": 2, + "total": 9 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14590594, @@ -75529,6 +77973,58 @@ } ] }, + { + "user": { + "id": 14226882, + "username": "FutureTrans01", + "fullName": "ACO_Future Trans (FutureTrans01)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14226882/medium/6f2e227d358c748cdfcd3a1969d69b20_default.png", + "preTranslated": 0, + "totalCosts": 1710 + }, + "languages": [ + { + "language": { + "id": "tr", + "name": "Turkish", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1710 + }, + "translated": { + "tmMatch": 78, + "default": 1632, + "total": 1710 + }, + "targetTranslated": { + "tmMatch": 68, + "default": 1357, + "total": 1425 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 2547 + }, + "translationCosts": { + "tmMatch": 78, + "default": 1632, + "total": 1710 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14707230, @@ -76239,7 +78735,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15103657/medium/1f536153cd11467c9ae11fc0f1afcbc8.jpeg", "preTranslated": 0, - "totalCosts": 949 + "totalCosts": 963 }, "languages": [ { @@ -76248,17 +78744,17 @@ "name": "Somali", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 949 + "totalCosts": 963 }, "translated": { - "tmMatch": 35, - "default": 914, - "total": 949 + "tmMatch": 38, + "default": 925, + "total": 963 }, "targetTranslated": { - "tmMatch": 52, - "default": 1006, - "total": 1058 + "tmMatch": 58, + "default": 1016, + "total": 1074 }, "translatedByMt": { "tmMatch": 2, @@ -76271,9 +78767,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 35, - "default": 914, - "total": 949 + "tmMatch": 38, + "default": 925, + "total": 963 }, "approvalCosts": { "tmMatch": 0, @@ -76707,7 +79203,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15036379/medium/753e141785d6f0c1dd9d90a6df87eb05_default.png", "preTranslated": 0, - "totalCosts": 55551 + "totalCosts": 58171 }, "languages": [ { @@ -76755,17 +79251,17 @@ "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 41822 + "totalCosts": 44442 }, "translated": { - "tmMatch": 7926, - "default": 33896, - "total": 41822 + "tmMatch": 8003, + "default": 36439, + "total": 44442 }, "targetTranslated": { - "tmMatch": 9964, - "default": 42539, - "total": 52503 + "tmMatch": 10074, + "default": 45815, + "total": 55889 }, "translatedByMt": { "tmMatch": 17, @@ -76775,12 +79271,64 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 47910 + "total": 50912 }, "translationCosts": { - "tmMatch": 7926, - "default": 33896, - "total": 41822 + "tmMatch": 8003, + "default": 36439, + "total": 44442 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 13939103, + "username": "amidas", + "fullName": "Aco_Amidas (amidas)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13939103/medium/d2dbe429cd49b1f80a767cb275a0b83b_default.png", + "preTranslated": 0, + "totalCosts": 6466 + }, + "languages": [ + { + "language": { + "id": "sl", + "name": "Slovenian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 6466 + }, + "translated": { + "tmMatch": 1695, + "default": 4771, + "total": 6466 + }, + "targetTranslated": { + "tmMatch": 1574, + "default": 4382, + "total": 5956 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 9213 + }, + "translationCosts": { + "tmMatch": 1695, + "default": 4771, + "total": 6466 }, "approvalCosts": { "tmMatch": 0, @@ -76889,7 +79437,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218796/medium/b2fe0512f17a60d47a4328127eaee058_default.png", "preTranslated": 0, - "totalCosts": 970 + "totalCosts": 9972 }, "languages": [ { @@ -76898,32 +79446,32 @@ "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6 + "totalCosts": 9008 }, "translated": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 381, + "default": 8627, + "total": 9008 }, "targetTranslated": { - "tmMatch": 0, - "default": 5, - "total": 5 + "tmMatch": 316, + "default": 6597, + "total": 6913 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 9, "default": 0, - "total": 0 + "total": 9 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 10346 }, "translationCosts": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 381, + "default": 8627, + "total": 9008 }, "approvalCosts": { "tmMatch": 0, @@ -77125,6 +79673,45 @@ "default": 0, "total": 0 } + }, + { + "language": { + "id": "sw", + "name": "Swahili", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 0 + }, + "translated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 2 + }, + "translationCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } } ] }, @@ -77396,7 +79983,7 @@ "userRole": "Manager", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14952471/medium/0b923ad0f9ac867dc2ba15f179591202_default.png", "preTranslated": 0, - "totalCosts": 32786 + "totalCosts": 40242 }, "languages": [ { @@ -77483,17 +80070,17 @@ "name": "Czech", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 153 + "totalCosts": 7609 }, "translated": { "tmMatch": 0, - "default": 153, - "total": 153 + "default": 7609, + "total": 7609 }, "targetTranslated": { "tmMatch": 0, - "default": 149, - "total": 149 + "default": 7117, + "total": 7117 }, "translatedByMt": { "tmMatch": 0, @@ -77503,12 +80090,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 201 + "total": 10416 }, "translationCosts": { "tmMatch": 0, - "default": 153, - "total": 153 + "default": 7609, + "total": 7609 }, "approvalCosts": { "tmMatch": 0, @@ -77555,6 +80142,45 @@ "total": 0 } }, + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 0 + }, + "translated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 606 + }, + "translationCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, { "language": { "id": "gl", @@ -77721,7 +80347,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15054987/medium/53bd80f3d667bda88ea89e53a29dcc9c_default.png", "preTranslated": 0, - "totalCosts": 21596 + "totalCosts": 35930 }, "languages": [ { @@ -77769,32 +80395,32 @@ "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 0 + "totalCosts": 14334 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 688, + "default": 13646, + "total": 14334 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1307, + "default": 23437, + "total": 24744 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 13, + "default": 6, + "total": 19 }, "approved": { "tmMatch": 0, "default": 0, - "total": 11 + "total": 221 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 688, + "default": 13646, + "total": 14334 }, "approvalCosts": { "tmMatch": 0, @@ -77903,7 +80529,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15048901/medium/9c2e15bbe4e07a19c6a4d53fd3bd4fac_default.png", "preTranslated": 0, - "totalCosts": 64913 + "totalCosts": 80212 }, "languages": [ { @@ -77912,32 +80538,32 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 63744 + "totalCosts": 76798 }, "translated": { - "tmMatch": 18106, - "default": 45638, - "total": 63744 + "tmMatch": 24486, + "default": 52312, + "total": 76798 }, "targetTranslated": { - "tmMatch": 31020, - "default": 75164, - "total": 106184 + "tmMatch": 42045, + "default": 86248, + "total": 128293 }, "translatedByMt": { - "tmMatch": 39, - "default": 181, - "total": 220 + "tmMatch": 47, + "default": 194, + "total": 241 }, "approved": { "tmMatch": 0, "default": 0, - "total": 56263 + "total": 71765 }, "translationCosts": { - "tmMatch": 18106, - "default": 45638, - "total": 63744 + "tmMatch": 24486, + "default": 52312, + "total": 76798 }, "approvalCosts": { "tmMatch": 0, @@ -77951,17 +80577,17 @@ "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1169 + "totalCosts": 3414 }, "translated": { - "tmMatch": 223, - "default": 946, - "total": 1169 + "tmMatch": 336, + "default": 3078, + "total": 3414 }, "targetTranslated": { - "tmMatch": 454, - "default": 1741, - "total": 2195 + "tmMatch": 670, + "default": 5661, + "total": 6331 }, "translatedByMt": { "tmMatch": 21, @@ -77971,12 +80597,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1432 + "total": 11453 }, "translationCosts": { - "tmMatch": 223, - "default": 946, - "total": 1169 + "tmMatch": 336, + "default": 3078, + "total": 3414 }, "approvalCosts": { "tmMatch": 0, @@ -78150,7 +80776,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13151214/medium/b366a16aaf40db3f01f06af1042f2649_default.png", "preTranslated": 0, - "totalCosts": 52017 + "totalCosts": 68448 }, "languages": [ { @@ -78159,32 +80785,32 @@ "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 19135 + "totalCosts": 33654 }, "translated": { - "tmMatch": 4877, - "default": 14258, - "total": 19135 + "tmMatch": 9569, + "default": 24085, + "total": 33654 }, "targetTranslated": { - "tmMatch": 4509, - "default": 13418, - "total": 17927 + "tmMatch": 8832, + "default": 22163, + "total": 30995 }, "translatedByMt": { - "tmMatch": 27, - "default": 16, - "total": 43 + "tmMatch": 34, + "default": 19, + "total": 53 }, "approved": { "tmMatch": 0, "default": 0, - "total": 31766 + "total": 55494 }, "translationCosts": { - "tmMatch": 4877, - "default": 14258, - "total": 19135 + "tmMatch": 9569, + "default": 24085, + "total": 33654 }, "approvalCosts": { "tmMatch": 0, @@ -78198,32 +80824,32 @@ "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 32882 + "totalCosts": 34794 }, "translated": { - "tmMatch": 7356, - "default": 25526, - "total": 32882 + "tmMatch": 7460, + "default": 27334, + "total": 34794 }, "targetTranslated": { - "tmMatch": 6426, - "default": 22679, - "total": 29105 + "tmMatch": 6519, + "default": 24324, + "total": 30843 }, "translatedByMt": { - "tmMatch": 26, + "tmMatch": 27, "default": 279, - "total": 305 + "total": 306 }, "approved": { "tmMatch": 0, "default": 0, - "total": 33775 + "total": 35864 }, "translationCosts": { - "tmMatch": 7356, - "default": 25526, - "total": 32882 + "tmMatch": 7460, + "default": 27334, + "total": 34794 }, "approvalCosts": { "tmMatch": 0, @@ -78605,7 +81231,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15197762/medium/d8e4fc31646e818d0cedd473fe0525d2_default.png", "preTranslated": 0, - "totalCosts": 19995 + "totalCosts": 28848 }, "languages": [ { @@ -78614,17 +81240,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 19995 + "totalCosts": 28848 }, "translated": { - "tmMatch": 6324, - "default": 13671, - "total": 19995 + "tmMatch": 7903, + "default": 20945, + "total": 28848 }, "targetTranslated": { - "tmMatch": 7556, - "default": 16030, - "total": 23586 + "tmMatch": 9179, + "default": 23501, + "total": 32680 }, "translatedByMt": { "tmMatch": 19, @@ -78634,12 +81260,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 25996 + "total": 37416 }, "translationCosts": { - "tmMatch": 6324, - "default": 13671, - "total": 19995 + "tmMatch": 7903, + "default": 20945, + "total": 28848 }, "approvalCosts": { "tmMatch": 0, @@ -79585,6 +82211,58 @@ } ] }, + { + "user": { + "id": 15297238, + "username": "agampatel1234890", + "fullName": "Agam Patel (agampatel1234890)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15297238/medium/2290b25b89c8b70df206b7af1cef935b.png", + "preTranslated": 0, + "totalCosts": 6 + }, + "languages": [ + { + "language": { + "id": "gu-IN", + "name": "Gujarati", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 6 + }, + "translated": { + "tmMatch": 0, + "default": 6, + "total": 6 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 8, + "total": 8 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 6, + "total": 6 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14842980, @@ -80157,6 +82835,58 @@ } ] }, + { + "user": { + "id": 15268884, + "username": "bikaa2611", + "fullName": "Ahmed Bakry (bikaa2611)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15268884/medium/fe0000fff53424c506353a43751bfc99.png", + "preTranslated": 0, + "totalCosts": 178 + }, + "languages": [ + { + "language": { + "id": "ar", + "name": "Arabic", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 178 + }, + "translated": { + "tmMatch": 0, + "default": 178, + "total": 178 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 148, + "total": 148 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 11, + "total": 11 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 178, + "total": 178 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14854298, @@ -80724,7 +83454,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14675092/medium/93a5a3891a8c8b3f1796baf7ae9c8046.png", "preTranslated": 0, - "totalCosts": 337 + "totalCosts": 669 }, "languages": [ { @@ -80733,17 +83463,17 @@ "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 337 + "totalCosts": 669 }, "translated": { "tmMatch": 18, - "default": 319, - "total": 337 + "default": 651, + "total": 669 }, "targetTranslated": { "tmMatch": 21, - "default": 346, - "total": 367 + "default": 716, + "total": 737 }, "translatedByMt": { "tmMatch": 0, @@ -80757,8 +83487,8 @@ }, "translationCosts": { "tmMatch": 18, - "default": 319, - "total": 337 + "default": 651, + "total": 669 }, "approvalCosts": { "tmMatch": 0, @@ -81088,7 +83818,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15237056/medium/d846ce5a4333a3c90131ebdc6abcb3b5.jpeg", "preTranslated": 0, - "totalCosts": 35 + "totalCosts": 362 }, "languages": [ { @@ -81097,22 +83827,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 35 + "totalCosts": 362 }, "translated": { - "tmMatch": 0, - "default": 35, - "total": 35 + "tmMatch": 6, + "default": 356, + "total": 362 }, "targetTranslated": { - "tmMatch": 0, - "default": 45, - "total": 45 + "tmMatch": 5, + "default": 400, + "total": 405 }, "translatedByMt": { "tmMatch": 0, - "default": 11, - "total": 11 + "default": 136, + "total": 136 }, "approved": { "tmMatch": 0, @@ -81120,9 +83850,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 35, - "total": 35 + "tmMatch": 6, + "default": 356, + "total": 362 }, "approvalCosts": { "tmMatch": 0, @@ -82726,7 +85456,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg", "preTranslated": 0, - "totalCosts": 2971 + "totalCosts": 6116 }, "languages": [ { @@ -82735,22 +85465,22 @@ "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2971 + "totalCosts": 6116 }, "translated": { - "tmMatch": 28, - "default": 2943, - "total": 2971 + "tmMatch": 57, + "default": 6059, + "total": 6116 }, "targetTranslated": { - "tmMatch": 33, - "default": 3556, - "total": 3589 + "tmMatch": 69, + "default": 7170, + "total": 7239 }, "translatedByMt": { - "tmMatch": 5, - "default": 5, - "total": 10 + "tmMatch": 8, + "default": 6, + "total": 14 }, "approved": { "tmMatch": 0, @@ -82758,9 +85488,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 28, - "default": 2943, - "total": 2971 + "tmMatch": 57, + "default": 6059, + "total": 6116 }, "approvalCosts": { "tmMatch": 0, @@ -84156,7 +86886,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14555882/medium/edcaf24c34ef3506613bad9099389fc6.jpg", "preTranslated": 0, - "totalCosts": 16730 + "totalCosts": 17058 }, "languages": [ { @@ -84165,17 +86895,17 @@ "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 16671 + "totalCosts": 16999 }, "translated": { "tmMatch": 494, - "default": 16177, - "total": 16671 + "default": 16505, + "total": 16999 }, "targetTranslated": { "tmMatch": 603, - "default": 18737, - "total": 19340 + "default": 19109, + "total": 19712 }, "translatedByMt": { "tmMatch": 56, @@ -84189,8 +86919,8 @@ }, "translationCosts": { "tmMatch": 494, - "default": 16177, - "total": 16671 + "default": 16505, + "total": 16999 }, "approvalCosts": { "tmMatch": 0, @@ -85448,58 +88178,6 @@ } ] }, - { - "user": { - "id": 12502848, - "username": "hran", - "fullName": "Andrii Khronenko (hran)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12502848/medium/d6f0d637bd22c832aafd30f8cf964b5f.png", - "preTranslated": 0, - "totalCosts": 9 - }, - "languages": [ - { - "language": { - "id": "ru", - "name": "Russian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 9 - }, - "translated": { - "tmMatch": 7, - "default": 2, - "total": 9 - }, - "targetTranslated": { - "tmMatch": 7, - "default": 2, - "total": 9 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 7, - "default": 2, - "total": 9 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 14682496, @@ -86176,6 +88854,188 @@ } ] }, + { + "user": { + "id": 15279734, + "username": "Pizza_Princess", + "fullName": "Anna Litvin (Pizza_Princess)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279734/medium/97188da12b167157ee0793e1c63396ab_default.png", + "preTranslated": 0, + "totalCosts": 1430 + }, + "languages": [ + { + "language": { + "id": "he", + "name": "Hebrew", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 782 + }, + "translated": { + "tmMatch": 200, + "default": 582, + "total": 782 + }, + "targetTranslated": { + "tmMatch": 199, + "default": 534, + "total": 733 + }, + "translatedByMt": { + "tmMatch": 91, + "default": 13, + "total": 104 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 200, + "default": 582, + "total": 782 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 176 + }, + "translated": { + "tmMatch": 42, + "default": 134, + "total": 176 + }, + "targetTranslated": { + "tmMatch": 38, + "default": 107, + "total": 145 + }, + "translatedByMt": { + "tmMatch": 2, + "default": 23, + "total": 25 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 42, + "default": 134, + "total": 176 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "uk", + "name": "Ukrainian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 472 + }, + "translated": { + "tmMatch": 49, + "default": 423, + "total": 472 + }, + "targetTranslated": { + "tmMatch": 47, + "default": 366, + "total": 413 + }, + "translatedByMt": { + "tmMatch": 15, + "default": 121, + "total": 136 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 49, + "default": 423, + "total": 472 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 14986349, + "username": "misiura42", + "fullName": "Anna Otto (misiura42)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14986349/medium/87150872d02bfae162ed269e7183002e.jpeg", + "preTranslated": 0, + "totalCosts": 351 + }, + "languages": [ + { + "language": { + "id": "pl", + "name": "Polish", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 351 + }, + "translated": { + "tmMatch": 7, + "default": 344, + "total": 351 + }, + "targetTranslated": { + "tmMatch": 7, + "default": 306, + "total": 313 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 7, + "default": 344, + "total": 351 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14949927, @@ -86228,6 +89088,58 @@ } ] }, + { + "user": { + "id": 14734372, + "username": "translator-543216", + "fullName": "Another Translator (translator-543216)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14734372/medium/ef5b9432ae79b613339ccead9ccea82c_default.png", + "preTranslated": 0, + "totalCosts": 476 + }, + "languages": [ + { + "language": { + "id": "de", + "name": "German", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 476 + }, + "translated": { + "tmMatch": 43, + "default": 433, + "total": 476 + }, + "targetTranslated": { + "tmMatch": 41, + "default": 359, + "total": 400 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 4, + "total": 4 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 43, + "default": 433, + "total": 476 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 13263388, @@ -87172,7 +90084,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15099529/medium/77b12f03c6675c85ad45efc6f3e23be3_default.png", "preTranslated": 0, - "totalCosts": 41785 + "totalCosts": 42050 }, "languages": [ { @@ -87181,17 +90093,17 @@ "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 41785 + "totalCosts": 42050 }, "translated": { "tmMatch": 1673, - "default": 40112, - "total": 41785 + "default": 40377, + "total": 42050 }, "targetTranslated": { "tmMatch": 2146, - "default": 47834, - "total": 49980 + "default": 48180, + "total": 50326 }, "translatedByMt": { "tmMatch": 45, @@ -87201,12 +90113,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 938 }, "translationCosts": { "tmMatch": 1673, - "default": 40112, - "total": 41785 + "default": 40377, + "total": 42050 }, "approvalCosts": { "tmMatch": 0, @@ -87640,7 +90552,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15206754/medium/1f6bb058858c9608582b83fe050bdf67.jpeg", "preTranslated": 0, - "totalCosts": 6709 + "totalCosts": 7257 }, "languages": [ { @@ -87649,17 +90561,17 @@ "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6709 + "totalCosts": 7257 }, "translated": { - "tmMatch": 31, - "default": 6678, - "total": 6709 + "tmMatch": 36, + "default": 7221, + "total": 7257 }, "targetTranslated": { - "tmMatch": 30, - "default": 5539, - "total": 5569 + "tmMatch": 35, + "default": 5962, + "total": 5997 }, "translatedByMt": { "tmMatch": 0, @@ -87672,9 +90584,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 31, - "default": 6678, - "total": 6709 + "tmMatch": 36, + "default": 7221, + "total": 7257 }, "approvalCosts": { "tmMatch": 0, @@ -90427,6 +93339,110 @@ } ] }, + { + "user": { + "id": 15276928, + "username": "betterme", + "fullName": "Better Me (betterme)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15276928/medium/a8242d6cce5245250d61f5710094740f_default.png", + "preTranslated": 0, + "totalCosts": 33 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 33 + }, + "translated": { + "tmMatch": 0, + "default": 33, + "total": 33 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 49, + "total": 49 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 33, + "total": 33 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 14325546, + "username": "betterx", + "fullName": "Better X (betterx)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14325546/medium/96b74565a6a40e67204d49cd4da32989_default.png", + "preTranslated": 0, + "totalCosts": 75 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 75 + }, + "translated": { + "tmMatch": 2, + "default": 73, + "total": 75 + }, + "targetTranslated": { + "tmMatch": 5, + "default": 119, + "total": 124 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 73, + "total": 75 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14978829, @@ -92351,6 +95367,58 @@ } ] }, + { + "user": { + "id": 14788762, + "username": "cafeweb", + "fullName": "Carla P (cafeweb)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14788762/medium/1ec3f24a57a4081619b7bb8014a245bb.png", + "preTranslated": 0, + "totalCosts": 644 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 644 + }, + "translated": { + "tmMatch": 8, + "default": 636, + "total": 644 + }, + "targetTranslated": { + "tmMatch": 9, + "default": 730, + "total": 739 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 41, + "total": 41 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 8, + "default": 636, + "total": 644 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 19793, @@ -93451,7 +96519,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221766/medium/9818a6f07e95c5f3260f34774d4e26fe.jpg", "preTranslated": 0, - "totalCosts": 4486 + "totalCosts": 5224 }, "languages": [ { @@ -93460,22 +96528,22 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4486 + "totalCosts": 5224 }, "translated": { - "tmMatch": 129, - "default": 4357, - "total": 4486 + "tmMatch": 155, + "default": 5069, + "total": 5224 }, "targetTranslated": { - "tmMatch": 131, - "default": 4376, - "total": 4507 + "tmMatch": 159, + "default": 5100, + "total": 5259 }, "translatedByMt": { - "tmMatch": 19, - "default": 594, - "total": 613 + "tmMatch": 22, + "default": 605, + "total": 627 }, "approved": { "tmMatch": 0, @@ -93483,9 +96551,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 129, - "default": 4357, - "total": 4486 + "tmMatch": 155, + "default": 5069, + "total": 5224 }, "approvalCosts": { "tmMatch": 0, @@ -94145,58 +97213,6 @@ } ] }, - { - "user": { - "id": 14075861, - "username": "Kler", - "fullName": "Claire (Kler)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14075861/medium/b9abac41707bec81b06162ba18f3363c_default.png", - "preTranslated": 0, - "totalCosts": 20667 - }, - "languages": [ - { - "language": { - "id": "fr", - "name": "French", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 20667 - }, - "translated": { - "tmMatch": 1553, - "default": 19114, - "total": 20667 - }, - "targetTranslated": { - "tmMatch": 1785, - "default": 20355, - "total": 22140 - }, - "translatedByMt": { - "tmMatch": 22, - "default": 617, - "total": 639 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 1553, - "default": 19114, - "total": 20667 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 15099583, @@ -95245,7 +98261,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15155844/medium/6e6407e27f509308774f480afe52ff7d.png", "preTranslated": 0, - "totalCosts": 3646 + "totalCosts": 5591 }, "languages": [ { @@ -95254,22 +98270,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3646 + "totalCosts": 5591 }, "translated": { - "tmMatch": 227, - "default": 3419, - "total": 3646 + "tmMatch": 229, + "default": 5362, + "total": 5591 }, "targetTranslated": { - "tmMatch": 251, - "default": 3859, - "total": 4110 + "tmMatch": 253, + "default": 5898, + "total": 6151 }, "translatedByMt": { "tmMatch": 4, - "default": 737, - "total": 741 + "default": 1491, + "total": 1495 }, "approved": { "tmMatch": 0, @@ -95277,9 +98293,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 227, - "default": 3419, - "total": 3646 + "tmMatch": 229, + "default": 5362, + "total": 5591 }, "approvalCosts": { "tmMatch": 0, @@ -96095,6 +99111,58 @@ } ] }, + { + "user": { + "id": 15264742, + "username": "jaszczomb", + "fullName": "Daniel (jaszczomb)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264742/medium/864cdac6f83f6d96f5a231668ed65849.png", + "preTranslated": 0, + "totalCosts": 163 + }, + "languages": [ + { + "language": { + "id": "pl", + "name": "Polish", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 163 + }, + "translated": { + "tmMatch": 11, + "default": 152, + "total": 163 + }, + "targetTranslated": { + "tmMatch": 10, + "default": 146, + "total": 156 + }, + "translatedByMt": { + "tmMatch": 5, + "default": 25, + "total": 30 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 11, + "default": 152, + "total": 163 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14697500, @@ -96901,6 +99969,58 @@ } ] }, + { + "user": { + "id": 14981089, + "username": "daniloraisi", + "fullName": "Danilo Tenorio Raisi (daniloraisi)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14981089/medium/37d319f7ff289b5141aea317cb808deb.jpeg", + "preTranslated": 0, + "totalCosts": 131 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 131 + }, + "translated": { + "tmMatch": 0, + "default": 131, + "total": 131 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 123, + "total": 123 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 17, + "total": 17 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 131, + "total": 131 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14962531, @@ -97720,6 +100840,58 @@ } ] }, + { + "user": { + "id": 15273564, + "username": "Zarg69", + "fullName": "David Graz (Zarg69)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15273564/medium/cc41c2e8faec1f3ea98c750eabdca018.jpeg", + "preTranslated": 0, + "totalCosts": 19 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 19 + }, + "translated": { + "tmMatch": 0, + "default": 19, + "total": 19 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 20, + "total": 20 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 19, + "total": 19 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14265902, @@ -97876,6 +101048,58 @@ } ] }, + { + "user": { + "id": 15090175, + "username": "echoalizr", + "fullName": "David Perez (echoalizr)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15090175/medium/e2f4cd33b9cde644c73c211df89de4ed_default.png", + "preTranslated": 0, + "totalCosts": 603 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 603 + }, + "translated": { + "tmMatch": 1, + "default": 602, + "total": 603 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 659, + "total": 660 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 85, + "total": 85 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 602, + "total": 603 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14780050, @@ -98976,7 +102200,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15253076/medium/2551dedf52ffb347b9ee6baee6080755.jpeg", "preTranslated": 0, - "totalCosts": 227 + "totalCosts": 845 }, "languages": [ { @@ -98985,17 +102209,17 @@ "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 227 + "totalCosts": 845 }, "translated": { "tmMatch": 0, - "default": 227, - "total": 227 + "default": 845, + "total": 845 }, "targetTranslated": { "tmMatch": 0, - "default": 167, - "total": 167 + "default": 622, + "total": 622 }, "translatedByMt": { "tmMatch": 0, @@ -99009,8 +102233,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 227, - "total": 227 + "default": 845, + "total": 845 }, "approvalCosts": { "tmMatch": 0, @@ -99956,6 +103180,58 @@ } ] }, + { + "user": { + "id": 15260730, + "username": "doris20150920", + "fullName": "Doris Wu (doris20150920)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15260730/medium/96675a76eefee4a07ba35a22ddd748b3.png", + "preTranslated": 0, + "totalCosts": 594 + }, + "languages": [ + { + "language": { + "id": "zh-TW", + "name": "Chinese Traditional", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 594 + }, + "translated": { + "tmMatch": 105, + "default": 489, + "total": 594 + }, + "targetTranslated": { + "tmMatch": 159, + "default": 737, + "total": 896 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 105, + "default": 489, + "total": 594 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14937349, @@ -100463,6 +103739,58 @@ } ] }, + { + "user": { + "id": 14060128, + "username": "duythanhvn", + "fullName": "Duy–Thanh Doan (duythanhvn)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14060128/medium/d60f16a46943b9b08216acf607e86c9d_default.png", + "preTranslated": 0, + "totalCosts": 1 + }, + "languages": [ + { + "language": { + "id": "vi", + "name": "Vietnamese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1 + }, + "translated": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "targetTranslated": { + "tmMatch": 3, + "default": 0, + "total": 3 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14621776, @@ -100879,6 +104207,58 @@ } ] }, + { + "user": { + "id": 15273150, + "username": "ETeng", + "fullName": "ETeng", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15273150/medium/b78eb19889965be4ab41190badfb07d6.jpeg", + "preTranslated": 0, + "totalCosts": 69 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 69 + }, + "translated": { + "tmMatch": 0, + "default": 69, + "total": 69 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 113, + "total": 113 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 69, + "total": 69 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14771472, @@ -101147,7 +104527,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15212248/medium/752344d4d4d83a3dc6115bb278dee2a0.png", "preTranslated": 0, - "totalCosts": 525 + "totalCosts": 1502 }, "languages": [ { @@ -101156,17 +104536,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 525 + "totalCosts": 1502 }, "translated": { - "tmMatch": 0, - "default": 525, - "total": 525 + "tmMatch": 18, + "default": 1484, + "total": 1502 }, "targetTranslated": { - "tmMatch": 0, - "default": 604, - "total": 604 + "tmMatch": 23, + "default": 1636, + "total": 1659 }, "translatedByMt": { "tmMatch": 0, @@ -101179,9 +104559,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 525, - "total": 525 + "tmMatch": 18, + "default": 1484, + "total": 1502 }, "approvalCosts": { "tmMatch": 0, @@ -101537,7 +104917,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg", "preTranslated": 0, - "totalCosts": 36474 + "totalCosts": 40567 }, "languages": [ { @@ -101546,22 +104926,22 @@ "name": "Catalan", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 36041 + "totalCosts": 40134 }, "translated": { - "tmMatch": 409, - "default": 35632, - "total": 36041 + "tmMatch": 525, + "default": 39609, + "total": 40134 }, "targetTranslated": { - "tmMatch": 476, - "default": 40043, - "total": 40519 + "tmMatch": 609, + "default": 44444, + "total": 45053 }, "translatedByMt": { - "tmMatch": 30, - "default": 0, - "total": 30 + "tmMatch": 47, + "default": 7, + "total": 54 }, "approved": { "tmMatch": 0, @@ -101569,9 +104949,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 409, - "default": 35632, - "total": 36041 + "tmMatch": 525, + "default": 39609, + "total": 40134 }, "approvalCosts": { "tmMatch": 0, @@ -102447,7 +105827,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15248362/medium/71ba731d5781f49f70bd26e10d347723.png", "preTranslated": 0, - "totalCosts": 379 + "totalCosts": 430 }, "languages": [ { @@ -102456,17 +105836,17 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 379 + "totalCosts": 430 }, "translated": { "tmMatch": 4, - "default": 375, - "total": 379 + "default": 426, + "total": 430 }, "targetTranslated": { "tmMatch": 6, - "default": 311, - "total": 317 + "default": 346, + "total": 352 }, "translatedByMt": { "tmMatch": 0, @@ -102480,8 +105860,8 @@ }, "translationCosts": { "tmMatch": 4, - "default": 375, - "total": 379 + "default": 426, + "total": 430 }, "approvalCosts": { "tmMatch": 0, @@ -103271,6 +106651,58 @@ } ] }, + { + "user": { + "id": 15271666, + "username": "0xEnlighten", + "fullName": "Enlighten (0xEnlighten)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271666/medium/2dbb403b9438de560657292b93109510.jpeg", + "preTranslated": 0, + "totalCosts": 133 + }, + "languages": [ + { + "language": { + "id": "bn", + "name": "Bengali", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 133 + }, + "translated": { + "tmMatch": 5, + "default": 128, + "total": 133 + }, + "targetTranslated": { + "tmMatch": 14, + "default": 235, + "total": 249 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 5, + "default": 128, + "total": 133 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14414268, @@ -104006,8 +107438,8 @@ "fullName": "Ethereum.org Team (ethdotorg)", "userRole": "Owner", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13897487/medium/246e50d7e9ccde07088ed892b07a0efd.png", - "preTranslated": 1116150, - "totalCosts": 325094 + "preTranslated": 1277890, + "totalCosts": 338347 }, "languages": [ { @@ -104015,18 +107447,18 @@ "id": "sq", "name": "Albanian", "tmSavings": 0, - "preTranslate": 2189, - "totalCosts": 111 + "preTranslate": 3771, + "totalCosts": 137 }, "translated": { - "tmMatch": 111, - "default": 0, - "total": 111 + "tmMatch": 123, + "default": 14, + "total": 137 }, "targetTranslated": { - "tmMatch": 111, - "default": 0, - "total": 111 + "tmMatch": 123, + "default": 11, + "total": 134 }, "translatedByMt": { "tmMatch": 0, @@ -104036,12 +107468,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 108 + "total": 109 }, "translationCosts": { - "tmMatch": 111, - "default": 0, - "total": 111 + "tmMatch": 123, + "default": 14, + "total": 137 }, "approvalCosts": { "tmMatch": 0, @@ -104054,18 +107486,18 @@ "id": "am", "name": "Amharic", "tmSavings": 0, - "preTranslate": 456, - "totalCosts": 704 + "preTranslate": 490, + "totalCosts": 721 }, "translated": { "tmMatch": 699, - "default": 5, - "total": 704 + "default": 22, + "total": 721 }, "targetTranslated": { "tmMatch": 540, - "default": 5, - "total": 545 + "default": 17, + "total": 557 }, "translatedByMt": { "tmMatch": 0, @@ -104079,8 +107511,8 @@ }, "translationCosts": { "tmMatch": 699, - "default": 5, - "total": 704 + "default": 22, + "total": 721 }, "approvalCosts": { "tmMatch": 0, @@ -104093,18 +107525,18 @@ "id": "ar", "name": "Arabic", "tmSavings": 0, - "preTranslate": 13266, - "totalCosts": 10196 + "preTranslate": 16563, + "totalCosts": 10391 }, "translated": { - "tmMatch": 10157, - "default": 39, - "total": 10196 + "tmMatch": 10158, + "default": 233, + "total": 10391 }, "targetTranslated": { - "tmMatch": 9843, - "default": 41, - "total": 9884 + "tmMatch": 9844, + "default": 212, + "total": 10056 }, "translatedByMt": { "tmMatch": 0, @@ -104114,12 +107546,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1978 + "total": 2014 }, "translationCosts": { - "tmMatch": 10157, - "default": 39, - "total": 10196 + "tmMatch": 10158, + "default": 233, + "total": 10391 }, "approvalCosts": { "tmMatch": 0, @@ -104132,18 +107564,18 @@ "id": "hy-AM", "name": "Armenian", "tmSavings": 0, - "preTranslate": 152, - "totalCosts": 2 + "preTranslate": 199, + "totalCosts": 44 }, "translated": { "tmMatch": 2, - "default": 0, - "total": 2 + "default": 42, + "total": 44 }, "targetTranslated": { "tmMatch": 2, - "default": 0, - "total": 2 + "default": 40, + "total": 42 }, "translatedByMt": { "tmMatch": 0, @@ -104157,8 +107589,8 @@ }, "translationCosts": { "tmMatch": 2, - "default": 0, - "total": 2 + "default": 42, + "total": 44 }, "approvalCosts": { "tmMatch": 0, @@ -104171,7 +107603,7 @@ "id": "az", "name": "Azerbaijani", "tmSavings": 0, - "preTranslate": 764, + "preTranslate": 840, "totalCosts": 1 }, "translated": { @@ -104210,18 +107642,18 @@ "id": "eu", "name": "Basque", "tmSavings": 0, - "preTranslate": 516, - "totalCosts": 1 + "preTranslate": 528, + "totalCosts": 68 }, "translated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 37, + "default": 31, + "total": 68 }, "targetTranslated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 17, + "default": 21, + "total": 38 }, "translatedByMt": { "tmMatch": 0, @@ -104231,12 +107663,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 37, + "default": 31, + "total": 68 }, "approvalCosts": { "tmMatch": 0, @@ -104249,18 +107681,18 @@ "id": "bn", "name": "Bengali", "tmSavings": 0, - "preTranslate": 1995, - "totalCosts": 9439 + "preTranslate": 2110, + "totalCosts": 9526 }, "translated": { "tmMatch": 9389, - "default": 50, - "total": 9439 + "default": 137, + "total": 9526 }, "targetTranslated": { - "tmMatch": 16501, - "default": 72, - "total": 16573 + "tmMatch": 16489, + "default": 225, + "total": 16714 }, "translatedByMt": { "tmMatch": 0, @@ -104270,12 +107702,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1715 + "total": 1747 }, "translationCosts": { "tmMatch": 9389, - "default": 50, - "total": 9439 + "default": 137, + "total": 9526 }, "approvalCosts": { "tmMatch": 0, @@ -104288,7 +107720,7 @@ "id": "bi", "name": "Bislama", "tmSavings": 0, - "preTranslate": 50, + "preTranslate": 56, "totalCosts": 929 }, "translated": { @@ -104327,7 +107759,7 @@ "id": "br-FR", "name": "Breton", "tmSavings": 0, - "preTranslate": 334, + "preTranslate": 381, "totalCosts": 234 }, "translated": { @@ -104366,18 +107798,18 @@ "id": "bg", "name": "Bulgarian", "tmSavings": 0, - "preTranslate": 17510, - "totalCosts": 1224 + "preTranslate": 20554, + "totalCosts": 1296 }, "translated": { - "tmMatch": 1202, - "default": 22, - "total": 1224 + "tmMatch": 1209, + "default": 87, + "total": 1296 }, "targetTranslated": { - "tmMatch": 1242, - "default": 25, - "total": 1267 + "tmMatch": 1249, + "default": 77, + "total": 1326 }, "translatedByMt": { "tmMatch": 3, @@ -104387,12 +107819,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 252 + "total": 276 }, "translationCosts": { - "tmMatch": 1202, - "default": 22, - "total": 1224 + "tmMatch": 1209, + "default": 87, + "total": 1296 }, "approvalCosts": { "tmMatch": 0, @@ -104405,18 +107837,18 @@ "id": "my", "name": "Burmese", "tmSavings": 0, - "preTranslate": 382, - "totalCosts": 2 + "preTranslate": 474, + "totalCosts": 91 }, "translated": { - "tmMatch": 1, - "default": 1, - "total": 2 + "tmMatch": 21, + "default": 70, + "total": 91 }, "targetTranslated": { - "tmMatch": 1, - "default": 1, - "total": 2 + "tmMatch": 31, + "default": 70, + "total": 101 }, "translatedByMt": { "tmMatch": 0, @@ -104429,9 +107861,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 1, - "total": 2 + "tmMatch": 21, + "default": 70, + "total": 91 }, "approvalCosts": { "tmMatch": 0, @@ -104444,18 +107876,18 @@ "id": "ca", "name": "Catalan", "tmSavings": 0, - "preTranslate": 15490, - "totalCosts": 5265 + "preTranslate": 18574, + "totalCosts": 6182 }, "translated": { - "tmMatch": 5258, - "default": 7, - "total": 5265 + "tmMatch": 5322, + "default": 860, + "total": 6182 }, "targetTranslated": { - "tmMatch": 5858, - "default": 7, - "total": 5865 + "tmMatch": 5863, + "default": 925, + "total": 6788 }, "translatedByMt": { "tmMatch": 0, @@ -104465,12 +107897,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 606 + "total": 1721 }, "translationCosts": { - "tmMatch": 5258, - "default": 7, - "total": 5265 + "tmMatch": 5322, + "default": 860, + "total": 6182 }, "approvalCosts": { "tmMatch": 0, @@ -104483,18 +107915,18 @@ "id": "zh-CN", "name": "Chinese Simplified", "tmSavings": 0, - "preTranslate": 68778, - "totalCosts": 12132 + "preTranslate": 75056, + "totalCosts": 12257 }, "translated": { - "tmMatch": 10514, - "default": 1618, - "total": 12132 + "tmMatch": 10532, + "default": 1725, + "total": 12257 }, "targetTranslated": { - "tmMatch": 16635, - "default": 2404, - "total": 19039 + "tmMatch": 16665, + "default": 2600, + "total": 19265 }, "translatedByMt": { "tmMatch": 0, @@ -104504,12 +107936,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 3889 + "total": 5290 }, "translationCosts": { - "tmMatch": 10514, - "default": 1618, - "total": 12132 + "tmMatch": 10532, + "default": 1725, + "total": 12257 }, "approvalCosts": { "tmMatch": 0, @@ -104522,18 +107954,18 @@ "id": "zh-TW", "name": "Chinese Traditional", "tmSavings": 0, - "preTranslate": 63928, - "totalCosts": 14859 + "preTranslate": 69760, + "totalCosts": 14976 }, "translated": { - "tmMatch": 9872, - "default": 4987, - "total": 14859 + "tmMatch": 9966, + "default": 5010, + "total": 14976 }, "targetTranslated": { - "tmMatch": 14390, - "default": 7712, - "total": 22102 + "tmMatch": 14535, + "default": 7765, + "total": 22300 }, "translatedByMt": { "tmMatch": 1, @@ -104543,12 +107975,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1559 + "total": 1906 }, "translationCosts": { - "tmMatch": 9872, - "default": 4987, - "total": 14859 + "tmMatch": 9966, + "default": 5010, + "total": 14976 }, "approvalCosts": { "tmMatch": 0, @@ -104561,18 +107993,18 @@ "id": "hr", "name": "Croatian", "tmSavings": 0, - "preTranslate": 12425, - "totalCosts": 327 + "preTranslate": 15024, + "totalCosts": 569 }, "translated": { - "tmMatch": 308, - "default": 19, - "total": 327 + "tmMatch": 333, + "default": 236, + "total": 569 }, "targetTranslated": { - "tmMatch": 312, - "default": 19, - "total": 331 + "tmMatch": 341, + "default": 201, + "total": 542 }, "translatedByMt": { "tmMatch": 0, @@ -104582,12 +108014,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 344 + "total": 347 }, "translationCosts": { - "tmMatch": 308, - "default": 19, - "total": 327 + "tmMatch": 333, + "default": 236, + "total": 569 }, "approvalCosts": { "tmMatch": 0, @@ -104600,18 +108032,18 @@ "id": "cs", "name": "Czech", "tmSavings": 0, - "preTranslate": 9268, - "totalCosts": 10301 + "preTranslate": 11935, + "totalCosts": 10417 }, "translated": { - "tmMatch": 10190, - "default": 111, - "total": 10301 + "tmMatch": 10216, + "default": 201, + "total": 10417 }, "targetTranslated": { - "tmMatch": 10141, - "default": 103, - "total": 10244 + "tmMatch": 10158, + "default": 190, + "total": 10348 }, "translatedByMt": { "tmMatch": 2, @@ -104621,12 +108053,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1825 + "total": 1850 }, "translationCosts": { - "tmMatch": 10190, - "default": 111, - "total": 10301 + "tmMatch": 10216, + "default": 201, + "total": 10417 }, "approvalCosts": { "tmMatch": 0, @@ -104639,18 +108071,18 @@ "id": "da", "name": "Danish", "tmSavings": 0, - "preTranslate": 3478, - "totalCosts": 258 + "preTranslate": 5564, + "totalCosts": 294 }, "translated": { - "tmMatch": 246, - "default": 12, - "total": 258 + "tmMatch": 265, + "default": 29, + "total": 294 }, "targetTranslated": { - "tmMatch": 248, - "default": 12, - "total": 260 + "tmMatch": 267, + "default": 28, + "total": 295 }, "translatedByMt": { "tmMatch": 0, @@ -104660,12 +108092,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 157 + "total": 177 }, "translationCosts": { - "tmMatch": 246, - "default": 12, - "total": 258 + "tmMatch": 265, + "default": 29, + "total": 294 }, "approvalCosts": { "tmMatch": 0, @@ -104678,7 +108110,7 @@ "id": "fa-AF", "name": "Dari", "tmSavings": 0, - "preTranslate": 17, + "preTranslate": 20, "totalCosts": 1 }, "translated": { @@ -104717,18 +108149,18 @@ "id": "nl", "name": "Dutch", "tmSavings": 0, - "preTranslate": 10291, - "totalCosts": 9252 + "preTranslate": 13473, + "totalCosts": 9455 }, "translated": { - "tmMatch": 9235, - "default": 17, - "total": 9252 + "tmMatch": 9262, + "default": 193, + "total": 9455 }, "targetTranslated": { - "tmMatch": 9180, - "default": 18, - "total": 9198 + "tmMatch": 9208, + "default": 205, + "total": 9413 }, "translatedByMt": { "tmMatch": 0, @@ -104738,12 +108170,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2003 + "total": 2023 }, "translationCosts": { - "tmMatch": 9235, - "default": 17, - "total": 9252 + "tmMatch": 9262, + "default": 193, + "total": 9455 }, "approvalCosts": { "tmMatch": 0, @@ -104756,7 +108188,7 @@ "id": "eo", "name": "Esperanto", "tmSavings": 0, - "preTranslate": 100, + "preTranslate": 106, "totalCosts": 276 }, "translated": { @@ -104795,7 +108227,7 @@ "id": "et", "name": "Estonian", "tmSavings": 0, - "preTranslate": 164, + "preTranslate": 182, "totalCosts": 1 }, "translated": { @@ -104834,7 +108266,7 @@ "id": "fil", "name": "Filipino", "tmSavings": 0, - "preTranslate": 1211, + "preTranslate": 1542, "totalCosts": 627 }, "translated": { @@ -104843,9 +108275,9 @@ "total": 627 }, "targetTranslated": { - "tmMatch": 1058, + "tmMatch": 843, "default": 92, - "total": 1150 + "total": 935 }, "translatedByMt": { "tmMatch": 0, @@ -104873,18 +108305,18 @@ "id": "fi", "name": "Finnish", "tmSavings": 0, - "preTranslate": 2705, - "totalCosts": 4915 + "preTranslate": 4289, + "totalCosts": 5049 }, "translated": { - "tmMatch": 4903, - "default": 12, - "total": 4915 + "tmMatch": 4922, + "default": 127, + "total": 5049 }, "targetTranslated": { - "tmMatch": 4012, - "default": 12, - "total": 4024 + "tmMatch": 4026, + "default": 103, + "total": 4129 }, "translatedByMt": { "tmMatch": 0, @@ -104894,12 +108326,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 215 + "total": 236 }, "translationCosts": { - "tmMatch": 4903, - "default": 12, - "total": 4915 + "tmMatch": 4922, + "default": 127, + "total": 5049 }, "approvalCosts": { "tmMatch": 0, @@ -104912,18 +108344,18 @@ "id": "fr", "name": "French", "tmSavings": 0, - "preTranslate": 60693, - "totalCosts": 11479 + "preTranslate": 66991, + "totalCosts": 11541 }, "translated": { - "tmMatch": 10769, - "default": 710, - "total": 11479 + "tmMatch": 10771, + "default": 770, + "total": 11541 }, "targetTranslated": { - "tmMatch": 11927, - "default": 723, - "total": 12650 + "tmMatch": 11929, + "default": 784, + "total": 12713 }, "translatedByMt": { "tmMatch": 0, @@ -104933,12 +108365,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 3803 + "total": 6151 }, "translationCosts": { - "tmMatch": 10769, - "default": 710, - "total": 11479 + "tmMatch": 10771, + "default": 770, + "total": 11541 }, "approvalCosts": { "tmMatch": 0, @@ -104951,18 +108383,18 @@ "id": "gl", "name": "Galician", "tmSavings": 0, - "preTranslate": 1130, - "totalCosts": 0 + "preTranslate": 3023, + "totalCosts": 81 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 80, + "total": 81 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 97, + "total": 98 }, "translatedByMt": { "tmMatch": 0, @@ -104972,12 +108404,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 36 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 80, + "total": 81 }, "approvalCosts": { "tmMatch": 0, @@ -104990,18 +108422,18 @@ "id": "ka", "name": "Georgian", "tmSavings": 0, - "preTranslate": 701, - "totalCosts": 167 + "preTranslate": 997, + "totalCosts": 187 }, "translated": { - "tmMatch": 154, - "default": 13, - "total": 167 + "tmMatch": 165, + "default": 22, + "total": 187 }, "targetTranslated": { - "tmMatch": 154, - "default": 13, - "total": 167 + "tmMatch": 161, + "default": 20, + "total": 181 }, "translatedByMt": { "tmMatch": 0, @@ -105014,9 +108446,9 @@ "total": 167 }, "translationCosts": { - "tmMatch": 154, - "default": 13, - "total": 167 + "tmMatch": 165, + "default": 22, + "total": 187 }, "approvalCosts": { "tmMatch": 0, @@ -105029,18 +108461,18 @@ "id": "de", "name": "German", "tmSavings": 0, - "preTranslate": 57989, - "totalCosts": 10024 + "preTranslate": 64230, + "totalCosts": 10831 }, "translated": { - "tmMatch": 9329, - "default": 695, - "total": 10024 + "tmMatch": 9367, + "default": 1464, + "total": 10831 }, "targetTranslated": { - "tmMatch": 9054, - "default": 653, - "total": 9707 + "tmMatch": 9095, + "default": 1399, + "total": 10494 }, "translatedByMt": { "tmMatch": 0, @@ -105050,12 +108482,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1999 + "total": 2330 }, "translationCosts": { - "tmMatch": 9329, - "default": 695, - "total": 10024 + "tmMatch": 9367, + "default": 1464, + "total": 10831 }, "approvalCosts": { "tmMatch": 0, @@ -105068,7 +108500,7 @@ "id": "gi", "name": "Gilbertese", "tmSavings": 0, - "preTranslate": 24, + "preTranslate": 27, "totalCosts": 10 }, "translated": { @@ -105107,18 +108539,18 @@ "id": "el", "name": "Greek", "tmSavings": 0, - "preTranslate": 21834, - "totalCosts": 7595 + "preTranslate": 25362, + "totalCosts": 8355 }, "translated": { - "tmMatch": 7567, - "default": 28, - "total": 7595 + "tmMatch": 7584, + "default": 771, + "total": 8355 }, "targetTranslated": { - "tmMatch": 8119, - "default": 29, - "total": 8148 + "tmMatch": 8144, + "default": 848, + "total": 8992 }, "translatedByMt": { "tmMatch": 0, @@ -105128,12 +108560,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2440 + "total": 2460 }, "translationCosts": { - "tmMatch": 7567, - "default": 28, - "total": 7595 + "tmMatch": 7584, + "default": 771, + "total": 8355 }, "approvalCosts": { "tmMatch": 0, @@ -105146,7 +108578,7 @@ "id": "gu-IN", "name": "Gujarati", "tmSavings": 0, - "preTranslate": 1361, + "preTranslate": 1411, "totalCosts": 1 }, "translated": { @@ -105167,7 +108599,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { "tmMatch": 0, @@ -105185,7 +108617,7 @@ "id": "ha", "name": "Hausa", "tmSavings": 0, - "preTranslate": 29, + "preTranslate": 35, "totalCosts": 52 }, "translated": { @@ -105224,18 +108656,18 @@ "id": "he", "name": "Hebrew", "tmSavings": 0, - "preTranslate": 920, - "totalCosts": 2571 + "preTranslate": 1025, + "totalCosts": 2623 }, "translated": { - "tmMatch": 2553, - "default": 18, - "total": 2571 + "tmMatch": 2570, + "default": 53, + "total": 2623 }, "targetTranslated": { - "tmMatch": 2304, - "default": 19, - "total": 2323 + "tmMatch": 2312, + "default": 54, + "total": 2366 }, "translatedByMt": { "tmMatch": 0, @@ -105248,9 +108680,9 @@ "total": 673 }, "translationCosts": { - "tmMatch": 2553, - "default": 18, - "total": 2571 + "tmMatch": 2570, + "default": 53, + "total": 2623 }, "approvalCosts": { "tmMatch": 0, @@ -105263,18 +108695,18 @@ "id": "hi", "name": "Hindi", "tmSavings": 0, - "preTranslate": 7173, - "totalCosts": 5655 + "preTranslate": 10357, + "totalCosts": 5830 }, "translated": { - "tmMatch": 5628, - "default": 27, - "total": 5655 + "tmMatch": 5673, + "default": 157, + "total": 5830 }, "targetTranslated": { - "tmMatch": 9065, - "default": 29, - "total": 9094 + "tmMatch": 9098, + "default": 239, + "total": 9337 }, "translatedByMt": { "tmMatch": 0, @@ -105284,12 +108716,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 745 + "total": 765 }, "translationCosts": { - "tmMatch": 5628, - "default": 27, - "total": 5655 + "tmMatch": 5673, + "default": 157, + "total": 5830 }, "approvalCosts": { "tmMatch": 0, @@ -105302,18 +108734,18 @@ "id": "hu", "name": "Hungarian", "tmSavings": 0, - "preTranslate": 41711, - "totalCosts": 5386 + "preTranslate": 47009, + "totalCosts": 5390 }, "translated": { - "tmMatch": 5330, - "default": 56, - "total": 5386 + "tmMatch": 5333, + "default": 57, + "total": 5390 }, "targetTranslated": { - "tmMatch": 5071, - "default": 45, - "total": 5116 + "tmMatch": 5074, + "default": 46, + "total": 5120 }, "translatedByMt": { "tmMatch": 0, @@ -105323,12 +108755,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 412 + "total": 432 }, "translationCosts": { - "tmMatch": 5330, - "default": 56, - "total": 5386 + "tmMatch": 5333, + "default": 57, + "total": 5390 }, "approvalCosts": { "tmMatch": 0, @@ -105341,18 +108773,18 @@ "id": "ig", "name": "Igbo", "tmSavings": 0, - "preTranslate": 1004, - "totalCosts": 6610 + "preTranslate": 1256, + "totalCosts": 6635 }, "translated": { "tmMatch": 6584, - "default": 26, - "total": 6610 + "default": 51, + "total": 6635 }, "targetTranslated": { "tmMatch": 7541, - "default": 31, - "total": 7572 + "default": 51, + "total": 7592 }, "translatedByMt": { "tmMatch": 0, @@ -105366,8 +108798,8 @@ }, "translationCosts": { "tmMatch": 6584, - "default": 26, - "total": 6610 + "default": 51, + "total": 6635 }, "approvalCosts": { "tmMatch": 0, @@ -105380,18 +108812,18 @@ "id": "id", "name": "Indonesian", "tmSavings": 0, - "preTranslate": 64256, - "totalCosts": 11321 + "preTranslate": 70495, + "totalCosts": 11421 }, "translated": { - "tmMatch": 9765, - "default": 1556, - "total": 11321 + "tmMatch": 9769, + "default": 1652, + "total": 11421 }, "targetTranslated": { - "tmMatch": 9849, - "default": 1470, - "total": 11319 + "tmMatch": 9853, + "default": 1553, + "total": 11406 }, "translatedByMt": { "tmMatch": 0, @@ -105401,12 +108833,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 3332 + "total": 3394 }, "translationCosts": { - "tmMatch": 9765, - "default": 1556, - "total": 11321 + "tmMatch": 9769, + "default": 1652, + "total": 11421 }, "approvalCosts": { "tmMatch": 0, @@ -105419,18 +108851,18 @@ "id": "it", "name": "Italian", "tmSavings": 0, - "preTranslate": 69074, - "totalCosts": 12548 + "preTranslate": 75974, + "totalCosts": 12606 }, "translated": { - "tmMatch": 11928, - "default": 620, - "total": 12548 + "tmMatch": 11930, + "default": 676, + "total": 12606 }, "targetTranslated": { - "tmMatch": 12683, - "default": 632, - "total": 13315 + "tmMatch": 12685, + "default": 691, + "total": 13376 }, "translatedByMt": { "tmMatch": 0, @@ -105440,12 +108872,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 3807 + "total": 4097 }, "translationCosts": { - "tmMatch": 11928, - "default": 620, - "total": 12548 + "tmMatch": 11930, + "default": 676, + "total": 12606 }, "approvalCosts": { "tmMatch": 0, @@ -105458,18 +108890,18 @@ "id": "ja", "name": "Japanese", "tmSavings": 0, - "preTranslate": 49776, - "totalCosts": 11512 + "preTranslate": 55745, + "totalCosts": 11560 }, "translated": { - "tmMatch": 10329, - "default": 1183, - "total": 11512 + "tmMatch": 10330, + "default": 1230, + "total": 11560 }, "targetTranslated": { - "tmMatch": 24913, - "default": 2632, - "total": 27545 + "tmMatch": 24918, + "default": 2686, + "total": 27604 }, "translatedByMt": { "tmMatch": 0, @@ -105479,12 +108911,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2108 + "total": 2156 }, "translationCosts": { - "tmMatch": 10329, - "default": 1183, - "total": 11512 + "tmMatch": 10330, + "default": 1230, + "total": 11560 }, "approvalCosts": { "tmMatch": 0, @@ -105497,7 +108929,7 @@ "id": "kn", "name": "Kannada", "tmSavings": 0, - "preTranslate": 798, + "preTranslate": 830, "totalCosts": 1 }, "translated": { @@ -105518,7 +108950,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { "tmMatch": 0, @@ -105536,7 +108968,7 @@ "id": "kk", "name": "Kazakh", "tmSavings": 0, - "preTranslate": 831, + "preTranslate": 927, "totalCosts": 1 }, "translated": { @@ -105557,7 +108989,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2 + "total": 3 }, "translationCosts": { "tmMatch": 0, @@ -105575,7 +109007,7 @@ "id": "km", "name": "Khmer", "tmSavings": 0, - "preTranslate": 17, + "preTranslate": 20, "totalCosts": 1 }, "translated": { @@ -105614,33 +109046,33 @@ "id": "ko", "name": "Korean", "tmSavings": 0, - "preTranslate": 10495, - "totalCosts": 13678 + "preTranslate": 14692, + "totalCosts": 14188 }, "translated": { - "tmMatch": 10881, - "default": 2797, - "total": 13678 + "tmMatch": 10925, + "default": 3263, + "total": 14188 }, "targetTranslated": { - "tmMatch": 10198, - "default": 2572, - "total": 12770 + "tmMatch": 10230, + "default": 2940, + "total": 13170 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 3, "default": 0, - "total": 0 + "total": 3 }, "approved": { "tmMatch": 0, "default": 0, - "total": 6576 + "total": 6715 }, "translationCosts": { - "tmMatch": 10881, - "default": 2797, - "total": 13678 + "tmMatch": 10925, + "default": 3263, + "total": 14188 }, "approvalCosts": { "tmMatch": 0, @@ -105653,18 +109085,18 @@ "id": "ku", "name": "Kurdish", "tmSavings": 0, - "preTranslate": 367, - "totalCosts": 1 + "preTranslate": 384, + "totalCosts": 6 }, "translated": { - "tmMatch": 1, + "tmMatch": 6, "default": 0, - "total": 1 + "total": 6 }, "targetTranslated": { - "tmMatch": 1, + "tmMatch": 6, "default": 0, - "total": 1 + "total": 6 }, "translatedByMt": { "tmMatch": 0, @@ -105677,9 +109109,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, + "tmMatch": 6, "default": 0, - "total": 1 + "total": 6 }, "approvalCosts": { "tmMatch": 0, @@ -105692,7 +109124,7 @@ "id": "ky", "name": "Kyrgyz", "tmSavings": 0, - "preTranslate": 323, + "preTranslate": 340, "totalCosts": 151 }, "translated": { @@ -105713,7 +109145,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 36 + "total": 37 }, "translationCosts": { "tmMatch": 151, @@ -105731,7 +109163,7 @@ "id": "lt", "name": "Lithuanian", "tmSavings": 0, - "preTranslate": 3984, + "preTranslate": 4265, "totalCosts": 5950 }, "translated": { @@ -105770,18 +109202,18 @@ "id": "mk", "name": "Macedonian", "tmSavings": 0, - "preTranslate": 1447, - "totalCosts": 169 + "preTranslate": 1516, + "totalCosts": 173 }, "translated": { "tmMatch": 168, - "default": 1, - "total": 169 + "default": 5, + "total": 173 }, "targetTranslated": { "tmMatch": 167, - "default": 1, - "total": 168 + "default": 6, + "total": 173 }, "translatedByMt": { "tmMatch": 0, @@ -105795,8 +109227,8 @@ }, "translationCosts": { "tmMatch": 168, - "default": 1, - "total": 169 + "default": 5, + "total": 173 }, "approvalCosts": { "tmMatch": 0, @@ -105809,7 +109241,7 @@ "id": "mai", "name": "Maithili", "tmSavings": 0, - "preTranslate": 17, + "preTranslate": 20, "totalCosts": 1 }, "translated": { @@ -105848,18 +109280,18 @@ "id": "ms", "name": "Malay", "tmSavings": 0, - "preTranslate": 4298, - "totalCosts": 1273 + "preTranslate": 7114, + "totalCosts": 1886 }, "translated": { - "tmMatch": 1258, - "default": 15, - "total": 1273 + "tmMatch": 1267, + "default": 619, + "total": 1886 }, "targetTranslated": { - "tmMatch": 1286, - "default": 15, - "total": 1301 + "tmMatch": 1295, + "default": 525, + "total": 1820 }, "translatedByMt": { "tmMatch": 0, @@ -105869,12 +109301,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 401 + "total": 404 }, "translationCosts": { - "tmMatch": 1258, - "default": 15, - "total": 1273 + "tmMatch": 1267, + "default": 619, + "total": 1886 }, "approvalCosts": { "tmMatch": 0, @@ -105887,18 +109319,18 @@ "id": "ml-IN", "name": "Malayalam", "tmSavings": 0, - "preTranslate": 5950, - "totalCosts": 4801 + "preTranslate": 8494, + "totalCosts": 4804 }, "translated": { - "tmMatch": 4771, - "default": 30, - "total": 4801 + "tmMatch": 4773, + "default": 31, + "total": 4804 }, "targetTranslated": { - "tmMatch": 8114, - "default": 57, - "total": 8171 + "tmMatch": 8116, + "default": 58, + "total": 8174 }, "translatedByMt": { "tmMatch": 0, @@ -105908,12 +109340,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 469 + "total": 472 }, "translationCosts": { - "tmMatch": 4771, - "default": 30, - "total": 4801 + "tmMatch": 4773, + "default": 31, + "total": 4804 }, "approvalCosts": { "tmMatch": 0, @@ -105926,18 +109358,18 @@ "id": "mr", "name": "Marathi", "tmSavings": 0, - "preTranslate": 782, - "totalCosts": 33 + "preTranslate": 927, + "totalCosts": 67 }, "translated": { "tmMatch": 30, - "default": 3, - "total": 33 + "default": 37, + "total": 67 }, "targetTranslated": { "tmMatch": 30, - "default": 3, - "total": 33 + "default": 52, + "total": 82 }, "translatedByMt": { "tmMatch": 0, @@ -105947,12 +109379,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 129 + "total": 151 }, "translationCosts": { "tmMatch": 30, - "default": 3, - "total": 33 + "default": 37, + "total": 67 }, "approvalCosts": { "tmMatch": 0, @@ -105965,7 +109397,7 @@ "id": "mn", "name": "Mongolian", "tmSavings": 0, - "preTranslate": 58, + "preTranslate": 64, "totalCosts": 1 }, "translated": { @@ -106004,18 +109436,18 @@ "id": "ne-NP", "name": "Nepali", "tmSavings": 0, - "preTranslate": 325, - "totalCosts": 1 + "preTranslate": 353, + "totalCosts": 51 }, "translated": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 51, + "total": 51 }, "targetTranslated": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 78, + "total": 78 }, "translatedByMt": { "tmMatch": 0, @@ -106029,8 +109461,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 51, + "total": 51 }, "approvalCosts": { "tmMatch": 0, @@ -106043,18 +109475,18 @@ "id": "no", "name": "Norwegian", "tmSavings": 0, - "preTranslate": 2232, - "totalCosts": 5062 + "preTranslate": 2376, + "totalCosts": 5082 }, "translated": { - "tmMatch": 5004, - "default": 58, - "total": 5062 + "tmMatch": 5023, + "default": 59, + "total": 5082 }, "targetTranslated": { - "tmMatch": 4836, - "default": 57, - "total": 4893 + "tmMatch": 4853, + "default": 58, + "total": 4911 }, "translatedByMt": { "tmMatch": 0, @@ -106064,12 +109496,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 373 + "total": 376 }, "translationCosts": { - "tmMatch": 5004, - "default": 58, - "total": 5062 + "tmMatch": 5023, + "default": 59, + "total": 5082 }, "approvalCosts": { "tmMatch": 0, @@ -106082,18 +109514,18 @@ "id": "or", "name": "Odia", "tmSavings": 0, - "preTranslate": 38, - "totalCosts": 1 + "preTranslate": 204, + "totalCosts": 7 }, "translated": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 7, + "total": 7 }, "targetTranslated": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 9, + "total": 9 }, "translatedByMt": { "tmMatch": 0, @@ -106103,12 +109535,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 30 }, "translationCosts": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 7, + "total": 7 }, "approvalCosts": { "tmMatch": 0, @@ -106121,18 +109553,18 @@ "id": "fa", "name": "Persian", "tmSavings": 0, - "preTranslate": 20691, - "totalCosts": 6515 + "preTranslate": 24720, + "totalCosts": 6516 }, "translated": { - "tmMatch": 6306, + "tmMatch": 6307, "default": 209, - "total": 6515 + "total": 6516 }, "targetTranslated": { - "tmMatch": 7451, + "tmMatch": 7452, "default": 226, - "total": 7677 + "total": 7678 }, "translatedByMt": { "tmMatch": 3, @@ -106142,12 +109574,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2144 + "total": 2239 }, "translationCosts": { - "tmMatch": 6306, + "tmMatch": 6307, "default": 209, - "total": 6515 + "total": 6516 }, "approvalCosts": { "tmMatch": 0, @@ -106160,18 +109592,18 @@ "id": "pl", "name": "Polish", "tmSavings": 0, - "preTranslate": 50260, - "totalCosts": 7387 + "preTranslate": 56825, + "totalCosts": 7400 }, "translated": { - "tmMatch": 6755, - "default": 632, - "total": 7387 + "tmMatch": 6767, + "default": 633, + "total": 7400 }, "targetTranslated": { - "tmMatch": 6407, - "default": 628, - "total": 7035 + "tmMatch": 6420, + "default": 629, + "total": 7049 }, "translatedByMt": { "tmMatch": 3, @@ -106181,12 +109613,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2323 + "total": 2342 }, "translationCosts": { - "tmMatch": 6755, - "default": 632, - "total": 7387 + "tmMatch": 6767, + "default": 633, + "total": 7400 }, "approvalCosts": { "tmMatch": 0, @@ -106199,18 +109631,18 @@ "id": "pt-PT", "name": "Portuguese", "tmSavings": 0, - "preTranslate": 4506, - "totalCosts": 8687 + "preTranslate": 7146, + "totalCosts": 8874 }, "translated": { - "tmMatch": 7399, - "default": 1288, - "total": 8687 + "tmMatch": 7426, + "default": 1448, + "total": 8874 }, "targetTranslated": { - "tmMatch": 7951, - "default": 1335, - "total": 9286 + "tmMatch": 7982, + "default": 1493, + "total": 9475 }, "translatedByMt": { "tmMatch": 0, @@ -106220,12 +109652,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1746 + "total": 1766 }, "translationCosts": { - "tmMatch": 7399, - "default": 1288, - "total": 8687 + "tmMatch": 7426, + "default": 1448, + "total": 8874 }, "approvalCosts": { "tmMatch": 0, @@ -106238,18 +109670,18 @@ "id": "pt-BR", "name": "Portuguese, Brazilian", "tmSavings": 0, - "preTranslate": 59863, - "totalCosts": 11040 + "preTranslate": 67442, + "totalCosts": 11839 }, "translated": { - "tmMatch": 10493, - "default": 547, - "total": 11040 + "tmMatch": 10518, + "default": 1321, + "total": 11839 }, "targetTranslated": { - "tmMatch": 11182, - "default": 567, - "total": 11749 + "tmMatch": 11209, + "default": 1378, + "total": 12587 }, "translatedByMt": { "tmMatch": 0, @@ -106259,12 +109691,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1908 + "total": 2156 }, "translationCosts": { - "tmMatch": 10493, - "default": 547, - "total": 11040 + "tmMatch": 10518, + "default": 1321, + "total": 11839 }, "approvalCosts": { "tmMatch": 0, @@ -106277,7 +109709,7 @@ "id": "pa-IN", "name": "Punjabi", "tmSavings": 0, - "preTranslate": 125, + "preTranslate": 134, "totalCosts": 519 }, "translated": { @@ -106316,18 +109748,18 @@ "id": "ro", "name": "Romanian", "tmSavings": 0, - "preTranslate": 64119, - "totalCosts": 8736 + "preTranslate": 68328, + "totalCosts": 8749 }, "translated": { - "tmMatch": 6914, - "default": 1822, - "total": 8736 + "tmMatch": 6916, + "default": 1833, + "total": 8749 }, "targetTranslated": { - "tmMatch": 7274, - "default": 1842, - "total": 9116 + "tmMatch": 7276, + "default": 1854, + "total": 9130 }, "translatedByMt": { "tmMatch": 0, @@ -106337,12 +109769,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1920 + "total": 2087 }, "translationCosts": { - "tmMatch": 6914, - "default": 1822, - "total": 8736 + "tmMatch": 6916, + "default": 1833, + "total": 8749 }, "approvalCosts": { "tmMatch": 0, @@ -106355,18 +109787,18 @@ "id": "ru", "name": "Russian", "tmSavings": 0, - "preTranslate": 38463, - "totalCosts": 9168 + "preTranslate": 43952, + "totalCosts": 10644 }, "translated": { - "tmMatch": 9073, - "default": 95, - "total": 9168 + "tmMatch": 9156, + "default": 1488, + "total": 10644 }, "targetTranslated": { - "tmMatch": 8808, - "default": 80, - "total": 8888 + "tmMatch": 8861, + "default": 1178, + "total": 10039 }, "translatedByMt": { "tmMatch": 0, @@ -106376,12 +109808,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2419 + "total": 2509 }, "translationCosts": { - "tmMatch": 9073, - "default": 95, - "total": 9168 + "tmMatch": 9156, + "default": 1488, + "total": 10644 }, "approvalCosts": { "tmMatch": 0, @@ -106433,7 +109865,7 @@ "id": "sat", "name": "Santali", "tmSavings": 0, - "preTranslate": 17, + "preTranslate": 20, "totalCosts": 1 }, "translated": { @@ -106472,18 +109904,18 @@ "id": "sr-CS", "name": "Serbian (Latin)", "tmSavings": 0, - "preTranslate": 4457, - "totalCosts": 1115 + "preTranslate": 4971, + "totalCosts": 1287 }, "translated": { - "tmMatch": 1102, - "default": 13, - "total": 1115 + "tmMatch": 1193, + "default": 94, + "total": 1287 }, "targetTranslated": { - "tmMatch": 1069, - "default": 13, - "total": 1082 + "tmMatch": 1144, + "default": 89, + "total": 1233 }, "translatedByMt": { "tmMatch": 0, @@ -106493,12 +109925,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 557 + "total": 560 }, "translationCosts": { - "tmMatch": 1102, - "default": 13, - "total": 1115 + "tmMatch": 1193, + "default": 94, + "total": 1287 }, "approvalCosts": { "tmMatch": 0, @@ -106511,7 +109943,7 @@ "id": "sn", "name": "Shona", "tmSavings": 0, - "preTranslate": 137, + "preTranslate": 150, "totalCosts": 0 }, "translated": { @@ -106550,7 +109982,7 @@ "id": "si-LK", "name": "Sinhala", "tmSavings": 0, - "preTranslate": 240, + "preTranslate": 270, "totalCosts": 1 }, "translated": { @@ -106589,18 +110021,18 @@ "id": "sk", "name": "Slovak", "tmSavings": 0, - "preTranslate": 3184, - "totalCosts": 9121 + "preTranslate": 5347, + "totalCosts": 9316 }, "translated": { - "tmMatch": 9089, - "default": 32, - "total": 9121 + "tmMatch": 9091, + "default": 225, + "total": 9316 }, "targetTranslated": { - "tmMatch": 9105, - "default": 35, - "total": 9140 + "tmMatch": 9107, + "default": 195, + "total": 9302 }, "translatedByMt": { "tmMatch": 0, @@ -106610,12 +110042,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1674 + "total": 1677 }, "translationCosts": { - "tmMatch": 9089, - "default": 32, - "total": 9121 + "tmMatch": 9091, + "default": 225, + "total": 9316 }, "approvalCosts": { "tmMatch": 0, @@ -106628,18 +110060,18 @@ "id": "sl", "name": "Slovenian", "tmSavings": 0, - "preTranslate": 31923, - "totalCosts": 6626 + "preTranslate": 37167, + "totalCosts": 9573 }, "translated": { - "tmMatch": 6496, - "default": 130, - "total": 6626 + "tmMatch": 6548, + "default": 3025, + "total": 9573 }, "targetTranslated": { - "tmMatch": 6516, - "default": 128, - "total": 6644 + "tmMatch": 6571, + "default": 2749, + "total": 9320 }, "translatedByMt": { "tmMatch": 0, @@ -106649,12 +110081,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1853 + "total": 1890 }, "translationCosts": { - "tmMatch": 6496, - "default": 130, - "total": 6626 + "tmMatch": 6548, + "default": 3025, + "total": 9573 }, "approvalCosts": { "tmMatch": 0, @@ -106667,18 +110099,18 @@ "id": "so", "name": "Somali", "tmSavings": 0, - "preTranslate": 504, - "totalCosts": 0 + "preTranslate": 531, + "totalCosts": 4 }, "translated": { - "tmMatch": 0, + "tmMatch": 4, "default": 0, - "total": 0 + "total": 4 }, "targetTranslated": { - "tmMatch": 0, + "tmMatch": 4, "default": 0, - "total": 0 + "total": 4 }, "translatedByMt": { "tmMatch": 0, @@ -106691,9 +110123,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 4, "default": 0, - "total": 0 + "total": 4 }, "approvalCosts": { "tmMatch": 0, @@ -106706,18 +110138,18 @@ "id": "es-EM", "name": "Spanish (Modern)", "tmSavings": 0, - "preTranslate": 64573, - "totalCosts": 15016 + "preTranslate": 71939, + "totalCosts": 15091 }, "translated": { "tmMatch": 10790, - "default": 4226, - "total": 15016 + "default": 4301, + "total": 15091 }, "targetTranslated": { "tmMatch": 12060, - "default": 4271, - "total": 16331 + "default": 4350, + "total": 16410 }, "translatedByMt": { "tmMatch": 0, @@ -106727,12 +110159,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 4567 + "total": 4728 }, "translationCosts": { "tmMatch": 10790, - "default": 4226, - "total": 15016 + "default": 4301, + "total": 15091 }, "approvalCosts": { "tmMatch": 0, @@ -106745,18 +110177,18 @@ "id": "sw", "name": "Swahili", "tmSavings": 0, - "preTranslate": 7219, - "totalCosts": 77 + "preTranslate": 9965, + "totalCosts": 409 }, "translated": { - "tmMatch": 57, - "default": 20, - "total": 77 + "tmMatch": 76, + "default": 333, + "total": 409 }, "targetTranslated": { - "tmMatch": 52, - "default": 20, - "total": 72 + "tmMatch": 72, + "default": 323, + "total": 395 }, "translatedByMt": { "tmMatch": 0, @@ -106766,12 +110198,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 156 + "total": 352 }, "translationCosts": { - "tmMatch": 57, - "default": 20, - "total": 77 + "tmMatch": 76, + "default": 333, + "total": 409 }, "approvalCosts": { "tmMatch": 0, @@ -106784,18 +110216,18 @@ "id": "sv-SE", "name": "Swedish", "tmSavings": 0, - "preTranslate": 3548, - "totalCosts": 9248 + "preTranslate": 5004, + "totalCosts": 9296 }, "translated": { - "tmMatch": 9216, - "default": 32, - "total": 9248 + "tmMatch": 9244, + "default": 52, + "total": 9296 }, "targetTranslated": { - "tmMatch": 9002, - "default": 31, - "total": 9033 + "tmMatch": 9029, + "default": 48, + "total": 9077 }, "translatedByMt": { "tmMatch": 3, @@ -106805,12 +110237,51 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1597 + "total": 1600 }, "translationCosts": { - "tmMatch": 9216, - "default": 32, - "total": 9248 + "tmMatch": 9244, + "default": 52, + "total": 9296 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "tl", + "name": "Tagalog", + "tmSavings": 0, + "preTranslate": 49, + "totalCosts": 0 + }, + "translated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 }, "approvalCosts": { "tmMatch": 0, @@ -106823,7 +110294,7 @@ "id": "tg", "name": "Tajik", "tmSavings": 0, - "preTranslate": 453, + "preTranslate": 464, "totalCosts": 239 }, "translated": { @@ -106844,7 +110315,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 83 + "total": 85 }, "translationCosts": { "tmMatch": 236, @@ -106862,18 +110333,18 @@ "id": "ta", "name": "Tamil", "tmSavings": 0, - "preTranslate": 557, - "totalCosts": 1676 + "preTranslate": 652, + "totalCosts": 1723 }, "translated": { "tmMatch": 1669, - "default": 7, - "total": 1676 + "default": 54, + "total": 1723 }, "targetTranslated": { "tmMatch": 3159, - "default": 16, - "total": 3175 + "default": 109, + "total": 3268 }, "translatedByMt": { "tmMatch": 3, @@ -106887,8 +110358,8 @@ }, "translationCosts": { "tmMatch": 1669, - "default": 7, - "total": 1676 + "default": 54, + "total": 1723 }, "approvalCosts": { "tmMatch": 0, @@ -106901,7 +110372,7 @@ "id": "te", "name": "Telugu", "tmSavings": 0, - "preTranslate": 674, + "preTranslate": 714, "totalCosts": 2082 }, "translated": { @@ -106922,7 +110393,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 814 + "total": 815 }, "translationCosts": { "tmMatch": 2079, @@ -106940,18 +110411,18 @@ "id": "th", "name": "Thai", "tmSavings": 0, - "preTranslate": 3624, - "totalCosts": 5508 + "preTranslate": 5522, + "totalCosts": 5593 }, "translated": { - "tmMatch": 5489, - "default": 19, - "total": 5508 + "tmMatch": 5491, + "default": 102, + "total": 5593 }, "targetTranslated": { - "tmMatch": 3277, - "default": 18, - "total": 3295 + "tmMatch": 3272, + "default": 39, + "total": 3311 }, "translatedByMt": { "tmMatch": 0, @@ -106961,12 +110432,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1528 + "total": 1564 }, "translationCosts": { - "tmMatch": 5489, - "default": 19, - "total": 5508 + "tmMatch": 5491, + "default": 102, + "total": 5593 }, "approvalCosts": { "tmMatch": 0, @@ -106979,18 +110450,18 @@ "id": "tr", "name": "Turkish", "tmSavings": 0, - "preTranslate": 47754, - "totalCosts": 9359 + "preTranslate": 54085, + "totalCosts": 9378 }, "translated": { - "tmMatch": 8826, + "tmMatch": 8845, "default": 533, - "total": 9359 + "total": 9378 }, "targetTranslated": { - "tmMatch": 8262, + "tmMatch": 8275, "default": 403, - "total": 8665 + "total": 8678 }, "translatedByMt": { "tmMatch": 6, @@ -107000,12 +110471,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1638 + "total": 1733 }, "translationCosts": { - "tmMatch": 8826, + "tmMatch": 8845, "default": 533, - "total": 9359 + "total": 9378 }, "approvalCosts": { "tmMatch": 0, @@ -107018,18 +110489,18 @@ "id": "uk", "name": "Ukrainian", "tmSavings": 0, - "preTranslate": 52313, - "totalCosts": 6893 + "preTranslate": 58257, + "totalCosts": 7362 }, "translated": { - "tmMatch": 5759, - "default": 1134, - "total": 6893 + "tmMatch": 5762, + "default": 1600, + "total": 7362 }, "targetTranslated": { - "tmMatch": 5834, - "default": 994, - "total": 6828 + "tmMatch": 5838, + "default": 1367, + "total": 7205 }, "translatedByMt": { "tmMatch": 0, @@ -107039,12 +110510,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 602 + "total": 634 }, "translationCosts": { - "tmMatch": 5759, - "default": 1134, - "total": 6893 + "tmMatch": 5762, + "default": 1600, + "total": 7362 }, "approvalCosts": { "tmMatch": 0, @@ -107057,7 +110528,7 @@ "id": "ur-IN", "name": "Urdu (India)", "tmSavings": 0, - "preTranslate": 39, + "preTranslate": 45, "totalCosts": 49 }, "translated": { @@ -107096,18 +110567,18 @@ "id": "ur-PK", "name": "Urdu (Pakistan)", "tmSavings": 0, - "preTranslate": 551, - "totalCosts": 7 + "preTranslate": 600, + "totalCosts": 77 }, "translated": { - "tmMatch": 6, - "default": 1, - "total": 7 + "tmMatch": 7, + "default": 70, + "total": 77 }, "targetTranslated": { - "tmMatch": 6, - "default": 1, - "total": 7 + "tmMatch": 8, + "default": 93, + "total": 101 }, "translatedByMt": { "tmMatch": 2, @@ -107120,9 +110591,9 @@ "total": 1 }, "translationCosts": { - "tmMatch": 6, - "default": 1, - "total": 7 + "tmMatch": 7, + "default": 70, + "total": 77 }, "approvalCosts": { "tmMatch": 0, @@ -107135,18 +110606,18 @@ "id": "uz", "name": "Uzbek", "tmSavings": 0, - "preTranslate": 4643, - "totalCosts": 2853 + "preTranslate": 5997, + "totalCosts": 2937 }, "translated": { - "tmMatch": 2838, - "default": 15, - "total": 2853 + "tmMatch": 2858, + "default": 79, + "total": 2937 }, "targetTranslated": { - "tmMatch": 2664, - "default": 6, - "total": 2670 + "tmMatch": 2681, + "default": 67, + "total": 2748 }, "translatedByMt": { "tmMatch": 3, @@ -107156,12 +110627,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1221 + "total": 1222 }, "translationCosts": { - "tmMatch": 2838, - "default": 15, - "total": 2853 + "tmMatch": 2858, + "default": 79, + "total": 2937 }, "approvalCosts": { "tmMatch": 0, @@ -107174,18 +110645,18 @@ "id": "vi", "name": "Vietnamese", "tmSavings": 0, - "preTranslate": 16132, - "totalCosts": 5376 + "preTranslate": 19124, + "totalCosts": 5654 }, "translated": { - "tmMatch": 5309, - "default": 67, - "total": 5376 + "tmMatch": 5339, + "default": 315, + "total": 5654 }, "targetTranslated": { - "tmMatch": 7431, - "default": 95, - "total": 7526 + "tmMatch": 7460, + "default": 424, + "total": 7884 }, "translatedByMt": { "tmMatch": 4, @@ -107195,12 +110666,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1830 + "total": 1880 }, "translationCosts": { - "tmMatch": 5309, - "default": 67, - "total": 5376 + "tmMatch": 5339, + "default": 315, + "total": 5654 }, "approvalCosts": { "tmMatch": 0, @@ -107213,18 +110684,18 @@ "id": "yo", "name": "Yoruba", "tmSavings": 0, - "preTranslate": 411, - "totalCosts": 571 + "preTranslate": 448, + "totalCosts": 588 }, "translated": { - "tmMatch": 513, + "tmMatch": 530, "default": 58, - "total": 571 + "total": 588 }, "targetTranslated": { - "tmMatch": 728, + "tmMatch": 741, "default": 61, - "total": 789 + "total": 802 }, "translatedByMt": { "tmMatch": 0, @@ -107237,9 +110708,9 @@ "total": 80 }, "translationCosts": { - "tmMatch": 513, + "tmMatch": 530, "default": 58, - "total": 571 + "total": 588 }, "approvalCosts": { "tmMatch": 0, @@ -107252,7 +110723,7 @@ "id": "zu", "name": "Zulu", "tmSavings": 0, - "preTranslate": 64, + "preTranslate": 68, "totalCosts": 0 }, "translated": { @@ -108900,6 +112371,58 @@ } ] }, + { + "user": { + "id": 14807258, + "username": "fccxw", + "fullName": "Femurrr (fccxw)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14807258/medium/129d9aa9469fa8ed9a841eda8083962a.jpg", + "preTranslated": 0, + "totalCosts": 4 + }, + "languages": [ + { + "language": { + "id": "id", + "name": "Indonesian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 4 + }, + "translated": { + "tmMatch": 1, + "default": 3, + "total": 4 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 6, + "total": 7 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 3, + "total": 4 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14969101, @@ -110598,7 +114121,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15225340/medium/d0d1a9a2072c5985dcdf413ad6f38986_default.png", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 12 }, "languages": [ { @@ -110607,17 +114130,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 12 }, "translated": { - "tmMatch": 0, + "tmMatch": 9, "default": 3, - "total": 3 + "total": 12 }, "targetTranslated": { - "tmMatch": 0, + "tmMatch": 10, "default": 3, - "total": 3 + "total": 13 }, "translatedByMt": { "tmMatch": 0, @@ -110630,9 +114153,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 9, "default": 3, - "total": 3 + "total": 12 }, "approvalCosts": { "tmMatch": 0, @@ -111409,6 +114932,58 @@ } ] }, + { + "user": { + "id": 15275976, + "username": "gianluca.sch93", + "fullName": "Gianluca Schettino (gianluca.sch93)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15275976/medium/e0670bcf3b5cf22456eac2aef44bce96.png", + "preTranslated": 0, + "totalCosts": 16 + }, + "languages": [ + { + "language": { + "id": "it", + "name": "Italian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 16 + }, + "translated": { + "tmMatch": 0, + "default": 16, + "total": 16 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 19, + "total": 19 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 16, + "total": 16 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14669508, @@ -111929,6 +115504,58 @@ } ] }, + { + "user": { + "id": 15272300, + "username": "godilizarov", + "fullName": "Godik Ilizarov (godilizarov)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15272300/medium/4b2d036e4fe081b8a451354bce4765d9.jpeg", + "preTranslated": 0, + "totalCosts": 12 + }, + "languages": [ + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 12 + }, + "translated": { + "tmMatch": 0, + "default": 12, + "total": 12 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 12, + "total": 12 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 12344679, @@ -112124,6 +115751,58 @@ } ] }, + { + "user": { + "id": 13872277, + "username": "grammyleung", + "fullName": "Grammy Leung (grammyleung)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13872277/medium/770e08e8db0b5af13a9ff1b46c6bd529.jpeg", + "preTranslated": 0, + "totalCosts": 2576 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2576 + }, + "translated": { + "tmMatch": 128, + "default": 2448, + "total": 2576 + }, + "targetTranslated": { + "tmMatch": 216, + "default": 3780, + "total": 3996 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 128, + "default": 2448, + "total": 2576 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 12579111, @@ -112288,7 +115967,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219098/medium/67ba870ab68dd3e2838d3af325783379.jpg", "preTranslated": 0, - "totalCosts": 6566 + "totalCosts": 12158 }, "languages": [ { @@ -112297,17 +115976,17 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6566 + "totalCosts": 12158 }, "translated": { - "tmMatch": 232, - "default": 6334, - "total": 6566 + "tmMatch": 2068, + "default": 10090, + "total": 12158 }, "targetTranslated": { - "tmMatch": 271, - "default": 6539, - "total": 6810 + "tmMatch": 2071, + "default": 10165, + "total": 12236 }, "translatedByMt": { "tmMatch": 0, @@ -112317,12 +115996,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 6934 + "total": 16043 }, "translationCosts": { - "tmMatch": 232, - "default": 6334, - "total": 6566 + "tmMatch": 2068, + "default": 10090, + "total": 12158 }, "approvalCosts": { "tmMatch": 0, @@ -112956,6 +116635,58 @@ } ] }, + { + "user": { + "id": 15250968, + "username": "Aco_g_lonegro", + "fullName": "Gustavo Lonegro (Aco_g_lonegro)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250968/medium/fe66daa0393af122ae758d1cf2b0738d_default.png", + "preTranslated": 0, + "totalCosts": 6860 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 6860 + }, + "translated": { + "tmMatch": 2222, + "default": 4638, + "total": 6860 + }, + "targetTranslated": { + "tmMatch": 2741, + "default": 5499, + "total": 8240 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 7826 + }, + "translationCosts": { + "tmMatch": 2222, + "default": 4638, + "total": 6860 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15075791, @@ -113268,6 +116999,58 @@ } ] }, + { + "user": { + "id": 15278140, + "username": "iguidre1", + "fullName": "HAMI SAID (iguidre1)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15278140/medium/25d59650f590c85f56f2b8cd84d60296.png", + "preTranslated": 0, + "totalCosts": 983 + }, + "languages": [ + { + "language": { + "id": "ar", + "name": "Arabic", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 983 + }, + "translated": { + "tmMatch": 34, + "default": 949, + "total": 983 + }, + "targetTranslated": { + "tmMatch": 33, + "default": 884, + "total": 917 + }, + "translatedByMt": { + "tmMatch": 7, + "default": 173, + "total": 180 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 34, + "default": 949, + "total": 983 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14729442, @@ -114628,7 +118411,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15248870/medium/3d6bd5145d328511ffe769c3d714f2b3.png", "preTranslated": 0, - "totalCosts": 507 + "totalCosts": 1560 }, "languages": [ { @@ -114637,17 +118420,17 @@ "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 507 + "totalCosts": 1560 }, "translated": { - "tmMatch": 68, - "default": 439, - "total": 507 + "tmMatch": 332, + "default": 1228, + "total": 1560 }, "targetTranslated": { - "tmMatch": 50, - "default": 310, - "total": 360 + "tmMatch": 251, + "default": 846, + "total": 1097 }, "translatedByMt": { "tmMatch": 0, @@ -114660,9 +118443,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 68, - "default": 439, - "total": 507 + "tmMatch": 332, + "default": 1228, + "total": 1560 }, "approvalCosts": { "tmMatch": 0, @@ -115603,7 +119386,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/7d6ee41dfe3c55a049b59bbd47e19b2a.jpeg", "preTranslated": 0, - "totalCosts": 4047 + "totalCosts": 10394 }, "languages": [ { @@ -115612,22 +119395,22 @@ "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4047 + "totalCosts": 10394 }, "translated": { - "tmMatch": 85, - "default": 3962, - "total": 4047 + "tmMatch": 300, + "default": 10094, + "total": 10394 }, "targetTranslated": { - "tmMatch": 217, - "default": 10672, - "total": 10889 + "tmMatch": 840, + "default": 26994, + "total": 27834 }, "translatedByMt": { - "tmMatch": 28, - "default": 1275, - "total": 1303 + "tmMatch": 55, + "default": 3052, + "total": 3107 }, "approved": { "tmMatch": 0, @@ -115635,9 +119418,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 85, - "default": 3962, - "total": 4047 + "tmMatch": 300, + "default": 10094, + "total": 10394 }, "approvalCosts": { "tmMatch": 0, @@ -115655,7 +119438,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14987717/medium/44926f698e072cbf75df2a5ae5909b63.png", "preTranslated": 0, - "totalCosts": 25 + "totalCosts": 29 }, "languages": [ { @@ -115664,17 +119447,17 @@ "name": "Burmese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 25 + "totalCosts": 29 }, "translated": { "tmMatch": 0, - "default": 25, - "total": 25 + "default": 29, + "total": 29 }, "targetTranslated": { "tmMatch": 0, - "default": 6, - "total": 6 + "default": 12, + "total": 12 }, "translatedByMt": { "tmMatch": 0, @@ -115688,8 +119471,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 25, - "total": 25 + "default": 29, + "total": 29 }, "approvalCosts": { "tmMatch": 0, @@ -117553,7 +121336,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15100235/medium/c571e5e4bd338b50cba12bca3ff2dd03.jpeg", "preTranslated": 0, - "totalCosts": 348 + "totalCosts": 662 }, "languages": [ { @@ -117562,22 +121345,22 @@ "name": "Filipino", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 348 + "totalCosts": 662 }, "translated": { - "tmMatch": 3, - "default": 345, - "total": 348 + "tmMatch": 56, + "default": 606, + "total": 662 }, "targetTranslated": { - "tmMatch": 5, - "default": 389, - "total": 394 + "tmMatch": 65, + "default": 689, + "total": 754 }, "translatedByMt": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 22, + "default": 1, + "total": 23 }, "approved": { "tmMatch": 0, @@ -117585,9 +121368,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 345, - "total": 348 + "tmMatch": 56, + "default": 606, + "total": 662 }, "approvalCosts": { "tmMatch": 0, @@ -118221,6 +122004,58 @@ } ] }, + { + "user": { + "id": 15281580, + "username": "guzmanjasona29", + "fullName": "JASON A GUZMAN (guzmanjasona29)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15281580/medium/b76836d1cbedc0f9a84c99f7ebb8cdd1.png", + "preTranslated": 0, + "totalCosts": 20 + }, + "languages": [ + { + "language": { + "id": "sq", + "name": "Albanian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 20 + }, + "translated": { + "tmMatch": 0, + "default": 20, + "total": 20 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 20, + "total": 20 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14758970, @@ -119560,6 +123395,58 @@ } ] }, + { + "user": { + "id": 15292656, + "username": "Jayendra", + "fullName": "Jayendra More (Jayendra)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15292656/medium/2583a9ef6b494a33b005f0ccf835b3e3.png", + "preTranslated": 0, + "totalCosts": 1058 + }, + "languages": [ + { + "language": { + "id": "hi", + "name": "Hindi", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1058 + }, + "translated": { + "tmMatch": 3, + "default": 1055, + "total": 1058 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 1875, + "total": 1879 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 3, + "default": 1055, + "total": 1058 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15211634, @@ -119807,6 +123694,58 @@ } ] }, + { + "user": { + "id": 15279202, + "username": "jennyzibell", + "fullName": "Jenn Zibell (jennyzibell)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279202/medium/d835ae7ea15891ae6f81acef1fe0c011.jpeg", + "preTranslated": 0, + "totalCosts": 3 + }, + "languages": [ + { + "language": { + "id": "de", + "name": "German", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 3 + }, + "translated": { + "tmMatch": 0, + "default": 3, + "total": 3 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 1, + "total": 1 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 3, + "total": 3 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 3, + "total": 3 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14894112, @@ -120093,6 +124032,58 @@ } ] }, + { + "user": { + "id": 15271576, + "username": "jesusramirez131200", + "fullName": "Jesus Ramirez (jesusramirez131200)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271576/medium/b9b407f7c24fd9a02243395f597d0068.png", + "preTranslated": 0, + "totalCosts": 1 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1 + }, + "translated": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14757010, @@ -120153,7 +124144,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15061909/medium/418c844e1b58b7da484f33f1fb1eaaae.jpeg", "preTranslated": 0, - "totalCosts": 270 + "totalCosts": 557 }, "languages": [ { @@ -120162,22 +124153,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 270 + "totalCosts": 557 }, "translated": { - "tmMatch": 32, - "default": 238, - "total": 270 + "tmMatch": 49, + "default": 508, + "total": 557 }, "targetTranslated": { - "tmMatch": 37, - "default": 254, - "total": 291 + "tmMatch": 58, + "default": 562, + "total": 620 }, "translatedByMt": { "tmMatch": 16, - "default": 74, - "total": 90 + "default": 127, + "total": 143 }, "approved": { "tmMatch": 0, @@ -120185,9 +124176,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 32, - "default": 238, - "total": 270 + "tmMatch": 49, + "default": 508, + "total": 557 }, "approvalCosts": { "tmMatch": 0, @@ -121349,7 +125340,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg", "preTranslated": 0, - "totalCosts": 43035 + "totalCosts": 46932 }, "languages": [ { @@ -121358,22 +125349,22 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 43035 + "totalCosts": 46932 }, "translated": { - "tmMatch": 1125, - "default": 41910, - "total": 43035 + "tmMatch": 1310, + "default": 45622, + "total": 46932 }, "targetTranslated": { - "tmMatch": 1121, - "default": 40328, - "total": 41449 + "tmMatch": 1293, + "default": 43975, + "total": 45268 }, "translatedByMt": { - "tmMatch": 62, - "default": 133, - "total": 195 + "tmMatch": 70, + "default": 174, + "total": 244 }, "approved": { "tmMatch": 0, @@ -121381,9 +125372,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1125, - "default": 41910, - "total": 43035 + "tmMatch": 1310, + "default": 45622, + "total": 46932 }, "approvalCosts": { "tmMatch": 0, @@ -122797,6 +126788,58 @@ } ] }, + { + "user": { + "id": 14686148, + "username": "NotAkih", + "fullName": "João (NotAkih)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686148/medium/747848066fb776ce21c9d26ec934daa4.jpg", + "preTranslated": 0, + "totalCosts": 32 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 32 + }, + "translated": { + "tmMatch": 8, + "default": 24, + "total": 32 + }, + "targetTranslated": { + "tmMatch": 8, + "default": 26, + "total": 34 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 8, + "default": 24, + "total": 32 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14957505, @@ -124365,7 +128408,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg", "preTranslated": 0, - "totalCosts": 110041 + "totalCosts": 115534 }, "languages": [ { @@ -124452,17 +128495,17 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 110026 + "totalCosts": 115519 }, "translated": { - "tmMatch": 7572, - "default": 102454, - "total": 110026 + "tmMatch": 7599, + "default": 107920, + "total": 115519 }, "targetTranslated": { - "tmMatch": 6467, - "default": 80456, - "total": 86923 + "tmMatch": 6488, + "default": 84787, + "total": 91275 }, "translatedByMt": { "tmMatch": 328, @@ -124475,9 +128518,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7572, - "default": 102454, - "total": 110026 + "tmMatch": 7599, + "default": 107920, + "total": 115519 }, "approvalCosts": { "tmMatch": 0, @@ -124542,12 +128585,12 @@ { "user": { "id": 14824866, - "username": "Worr", - "fullName": "Kadir Ozmen (Worr)", + "username": "Kidrobot", + "fullName": "Kadir Ozmen (Kidrobot)", "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14824866/medium/d9facd000e85e1be46f8d8f667b6f4d7.jpeg", "preTranslated": 0, - "totalCosts": 679 + "totalCosts": 877 }, "languages": [ { @@ -124556,17 +128599,17 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 679 + "totalCosts": 877 }, "translated": { - "tmMatch": 3, - "default": 676, - "total": 679 + "tmMatch": 183, + "default": 694, + "total": 877 }, "targetTranslated": { - "tmMatch": 4, - "default": 490, - "total": 494 + "tmMatch": 164, + "default": 508, + "total": 672 }, "translatedByMt": { "tmMatch": 1, @@ -124579,9 +128622,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 676, - "total": 679 + "tmMatch": 183, + "default": 694, + "total": 877 }, "approvalCosts": { "tmMatch": 0, @@ -127087,6 +131130,58 @@ } ] }, + { + "user": { + "id": 14075861, + "username": "Kler", + "fullName": "Kler", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14075861/medium/a3cf69cc209acc2c520607aab4d1c615.jpeg", + "preTranslated": 0, + "totalCosts": 32045 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 32045 + }, + "translated": { + "tmMatch": 2004, + "default": 30041, + "total": 32045 + }, + "targetTranslated": { + "tmMatch": 2303, + "default": 32134, + "total": 34437 + }, + "translatedByMt": { + "tmMatch": 22, + "default": 617, + "total": 639 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2004, + "default": 30041, + "total": 32045 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 13512385, @@ -128413,6 +132508,58 @@ } ] }, + { + "user": { + "id": 15284354, + "username": "hackerfollower", + "fullName": "Lang Liu (hackerfollower)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284354/medium/e4f19dd54c37569ecf884aeeb57776aa.png", + "preTranslated": 0, + "totalCosts": 22 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 22 + }, + "translated": { + "tmMatch": 1, + "default": 21, + "total": 22 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 37, + "total": 38 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 21, + "total": 22 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15026871, @@ -128465,6 +132612,58 @@ } ] }, + { + "user": { + "id": 15226228, + "username": "Aco_LaurenceBotta", + "fullName": "Laurence Botta (Aco_LaurenceBotta)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226228/medium/620129605a41865ae98a2c37492732ee_default.png", + "preTranslated": 0, + "totalCosts": 10581 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 10581 + }, + "translated": { + "tmMatch": 789, + "default": 9792, + "total": 10581 + }, + "targetTranslated": { + "tmMatch": 891, + "default": 10500, + "total": 11391 + }, + "translatedByMt": { + "tmMatch": 4, + "default": 173, + "total": 177 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 21664 + }, + "translationCosts": { + "tmMatch": 789, + "default": 9792, + "total": 10581 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15045177, @@ -130423,7 +134622,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15197398/medium/7c96fb46dcaefaf32d920ae9525f6805.png", "preTranslated": 0, - "totalCosts": 150 + "totalCosts": 165 }, "languages": [ { @@ -130432,17 +134631,17 @@ "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 150 + "totalCosts": 165 }, "translated": { - "tmMatch": 9, - "default": 141, - "total": 150 + "tmMatch": 16, + "default": 149, + "total": 165 }, "targetTranslated": { - "tmMatch": 7, - "default": 156, - "total": 163 + "tmMatch": 16, + "default": 163, + "total": 179 }, "translatedByMt": { "tmMatch": 0, @@ -130455,9 +134654,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 141, - "total": 150 + "tmMatch": 16, + "default": 149, + "total": 165 }, "approvalCosts": { "tmMatch": 0, @@ -131442,6 +135641,58 @@ } ] }, + { + "user": { + "id": 14241142, + "username": "LudiZHANG", + "fullName": "Ludi (LudiZHANG)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14241142/medium/7018d7959237cd0b1356ac97198316f9.jpg", + "preTranslated": 0, + "totalCosts": 79 + }, + "languages": [ + { + "language": { + "id": "id", + "name": "Indonesian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 79 + }, + "translated": { + "tmMatch": 62, + "default": 17, + "total": 79 + }, + "targetTranslated": { + "tmMatch": 55, + "default": 18, + "total": 73 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 62, + "default": 17, + "total": 79 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14777938, @@ -133977,6 +138228,58 @@ } ] }, + { + "user": { + "id": 15171588, + "username": "lukasdauer123", + "fullName": "Lukas (lukasdauer123)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15171588/medium/25b66b84a7f6b0bc03911d55925ef698.jpeg", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "de", + "name": "German", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15222794, @@ -134133,6 +138436,58 @@ } ] }, + { + "user": { + "id": 15284350, + "username": "Hypnotised1", + "fullName": "Lxx (Hypnotised1)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284350/medium/7e5038628d89d1d42819cb7903d9c506.jpeg", + "preTranslated": 0, + "totalCosts": 73 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 73 + }, + "translated": { + "tmMatch": 0, + "default": 73, + "total": 73 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 103, + "total": 103 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 73, + "total": 73 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14992877, @@ -134497,6 +138852,58 @@ } ] }, + { + "user": { + "id": 15265170, + "username": "MAX0R", + "fullName": "MAX0R", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15265170/medium/47a18ed83811d83174baa9b8967de784.png", + "preTranslated": 0, + "totalCosts": 25 + }, + "languages": [ + { + "language": { + "id": "pl", + "name": "Polish", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 25 + }, + "translated": { + "tmMatch": 1, + "default": 24, + "total": 25 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 21, + "total": 22 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 24, + "total": 25 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 24, + "total": 25 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15194310, @@ -134869,7 +139276,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14614482/medium/2924b19545858930417955677a5ceb23_default.png", "preTranslated": 0, - "totalCosts": 68 + "totalCosts": 191 }, "languages": [ { @@ -134878,17 +139285,17 @@ "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 68 + "totalCosts": 191 }, "translated": { - "tmMatch": 5, - "default": 63, - "total": 68 + "tmMatch": 14, + "default": 177, + "total": 191 }, "targetTranslated": { - "tmMatch": 4, - "default": 50, - "total": 54 + "tmMatch": 13, + "default": 154, + "total": 167 }, "translatedByMt": { "tmMatch": 0, @@ -134901,9 +139308,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 63, - "total": 68 + "tmMatch": 14, + "default": 177, + "total": 191 }, "approvalCosts": { "tmMatch": 0, @@ -135701,7 +140108,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg", "preTranslated": 0, - "totalCosts": 56367 + "totalCosts": 58324 }, "languages": [ { @@ -135710,22 +140117,22 @@ "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 56367 + "totalCosts": 58324 }, "translated": { - "tmMatch": 3286, - "default": 53081, - "total": 56367 + "tmMatch": 3415, + "default": 54909, + "total": 58324 }, "targetTranslated": { - "tmMatch": 3684, - "default": 58377, - "total": 62061 + "tmMatch": 3856, + "default": 60637, + "total": 64493 }, "translatedByMt": { - "tmMatch": 96, - "default": 7834, - "total": 7930 + "tmMatch": 101, + "default": 8015, + "total": 8116 }, "approved": { "tmMatch": 0, @@ -135733,9 +140140,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3286, - "default": 53081, - "total": 56367 + "tmMatch": 3415, + "default": 54909, + "total": 58324 }, "approvalCosts": { "tmMatch": 0, @@ -136112,12 +140519,12 @@ { "user": { "id": 14763374, - "username": "untipollamadomarcelo", - "fullName": "Marcelo Cornejo (untipollamadomarcelo)", + "username": "elmarceloc", + "fullName": "Marcelo Cornejo (elmarceloc)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14763374/medium/6fada991f179e004707187b671444058.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14763374/medium/25a8ac3837c276bc3a9e89b158668552.png", "preTranslated": 0, - "totalCosts": 50 + "totalCosts": 155 }, "languages": [ { @@ -136126,22 +140533,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 50 + "totalCosts": 155 }, "translated": { "tmMatch": 0, - "default": 50, - "total": 50 + "default": 155, + "total": 155 }, "targetTranslated": { "tmMatch": 0, - "default": 54, - "total": 54 + "default": 177, + "total": 177 }, "translatedByMt": { "tmMatch": 0, - "default": 44, - "total": 44 + "default": 98, + "total": 98 }, "approved": { "tmMatch": 0, @@ -136150,8 +140557,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 50, - "total": 50 + "default": 155, + "total": 155 }, "approvalCosts": { "tmMatch": 0, @@ -136585,7 +140992,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14830936/medium/ce4e671c4bc5e0ff85786892d6a8b96d_default.png", "preTranslated": 0, - "totalCosts": 74 + "totalCosts": 75 }, "languages": [ { @@ -136594,22 +141001,22 @@ "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 74 + "totalCosts": 75 }, "translated": { "tmMatch": 11, - "default": 63, - "total": 74 + "default": 64, + "total": 75 }, "targetTranslated": { "tmMatch": 12, - "default": 68, - "total": 80 + "default": 69, + "total": 81 }, "translatedByMt": { "tmMatch": 7, - "default": 30, - "total": 37 + "default": 31, + "total": 38 }, "approved": { "tmMatch": 0, @@ -136618,8 +141025,8 @@ }, "translationCosts": { "tmMatch": 11, - "default": 63, - "total": 74 + "default": 64, + "total": 75 }, "approvalCosts": { "tmMatch": 0, @@ -137157,7 +141564,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221742/medium/54e5adfe14e974d37dd5fb25bde84a77.png", "preTranslated": 0, - "totalCosts": 248 + "totalCosts": 397 }, "languages": [ { @@ -137166,17 +141573,69 @@ "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 248 + "totalCosts": 397 }, "translated": { - "tmMatch": 4, - "default": 244, - "total": 248 + "tmMatch": 110, + "default": 287, + "total": 397 }, "targetTranslated": { - "tmMatch": 5, - "default": 270, - "total": 275 + "tmMatch": 119, + "default": 313, + "total": 432 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 43, + "total": 43 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 110, + "default": 287, + "total": 397 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 15272464, + "username": "martim442007", + "fullName": "Martim Martins (martim442007)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15272464/medium/82593576826f3192f46d8e8ac259e394_default.png", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "pt-PT", + "name": "Portuguese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 0, + "total": 2 }, "translatedByMt": { "tmMatch": 0, @@ -137189,9 +141648,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 244, - "total": 248 + "tmMatch": 2, + "default": 0, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -138267,6 +142726,58 @@ } ] }, + { + "user": { + "id": 15284846, + "username": "mattbovo", + "fullName": "Matteo Bovolenta (mattbovo)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284846/medium/0355a6ed121a19ed8b9fe8029c4c3894.jpeg", + "preTranslated": 0, + "totalCosts": 322 + }, + "languages": [ + { + "language": { + "id": "it", + "name": "Italian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 322 + }, + "translated": { + "tmMatch": 0, + "default": 322, + "total": 322 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 338, + "total": 338 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 322, + "total": 322 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14633448, @@ -140022,6 +144533,97 @@ } ] }, + { + "user": { + "id": 15219198, + "username": "Mesu_Devastator", + "fullName": "Mesu Devastator (Mesu_Devastator)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219198/medium/b9c40b38edb09fb7578fa333ed14ea69_default.png", + "preTranslated": 0, + "totalCosts": 218 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 18 + }, + "translated": { + "tmMatch": 0, + "default": 18, + "total": 18 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 42, + "total": 42 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 18, + "total": 18 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "eo", + "name": "Esperanto", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 200 + }, + "translated": { + "tmMatch": 0, + "default": 200, + "total": 200 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 181, + "total": 181 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 200, + "total": 200 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15084601, @@ -140342,7 +144944,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14113969/medium/5ac8b6a9f35466498ebb47b6c43e43df.jpeg", "preTranslated": 0, - "totalCosts": 551 + "totalCosts": 554 }, "languages": [ { @@ -140351,17 +144953,17 @@ "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 551 + "totalCosts": 554 }, "translated": { "tmMatch": 128, - "default": 423, - "total": 551 + "default": 426, + "total": 554 }, "targetTranslated": { "tmMatch": 131, - "default": 417, - "total": 548 + "default": 420, + "total": 551 }, "translatedByMt": { "tmMatch": 46, @@ -140375,8 +144977,8 @@ }, "translationCosts": { "tmMatch": 128, - "default": 423, - "total": 551 + "default": 426, + "total": 554 }, "approvalCosts": { "tmMatch": 0, @@ -140542,6 +145144,58 @@ } ] }, + { + "user": { + "id": 15258416, + "username": "MichealBay", + "fullName": "Micheal Bay (MichealBay)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15258416/medium/11b17996080e1b0fb9165039516383ea.jpeg", + "preTranslated": 0, + "totalCosts": 83 + }, + "languages": [ + { + "language": { + "id": "mn", + "name": "Mongolian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 83 + }, + "translated": { + "tmMatch": 3, + "default": 80, + "total": 83 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 88, + "total": 90 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 3, + "default": 80, + "total": 83 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14815846, @@ -141218,6 +145872,58 @@ } ] }, + { + "user": { + "id": 15250398, + "username": "Miracle.eth", + "fullName": "Miracle- (Miracle.eth)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250398/medium/71b815b554ec265a755f27263123cec9.jpg", + "preTranslated": 0, + "totalCosts": 16 + }, + "languages": [ + { + "language": { + "id": "th", + "name": "Thai", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 16 + }, + "translated": { + "tmMatch": 8, + "default": 8, + "total": 16 + }, + "targetTranslated": { + "tmMatch": 6, + "default": 5, + "total": 11 + }, + "translatedByMt": { + "tmMatch": 7, + "default": 2, + "total": 9 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 8, + "default": 8, + "total": 16 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 13991829, @@ -143449,7 +148155,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/f039dc85a8469b65d9e3e2413f9c4710.png", "preTranslated": 0, - "totalCosts": 11384 + "totalCosts": 11630 }, "languages": [ { @@ -143497,17 +148203,17 @@ "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 8318 + "totalCosts": 8564 }, "translated": { "tmMatch": 176, - "default": 8142, - "total": 8318 + "default": 8388, + "total": 8564 }, "targetTranslated": { "tmMatch": 175, - "default": 7614, - "total": 7789 + "default": 7846, + "total": 8021 }, "translatedByMt": { "tmMatch": 10, @@ -143521,8 +148227,8 @@ }, "translationCosts": { "tmMatch": 176, - "default": 8142, - "total": 8318 + "default": 8388, + "total": 8564 }, "approvalCosts": { "tmMatch": 0, @@ -143995,7 +148701,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/18711/medium/238db0b2ab4e727190e951c803b045b2_default.png", "preTranslated": 0, - "totalCosts": 10083 + "totalCosts": 10306 }, "languages": [ { @@ -144004,22 +148710,22 @@ "name": "Danish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 10083 + "totalCosts": 10306 }, "translated": { "tmMatch": 290, - "default": 9793, - "total": 10083 + "default": 10016, + "total": 10306 }, "targetTranslated": { "tmMatch": 254, - "default": 8695, - "total": 8949 + "default": 8901, + "total": 9155 }, "translatedByMt": { "tmMatch": 34, - "default": 312, - "total": 346 + "default": 314, + "total": 348 }, "approved": { "tmMatch": 0, @@ -144028,8 +148734,60 @@ }, "translationCosts": { "tmMatch": 290, - "default": 9793, - "total": 10083 + "default": 10016, + "total": 10306 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 15275810, + "username": "sakamotomasayuki7", + "fullName": "NICKEL (sakamotomasayuki7)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15275810/medium/3af3394e8787b462699f2e56425983a1.jpeg", + "preTranslated": 0, + "totalCosts": 3689 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 3689 + }, + "translated": { + "tmMatch": 30, + "default": 3659, + "total": 3689 + }, + "targetTranslated": { + "tmMatch": 77, + "default": 8994, + "total": 9071 + }, + "translatedByMt": { + "tmMatch": 24, + "default": 1083, + "total": 1107 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 30, + "default": 3659, + "total": 3689 }, "approvalCosts": { "tmMatch": 0, @@ -145443,6 +150201,58 @@ } ] }, + { + "user": { + "id": 15279334, + "username": "ngothanhnhan054", + "fullName": "Ngo Thanh Nhan (ngothanhnhan054)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279334/medium/c6320a57c6db97421ac89c902332c946.png", + "preTranslated": 0, + "totalCosts": 1 + }, + "languages": [ + { + "language": { + "id": "vi", + "name": "Vietnamese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1 + }, + "translated": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "targetTranslated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14943437, @@ -145950,6 +150760,58 @@ } ] }, + { + "user": { + "id": 15257040, + "username": "nuchanucha", + "fullName": "Nich Nicha (nuchanucha)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15257040/medium/48b0570ec23b49d3ea9d940b9af853bb.JPG", + "preTranslated": 0, + "totalCosts": 3931 + }, + "languages": [ + { + "language": { + "id": "th", + "name": "Thai", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 3931 + }, + "translated": { + "tmMatch": 119, + "default": 3812, + "total": 3931 + }, + "targetTranslated": { + "tmMatch": 45, + "default": 1043, + "total": 1088 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 8, + "total": 9 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 119, + "default": 3812, + "total": 3931 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15136672, @@ -147492,7 +152354,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14838604/medium/5efefdeaddfaef83a920a9d228b46686_default.png", "preTranslated": 0, - "totalCosts": 248 + "totalCosts": 255 }, "languages": [ { @@ -147501,17 +152363,17 @@ "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 248 + "totalCosts": 255 }, "translated": { "tmMatch": 4, - "default": 244, - "total": 248 + "default": 251, + "total": 255 }, "targetTranslated": { "tmMatch": 5, - "default": 223, - "total": 228 + "default": 228, + "total": 233 }, "translatedByMt": { "tmMatch": 0, @@ -147525,8 +152387,8 @@ }, "translationCosts": { "tmMatch": 4, - "default": 244, - "total": 248 + "default": 251, + "total": 255 }, "approvalCosts": { "tmMatch": 0, @@ -147640,58 +152502,6 @@ } ] }, - { - "user": { - "id": 14734372, - "username": "oliver-soeser", - "fullName": "Oliver Söser (oliver-soeser)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14734372/medium/4ef6d9d2327019661cc5b9191ce2ad32.png", - "preTranslated": 0, - "totalCosts": 476 - }, - "languages": [ - { - "language": { - "id": "de", - "name": "German", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 476 - }, - "translated": { - "tmMatch": 43, - "default": 433, - "total": 476 - }, - "targetTranslated": { - "tmMatch": 41, - "default": 359, - "total": 400 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 4, - "total": 4 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 43, - "default": 433, - "total": 476 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 15118039, @@ -148940,6 +153750,58 @@ } ] }, + { + "user": { + "id": 15267250, + "username": "Aco_Pguigou", + "fullName": "Pascal Guigou (Aco_Pguigou)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15267250/medium/fb27646e054fc4cb95b6664b9a54f6a5_default.png", + "preTranslated": 0, + "totalCosts": 1376 + }, + "languages": [ + { + "language": { + "id": "fr", + "name": "French", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1376 + }, + "translated": { + "tmMatch": 403, + "default": 973, + "total": 1376 + }, + "targetTranslated": { + "tmMatch": 468, + "default": 1082, + "total": 1550 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 3715 + }, + "translationCosts": { + "tmMatch": 403, + "default": 973, + "total": 1376 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 17361, @@ -148948,7 +153810,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/0f07d051c549498672744272c10c255c_default.png", "preTranslated": 0, - "totalCosts": 15363 + "totalCosts": 16513 }, "languages": [ { @@ -148957,17 +153819,17 @@ "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 15363 + "totalCosts": 16513 }, "translated": { - "tmMatch": 4051, - "default": 11312, - "total": 15363 + "tmMatch": 4123, + "default": 12390, + "total": 16513 }, "targetTranslated": { - "tmMatch": 4867, - "default": 12914, - "total": 17781 + "tmMatch": 4951, + "default": 14015, + "total": 18966 }, "translatedByMt": { "tmMatch": 5, @@ -148980,9 +153842,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4051, - "default": 11312, - "total": 15363 + "tmMatch": 4123, + "default": 12390, + "total": 16513 }, "approvalCosts": { "tmMatch": 0, @@ -150703,7 +155565,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14977831/medium/e1e3f150ce524a6cb88fccb8b4f52422.png", "preTranslated": 0, - "totalCosts": 70030 + "totalCosts": 70251 }, "languages": [ { @@ -150712,17 +155574,17 @@ "name": "Slovenian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 70030 + "totalCosts": 70251 }, "translated": { - "tmMatch": 2002, - "default": 68028, - "total": 70030 + "tmMatch": 2017, + "default": 68234, + "total": 70251 }, "targetTranslated": { - "tmMatch": 1901, - "default": 61691, - "total": 63592 + "tmMatch": 1920, + "default": 61866, + "total": 63786 }, "translatedByMt": { "tmMatch": 110, @@ -150735,9 +155597,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2002, - "default": 68028, - "total": 70030 + "tmMatch": 2017, + "default": 68234, + "total": 70251 }, "approvalCosts": { "tmMatch": 0, @@ -151275,7 +156137,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14665128/medium/5fdea361fcd2c73a52533056e2709694_default.png", "preTranslated": 0, - "totalCosts": 5698 + "totalCosts": 5850 }, "languages": [ { @@ -151284,22 +156146,22 @@ "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 5698 + "totalCosts": 5850 }, "translated": { - "tmMatch": 383, - "default": 5315, - "total": 5698 + "tmMatch": 392, + "default": 5458, + "total": 5850 }, "targetTranslated": { - "tmMatch": 347, - "default": 5332, - "total": 5679 + "tmMatch": 357, + "default": 5515, + "total": 5872 }, "translatedByMt": { - "tmMatch": 93, + "tmMatch": 96, "default": 1773, - "total": 1866 + "total": 1869 }, "approved": { "tmMatch": 0, @@ -151307,9 +156169,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 383, - "default": 5315, - "total": 5698 + "tmMatch": 392, + "default": 5458, + "total": 5850 }, "approvalCosts": { "tmMatch": 0, @@ -151531,11 +156393,11 @@ "user": { "id": 15226202, "username": "pilvijo", - "fullName": "Pilvi Taskinen (pilvijo)", + "fullName": "Pilvi Jo (pilvijo)", "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226202/medium/cd81b82010fd5aa6e5f3a24187554136.png", "preTranslated": 0, - "totalCosts": 1520 + "totalCosts": 4616 }, "languages": [ { @@ -151544,22 +156406,22 @@ "name": "Finnish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1520 + "totalCosts": 4616 }, "translated": { - "tmMatch": 9, - "default": 1511, - "total": 1520 + "tmMatch": 68, + "default": 4548, + "total": 4616 }, "targetTranslated": { - "tmMatch": 11, - "default": 1124, - "total": 1135 + "tmMatch": 74, + "default": 3454, + "total": 3528 }, "translatedByMt": { - "tmMatch": 3, - "default": 43, - "total": 46 + "tmMatch": 13, + "default": 162, + "total": 175 }, "approved": { "tmMatch": 0, @@ -151567,9 +156429,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 1511, - "total": 1520 + "tmMatch": 68, + "default": 4548, + "total": 4616 }, "approvalCosts": { "tmMatch": 0, @@ -151676,7 +156538,7 @@ "username": "PinguiFabgeeklab", "fullName": "PinguiFabgeeklab", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15096203/medium/a3d604a6890dc1439ac8bbc53721b389.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15096203/medium/e57a9c0316ca0d8b77e105fcfd73cd53.jpg", "preTranslated": 0, "totalCosts": 33 }, @@ -152185,7 +157047,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13652673/medium/772e01a764c3488a708f93b122a56ff7.jpeg", "preTranslated": 0, - "totalCosts": 131 + "totalCosts": 277 }, "languages": [ { @@ -152194,22 +157056,22 @@ "name": "Marathi", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 131 + "totalCosts": 277 }, "translated": { - "tmMatch": 0, - "default": 131, - "total": 131 + "tmMatch": 19, + "default": 258, + "total": 277 }, "targetTranslated": { - "tmMatch": 0, - "default": 214, - "total": 214 + "tmMatch": 33, + "default": 426, + "total": 459 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 14, + "default": 1, + "total": 15 }, "approved": { "tmMatch": 0, @@ -152217,9 +157079,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 131, - "total": 131 + "tmMatch": 19, + "default": 258, + "total": 277 }, "approvalCosts": { "tmMatch": 0, @@ -153589,7 +158451,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg", "preTranslated": 0, - "totalCosts": 19247 + "totalCosts": 19315 }, "languages": [ { @@ -153676,17 +158538,17 @@ "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 17921 + "totalCosts": 17989 }, "translated": { "tmMatch": 463, - "default": 17458, - "total": 17921 + "default": 17526, + "total": 17989 }, "targetTranslated": { "tmMatch": 426, - "default": 14868, - "total": 15294 + "default": 14933, + "total": 15359 }, "translatedByMt": { "tmMatch": 4, @@ -153700,8 +158562,8 @@ }, "translationCosts": { "tmMatch": 463, - "default": 17458, - "total": 17921 + "default": 17526, + "total": 17989 }, "approvalCosts": { "tmMatch": 0, @@ -154161,7 +159023,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247870/medium/7b4e01dec70834796b474a4ae6fe2ea4_default.png", "preTranslated": 0, - "totalCosts": 1792 + "totalCosts": 1802 }, "languages": [ { @@ -154170,17 +159032,17 @@ "name": "Romanian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1792 + "totalCosts": 1802 }, "translated": { - "tmMatch": 125, - "default": 1667, - "total": 1792 + "tmMatch": 127, + "default": 1675, + "total": 1802 }, "targetTranslated": { - "tmMatch": 121, - "default": 1794, - "total": 1915 + "tmMatch": 123, + "default": 1801, + "total": 1924 }, "translatedByMt": { "tmMatch": 0, @@ -154190,12 +159052,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 2201 + "total": 2213 }, "translationCosts": { - "tmMatch": 125, - "default": 1667, - "total": 1792 + "tmMatch": 127, + "default": 1675, + "total": 1802 }, "approvalCosts": { "tmMatch": 0, @@ -154257,58 +159119,6 @@ } ] }, - { - "user": { - "id": 14325546, - "username": "Raneip", - "fullName": "Raneip", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14325546/medium/e964ac55454ecc26258a2eaac532768e_default.png", - "preTranslated": 0, - "totalCosts": 75 - }, - "languages": [ - { - "language": { - "id": "zh-CN", - "name": "Chinese Simplified", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 75 - }, - "translated": { - "tmMatch": 2, - "default": 73, - "total": 75 - }, - "targetTranslated": { - "tmMatch": 5, - "default": 119, - "total": 124 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 10, - "total": 10 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 2, - "default": 73, - "total": 75 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 14641166, @@ -154413,58 +159223,6 @@ } ] }, - { - "user": { - "id": 14763978, - "username": "rayxeden", - "fullName": "Ray Eden (rayxeden)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14763978/medium/4f9c92629cbbd74784e018e397fbf629.png", - "preTranslated": 0, - "totalCosts": 262 - }, - "languages": [ - { - "language": { - "id": "es-EM", - "name": "Spanish (Modern)", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 262 - }, - "translated": { - "tmMatch": 3, - "default": 259, - "total": 262 - }, - "targetTranslated": { - "tmMatch": 3, - "default": 252, - "total": 255 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 68, - "total": 68 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 3, - "default": 259, - "total": 262 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 14348910, @@ -155656,7 +160414,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14553216/medium/ff7357a18e524ec40facc964cb2d15bc.jpeg", "preTranslated": 0, - "totalCosts": 40195 + "totalCosts": 40305 }, "languages": [ { @@ -155665,17 +160423,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 40194 + "totalCosts": 40304 }, "translated": { - "tmMatch": 1920, - "default": 38274, - "total": 40194 + "tmMatch": 1949, + "default": 38355, + "total": 40304 }, "targetTranslated": { - "tmMatch": 2960, - "default": 57742, - "total": 60702 + "tmMatch": 3002, + "default": 57887, + "total": 60889 }, "translatedByMt": { "tmMatch": 90, @@ -155688,9 +160446,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1920, - "default": 38274, - "total": 40194 + "tmMatch": 1949, + "default": 38355, + "total": 40304 }, "approvalCosts": { "tmMatch": 0, @@ -156007,7 +160765,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14357794/medium/a28b741096516a710523b87d9ee07223.png", "preTranslated": 0, - "totalCosts": 78673 + "totalCosts": 79021 }, "languages": [ { @@ -156016,22 +160774,22 @@ "name": "Hungarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 78673 + "totalCosts": 79021 }, "translated": { - "tmMatch": 5491, - "default": 73182, - "total": 78673 + "tmMatch": 5500, + "default": 73521, + "total": 79021 }, "targetTranslated": { - "tmMatch": 5118, - "default": 62702, - "total": 67820 + "tmMatch": 5128, + "default": 62985, + "total": 68113 }, "translatedByMt": { - "tmMatch": 27, - "default": 0, - "total": 27 + "tmMatch": 36, + "default": 2, + "total": 38 }, "approved": { "tmMatch": 0, @@ -156039,9 +160797,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5491, - "default": 73182, - "total": 78673 + "tmMatch": 5500, + "default": 73521, + "total": 79021 }, "approvalCosts": { "tmMatch": 0, @@ -156314,8 +161072,8 @@ { "user": { "id": 14568946, - "username": "RockyJ", - "fullName": "Rocky (RockyJ)", + "username": "SirRocky", + "fullName": "Rocky (SirRocky)", "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568946/medium/c0d702a99ef9bdd2a9498d25255e2efd.jpeg", "preTranslated": 0, @@ -156727,6 +161485,58 @@ } ] }, + { + "user": { + "id": 15255998, + "username": "rolandopiconnadales", + "fullName": "Rolando Picon Nadales (rolandopiconnadales)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15255998/medium/43dc1eaa54592e9e6c019bef41e1e4eb.jpeg", + "preTranslated": 0, + "totalCosts": 248 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 248 + }, + "translated": { + "tmMatch": 8, + "default": 240, + "total": 248 + }, + "targetTranslated": { + "tmMatch": 19, + "default": 291, + "total": 310 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 8, + "default": 240, + "total": 248 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14998323, @@ -156839,7 +161649,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14807238/medium/4e9d7e22b8ba45851bf0d10bf4bb2f68.jpeg", "preTranslated": 0, - "totalCosts": 31 + "totalCosts": 171 }, "languages": [ { @@ -156848,22 +161658,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 31 + "totalCosts": 171 }, "translated": { "tmMatch": 0, - "default": 31, - "total": 31 + "default": 171, + "total": 171 }, "targetTranslated": { "tmMatch": 0, - "default": 44, - "total": 44 + "default": 216, + "total": 216 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 42, + "total": 42 }, "approved": { "tmMatch": 0, @@ -156872,8 +161682,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 31, - "total": 31 + "default": 171, + "total": 171 }, "approvalCosts": { "tmMatch": 0, @@ -157411,7 +162221,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/13566f4f50fbac5c80fdecc351488099.png", "preTranslated": 0, - "totalCosts": 14552 + "totalCosts": 15258 }, "languages": [ { @@ -157420,17 +162230,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 13634 + "totalCosts": 14340 }, "translated": { - "tmMatch": 211, - "default": 13423, - "total": 13634 + "tmMatch": 248, + "default": 14092, + "total": 14340 }, "targetTranslated": { - "tmMatch": 380, - "default": 21451, - "total": 21831 + "tmMatch": 428, + "default": 22407, + "total": 22835 }, "translatedByMt": { "tmMatch": 49, @@ -157443,9 +162253,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 211, - "default": 13423, - "total": 13634 + "tmMatch": 248, + "default": 14092, + "total": 14340 }, "approvalCosts": { "tmMatch": 0, @@ -157580,7 +162390,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14691832/medium/edac3ef58631bde43e40ac815ef18dc5.png", "preTranslated": 0, - "totalCosts": 870 + "totalCosts": 872 }, "languages": [ { @@ -157589,17 +162399,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 870 + "totalCosts": 872 }, "translated": { "tmMatch": 78, - "default": 792, - "total": 870 + "default": 794, + "total": 872 }, "targetTranslated": { "tmMatch": 156, - "default": 1010, - "total": 1166 + "default": 1013, + "total": 1169 }, "translatedByMt": { "tmMatch": 5, @@ -157613,8 +162423,8 @@ }, "translationCosts": { "tmMatch": 78, - "default": 792, - "total": 870 + "default": 794, + "total": 872 }, "approvalCosts": { "tmMatch": 0, @@ -157728,6 +162538,58 @@ } ] }, + { + "user": { + "id": 15263940, + "username": "r2d2_jp", + "fullName": "Ryo (r2d2_jp)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15263940/medium/79ad585145ba5474bca7d35c2719dc43.jpg", + "preTranslated": 0, + "totalCosts": 351 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 351 + }, + "translated": { + "tmMatch": 3, + "default": 348, + "total": 351 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 953, + "total": 957 + }, + "translatedByMt": { + "tmMatch": 3, + "default": 8, + "total": 11 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 3, + "default": 348, + "total": 351 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15213342, @@ -158048,7 +162910,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226930/medium/46b74e4ecb6dfd2976afb2ce111bf382.jpeg", "preTranslated": 0, - "totalCosts": 4 + "totalCosts": 21 }, "languages": [ { @@ -158057,22 +162919,22 @@ "name": "Filipino", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 21 }, "translated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 21, + "total": 21 }, "targetTranslated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 25, + "total": 25 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 5, + "total": 5 }, "approved": { "tmMatch": 0, @@ -158081,8 +162943,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 21, + "total": 21 }, "approvalCosts": { "tmMatch": 0, @@ -160076,7 +164938,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14914333/medium/4149c052b7957f062739bbeef72b1866_default.png", "preTranslated": 0, - "totalCosts": 2984 + "totalCosts": 2998 }, "languages": [ { @@ -160085,17 +164947,17 @@ "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2984 + "totalCosts": 2998 }, "translated": { "tmMatch": 38, - "default": 2946, - "total": 2984 + "default": 2960, + "total": 2998 }, "targetTranslated": { "tmMatch": 34, - "default": 2603, - "total": 2637 + "default": 2615, + "total": 2649 }, "translatedByMt": { "tmMatch": 0, @@ -160109,8 +164971,8 @@ }, "translationCosts": { "tmMatch": 38, - "default": 2946, - "total": 2984 + "default": 2960, + "total": 2998 }, "approvalCosts": { "tmMatch": 0, @@ -160783,6 +165645,58 @@ } ] }, + { + "user": { + "id": 15289296, + "username": "sanzhar.umbet", + "fullName": "Sanzhar Umbet (sanzhar.umbet)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15289296/medium/5c4c75e28177ed05c0d98d158085bb94.png", + "preTranslated": 0, + "totalCosts": 42 + }, + "languages": [ + { + "language": { + "id": "kk", + "name": "Kazakh", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 42 + }, + "translated": { + "tmMatch": 15, + "default": 27, + "total": 42 + }, + "targetTranslated": { + "tmMatch": 17, + "default": 24, + "total": 41 + }, + "translatedByMt": { + "tmMatch": 7, + "default": 2, + "total": 9 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 15, + "default": 27, + "total": 42 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14731050, @@ -161051,7 +165965,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14851224/medium/696955991fca8ffd1257ac24ebe8200a.jpeg", "preTranslated": 0, - "totalCosts": 90 + "totalCosts": 154 }, "languages": [ { @@ -161060,22 +165974,22 @@ "name": "Finnish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 90 + "totalCosts": 154 }, "translated": { - "tmMatch": 5, - "default": 85, - "total": 90 + "tmMatch": 7, + "default": 147, + "total": 154 }, "targetTranslated": { - "tmMatch": 4, - "default": 67, - "total": 71 + "tmMatch": 6, + "default": 128, + "total": 134 }, "translatedByMt": { "tmMatch": 3, - "default": 79, - "total": 82 + "default": 86, + "total": 89 }, "approved": { "tmMatch": 0, @@ -161083,9 +165997,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 85, - "total": 90 + "tmMatch": 7, + "default": 147, + "total": 154 }, "approvalCosts": { "tmMatch": 0, @@ -161350,7 +166264,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13559834/medium/1022545f1391447b44113ac76076957a.jpg", "preTranslated": 0, - "totalCosts": 71 + "totalCosts": 233 }, "languages": [ { @@ -161359,22 +166273,22 @@ "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 71 + "totalCosts": 233 }, "translated": { - "tmMatch": 21, - "default": 50, - "total": 71 + "tmMatch": 40, + "default": 193, + "total": 233 }, "targetTranslated": { - "tmMatch": 32, - "default": 54, - "total": 86 + "tmMatch": 61, + "default": 227, + "total": 288 }, "translatedByMt": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 8, + "default": 13, + "total": 21 }, "approved": { "tmMatch": 0, @@ -161382,9 +166296,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 21, - "default": 50, - "total": 71 + "tmMatch": 40, + "default": 193, + "total": 233 }, "approvalCosts": { "tmMatch": 0, @@ -162806,7 +167720,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14765612/medium/95146c9af272a6aa0fe1ee9060d19ab4.jpeg", "preTranslated": 0, - "totalCosts": 1437 + "totalCosts": 2182 }, "languages": [ { @@ -162815,17 +167729,17 @@ "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1437 + "totalCosts": 2182 }, "translated": { - "tmMatch": 87, - "default": 1350, - "total": 1437 + "tmMatch": 110, + "default": 2072, + "total": 2182 }, "targetTranslated": { - "tmMatch": 172, - "default": 2384, - "total": 2556 + "tmMatch": 217, + "default": 3568, + "total": 3785 }, "translatedByMt": { "tmMatch": 0, @@ -162838,9 +167752,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 87, - "default": 1350, - "total": 1437 + "tmMatch": 110, + "default": 2072, + "total": 2182 }, "approvalCosts": { "tmMatch": 0, @@ -163890,6 +168804,110 @@ } ] }, + { + "user": { + "id": 15254166, + "username": "Sipsin", + "fullName": "Sina Ahmadzadeh (Sipsin)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15254166/medium/97bc228eabf1db39471815cc1e5a2da6.jpg", + "preTranslated": 0, + "totalCosts": 13 + }, + "languages": [ + { + "language": { + "id": "fa", + "name": "Persian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 13 + }, + "translated": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 16, + "total": 16 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, + { + "user": { + "id": 15263048, + "username": "SinisaDakovic", + "fullName": "Sinisa Dakovic (SinisaDakovic)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15263048/medium/e7cf3db3dbcc96ebefe653c805fd028b.jpeg", + "preTranslated": 0, + "totalCosts": 10 + }, + "languages": [ + { + "language": { + "id": "sr-CS", + "name": "Serbian (Latin)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 10 + }, + "translated": { + "tmMatch": 4, + "default": 6, + "total": 10 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 6, + "total": 10 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 4, + "default": 6, + "total": 10 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14958739, @@ -164256,37 +169274,37 @@ }, { "user": { - "id": 15061115, - "username": "Sna4i", - "fullName": "Sna_FX (Sna4i)", + "id": 14364644, + "username": "me.airee", + "fullName": "Snachi (me.airee)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15061115/medium/7bd33938a793ca4d4b74cd66a13464ed.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14364644/medium/beb7fb27693baf8b3d4d4aa4fbeb8a4c.jpeg", "preTranslated": 0, - "totalCosts": 1853 + "totalCosts": 3 }, "languages": [ { "language": { - "id": "ja", - "name": "Japanese", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1853 + "totalCosts": 3 }, "translated": { - "tmMatch": 18, - "default": 1835, - "total": 1853 + "tmMatch": 3, + "default": 0, + "total": 3 }, "targetTranslated": { - "tmMatch": 41, - "default": 4181, - "total": 4222 + "tmMatch": 3, + "default": 0, + "total": 3 }, "translatedByMt": { - "tmMatch": 0, - "default": 60, - "total": 60 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approved": { "tmMatch": 0, @@ -164294,9 +169312,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 18, - "default": 1835, - "total": 1853 + "tmMatch": 3, + "default": 0, + "total": 3 }, "approvalCosts": { "tmMatch": 0, @@ -164308,37 +169326,37 @@ }, { "user": { - "id": 14364644, - "username": "me.airee", - "fullName": "Snachi (me.airee)", + "id": 15277140, + "username": "LeterTW", + "fullName": "Snrat (LeterTW)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14364644/medium/beb7fb27693baf8b3d4d4aa4fbeb8a4c.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15277140/medium/582e03c9c18167159a4d4eb8f7c62455.png", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 5 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 5 }, "translated": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 0, + "default": 5, + "total": 5 }, "targetTranslated": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 0, + "default": 10, + "total": 10 }, "translatedByMt": { - "tmMatch": 1, + "tmMatch": 0, "default": 0, - "total": 1 + "total": 0 }, "approved": { "tmMatch": 0, @@ -164346,9 +169364,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 0, + "default": 5, + "total": 5 }, "approvalCosts": { "tmMatch": 0, @@ -164709,6 +169727,58 @@ } ] }, + { + "user": { + "id": 15266442, + "username": "soranaturally", + "fullName": "Sora Nature (soranaturally)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266442/medium/762206e3c8cb55e78c7f9301e7d652bc.png", + "preTranslated": 0, + "totalCosts": 1115 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1115 + }, + "translated": { + "tmMatch": 163, + "default": 952, + "total": 1115 + }, + "targetTranslated": { + "tmMatch": 425, + "default": 2249, + "total": 2674 + }, + "translatedByMt": { + "tmMatch": 9, + "default": 269, + "total": 278 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 163, + "default": 952, + "total": 1115 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14378524, @@ -164761,6 +169831,58 @@ } ] }, + { + "user": { + "id": 15266042, + "username": "aintbe", + "fullName": "Sori Lim (aintbe)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266042/medium/44b78d9324900cb015d8dc5ba4cf8b9e.png", + "preTranslated": 0, + "totalCosts": 11 + }, + "languages": [ + { + "language": { + "id": "ko", + "name": "Korean", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 11 + }, + "translated": { + "tmMatch": 0, + "default": 11, + "total": 11 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 6, + "total": 6 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 11, + "total": 11 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15127423, @@ -165549,7 +170671,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082843/medium/8bed2246335ec6e776196d05d80018a8.png", "preTranslated": 0, - "totalCosts": 4852 + "totalCosts": 4888 }, "languages": [ { @@ -165558,17 +170680,17 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4852 + "totalCosts": 4888 }, "translated": { "tmMatch": 91, - "default": 4761, - "total": 4852 + "default": 4797, + "total": 4888 }, "targetTranslated": { "tmMatch": 92, - "default": 4723, - "total": 4815 + "default": 4758, + "total": 4850 }, "translatedByMt": { "tmMatch": 0, @@ -165582,8 +170704,8 @@ }, "translationCosts": { "tmMatch": 91, - "default": 4761, - "total": 4852 + "default": 4797, + "total": 4888 }, "approvalCosts": { "tmMatch": 0, @@ -166225,7 +171347,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13249257/medium/f566e07e86e26f5911df1ddf5fae796d.png", "preTranslated": 0, - "totalCosts": 16655 + "totalCosts": 17414 }, "languages": [ { @@ -166234,17 +171356,17 @@ "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 16655 + "totalCosts": 17414 }, "translated": { - "tmMatch": 382, - "default": 16273, - "total": 16655 + "tmMatch": 537, + "default": 16877, + "total": 17414 }, "targetTranslated": { - "tmMatch": 434, - "default": 18632, - "total": 19066 + "tmMatch": 617, + "default": 19337, + "total": 19954 }, "translatedByMt": { "tmMatch": 0, @@ -166257,9 +171379,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 382, - "default": 16273, - "total": 16655 + "tmMatch": 537, + "default": 16877, + "total": 17414 }, "approvalCosts": { "tmMatch": 0, @@ -166893,6 +172015,58 @@ } ] }, + { + "user": { + "id": 15294766, + "username": "tacrew", + "fullName": "Tacrew (tacrew)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15294766/medium/abbc7ffa6f97a689bcaed863a6454241.jpeg", + "preTranslated": 0, + "totalCosts": 144 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 144 + }, + "translated": { + "tmMatch": 144, + "default": 0, + "total": 144 + }, + "targetTranslated": { + "tmMatch": 473, + "default": 0, + "total": 473 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 144, + "default": 0, + "total": 144 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15127309, @@ -166953,7 +172127,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15105599/medium/a3e031fc91bbbf728f3bb5dd384e8400_default.png", "preTranslated": 0, - "totalCosts": 6605 + "totalCosts": 10724 }, "languages": [ { @@ -166962,17 +172136,17 @@ "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6605 + "totalCosts": 10724 }, "translated": { - "tmMatch": 195, - "default": 6410, - "total": 6605 + "tmMatch": 217, + "default": 10507, + "total": 10724 }, "targetTranslated": { - "tmMatch": 175, - "default": 4700, - "total": 4875 + "tmMatch": 192, + "default": 7829, + "total": 8021 }, "translatedByMt": { "tmMatch": 0, @@ -166985,9 +172159,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 195, - "default": 6410, - "total": 6605 + "tmMatch": 217, + "default": 10507, + "total": 10724 }, "approvalCosts": { "tmMatch": 0, @@ -167725,6 +172899,58 @@ } ] }, + { + "user": { + "id": 14778126, + "username": "Thalma", + "fullName": "Thalma", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14778126/medium/3927ee487076db1a7dd83d45a6d2dc64.jpeg", + "preTranslated": 0, + "totalCosts": 110 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 110 + }, + "translated": { + "tmMatch": 0, + "default": 110, + "total": 110 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 106, + "total": 106 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 110, + "total": 110 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15048483, @@ -167777,6 +173003,58 @@ } ] }, + { + "user": { + "id": 15269844, + "username": "thespeedypack", + "fullName": "TheSpeedyPack Social Media (thespeedypack)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269844/medium/89bad950fad7e6e8a506d1efe7f093b8.png", + "preTranslated": 0, + "totalCosts": 74 + }, + "languages": [ + { + "language": { + "id": "ur-PK", + "name": "Urdu (Pakistan)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 74 + }, + "translated": { + "tmMatch": 1, + "default": 73, + "total": 74 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 79, + "total": 80 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 73, + "total": 74 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15131067, @@ -170229,7 +175507,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg", "preTranslated": 0, - "totalCosts": 22665 + "totalCosts": 25692 }, "languages": [ { @@ -170238,22 +175516,22 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 22665 + "totalCosts": 25692 }, "translated": { - "tmMatch": 627, - "default": 22038, - "total": 22665 + "tmMatch": 754, + "default": 24938, + "total": 25692 }, "targetTranslated": { - "tmMatch": 573, - "default": 17254, - "total": 17827 + "tmMatch": 689, + "default": 19597, + "total": 20286 }, "translatedByMt": { - "tmMatch": 1, - "default": 5, - "total": 6 + "tmMatch": 12, + "default": 12, + "total": 24 }, "approved": { "tmMatch": 0, @@ -170261,9 +175539,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 627, - "default": 22038, - "total": 22665 + "tmMatch": 754, + "default": 24938, + "total": 25692 }, "approvalCosts": { "tmMatch": 0, @@ -171113,7 +176391,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15152468/medium/1230c72e6dbf29250738476923383c89.png", "preTranslated": 0, - "totalCosts": 5 + "totalCosts": 206 }, "languages": [ { @@ -171122,17 +176400,17 @@ "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 5 + "totalCosts": 206 }, "translated": { "tmMatch": 0, - "default": 5, - "total": 5 + "default": 206, + "total": 206 }, "targetTranslated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 174, + "total": 174 }, "translatedByMt": { "tmMatch": 0, @@ -171146,8 +176424,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 5, - "total": 5 + "default": 206, + "total": 206 }, "approvalCosts": { "tmMatch": 0, @@ -171300,97 +176578,6 @@ } ] }, - { - "user": { - "id": 14514124, - "username": "ViktorOn", - "fullName": "Vik (ViktorOn)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png", - "preTranslated": 0, - "totalCosts": 41313 - }, - "languages": [ - { - "language": { - "id": "ru", - "name": "Russian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 41292 - }, - "translated": { - "tmMatch": 2673, - "default": 38619, - "total": 41292 - }, - "targetTranslated": { - "tmMatch": 2448, - "default": 33692, - "total": 36140 - }, - "translatedByMt": { - "tmMatch": 168, - "default": 1979, - "total": 2147 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 2673, - "default": 38619, - "total": 41292 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - }, - { - "language": { - "id": "uk", - "name": "Ukrainian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 21 - }, - "translated": { - "tmMatch": 1, - "default": 20, - "total": 21 - }, - "targetTranslated": { - "tmMatch": 1, - "default": 21, - "total": 22 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 1, - "default": 20, - "total": 21 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 14995749, @@ -172067,6 +177254,58 @@ } ] }, + { + "user": { + "id": 15269446, + "username": "vivid.vi.liu", + "fullName": "Vivi Liu (vivid.vi.liu)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269446/medium/bacfde2043325073085d9e7d50a89b22.png", + "preTranslated": 0, + "totalCosts": 1 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1 + }, + "translated": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 0, + "total": 4 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 12425646, @@ -172283,7 +177522,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241608/medium/dfa20fade20b2314f45079d92687afee_default.png", "preTranslated": 0, - "totalCosts": 753 + "totalCosts": 2332 }, "languages": [ { @@ -172292,17 +177531,17 @@ "name": "Bulgarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 753 + "totalCosts": 2332 }, "translated": { - "tmMatch": 134, - "default": 619, - "total": 753 + "tmMatch": 170, + "default": 2162, + "total": 2332 }, "targetTranslated": { - "tmMatch": 133, - "default": 662, - "total": 795 + "tmMatch": 179, + "default": 2314, + "total": 2493 }, "translatedByMt": { "tmMatch": 4, @@ -172312,12 +177551,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 863 + "total": 2681 }, "translationCosts": { - "tmMatch": 134, - "default": 619, - "total": 753 + "tmMatch": 170, + "default": 2162, + "total": 2332 }, "approvalCosts": { "tmMatch": 0, @@ -172543,7 +177782,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14008271/medium/c7b5cf629f7c0a1a3c8be6944f69983e.png", "preTranslated": 0, - "totalCosts": 13604 + "totalCosts": 13768 }, "languages": [ { @@ -172552,22 +177791,22 @@ "name": "Czech", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 13604 + "totalCosts": 13768 }, "translated": { - "tmMatch": 3038, - "default": 10566, - "total": 13604 + "tmMatch": 3045, + "default": 10723, + "total": 13768 }, "targetTranslated": { - "tmMatch": 3070, - "default": 10201, - "total": 13271 + "tmMatch": 3076, + "default": 10355, + "total": 13431 }, "translatedByMt": { "tmMatch": 67, - "default": 905, - "total": 972 + "default": 926, + "total": 993 }, "approved": { "tmMatch": 0, @@ -172575,9 +177814,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3038, - "default": 10566, - "total": 13604 + "tmMatch": 3045, + "default": 10723, + "total": 13768 }, "approvalCosts": { "tmMatch": 0, @@ -173003,6 +178242,58 @@ } ] }, + { + "user": { + "id": 15265026, + "username": "spovilusko", + "fullName": "WST Smledott (spovilusko)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15265026/medium/6ee7020d6f4f0c7bae76613b210ef0b1.png", + "preTranslated": 0, + "totalCosts": 3631 + }, + "languages": [ + { + "language": { + "id": "id", + "name": "Indonesian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 3631 + }, + "translated": { + "tmMatch": 5, + "default": 3626, + "total": 3631 + }, + "targetTranslated": { + "tmMatch": 5, + "default": 3091, + "total": 3096 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 5, + "default": 3626, + "total": 3631 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14732454, @@ -174311,7 +179602,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219862/medium/9e4172499882462a3fc790d83b7a1a9d.jpg", "preTranslated": 0, - "totalCosts": 269 + "totalCosts": 365 }, "languages": [ { @@ -174320,22 +179611,22 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 269 + "totalCosts": 365 }, "translated": { - "tmMatch": 67, - "default": 202, - "total": 269 + "tmMatch": 71, + "default": 294, + "total": 365 }, "targetTranslated": { - "tmMatch": 109, - "default": 353, - "total": 462 + "tmMatch": 124, + "default": 514, + "total": 638 }, "translatedByMt": { "tmMatch": 0, - "default": 19, - "total": 19 + "default": 84, + "total": 84 }, "approved": { "tmMatch": 0, @@ -174343,9 +179634,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 67, - "default": 202, - "total": 269 + "tmMatch": 71, + "default": 294, + "total": 365 }, "approvalCosts": { "tmMatch": 0, @@ -174363,7 +179654,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246044/medium/171bf1c1254d3780b9dc57afe145d835.jpeg", "preTranslated": 0, - "totalCosts": 100 + "totalCosts": 292 }, "languages": [ { @@ -174411,17 +179702,17 @@ "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 76 + "totalCosts": 268 }, "translated": { - "tmMatch": 0, - "default": 76, - "total": 76 + "tmMatch": 2, + "default": 266, + "total": 268 }, "targetTranslated": { - "tmMatch": 0, - "default": 147, - "total": 147 + "tmMatch": 5, + "default": 445, + "total": 450 }, "translatedByMt": { "tmMatch": 0, @@ -174434,9 +179725,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 76, - "total": 76 + "tmMatch": 2, + "default": 266, + "total": 268 }, "approvalCosts": { "tmMatch": 0, @@ -174662,7 +179953,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png", "preTranslated": 0, - "totalCosts": 182613 + "totalCosts": 182762 }, "languages": [ { @@ -174671,17 +179962,17 @@ "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 182613 + "totalCosts": 182762 }, "translated": { - "tmMatch": 8747, - "default": 173866, - "total": 182613 + "tmMatch": 8754, + "default": 174008, + "total": 182762 }, "targetTranslated": { - "tmMatch": 7605, - "default": 158513, - "total": 166118 + "tmMatch": 7611, + "default": 158644, + "total": 166255 }, "translatedByMt": { "tmMatch": 6, @@ -174694,9 +179985,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8747, - "default": 173866, - "total": 182613 + "tmMatch": 8754, + "default": 174008, + "total": 182762 }, "approvalCosts": { "tmMatch": 0, @@ -175070,6 +180361,58 @@ } ] }, + { + "user": { + "id": 15295270, + "username": "yoselyn2210", + "fullName": "Yoselyn Leon (yoselyn2210)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15295270/medium/2a151e354a2c66324aaee4899215389e.jpeg", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 3, + "default": 0, + "total": 3 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15150914, @@ -176318,6 +181661,58 @@ } ] }, + { + "user": { + "id": 15260596, + "username": "Zepphire", + "fullName": "Zepphire", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15260596/medium/cb3b9f65b0b6d8338eb83bd78128df3b.jpeg", + "preTranslated": 0, + "totalCosts": 13 + }, + "languages": [ + { + "language": { + "id": "pt-BR", + "name": "Portuguese, Brazilian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 13 + }, + "translated": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 9, + "total": 9 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14813216, @@ -176630,6 +182025,58 @@ } ] }, + { + "user": { + "id": 15292102, + "username": "zodaicman", + "fullName": "Zodaicman (zodaicman)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15292102/medium/2ba5a81ed4c4aee52aaa98688513bc11.jpg", + "preTranslated": 0, + "totalCosts": 495 + }, + "languages": [ + { + "language": { + "id": "tk", + "name": "Turkmen", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 495 + }, + "translated": { + "tmMatch": 4, + "default": 491, + "total": 495 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 381, + "total": 385 + }, + "translatedByMt": { + "tmMatch": 1, + "default": 0, + "total": 1 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 4, + "default": 491, + "total": 495 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14614016, @@ -176794,7 +182241,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14870630/medium/b36889c699124e54c6b781e3ba477726.png", "preTranslated": 0, - "totalCosts": 41 + "totalCosts": 59 }, "languages": [ { @@ -176803,17 +182250,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 41 + "totalCosts": 59 }, "translated": { "tmMatch": 27, - "default": 14, - "total": 41 + "default": 32, + "total": 59 }, "targetTranslated": { "tmMatch": 65, - "default": 42, - "total": 107 + "default": 83, + "total": 148 }, "translatedByMt": { "tmMatch": 13, @@ -176827,8 +182274,8 @@ }, "translationCosts": { "tmMatch": 27, - "default": 14, - "total": 41 + "default": 32, + "total": 59 }, "approvalCosts": { "tmMatch": 0, @@ -177046,6 +182493,58 @@ } ] }, + { + "user": { + "id": 14016583, + "username": "adamlaska.ivanov", + "fullName": "adam ivanov (adamlaska.ivanov)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14016583/medium/4b266dea24a22397952d46e3d267a75e.jpeg", + "preTranslated": 0, + "totalCosts": 39 + }, + "languages": [ + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 39 + }, + "translated": { + "tmMatch": 0, + "default": 39, + "total": 39 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 31, + "total": 31 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 39, + "total": 39 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14700534, @@ -177106,7 +182605,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14727038/medium/4150668cd11c03c029aeaaa44409248e.png", "preTranslated": 0, - "totalCosts": 2057 + "totalCosts": 2208 }, "languages": [ { @@ -177115,17 +182614,17 @@ "name": "Hungarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2057 + "totalCosts": 2208 }, "translated": { "tmMatch": 107, - "default": 1950, - "total": 2057 + "default": 2101, + "total": 2208 }, "targetTranslated": { "tmMatch": 103, - "default": 1441, - "total": 1544 + "default": 1578, + "total": 1681 }, "translatedByMt": { "tmMatch": 0, @@ -177139,8 +182638,8 @@ }, "translationCosts": { "tmMatch": 107, - "default": 1950, - "total": 2057 + "default": 2101, + "total": 2208 }, "approvalCosts": { "tmMatch": 0, @@ -177982,6 +183481,97 @@ } ] }, + { + "user": { + "id": 15270840, + "username": "Mak00", + "fullName": "aman khan (Mak00)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15270840/medium/6ddf13dfa91b0c7a74b2d70bdf2d858c.png", + "preTranslated": 0, + "totalCosts": 21 + }, + "languages": [ + { + "language": { + "id": "ar", + "name": "Arabic", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 11 + }, + "translated": { + "tmMatch": 1, + "default": 10, + "total": 11 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 11, + "total": 12 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 10, + "total": 11 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 10 + }, + "translated": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 13, + "total": 13 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 7, + "total": 7 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14779956, @@ -178718,7 +184308,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14987149/medium/fa69bc8352ffca5145216f5ea0f963ca.png", "preTranslated": 0, - "totalCosts": 2427 + "totalCosts": 2526 }, "languages": [ { @@ -178727,17 +184317,17 @@ "name": "Malay", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2427 + "totalCosts": 2526 }, "translated": { "tmMatch": 48, - "default": 2379, - "total": 2427 + "default": 2478, + "total": 2526 }, "targetTranslated": { "tmMatch": 57, - "default": 2257, - "total": 2314 + "default": 2356, + "total": 2413 }, "translatedByMt": { "tmMatch": 8, @@ -178751,8 +184341,8 @@ }, "translationCosts": { "tmMatch": 48, - "default": 2379, - "total": 2427 + "default": 2478, + "total": 2526 }, "approvalCosts": { "tmMatch": 0, @@ -180005,7 +185595,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250098/medium/e0bf575c362ae1ae0c478a8e5004e162.jpeg", "preTranslated": 0, - "totalCosts": 992 + "totalCosts": 1677 }, "languages": [ { @@ -180014,17 +185604,17 @@ "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 992 + "totalCosts": 1677 }, "translated": { - "tmMatch": 26, - "default": 966, - "total": 992 + "tmMatch": 27, + "default": 1650, + "total": 1677 }, "targetTranslated": { - "tmMatch": 49, - "default": 1369, - "total": 1418 + "tmMatch": 53, + "default": 2430, + "total": 2483 }, "translatedByMt": { "tmMatch": 11, @@ -180037,9 +185627,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 26, - "default": 966, - "total": 992 + "tmMatch": 27, + "default": 1650, + "total": 1677 }, "approvalCosts": { "tmMatch": 0, @@ -180733,7 +186323,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14631802/medium/49b31ee9ceace460558cf61dcaaa1e2f.jpeg", "preTranslated": 0, - "totalCosts": 1327 + "totalCosts": 1520 }, "languages": [ { @@ -180742,22 +186332,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1327 + "totalCosts": 1520 }, "translated": { - "tmMatch": 15, - "default": 1312, - "total": 1327 + "tmMatch": 19, + "default": 1501, + "total": 1520 }, "targetTranslated": { - "tmMatch": 18, - "default": 1366, - "total": 1384 + "tmMatch": 23, + "default": 1599, + "total": 1622 }, "translatedByMt": { "tmMatch": 6, - "default": 509, - "total": 515 + "default": 622, + "total": 628 }, "approved": { "tmMatch": 0, @@ -180765,9 +186355,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 15, - "default": 1312, - "total": 1327 + "tmMatch": 19, + "default": 1501, + "total": 1520 }, "approvalCosts": { "tmMatch": 0, @@ -181344,7 +186934,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15087917/medium/436328b66c11b44622caf9b3de1c4ef0_default.png", "preTranslated": 0, - "totalCosts": 895 + "totalCosts": 905 }, "languages": [ { @@ -181353,17 +186943,17 @@ "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 895 + "totalCosts": 905 }, "translated": { - "tmMatch": 75, - "default": 820, - "total": 895 + "tmMatch": 77, + "default": 828, + "total": 905 }, "targetTranslated": { - "tmMatch": 81, - "default": 655, - "total": 736 + "tmMatch": 83, + "default": 661, + "total": 744 }, "translatedByMt": { "tmMatch": 0, @@ -181376,9 +186966,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 75, - "default": 820, - "total": 895 + "tmMatch": 77, + "default": 828, + "total": 905 }, "approvalCosts": { "tmMatch": 0, @@ -182228,7 +187818,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/85dd0d12b6d2d490447bbba939a888ba.jpeg", "preTranslated": 0, - "totalCosts": 58535 + "totalCosts": 59305 }, "languages": [ { @@ -182237,32 +187827,32 @@ "name": "Greek", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 58535 + "totalCosts": 59305 }, "translated": { - "tmMatch": 2449, - "default": 56086, - "total": 58535 + "tmMatch": 2462, + "default": 56843, + "total": 59305 }, "targetTranslated": { - "tmMatch": 2571, - "default": 58201, - "total": 60772 + "tmMatch": 2585, + "default": 58990, + "total": 61575 }, "translatedByMt": { "tmMatch": 111, - "default": 2311, - "total": 2422 + "default": 2338, + "total": 2449 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 761 }, "translationCosts": { - "tmMatch": 2449, - "default": 56086, - "total": 58535 + "tmMatch": 2462, + "default": 56843, + "total": 59305 }, "approvalCosts": { "tmMatch": 0, @@ -182480,6 +188070,58 @@ } ] }, + { + "user": { + "id": 15274556, + "username": "gilenlecuona", + "fullName": "guyguy120 (gilenlecuona)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15274556/medium/171aed1bf197511befac6b87394bccb1.png", + "preTranslated": 0, + "totalCosts": 50 + }, + "languages": [ + { + "language": { + "id": "eu", + "name": "Basque", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 50 + }, + "translated": { + "tmMatch": 3, + "default": 47, + "total": 50 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 36, + "total": 40 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 3, + "default": 47, + "total": 50 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15131931, @@ -183364,6 +189006,58 @@ } ] }, + { + "user": { + "id": 15061115, + "username": "iPr0g", + "fullName": "iPr0g", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15061115/medium/7bd33938a793ca4d4b74cd66a13464ed.jpg", + "preTranslated": 0, + "totalCosts": 1853 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1853 + }, + "translated": { + "tmMatch": 18, + "default": 1835, + "total": 1853 + }, + "targetTranslated": { + "tmMatch": 41, + "default": 4181, + "total": 4222 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 60, + "total": 60 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 18, + "default": 1835, + "total": 1853 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14819462, @@ -183736,7 +189430,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15135089/medium/ad0dde7b6943eb1bdc2b8c64223dd070.png", "preTranslated": 0, - "totalCosts": 7887 + "totalCosts": 8166 }, "languages": [ { @@ -183745,17 +189439,17 @@ "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 7887 + "totalCosts": 8166 }, "translated": { "tmMatch": 1089, - "default": 6798, - "total": 7887 + "default": 7077, + "total": 8166 }, "targetTranslated": { "tmMatch": 3287, - "default": 19712, - "total": 22999 + "default": 20307, + "total": 23594 }, "translatedByMt": { "tmMatch": 4, @@ -183769,8 +189463,8 @@ }, "translationCosts": { "tmMatch": 1089, - "default": 6798, - "total": 7887 + "default": 7077, + "total": 8166 }, "approvalCosts": { "tmMatch": 0, @@ -184646,7 +190340,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14957177/medium/a88c293bcc8b749456d71edee74329f5.jpeg", "preTranslated": 0, - "totalCosts": 28680 + "totalCosts": 32737 }, "languages": [ { @@ -184655,32 +190349,32 @@ "name": "Swahili", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 28680 + "totalCosts": 32737 }, "translated": { - "tmMatch": 777, - "default": 27903, - "total": 28680 + "tmMatch": 842, + "default": 31895, + "total": 32737 }, "targetTranslated": { - "tmMatch": 830, - "default": 27266, - "total": 28096 + "tmMatch": 902, + "default": 31321, + "total": 32223 }, "translatedByMt": { - "tmMatch": 27, + "tmMatch": 28, "default": 14, - "total": 41 + "total": 42 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 852 }, "translationCosts": { - "tmMatch": 777, - "default": 27903, - "total": 28680 + "tmMatch": 842, + "default": 31895, + "total": 32737 }, "approvalCosts": { "tmMatch": 0, @@ -184950,6 +190644,58 @@ } ] }, + { + "user": { + "id": 15270742, + "username": "julgz", + "fullName": "julgz", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15270742/medium/2975fe9718959071e4db816a58e009d1.png", + "preTranslated": 0, + "totalCosts": 10 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 10 + }, + "translated": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 11, + "total": 11 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 10, + "total": 10 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14948719, @@ -186198,6 +191944,58 @@ } ] }, + { + "user": { + "id": 15285990, + "username": "lxlxw", + "fullName": "lx5 (lxlxw)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15285990/medium/4ff4140a6e7161de6f8cf6fe8fd728ca.jpeg", + "preTranslated": 0, + "totalCosts": 250 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 250 + }, + "translated": { + "tmMatch": 96, + "default": 154, + "total": 250 + }, + "targetTranslated": { + "tmMatch": 169, + "default": 237, + "total": 406 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 96, + "default": 154, + "total": 250 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14361208, @@ -187758,6 +193556,58 @@ } ] }, + { + "user": { + "id": 14856762, + "username": "nhftks", + "fullName": "nhftks", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14856762/medium/8ba94b1cc2b169f34e314c11a0e7880b.jpeg", + "preTranslated": 0, + "totalCosts": 1614 + }, + "languages": [ + { + "language": { + "id": "sv-SE", + "name": "Swedish", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1614 + }, + "translated": { + "tmMatch": 59, + "default": 1555, + "total": 1614 + }, + "targetTranslated": { + "tmMatch": 57, + "default": 1534, + "total": 1591 + }, + "translatedByMt": { + "tmMatch": 2, + "default": 202, + "total": 204 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 59, + "default": 1555, + "total": 1614 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14985297, @@ -189097,6 +194947,58 @@ } ] }, + { + "user": { + "id": 15293776, + "username": "i.rarafy", + "fullName": "rarafy (i.rarafy)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293776/medium/c65704f36f82067d1bb1ad464ad54ba1.png", + "preTranslated": 0, + "totalCosts": 3 + }, + "languages": [ + { + "language": { + "id": "ja", + "name": "Japanese", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 3 + }, + "translated": { + "tmMatch": 0, + "default": 3, + "total": 3 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 7, + "total": 7 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 3, + "total": 3 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14966129, @@ -189253,58 +195155,6 @@ } ] }, - { - "user": { - "id": 14856762, - "username": "nhftks", - "fullName": "richard (nhftks)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14856762/medium/8ba94b1cc2b169f34e314c11a0e7880b.jpeg", - "preTranslated": 0, - "totalCosts": 1614 - }, - "languages": [ - { - "language": { - "id": "sv-SE", - "name": "Swedish", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 1614 - }, - "translated": { - "tmMatch": 59, - "default": 1555, - "total": 1614 - }, - "targetTranslated": { - "tmMatch": 57, - "default": 1534, - "total": 1591 - }, - "translatedByMt": { - "tmMatch": 2, - "default": 202, - "total": 204 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 59, - "default": 1555, - "total": 1614 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, { "user": { "id": 15026429, @@ -190280,8 +196130,47 @@ }, { "language": { - "id": "it", - "name": "Italian", + "id": "it", + "name": "Italian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 0 + }, + "translated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 1 + }, + "translationCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, "totalCosts": 0 @@ -190304,7 +196193,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1 + "total": 12 }, "translationCosts": { "tmMatch": 0, @@ -190316,24 +196205,37 @@ "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15136208, + "username": "shunsuke.kikuchi", + "fullName": "shun (shunsuke.kikuchi)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15136208/medium/849c0d80efdaa9b2e28d8475a8eebeb5.png", + "preTranslated": 0, + "totalCosts": 9 + }, + "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 0 + "totalCosts": 9 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 6, + "default": 3, + "total": 9 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 6, + "default": 3, + "total": 9 }, "translatedByMt": { "tmMatch": 0, @@ -190343,12 +196245,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 12 + "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 6, + "default": 3, + "total": 9 }, "approvalCosts": { "tmMatch": 0, @@ -190360,37 +196262,37 @@ }, { "user": { - "id": 15136208, - "username": "shunsuke.kikuchi", - "fullName": "shun (shunsuke.kikuchi)", + "id": 15271954, + "username": "simpleboy", + "fullName": "simpleboy", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15136208/medium/849c0d80efdaa9b2e28d8475a8eebeb5.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271954/medium/5bac3cfeb619cfcf28a4e3d02f697d60.jpg", "preTranslated": 0, - "totalCosts": 9 + "totalCosts": 819 }, "languages": [ { "language": { - "id": "ja", - "name": "Japanese", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 9 + "totalCosts": 819 }, "translated": { - "tmMatch": 6, - "default": 3, - "total": 9 + "tmMatch": 0, + "default": 819, + "total": 819 }, "targetTranslated": { - "tmMatch": 6, - "default": 3, - "total": 9 + "tmMatch": 0, + "default": 1306, + "total": 1306 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 7, + "total": 7 }, "approved": { "tmMatch": 0, @@ -190398,9 +196300,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 3, - "total": 9 + "tmMatch": 0, + "default": 819, + "total": 819 }, "approvalCosts": { "tmMatch": 0, @@ -191913,7 +197815,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14921757/medium/80e6fd8d3f0be1e5feab67dccc614d82.jpg", "preTranslated": 0, - "totalCosts": 4879 + "totalCosts": 8229 }, "languages": [ { @@ -191922,17 +197824,17 @@ "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4879 + "totalCosts": 8229 }, "translated": { - "tmMatch": 101, - "default": 4778, - "total": 4879 + "tmMatch": 114, + "default": 8115, + "total": 8229 }, "targetTranslated": { - "tmMatch": 170, - "default": 7501, - "total": 7671 + "tmMatch": 196, + "default": 12515, + "total": 12711 }, "translatedByMt": { "tmMatch": 6, @@ -191945,9 +197847,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 101, - "default": 4778, - "total": 4879 + "tmMatch": 114, + "default": 8115, + "total": 8229 }, "approvalCosts": { "tmMatch": 0, @@ -192477,6 +198379,58 @@ } ] }, + { + "user": { + "id": 15264882, + "username": "villysony", + "fullName": "vishnu watcharanopkun (villysony)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264882/medium/4cd0aab731abe22b4b4994359846e830.jpeg", + "preTranslated": 0, + "totalCosts": 18 + }, + "languages": [ + { + "language": { + "id": "th", + "name": "Thai", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 18 + }, + "translated": { + "tmMatch": 5, + "default": 13, + "total": 18 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 3, + "total": 4 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 5, + "default": 13, + "total": 18 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15152978, @@ -192789,6 +198743,58 @@ } ] }, + { + "user": { + "id": 15254466, + "username": "web3driver", + "fullName": "web3driver", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15254466/medium/adde580dfcc331b56eb1c3823aaa9f0d.png", + "preTranslated": 0, + "totalCosts": 1380 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 1380 + }, + "translated": { + "tmMatch": 52, + "default": 1328, + "total": 1380 + }, + "targetTranslated": { + "tmMatch": 90, + "default": 2274, + "total": 2364 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 52, + "default": 1328, + "total": 1380 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15073571, @@ -193915,7 +199921,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15193608/medium/c3b5342b0fef9f5f51eff5b0c2b93c70.jpg", "preTranslated": 0, - "totalCosts": 21377 + "totalCosts": 30954 }, "languages": [ { @@ -193924,22 +199930,22 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 21377 + "totalCosts": 30954 }, "translated": { - "tmMatch": 2382, - "default": 18995, - "total": 21377 + "tmMatch": 3736, + "default": 27218, + "total": 30954 }, "targetTranslated": { - "tmMatch": 4099, - "default": 29470, - "total": 33569 + "tmMatch": 6193, + "default": 41950, + "total": 48143 }, "translatedByMt": { - "tmMatch": 16, + "tmMatch": 17, "default": 48, - "total": 64 + "total": 65 }, "approved": { "tmMatch": 0, @@ -193947,9 +199953,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2382, - "default": 18995, - "total": 21377 + "tmMatch": 3736, + "default": 27218, + "total": 30954 }, "approvalCosts": { "tmMatch": 0, @@ -194695,7 +200701,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12465480/medium/10edc9a851d4c50c0a414f4b24955423.png", "preTranslated": 0, - "totalCosts": 510 + "totalCosts": 5065 }, "languages": [ { @@ -194704,17 +200710,17 @@ "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 510 + "totalCosts": 5065 }, "translated": { - "tmMatch": 43, - "default": 467, - "total": 510 + "tmMatch": 414, + "default": 4651, + "total": 5065 }, "targetTranslated": { - "tmMatch": 32, - "default": 406, - "total": 438 + "tmMatch": 332, + "default": 3727, + "total": 4059 }, "translatedByMt": { "tmMatch": 6, @@ -194727,9 +200733,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 43, - "default": 467, - "total": 510 + "tmMatch": 414, + "default": 4651, + "total": 5065 }, "approvalCosts": { "tmMatch": 0, @@ -195103,6 +201109,58 @@ } ] }, + { + "user": { + "id": 15269290, + "username": "John01", + "fullName": "Ιωάννης Λιάλιος (John01)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269290/medium/b903da51f95d4eaece4abb52eb8003de.png", + "preTranslated": 0, + "totalCosts": 73 + }, + "languages": [ + { + "language": { + "id": "el", + "name": "Greek", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 73 + }, + "translated": { + "tmMatch": 0, + "default": 73, + "total": 73 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 80, + "total": 80 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 73, + "total": 73 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14937735, @@ -195267,7 +201325,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13495634/medium/2bb6c9935c48233c344c42e22f7a0b64.jpg", "preTranslated": 0, - "totalCosts": 653 + "totalCosts": 758 }, "languages": [ { @@ -195276,22 +201334,22 @@ "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 653 + "totalCosts": 758 }, "translated": { - "tmMatch": 16, - "default": 637, - "total": 653 + "tmMatch": 27, + "default": 731, + "total": 758 }, "targetTranslated": { - "tmMatch": 19, - "default": 576, - "total": 595 + "tmMatch": 32, + "default": 663, + "total": 695 }, "translatedByMt": { - "tmMatch": 1, - "default": 564, - "total": 565 + "tmMatch": 6, + "default": 648, + "total": 654 }, "approved": { "tmMatch": 0, @@ -195299,9 +201357,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 16, - "default": 637, - "total": 653 + "tmMatch": 27, + "default": 731, + "total": 758 }, "approvalCosts": { "tmMatch": 0, @@ -195902,28 +201960,67 @@ "username": "andrejklim480", "fullName": "Андрей Клим (andrejklim480)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214262/medium/4a4b628824641d9cbdac74e00ecdb39d.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214262/medium/5727db09ace3c2d258ba36991ad941ea.jpg", "preTranslated": 0, - "totalCosts": 79 + "totalCosts": 449 }, "languages": [ + { + "language": { + "id": "cs", + "name": "Czech", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 9 + }, + "translated": { + "tmMatch": 0, + "default": 9, + "total": 9 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 7, + "total": 7 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 9, + "total": 9 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, { "language": { "id": "ru", "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 79 + "totalCosts": 432 }, "translated": { - "tmMatch": 9, - "default": 70, - "total": 79 + "tmMatch": 86, + "default": 346, + "total": 432 }, "targetTranslated": { - "tmMatch": 10, - "default": 62, - "total": 72 + "tmMatch": 81, + "default": 313, + "total": 394 }, "translatedByMt": { "tmMatch": 3, @@ -195936,9 +202033,48 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 70, - "total": 79 + "tmMatch": 86, + "default": 346, + "total": 432 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 8 + }, + "translated": { + "tmMatch": 8, + "default": 0, + "total": 8 + }, + "targetTranslated": { + "tmMatch": 10, + "default": 0, + "total": 10 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 8, + "default": 0, + "total": 8 }, "approvalCosts": { "tmMatch": 0, @@ -196260,6 +202396,58 @@ } ] }, + { + "user": { + "id": 15233448, + "username": "ATATAWKA", + "fullName": "БОГ (ATATAWKA)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233448/medium/7aecc0f3a4fd3fbda82e8214fdf5fbe7.jpeg", + "preTranslated": 0, + "totalCosts": 121 + }, + "languages": [ + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 121 + }, + "translated": { + "tmMatch": 0, + "default": 121, + "total": 121 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 102, + "total": 102 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 121, + "total": 121 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 13490273, @@ -198067,6 +204255,58 @@ } ] }, + { + "user": { + "id": 15274392, + "username": "kostya.74.74", + "fullName": "Костя Аристов (kostya.74.74)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15274392/medium/1479cb1e29576e3989b6fbf7c807eb29.jpeg", + "preTranslated": 0, + "totalCosts": 6 + }, + "languages": [ + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 6 + }, + "translated": { + "tmMatch": 0, + "default": 6, + "total": 6 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 6, + "total": 6 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 3, + "total": 3 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 6, + "total": 6 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14286930, @@ -198530,7 +204770,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15199956/medium/74aea56a748b12af52448b2ecf7ca2ac.png", "preTranslated": 0, - "totalCosts": 1508 + "totalCosts": 5482 }, "languages": [ { @@ -198539,17 +204779,17 @@ "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1508 + "totalCosts": 5482 }, "translated": { - "tmMatch": 86, - "default": 1422, - "total": 1508 + "tmMatch": 189, + "default": 5293, + "total": 5482 }, "targetTranslated": { - "tmMatch": 81, - "default": 1364, - "total": 1445 + "tmMatch": 173, + "default": 4709, + "total": 4882 }, "translatedByMt": { "tmMatch": 0, @@ -198562,9 +204802,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 86, - "default": 1422, - "total": 1508 + "tmMatch": 189, + "default": 5293, + "total": 5482 }, "approvalCosts": { "tmMatch": 0, @@ -199570,7 +205810,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14564238/medium/e6feebc5a27754079a07907fffac8389.jpg", "preTranslated": 0, - "totalCosts": 25691 + "totalCosts": 27976 }, "languages": [ { @@ -199579,22 +205819,22 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 25691 + "totalCosts": 27976 }, "translated": { - "tmMatch": 1022, - "default": 24669, - "total": 25691 + "tmMatch": 1097, + "default": 26879, + "total": 27976 }, "targetTranslated": { - "tmMatch": 1034, - "default": 26679, - "total": 27713 + "tmMatch": 1139, + "default": 29182, + "total": 30321 }, "translatedByMt": { "tmMatch": 14, - "default": 164, - "total": 178 + "default": 167, + "total": 181 }, "approved": { "tmMatch": 0, @@ -199602,9 +205842,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1022, - "default": 24669, - "total": 25691 + "tmMatch": 1097, + "default": 26879, + "total": 27976 }, "approvalCosts": { "tmMatch": 0, @@ -199952,6 +206192,97 @@ } ] }, + { + "user": { + "id": 15283644, + "username": "VrotEbalETH", + "fullName": "эй ты 1352791ш (VrotEbalETH)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15283644/medium/27f2bab6237cea341a224e3b1268f0ef.png", + "preTranslated": 0, + "totalCosts": 126 + }, + "languages": [ + { + "language": { + "id": "ru", + "name": "Russian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 76 + }, + "translated": { + "tmMatch": 1, + "default": 75, + "total": 76 + }, + "targetTranslated": { + "tmMatch": 3, + "default": 52, + "total": 55 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 1, + "default": 75, + "total": 76 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "uk", + "name": "Ukrainian", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 50 + }, + "translated": { + "tmMatch": 2, + "default": 48, + "total": 50 + }, + "targetTranslated": { + "tmMatch": 3, + "default": 6, + "total": 9 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 48, + "total": 50 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14623638, @@ -200324,7 +206655,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15207930/medium/b810ceacea24be83757399fa7cc431ef_default.png", "preTranslated": 0, - "totalCosts": 13 + "totalCosts": 60 }, "languages": [ { @@ -200333,17 +206664,17 @@ "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 13 + "totalCosts": 60 }, "translated": { "tmMatch": 11, - "default": 2, - "total": 13 + "default": 49, + "total": 60 }, "targetTranslated": { "tmMatch": 10, - "default": 4, - "total": 14 + "default": 44, + "total": 54 }, "translatedByMt": { "tmMatch": 0, @@ -200357,8 +206688,8 @@ }, "translationCosts": { "tmMatch": 11, - "default": 2, - "total": 13 + "default": 49, + "total": 60 }, "approvalCosts": { "tmMatch": 0, @@ -200823,6 +207154,97 @@ } ] }, + { + "user": { + "id": 15279280, + "username": "CHOOCHATJUMPATHONG", + "fullName": "ชูชาติ จําปาทอง (CHOOCHATJUMPATHONG)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279280/medium/21c0636452ffadcdd0672a0c455ba748.png", + "preTranslated": 0, + "totalCosts": 77 + }, + "languages": [ + { + "language": { + "id": "ca", + "name": "Catalan", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 37 + }, + "translated": { + "tmMatch": 0, + "default": 37, + "total": 37 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 37, + "total": 37 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 37, + "total": 37 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "th", + "name": "Thai", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 40 + }, + "translated": { + "tmMatch": 0, + "default": 40, + "total": 40 + }, + "targetTranslated": { + "tmMatch": 0, + "default": 40, + "total": 40 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 0, + "default": 40, + "total": 40 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14080359, @@ -201083,6 +207505,58 @@ } ] }, + { + "user": { + "id": 14060898, + "username": "PoknoRoyal", + "fullName": "ប៉ុកណូ រ៉ូយ៉ាល់ (PoknoRoyal)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14060898/medium/ab3c1d769772b14369a1d98492a8bb0c.png", + "preTranslated": 0, + "totalCosts": 270 + }, + "languages": [ + { + "language": { + "id": "km", + "name": "Khmer", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 270 + }, + "translated": { + "tmMatch": 3, + "default": 267, + "total": 270 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 269, + "total": 273 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 3, + "default": 267, + "total": 270 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15074931, @@ -201499,6 +207973,58 @@ } ] }, + { + "user": { + "id": 15289398, + "username": "howardwu83", + "fullName": "吳成昊 (howardwu83)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15289398/medium/86d1f2d23a0b34ad5630a2bbd6199b32.jpeg", + "preTranslated": 0, + "totalCosts": 15 + }, + "languages": [ + { + "language": { + "id": "zh-TW", + "name": "Chinese Traditional", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 15 + }, + "translated": { + "tmMatch": 2, + "default": 13, + "total": 15 + }, + "targetTranslated": { + "tmMatch": 7, + "default": 18, + "total": 25 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 13, + "total": 15 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14588140, @@ -202578,6 +209104,58 @@ } ] }, + { + "user": { + "id": 15282666, + "username": "guozhiyu1202", + "fullName": "流藻 (guozhiyu1202)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15282666/medium/d76840814978ab08cdfe32cb9f626599.jpeg", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 0, + "total": 4 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14655736, @@ -202942,6 +209520,58 @@ } ] }, + { + "user": { + "id": 15254628, + "username": "a957417045", + "fullName": "蒙桢 (a957417045)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15254628/medium/586746fc5db81908724cdbc824ff1b59.gif", + "preTranslated": 0, + "totalCosts": 2 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 2 + }, + "translated": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 0, + "total": 4 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 0, + "total": 2 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 14710684, @@ -203033,6 +209663,58 @@ } ] }, + { + "user": { + "id": 15290682, + "username": "kelegele", + "fullName": "蕉太 (kelegele)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15290682/medium/3f29686a60282fce10aa9b9b72a6d92c.jpeg", + "preTranslated": 0, + "totalCosts": 8 + }, + "languages": [ + { + "language": { + "id": "zh-CN", + "name": "Chinese Simplified", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 8 + }, + "translated": { + "tmMatch": 2, + "default": 6, + "total": 8 + }, + "targetTranslated": { + "tmMatch": 4, + "default": 9, + "total": 13 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 2, + "default": 6, + "total": 8 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + } + ] + }, { "user": { "id": 15117055, diff --git a/src/data/translation-reports/month/month-data.json b/src/data/translation-reports/month/month-data.json index 1af16a58821..9febef61219 100644 --- a/src/data/translation-reports/month/month-data.json +++ b/src/data/translation-reports/month/month-data.json @@ -3,48 +3,48 @@ "url": "https://translate.ethereum.org/project/ethereum-org", "unit": "words", "dateRange": { - "from": "2022-04-01", - "to": "2022-05-01" + "from": "2022-05-01", + "to": "2022-06-01" }, "currency": "USD", "mode": "simple", - "totalCosts": 370471, + "totalCosts": 419029, "totalTMSavings": 0, - "totalPreTranslated": 154821, + "totalPreTranslated": 161740, "data": [ { "user": { - "id": 15250140, - "username": "12g", - "fullName": "12g", + "id": 15293526, + "username": "1032617422", + "fullName": "1032617422", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250140/medium/93c4b05cd40e194f906c25902dbbda9a_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293526/medium/9e1560b3c7f8e0915244339e340263ae_default.png", "preTranslated": 0, - "totalCosts": 222 + "totalCosts": 25 }, "languages": [ { "language": { - "id": "ar", - "name": "Arabic", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 222 + "totalCosts": 25 }, "translated": { - "tmMatch": 11, - "default": 211, - "total": 222 + "tmMatch": 0, + "default": 25, + "total": 25 }, "targetTranslated": { - "tmMatch": 21, - "default": 181, - "total": 202 + "tmMatch": 0, + "default": 28, + "total": 28 }, "translatedByMt": { "tmMatch": 0, - "default": 50, - "total": 50 + "default": 25, + "total": 25 }, "approved": { "tmMatch": 0, @@ -52,9 +52,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 11, - "default": 211, - "total": 222 + "tmMatch": 0, + "default": 25, + "total": 25 }, "approvalCosts": { "tmMatch": 0, @@ -66,37 +66,37 @@ }, { "user": { - "id": 15216898, - "username": "3936889315", - "fullName": "3936889315", + "id": 15250140, + "username": "12g", + "fullName": "12g", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15216898/medium/cf2920ca6ea90600195fce7d3c56d40e_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250140/medium/93c4b05cd40e194f906c25902dbbda9a_default.png", "preTranslated": 0, - "totalCosts": 74 + "totalCosts": 626 }, "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 74 + "totalCosts": 626 }, "translated": { - "tmMatch": 7, - "default": 67, - "total": 74 + "tmMatch": 0, + "default": 626, + "total": 626 }, "targetTranslated": { - "tmMatch": 11, - "default": 76, - "total": 87 + "tmMatch": 0, + "default": 555, + "total": 555 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 196, + "total": 196 }, "approved": { "tmMatch": 0, @@ -104,9 +104,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, - "default": 67, - "total": 74 + "tmMatch": 0, + "default": 626, + "total": 626 }, "approvalCosts": { "tmMatch": 0, @@ -118,32 +118,32 @@ }, { "user": { - "id": 15236164, - "username": "ANNN12138", - "fullName": "ANNN12138", + "id": 15137520, + "username": "6ara6aka", + "fullName": "6ara6aka", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15236164/medium/f730080c4754fb2b8908693165276938_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137520/medium/45578cd00916c31bdd162d1ead2c563b_default.png", "preTranslated": 0, - "totalCosts": 4 + "totalCosts": 94 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "uk", + "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 94 }, "translated": { - "tmMatch": 2, - "default": 2, - "total": 4 + "tmMatch": 0, + "default": 94, + "total": 94 }, "targetTranslated": { - "tmMatch": 4, - "default": 5, - "total": 9 + "tmMatch": 0, + "default": 135, + "total": 135 }, "translatedByMt": { "tmMatch": 0, @@ -156,9 +156,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 2, - "total": 4 + "tmMatch": 0, + "default": 94, + "total": 94 }, "approvalCosts": { "tmMatch": 0, @@ -170,47 +170,47 @@ }, { "user": { - "id": 15042043, - "username": "Acc_John_Banis", - "fullName": "Acc_John_Banis", + "id": 15218610, + "username": "Aco_Anna_Nowak", + "fullName": "Aco_Anna_Nowak", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15042043/medium/3e87407585f7ba151de939a245b94de1_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218610/medium/7d145d839dcf4e83149b672ee31910c8_default.png", "preTranslated": 0, - "totalCosts": 12427 + "totalCosts": 0 }, "languages": [ { "language": { - "id": "nl", - "name": "Dutch", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 12427 + "totalCosts": 0 }, "translated": { - "tmMatch": 1173, - "default": 11254, - "total": 12427 + "tmMatch": 0, + "default": 0, + "total": 0 }, "targetTranslated": { - "tmMatch": 1266, - "default": 11781, - "total": 13047 + "tmMatch": 0, + "default": 0, + "total": 0 }, "translatedByMt": { - "tmMatch": 3, - "default": 91, - "total": 94 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 14598 + "total": 4 }, "translationCosts": { - "tmMatch": 1173, - "default": 11254, - "total": 12427 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approvalCosts": { "tmMatch": 0, @@ -222,47 +222,47 @@ }, { "user": { - "id": 15218610, - "username": "Aco_Anna_Nowak", - "fullName": "Aco_Anna_Nowak", + "id": 15038029, + "username": "Aco_Gemineo", + "fullName": "Aco_Gemineo", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218610/medium/7d145d839dcf4e83149b672ee31910c8_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15038029/medium/39a0baeb76a5f50b79e8e8589553619a_default.png", "preTranslated": 0, - "totalCosts": 189 + "totalCosts": 34046 }, "languages": [ { "language": { - "id": "pl", - "name": "Polish", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 189 + "totalCosts": 34046 }, "translated": { - "tmMatch": 9, - "default": 180, - "total": 189 + "tmMatch": 8965, + "default": 25081, + "total": 34046 }, "targetTranslated": { - "tmMatch": 9, - "default": 175, - "total": 184 + "tmMatch": 8453, + "default": 24087, + "total": 32540 }, "translatedByMt": { - "tmMatch": 6, - "default": 52, - "total": 58 + "tmMatch": 10, + "default": 17, + "total": 27 }, "approved": { "tmMatch": 0, "default": 0, - "total": 77 + "total": 42147 }, "translationCosts": { - "tmMatch": 9, - "default": 180, - "total": 189 + "tmMatch": 8965, + "default": 25081, + "total": 34046 }, "approvalCosts": { "tmMatch": 0, @@ -274,47 +274,47 @@ }, { "user": { - "id": 14179845, - "username": "Aco_FroilanM", - "fullName": "Aco_FroilanM", + "id": 15005475, + "username": "Aco_MLY", + "fullName": "Aco_MLY", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14179845/medium/1af360698966f9a64736117b86bfc712_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15005475/medium/9443753a1b4b3c1d14a6c5932971813f_default.png", "preTranslated": 0, - "totalCosts": 5447 + "totalCosts": 34917 }, "languages": [ { "language": { - "id": "ca", - "name": "Catalan", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 5447 + "totalCosts": 34917 }, "translated": { - "tmMatch": 1852, - "default": 3595, - "total": 5447 + "tmMatch": 3139, + "default": 31778, + "total": 34917 }, "targetTranslated": { - "tmMatch": 2078, - "default": 4071, - "total": 6149 + "tmMatch": 2653, + "default": 24325, + "total": 26978 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 5, "default": 0, - "total": 0 + "total": 5 }, "approved": { "tmMatch": 0, "default": 0, - "total": 7939 + "total": 59109 }, "translationCosts": { - "tmMatch": 1852, - "default": 3595, - "total": 5447 + "tmMatch": 3139, + "default": 31778, + "total": 34917 }, "approvalCosts": { "tmMatch": 0, @@ -326,32 +326,32 @@ }, { "user": { - "id": 15038029, - "username": "Aco_Gemineo", - "fullName": "Aco_Gemineo", + "id": 15005335, + "username": "Aco_Mamorim", + "fullName": "Aco_Mamorim", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15038029/medium/39a0baeb76a5f50b79e8e8589553619a_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15005335/medium/1df3f196a54707c412ad265030074c6d_default.png", "preTranslated": 0, - "totalCosts": 17180 + "totalCosts": 17 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 17180 + "totalCosts": 17 }, "translated": { - "tmMatch": 7187, - "default": 9993, - "total": 17180 + "tmMatch": 0, + "default": 17, + "total": 17 }, "targetTranslated": { - "tmMatch": 6896, - "default": 9346, - "total": 16242 + "tmMatch": 0, + "default": 18, + "total": 18 }, "translatedByMt": { "tmMatch": 0, @@ -361,12 +361,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 30886 + "total": 17 }, "translationCosts": { - "tmMatch": 7187, - "default": 9993, - "total": 17180 + "tmMatch": 0, + "default": 17, + "total": 17 }, "approvalCosts": { "tmMatch": 0, @@ -378,47 +378,47 @@ }, { "user": { - "id": 15061123, - "username": "Aco_Hindi", - "fullName": "Aco_Hindi", + "id": 15038647, + "username": "Aco_Tomoko", + "fullName": "Aco_Tomoko", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15061123/medium/e4d052a9eddf22820a8df7e59daa1704_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15038647/medium/6e83773b7f4db25bdece30475a0840df_default.png", "preTranslated": 0, - "totalCosts": 230 + "totalCosts": 9538 }, "languages": [ { "language": { - "id": "hi", - "name": "Hindi", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 230 + "totalCosts": 9538 }, "translated": { - "tmMatch": 67, - "default": 163, - "total": 230 + "tmMatch": 2541, + "default": 6997, + "total": 9538 }, "targetTranslated": { - "tmMatch": 128, - "default": 302, - "total": 430 + "tmMatch": 7331, + "default": 19740, + "total": 27071 }, "translatedByMt": { - "tmMatch": 6, - "default": 2, - "total": 8 + "tmMatch": 8, + "default": 3, + "total": 11 }, "approved": { "tmMatch": 0, "default": 0, - "total": 257 + "total": 10433 }, "translationCosts": { - "tmMatch": 67, - "default": 163, - "total": 230 + "tmMatch": 2541, + "default": 6997, + "total": 9538 }, "approvalCosts": { "tmMatch": 0, @@ -430,32 +430,32 @@ }, { "user": { - "id": 15037897, - "username": "Aco_Indonesian", - "fullName": "Aco_Indonesian", + "id": 15241658, + "username": "Aco_Vietnamese", + "fullName": "Aco_Vietnamese", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15037897/medium/0cef85d4b2a8be292505d8a7dcf43d68_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241658/medium/39de011db222be51f6dfe886cfe26499_default.png", "preTranslated": 0, - "totalCosts": 3856 + "totalCosts": 10176 }, "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "vi", + "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3856 + "totalCosts": 10176 }, "translated": { - "tmMatch": 1472, - "default": 2384, - "total": 3856 + "tmMatch": 595, + "default": 9581, + "total": 10176 }, "targetTranslated": { - "tmMatch": 1415, - "default": 2238, - "total": 3653 + "tmMatch": 996, + "default": 15083, + "total": 16079 }, "translatedByMt": { "tmMatch": 0, @@ -465,12 +465,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 7372 + "total": 10183 }, "translationCosts": { - "tmMatch": 1472, - "default": 2384, - "total": 3856 + "tmMatch": 595, + "default": 9581, + "total": 10176 }, "approvalCosts": { "tmMatch": 0, @@ -482,47 +482,47 @@ }, { "user": { - "id": 15005475, - "username": "Aco_MLY", - "fullName": "Aco_MLY", + "id": 15005293, + "username": "Aco_Zinacle", + "fullName": "Aco_Zinacle", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15005475/medium/9443753a1b4b3c1d14a6c5932971813f_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15005293/medium/6f19beccc7174b9ab2a3022bad4e34a0_default.png", "preTranslated": 0, - "totalCosts": 26879 + "totalCosts": 98 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "pt-PT", + "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 26879 + "totalCosts": 98 }, "translated": { - "tmMatch": 8585, - "default": 18294, - "total": 26879 + "tmMatch": 3, + "default": 95, + "total": 98 }, "targetTranslated": { - "tmMatch": 7254, - "default": 14615, - "total": 21869 + "tmMatch": 3, + "default": 117, + "total": 120 }, "translatedByMt": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 2, + "default": 16, + "total": 18 }, "approved": { "tmMatch": 0, "default": 0, - "total": 40201 + "total": 267 }, "translationCosts": { - "tmMatch": 8585, - "default": 18294, - "total": 26879 + "tmMatch": 3, + "default": 95, + "total": 98 }, "approvalCosts": { "tmMatch": 0, @@ -534,47 +534,47 @@ }, { "user": { - "id": 15241654, - "username": "Aco_Malayalam", - "fullName": "Aco_Malayalam", + "id": 15256998, + "username": "Aco_gmtraductions", + "fullName": "Aco_gmtraductions", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241654/medium/1e8f9fef1df7d8844ac01e33ba979032_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15256998/medium/1080c1f5f785cd542b310f0c840db93f_default.png", "preTranslated": 0, - "totalCosts": 203 + "totalCosts": 3240 }, "languages": [ { "language": { - "id": "ml-IN", - "name": "Malayalam", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 203 + "totalCosts": 3240 }, "translated": { - "tmMatch": 48, - "default": 155, - "total": 203 + "tmMatch": 2301, + "default": 939, + "total": 3240 }, "targetTranslated": { - "tmMatch": 80, - "default": 279, - "total": 359 + "tmMatch": 2698, + "default": 1084, + "total": 3782 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 40, + "default": 17, + "total": 57 }, "approved": { "tmMatch": 0, "default": 0, - "total": 257 + "total": 6728 }, "translationCosts": { - "tmMatch": 48, - "default": 155, - "total": 203 + "tmMatch": 2301, + "default": 939, + "total": 3240 }, "approvalCosts": { "tmMatch": 0, @@ -586,32 +586,32 @@ }, { "user": { - "id": 15037877, - "username": "Aco_Roberto_Gangemi", - "fullName": "Aco_Roberto_Gangemi", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15037877/medium/347cb9ca83265ecb5bd37a460d338d6e_default.png", + "id": 15269034, + "username": "Aiden_Lee", + "fullName": "Aiden_Lee", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269034/medium/98d984d00012bd37cbb5f3f343bd367e_default.png", "preTranslated": 0, - "totalCosts": 8861 + "totalCosts": 33 }, "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 8861 + "totalCosts": 33 }, "translated": { - "tmMatch": 3776, - "default": 5085, - "total": 8861 + "tmMatch": 0, + "default": 33, + "total": 33 }, "targetTranslated": { - "tmMatch": 4119, - "default": 5463, - "total": 9582 + "tmMatch": 0, + "default": 55, + "total": 55 }, "translatedByMt": { "tmMatch": 0, @@ -621,12 +621,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 15113 + "total": 0 }, "translationCosts": { - "tmMatch": 3776, - "default": 5085, - "total": 8861 + "tmMatch": 0, + "default": 33, + "total": 33 }, "approvalCosts": { "tmMatch": 0, @@ -638,47 +638,47 @@ }, { "user": { - "id": 15038647, - "username": "Aco_Tomoko", - "fullName": "Aco_Tomoko", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15038647/medium/6e83773b7f4db25bdece30475a0840df_default.png", + "id": 15059845, + "username": "Alioth2020", + "fullName": "Alioth2020", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15059845/medium/246f779f1566229dfd8c4a84423e7255_default.png", "preTranslated": 0, - "totalCosts": 1767 + "totalCosts": 147 }, "languages": [ { "language": { - "id": "ja", - "name": "Japanese", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1767 + "totalCosts": 147 }, "translated": { - "tmMatch": 490, - "default": 1277, - "total": 1767 + "tmMatch": 134, + "default": 13, + "total": 147 }, "targetTranslated": { - "tmMatch": 1386, - "default": 3340, - "total": 4726 + "tmMatch": 155, + "default": 19, + "total": 174 }, "translatedByMt": { - "tmMatch": 2, + "tmMatch": 0, "default": 0, - "total": 2 + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 1956 + "total": 0 }, "translationCosts": { - "tmMatch": 490, - "default": 1277, - "total": 1767 + "tmMatch": 134, + "default": 13, + "total": 147 }, "approvalCosts": { "tmMatch": 0, @@ -690,47 +690,47 @@ }, { "user": { - "id": 15241658, - "username": "Aco_Vietnamese", - "fullName": "Aco_Vietnamese", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241658/medium/39de011db222be51f6dfe886cfe26499_default.png", + "id": 15269964, + "username": "Ariiellus", + "fullName": "Ariiellus", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269964/medium/dc88b955bacb0f0b8dce76604a3434bc.jpg", "preTranslated": 0, - "totalCosts": 99 + "totalCosts": 209 }, "languages": [ { "language": { - "id": "vi", - "name": "Vietnamese", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 99 + "totalCosts": 209 }, "translated": { - "tmMatch": 3, - "default": 96, - "total": 99 + "tmMatch": 0, + "default": 209, + "total": 209 }, "targetTranslated": { - "tmMatch": 5, - "default": 148, - "total": 153 + "tmMatch": 0, + "default": 232, + "total": 232 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 131, + "total": 131 }, "approved": { "tmMatch": 0, "default": 0, - "total": 175 + "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 96, - "total": 99 + "tmMatch": 0, + "default": 209, + "total": 209 }, "approvalCosts": { "tmMatch": 0, @@ -742,32 +742,32 @@ }, { "user": { - "id": 14906967, - "username": "Aco_rasakri", - "fullName": "Aco_rasakri", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14906967/medium/131e4d4fafca1bf473fea26d7985d322_default.png", + "id": 15262388, + "username": "Axelfly02", + "fullName": "Axelfly02", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15262388/medium/a6a9a6be100373d4291353eb0030e7ca_default.png", "preTranslated": 0, - "totalCosts": 15 + "totalCosts": 13 }, "languages": [ { "language": { - "id": "lt", - "name": "Lithuanian", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 15 + "totalCosts": 13 }, "translated": { - "tmMatch": 1, - "default": 14, - "total": 15 + "tmMatch": 0, + "default": 13, + "total": 13 }, "targetTranslated": { - "tmMatch": 1, - "default": 10, - "total": 11 + "tmMatch": 0, + "default": 16, + "total": 16 }, "translatedByMt": { "tmMatch": 0, @@ -777,12 +777,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1427 + "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 14, - "total": 15 + "tmMatch": 0, + "default": 13, + "total": 13 }, "approvalCosts": { "tmMatch": 0, @@ -794,32 +794,32 @@ }, { "user": { - "id": 15243012, - "username": "Aitorgrcn", - "fullName": "Aitorgrcn", + "id": 14838806, + "username": "CONSEQUENL50", + "fullName": "CONSEQUENL50", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15243012/medium/ce4c361d409467cd2c1b7d3a00b614d2_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14838806/medium/f1b727400eeeff54d73ab03020db79b3.PNG", "preTranslated": 0, - "totalCosts": 852 + "totalCosts": 539 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 852 + "totalCosts": 539 }, "translated": { - "tmMatch": 0, - "default": 852, - "total": 852 + "tmMatch": 272, + "default": 267, + "total": 539 }, "targetTranslated": { - "tmMatch": 0, - "default": 944, - "total": 944 + "tmMatch": 215, + "default": 234, + "total": 449 }, "translatedByMt": { "tmMatch": 0, @@ -832,9 +832,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 852, - "total": 852 + "tmMatch": 272, + "default": 267, + "total": 539 }, "approvalCosts": { "tmMatch": 0, @@ -846,13 +846,13 @@ }, { "user": { - "id": 15246632, - "username": "BBreene", - "fullName": "BBreene", + "id": 14958061, + "username": "Dearry", + "fullName": "Dearry", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246632/medium/3ddf18f3c79d78bc6f3d05cc46a454c9_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14958061/medium/120296ee25b4bfc07225bfbc8a6d5666_default.png", "preTranslated": 0, - "totalCosts": 6 + "totalCosts": 1673 }, "languages": [ { @@ -861,22 +861,22 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6 + "totalCosts": 1673 }, "translated": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 11, + "default": 1662, + "total": 1673 }, "targetTranslated": { - "tmMatch": 0, - "default": 11, - "total": 11 + "tmMatch": 16, + "default": 2485, + "total": 2501 }, "translatedByMt": { "tmMatch": 0, - "default": 6, - "total": 6 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -884,9 +884,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 11, + "default": 1662, + "total": 1673 }, "approvalCosts": { "tmMatch": 0, @@ -898,32 +898,32 @@ }, { "user": { - "id": 15242140, - "username": "C1troll", - "fullName": "C1troll", + "id": 15270694, + "username": "Frank25184", + "fullName": "Frank25184", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242140/medium/fc25564d9b4333476a307f2bea0b82a4_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15270694/medium/fb741f05f9acf8e0393a72b4381b3405_default.png", "preTranslated": 0, - "totalCosts": 17 + "totalCosts": 37 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 17 + "totalCosts": 37 }, "translated": { "tmMatch": 0, - "default": 17, - "total": 17 + "default": 37, + "total": 37 }, "targetTranslated": { "tmMatch": 0, - "default": 23, - "total": 23 + "default": 63, + "total": 63 }, "translatedByMt": { "tmMatch": 0, @@ -937,8 +937,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 17, - "total": 17 + "default": 37, + "total": 37 }, "approvalCosts": { "tmMatch": 0, @@ -950,32 +950,32 @@ }, { "user": { - "id": 15240308, - "username": "ELBD", - "fullName": "ELBD", + "id": 14410638, + "username": "Gedalyahu", + "fullName": "Gedalyahu", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15240308/medium/b165a8f86eed596e7bf4df8958e45596_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14410638/medium/d8c39570ef80883365984b216908c123_default.png", "preTranslated": 0, - "totalCosts": 163 + "totalCosts": 47 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "he", + "name": "Hebrew", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 57 + "totalCosts": 47 }, "translated": { - "tmMatch": 5, - "default": 52, - "total": 57 + "tmMatch": 0, + "default": 47, + "total": 47 }, "targetTranslated": { - "tmMatch": 8, - "default": 63, - "total": 71 + "tmMatch": 0, + "default": 40, + "total": 40 }, "translatedByMt": { "tmMatch": 0, @@ -988,38 +988,51 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 52, - "total": 57 + "tmMatch": 0, + "default": 47, + "total": 47 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15267214, + "username": "GihOB", + "fullName": "GihOB", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15267214/medium/5e39792fb994591df54a7e4e3eed8ebd_default.png", + "preTranslated": 0, + "totalCosts": 793 + }, + "languages": [ { "language": { - "id": "ro", - "name": "Romanian", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 106 + "totalCosts": 793 }, "translated": { - "tmMatch": 18, - "default": 88, - "total": 106 + "tmMatch": 0, + "default": 793, + "total": 793 }, "targetTranslated": { - "tmMatch": 18, - "default": 87, - "total": 105 + "tmMatch": 0, + "default": 854, + "total": 854 }, "translatedByMt": { - "tmMatch": 5, - "default": 16, - "total": 21 + "tmMatch": 0, + "default": 235, + "total": 235 }, "approved": { "tmMatch": 0, @@ -1027,9 +1040,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 18, - "default": 88, - "total": 106 + "tmMatch": 0, + "default": 793, + "total": 793 }, "approvalCosts": { "tmMatch": 0, @@ -1041,32 +1054,32 @@ }, { "user": { - "id": 15215952, - "username": "EXCELSIORDSQ", - "fullName": "EXCELSIORDSQ", + "id": 13461670, + "username": "GiorgioHerbie", + "fullName": "GiorgioHerbie", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15215952/medium/914127d2cef66b5cd33b09034fbd5a4b_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/9093f2d7047615a270b4c00bc2abd595_default.png", "preTranslated": 0, - "totalCosts": 43 + "totalCosts": 1595 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "it", + "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 43 + "totalCosts": 1595 }, "translated": { - "tmMatch": 0, - "default": 43, - "total": 43 + "tmMatch": 222, + "default": 1373, + "total": 1595 }, "targetTranslated": { - "tmMatch": 0, - "default": 41, - "total": 41 + "tmMatch": 238, + "default": 1471, + "total": 1709 }, "translatedByMt": { "tmMatch": 0, @@ -1079,9 +1092,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 43, - "total": 43 + "tmMatch": 222, + "default": 1373, + "total": 1595 }, "approvalCosts": { "tmMatch": 0, @@ -1093,13 +1106,13 @@ }, { "user": { - "id": 15250238, - "username": "Echte_Faelschung", - "fullName": "Echte_Faelschung", + "id": 15116307, + "username": "Gorm-the-Old", + "fullName": "Gorm-the-Old", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250238/medium/20dfe20f301da868236092d046582128_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15116307/medium/46b6a030b92eb4909c82bcc68026e4eb_default.png", "preTranslated": 0, - "totalCosts": 5 + "totalCosts": 577 }, "languages": [ { @@ -1108,17 +1121,17 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 5 + "totalCosts": 577 }, "translated": { - "tmMatch": 0, - "default": 5, - "total": 5 + "tmMatch": 10, + "default": 567, + "total": 577 }, "targetTranslated": { - "tmMatch": 0, - "default": 4, - "total": 4 + "tmMatch": 10, + "default": 542, + "total": 552 }, "translatedByMt": { "tmMatch": 0, @@ -1131,9 +1144,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 5, - "total": 5 + "tmMatch": 10, + "default": 567, + "total": 577 }, "approvalCosts": { "tmMatch": 0, @@ -1145,37 +1158,37 @@ }, { "user": { - "id": 15194780, - "username": "Francavillecco", - "fullName": "Francavillecco", + "id": 14686790, + "username": "Horus267", + "fullName": "Horus267", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194780/medium/fbd3be9989ec03c1ba63d89386f69e13_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686790/medium/9695742f9165e3cf2585e31e74898270.png", "preTranslated": 0, - "totalCosts": 31 + "totalCosts": 4609 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "uk", + "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 31 + "totalCosts": 4609 }, "translated": { - "tmMatch": 2, - "default": 29, - "total": 31 + "tmMatch": 163, + "default": 4446, + "total": 4609 }, "targetTranslated": { - "tmMatch": 1, - "default": 29, - "total": 30 + "tmMatch": 168, + "default": 3953, + "total": 4121 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 19, + "total": 20 }, "approved": { "tmMatch": 0, @@ -1183,9 +1196,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 29, - "total": 31 + "tmMatch": 163, + "default": 4446, + "total": 4609 }, "approvalCosts": { "tmMatch": 0, @@ -1197,37 +1210,37 @@ }, { "user": { - "id": 13461670, - "username": "GiorgioHerbie", - "fullName": "GiorgioHerbie", + "id": 15222542, + "username": "Jcys", + "fullName": "Jcys", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/9093f2d7047615a270b4c00bc2abd595_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15222542/medium/c4b538278714558f9a5430c0cef783de.JPG", "preTranslated": 0, - "totalCosts": 23389 + "totalCosts": 34114 }, "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 23389 + "totalCosts": 34114 }, "translated": { - "tmMatch": 2202, - "default": 21187, - "total": 23389 + "tmMatch": 2258, + "default": 31856, + "total": 34114 }, "targetTranslated": { - "tmMatch": 2475, - "default": 21599, - "total": 24074 + "tmMatch": 4241, + "default": 59587, + "total": 63828 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 47, + "default": 8, + "total": 55 }, "approved": { "tmMatch": 0, @@ -1235,9 +1248,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2202, - "default": 21187, - "total": 23389 + "tmMatch": 2258, + "default": 31856, + "total": 34114 }, "approvalCosts": { "tmMatch": 0, @@ -1249,32 +1262,32 @@ }, { "user": { - "id": 15116307, - "username": "Gorm-the-Old", - "fullName": "Gorm-the-Old", + "id": 15115629, + "username": "JohnChan", + "fullName": "JohnChan", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15116307/medium/46b6a030b92eb4909c82bcc68026e4eb_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15115629/medium/05d93403114bfeae6efff2965a1759e0_default.png", "preTranslated": 0, - "totalCosts": 200 + "totalCosts": 24 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 200 + "totalCosts": 24 }, "translated": { - "tmMatch": 1, - "default": 199, - "total": 200 + "tmMatch": 0, + "default": 24, + "total": 24 }, "targetTranslated": { - "tmMatch": 1, - "default": 175, - "total": 176 + "tmMatch": 0, + "default": 42, + "total": 42 }, "translatedByMt": { "tmMatch": 0, @@ -1287,61 +1300,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 199, - "total": 200 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 15222542, - "username": "Jcys", - "fullName": "Jcys", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15222542/medium/c4b538278714558f9a5430c0cef783de.JPG", - "preTranslated": 0, - "totalCosts": 10278 - }, - "languages": [ - { - "language": { - "id": "zh-TW", - "name": "Chinese Traditional", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 10278 - }, - "translated": { - "tmMatch": 322, - "default": 9956, - "total": 10278 - }, - "targetTranslated": { - "tmMatch": 518, - "default": 16893, - "total": 17411 - }, - "translatedByMt": { - "tmMatch": 14, - "default": 9, - "total": 23 - }, - "approved": { "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 322, - "default": 9956, - "total": 10278 + "default": 24, + "total": 24 }, "approvalCosts": { "tmMatch": 0, @@ -1353,89 +1314,37 @@ }, { "user": { - "id": 14866158, - "username": "Kazel", - "fullName": "Kazel", + "id": 15266142, + "username": "Lin_stardust", + "fullName": "Lin_stardust", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866158/medium/95b9c5e14784dc12d1399307e66d4eb2.gif", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266142/medium/1a263e63194c2b4df9f60bb460c9cab4_default.png", "preTranslated": 0, - "totalCosts": 14 + "totalCosts": 22 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 14 + "totalCosts": 22 }, "translated": { - "tmMatch": 4, - "default": 10, - "total": 14 + "tmMatch": 22, + "default": 0, + "total": 22 }, "targetTranslated": { - "tmMatch": 4, - "default": 12, - "total": 16 - }, - "translatedByMt": { - "tmMatch": 4, - "default": 6, - "total": 10 - }, - "approved": { - "tmMatch": 0, + "tmMatch": 33, "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 4, - "default": 10, - "total": 14 + "total": 33 }, - "approvalCosts": { + "translatedByMt": { "tmMatch": 0, "default": 0, "total": 0 - } - } - ] - }, - { - "user": { - "id": 12596967, - "username": "Lol24", - "fullName": "Lol24", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12596967/medium/af2ac6193ec099deacc0b2e5d77fbf53_default.png", - "preTranslated": 0, - "totalCosts": 24 - }, - "languages": [ - { - "language": { - "id": "nl", - "name": "Dutch", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 24 - }, - "translated": { - "tmMatch": 1, - "default": 23, - "total": 24 - }, - "targetTranslated": { - "tmMatch": 1, - "default": 25, - "total": 26 - }, - "translatedByMt": { - "tmMatch": 1, - "default": 2, - "total": 3 }, "approved": { "tmMatch": 0, @@ -1443,9 +1352,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 23, - "total": 24 + "tmMatch": 22, + "default": 0, + "total": 22 }, "approvalCosts": { "tmMatch": 0, @@ -1509,32 +1418,32 @@ }, { "user": { - "id": 15242186, - "username": "MXAM", - "fullName": "MXAM", + "id": 15290634, + "username": "Mamadou1w12", + "fullName": "Mamadou1w12", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242186/medium/3de983ef0a0fdf8bfdf614ee6b4516c1_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15290634/medium/5cec072c476db776c53a25d7d2efd625_default.png", "preTranslated": 0, - "totalCosts": 27 + "totalCosts": 99 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 27 + "totalCosts": 53 }, "translated": { - "tmMatch": 2, - "default": 25, - "total": 27 + "tmMatch": 0, + "default": 53, + "total": 53 }, "targetTranslated": { - "tmMatch": 2, - "default": 33, - "total": 35 + "tmMatch": 0, + "default": 32, + "total": 32 }, "translatedByMt": { "tmMatch": 0, @@ -1547,51 +1456,38 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 25, - "total": 27 + "tmMatch": 0, + "default": 53, + "total": 53 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15222398, - "username": "Memwas", - "fullName": "Memwas", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15222398/medium/cbd5d911fda8a0939bb81d8db4139a10_default.png", - "preTranslated": 0, - "totalCosts": 39 - }, - "languages": [ + }, { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "fil", + "name": "Filipino", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 39 + "totalCosts": 46 }, "translated": { - "tmMatch": 8, - "default": 31, - "total": 39 + "tmMatch": 30, + "default": 16, + "total": 46 }, "targetTranslated": { - "tmMatch": 9, - "default": 30, - "total": 39 + "tmMatch": 38, + "default": 18, + "total": 56 }, "translatedByMt": { - "tmMatch": 6, - "default": 15, - "total": 21 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -1599,9 +1495,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 31, - "total": 39 + "tmMatch": 30, + "default": 16, + "total": 46 }, "approvalCosts": { "tmMatch": 0, @@ -1619,7 +1515,7 @@ "userRole": "Proofreader", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15240262/medium/8878a45f57e62f22e31686cc9d3a27f1_default.png", "preTranslated": 0, - "totalCosts": 7077 + "totalCosts": 5441 }, "languages": [ { @@ -1628,32 +1524,32 @@ "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 7077 + "totalCosts": 5441 }, "translated": { - "tmMatch": 1442, - "default": 5635, - "total": 7077 + "tmMatch": 509, + "default": 4932, + "total": 5441 }, "targetTranslated": { - "tmMatch": 1587, - "default": 6258, - "total": 7845 + "tmMatch": 540, + "default": 5160, + "total": 5700 }, "translatedByMt": { - "tmMatch": 7, - "default": 70, - "total": 77 + "tmMatch": 9, + "default": 50, + "total": 59 }, "approved": { "tmMatch": 0, "default": 0, - "total": 19215 + "total": 29456 }, "translationCosts": { - "tmMatch": 1442, - "default": 5635, - "total": 7077 + "tmMatch": 509, + "default": 4932, + "total": 5441 }, "approvalCosts": { "tmMatch": 0, @@ -1665,37 +1561,37 @@ }, { "user": { - "id": 14754288, - "username": "Munyuk81", - "fullName": "Munyuk81", + "id": 15293804, + "username": "Morpheus1024", + "fullName": "Morpheus1024", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14754288/medium/ecd9c50699a3987100519bba6d6119dc_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293804/medium/ee5fdd409a493c3a7829be569d7b8dac_default.png", "preTranslated": 0, - "totalCosts": 86 + "totalCosts": 310 }, "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 86 + "totalCosts": 310 }, "translated": { - "tmMatch": 6, - "default": 80, - "total": 86 + "tmMatch": 1, + "default": 309, + "total": 310 }, "targetTranslated": { - "tmMatch": 8, - "default": 85, - "total": 93 + "tmMatch": 1, + "default": 238, + "total": 239 }, "translatedByMt": { - "tmMatch": 6, - "default": 0, - "total": 6 + "tmMatch": 0, + "default": 25, + "total": 25 }, "approved": { "tmMatch": 0, @@ -1703,9 +1599,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 80, - "total": 86 + "tmMatch": 1, + "default": 309, + "total": 310 }, "approvalCosts": { "tmMatch": 0, @@ -1723,7 +1619,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15075281/medium/5ba3cb81d30b3f0d41667f5035f298e7_default.png", "preTranslated": 0, - "totalCosts": 20 + "totalCosts": 506 }, "languages": [ { @@ -1732,22 +1628,22 @@ "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 20 + "totalCosts": 506 }, "translated": { "tmMatch": 0, - "default": 20, - "total": 20 + "default": 506, + "total": 506 }, "targetTranslated": { "tmMatch": 0, - "default": 18, - "total": 18 + "default": 485, + "total": 485 }, "translatedByMt": { "tmMatch": 0, - "default": 20, - "total": 20 + "default": 50, + "total": 50 }, "approved": { "tmMatch": 0, @@ -1756,8 +1652,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 20, - "total": 20 + "default": 506, + "total": 506 }, "approvalCosts": { "tmMatch": 0, @@ -1769,37 +1665,37 @@ }, { "user": { - "id": 14755966, - "username": "RealGoye", - "fullName": "RealGoye", + "id": 15055847, + "username": "OJ02", + "fullName": "OJ02", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14755966/medium/f5becfea2dd543f57f356dfb3e42487d_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055847/medium/fca34f3df4d32ab5f9b476d91f7b5372_default.png", "preTranslated": 0, - "totalCosts": 35 + "totalCosts": 238 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 35 + "totalCosts": 238 }, "translated": { - "tmMatch": 1, - "default": 34, - "total": 35 + "tmMatch": 3, + "default": 235, + "total": 238 }, "targetTranslated": { - "tmMatch": 1, - "default": 36, - "total": 37 + "tmMatch": 3, + "default": 228, + "total": 231 }, "translatedByMt": { - "tmMatch": 0, - "default": 24, - "total": 24 + "tmMatch": 3, + "default": 98, + "total": 101 }, "approved": { "tmMatch": 0, @@ -1807,9 +1703,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 34, - "total": 35 + "tmMatch": 3, + "default": 235, + "total": 238 }, "approvalCosts": { "tmMatch": 0, @@ -1821,37 +1717,37 @@ }, { "user": { - "id": 15070281, - "username": "SZ14RT", - "fullName": "SZ14RT", + "id": 15078579, + "username": "PGoncalves", + "fullName": "PGoncalves", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15070281/medium/dc29b1568f0c3b8fb54a0a6724e2f13b_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15078579/medium/4235cb264948447a8dac3433590acd2e_default.png", "preTranslated": 0, - "totalCosts": 58 + "totalCosts": 131 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "pt-PT", + "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 58 + "totalCosts": 131 }, "translated": { - "tmMatch": 0, - "default": 58, - "total": 58 + "tmMatch": 2, + "default": 129, + "total": 131 }, "targetTranslated": { - "tmMatch": 0, - "default": 63, - "total": 63 + "tmMatch": 3, + "default": 158, + "total": 161 }, "translatedByMt": { - "tmMatch": 0, - "default": 31, - "total": 31 + "tmMatch": 2, + "default": 21, + "total": 23 }, "approved": { "tmMatch": 0, @@ -1859,9 +1755,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 58, - "total": 58 + "tmMatch": 2, + "default": 129, + "total": 131 }, "approvalCosts": { "tmMatch": 0, @@ -1873,32 +1769,32 @@ }, { "user": { - "id": 15230766, - "username": "Sneaky_F0x", - "fullName": "Sneaky_F0x", + "id": 15262168, + "username": "REMOVED_USER", + "fullName": "REMOVED_USER", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15230766/medium/ef8455d96aed08bc79486b5944708897_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15262168/medium/2e0ec17fe3b2c53981b5ea76db07aedd_default.png", "preTranslated": 0, - "totalCosts": 36 + "totalCosts": 47 }, "languages": [ { "language": { - "id": "pt-PT", - "name": "Portuguese", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 36 + "totalCosts": 47 }, "translated": { "tmMatch": 0, - "default": 36, - "total": 36 + "default": 47, + "total": 47 }, "targetTranslated": { "tmMatch": 0, - "default": 37, - "total": 37 + "default": 60, + "total": 60 }, "translatedByMt": { "tmMatch": 0, @@ -1912,8 +1808,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 36, - "total": 36 + "default": 47, + "total": 47 }, "approvalCosts": { "tmMatch": 0, @@ -1925,37 +1821,37 @@ }, { "user": { - "id": 14513016, - "username": "SubhamJena", - "fullName": "SubhamJena", + "id": 15259990, + "username": "Richard1974", + "fullName": "Richard1974", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14513016/medium/6dc941964ac63bc3d51926dc9fffa374.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15259990/medium/0d8b52e9be147119030973956fbcf99a_default.png", "preTranslated": 0, - "totalCosts": 119 + "totalCosts": 107 }, "languages": [ { "language": { - "id": "or", - "name": "Odia", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 119 + "totalCosts": 107 }, "translated": { - "tmMatch": 92, - "default": 27, - "total": 119 + "tmMatch": 1, + "default": 106, + "total": 107 }, "targetTranslated": { - "tmMatch": 97, - "default": 23, - "total": 120 + "tmMatch": 2, + "default": 86, + "total": 88 }, "translatedByMt": { - "tmMatch": 3, + "tmMatch": 0, "default": 0, - "total": 3 + "total": 0 }, "approved": { "tmMatch": 0, @@ -1963,9 +1859,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 92, - "default": 27, - "total": 119 + "tmMatch": 1, + "default": 106, + "total": 107 }, "approvalCosts": { "tmMatch": 0, @@ -1977,32 +1873,32 @@ }, { "user": { - "id": 15216098, - "username": "The_Mind", - "fullName": "The_Mind", + "id": 15272926, + "username": "ShawnZeng", + "fullName": "ShawnZeng", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15216098/medium/18cf5fa965fc5b04fff91071b4d8ce15_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15272926/medium/f024abfd326c405a000100d965139729_default.png", "preTranslated": 0, - "totalCosts": 108 + "totalCosts": 13 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 108 + "totalCosts": 13 }, "translated": { - "tmMatch": 8, - "default": 100, - "total": 108 + "tmMatch": 9, + "default": 4, + "total": 13 }, "targetTranslated": { - "tmMatch": 8, - "default": 95, - "total": 103 + "tmMatch": 16, + "default": 8, + "total": 24 }, "translatedByMt": { "tmMatch": 0, @@ -2015,9 +1911,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 100, - "total": 108 + "tmMatch": 9, + "default": 4, + "total": 13 }, "approvalCosts": { "tmMatch": 0, @@ -2029,32 +1925,32 @@ }, { "user": { - "id": 14843078, - "username": "Totozao", - "fullName": "Totozao", + "id": 15163680, + "username": "SlavicQuerr9", + "fullName": "SlavicQuerr9", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14843078/medium/4fdb35b37819b2de36280beeef727d1d_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15163680/medium/9fd320be027266a173f4f0176f21dc7e_default.png", "preTranslated": 0, - "totalCosts": 107 + "totalCosts": 7 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 107 + "totalCosts": 7 }, "translated": { - "tmMatch": 25, - "default": 82, - "total": 107 + "tmMatch": 0, + "default": 7, + "total": 7 }, "targetTranslated": { - "tmMatch": 21, - "default": 79, - "total": 100 + "tmMatch": 0, + "default": 6, + "total": 6 }, "translatedByMt": { "tmMatch": 0, @@ -2067,9 +1963,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 25, - "default": 82, - "total": 107 + "tmMatch": 0, + "default": 7, + "total": 7 }, "approvalCosts": { "tmMatch": 0, @@ -2081,37 +1977,37 @@ }, { "user": { - "id": 15251136, - "username": "VE_21", - "fullName": "VE_21", + "id": 15263412, + "username": "Snyule", + "fullName": "Snyule", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15251136/medium/e9293f73c2f121a2af65e92bd1ef42a0_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15263412/medium/fc73ecb3f3d3a6d4b9e702d0ff5ae3d3_default.png", "preTranslated": 0, - "totalCosts": 13 + "totalCosts": 387 }, "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 13 + "totalCosts": 387 }, "translated": { - "tmMatch": 3, - "default": 10, - "total": 13 + "tmMatch": 10, + "default": 377, + "total": 387 }, "targetTranslated": { - "tmMatch": 3, - "default": 10, - "total": 13 + "tmMatch": 17, + "default": 437, + "total": 454 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 4, + "default": 4, + "total": 8 }, "approved": { "tmMatch": 0, @@ -2119,9 +2015,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 10, - "total": 13 + "tmMatch": 10, + "default": 377, + "total": 387 }, "approvalCosts": { "tmMatch": 0, @@ -2133,37 +2029,37 @@ }, { "user": { - "id": 14681570, - "username": "Val21", - "fullName": "Val21", + "id": 14513016, + "username": "SubhamJena", + "fullName": "SubhamJena", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14681570/medium/3ed2f13f3a9383c0d3a23bd130df78d2_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14513016/medium/6dc941964ac63bc3d51926dc9fffa374.jpg", "preTranslated": 0, - "totalCosts": 941 + "totalCosts": 4 }, "languages": [ { "language": { - "id": "bg", - "name": "Bulgarian", + "id": "or", + "name": "Odia", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 941 + "totalCosts": 4 }, "translated": { - "tmMatch": 13, - "default": 928, - "total": 941 + "tmMatch": 1, + "default": 3, + "total": 4 }, "targetTranslated": { - "tmMatch": 14, - "default": 1032, - "total": 1046 + "tmMatch": 1, + "default": 6, + "total": 7 }, "translatedByMt": { - "tmMatch": 8, + "tmMatch": 1, "default": 0, - "total": 8 + "total": 1 }, "approved": { "tmMatch": 0, @@ -2171,9 +2067,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 13, - "default": 928, - "total": 941 + "tmMatch": 1, + "default": 3, + "total": 4 }, "approvalCosts": { "tmMatch": 0, @@ -2185,32 +2081,32 @@ }, { "user": { - "id": 14623758, - "username": "Vinaxe", - "fullName": "Vinaxe", + "id": 15216098, + "username": "The_Mind", + "fullName": "The_Mind", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14623758/medium/32a24fc9aeb27df4b5fce13c5edbe1e3_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15216098/medium/18cf5fa965fc5b04fff91071b4d8ce15_default.png", "preTranslated": 0, - "totalCosts": 11 + "totalCosts": 93 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 11 + "totalCosts": 93 }, "translated": { - "tmMatch": 2, - "default": 9, - "total": 11 + "tmMatch": 0, + "default": 93, + "total": 93 }, "targetTranslated": { - "tmMatch": 2, - "default": 11, - "total": 13 + "tmMatch": 0, + "default": 97, + "total": 97 }, "translatedByMt": { "tmMatch": 0, @@ -2223,9 +2119,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 9, - "total": 11 + "tmMatch": 0, + "default": 93, + "total": 93 }, "approvalCosts": { "tmMatch": 0, @@ -2237,32 +2133,32 @@ }, { "user": { - "id": 13997401, - "username": "Windfactory", - "fullName": "Windfactory", + "id": 14843078, + "username": "Totozao", + "fullName": "Totozao", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13997401/medium/2ab4ff5d8770f710be0d12e4ec9f2123.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14843078/medium/4fdb35b37819b2de36280beeef727d1d_default.png", "preTranslated": 0, - "totalCosts": 300 + "totalCosts": 905 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 300 + "totalCosts": 905 }, "translated": { - "tmMatch": 1, - "default": 299, - "total": 300 + "tmMatch": 28, + "default": 877, + "total": 905 }, "targetTranslated": { - "tmMatch": 1, - "default": 231, - "total": 232 + "tmMatch": 28, + "default": 789, + "total": 817 }, "translatedByMt": { "tmMatch": 0, @@ -2275,9 +2171,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 299, - "total": 300 + "tmMatch": 28, + "default": 877, + "total": 905 }, "approvalCosts": { "tmMatch": 0, @@ -2289,37 +2185,37 @@ }, { "user": { - "id": 15224040, - "username": "Yohu", - "fullName": "Yohu", + "id": 15261054, + "username": "Ustunol123", + "fullName": "Ustunol123", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15224040/medium/87b7dac1818485719dbce97e661126c7.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15261054/medium/6ae9cd035968300694e8a375b1356e81_default.png", "preTranslated": 0, - "totalCosts": 204 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 204 + "totalCosts": 2 }, "translated": { - "tmMatch": 20, - "default": 184, - "total": 204 + "tmMatch": 2, + "default": 0, + "total": 2 }, "targetTranslated": { - "tmMatch": 17, - "default": 175, - "total": 192 + "tmMatch": 2, + "default": 0, + "total": 2 }, "translatedByMt": { - "tmMatch": 5, - "default": 20, - "total": 25 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -2327,9 +2223,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 20, - "default": 184, - "total": 204 + "tmMatch": 2, + "default": 0, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -2341,37 +2237,37 @@ }, { "user": { - "id": 15213326, - "username": "akht", - "fullName": "akht", + "id": 14681570, + "username": "Val21", + "fullName": "Val21", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15213326/medium/f56bc9281ce09c4c78a8f585b8208bb9.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14681570/medium/3ed2f13f3a9383c0d3a23bd130df78d2_default.png", "preTranslated": 0, - "totalCosts": 1295 + "totalCosts": 726 }, "languages": [ { "language": { - "id": "ja", - "name": "Japanese", + "id": "bg", + "name": "Bulgarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1295 + "totalCosts": 726 }, "translated": { - "tmMatch": 16, - "default": 1279, - "total": 1295 + "tmMatch": 1, + "default": 725, + "total": 726 }, "targetTranslated": { - "tmMatch": 35, - "default": 3190, - "total": 3225 + "tmMatch": 1, + "default": 748, + "total": 749 }, "translatedByMt": { - "tmMatch": 0, - "default": 17, - "total": 17 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approved": { "tmMatch": 0, @@ -2379,9 +2275,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 16, - "default": 1279, - "total": 1295 + "tmMatch": 1, + "default": 725, + "total": 726 }, "approvalCosts": { "tmMatch": 0, @@ -2393,37 +2289,37 @@ }, { "user": { - "id": 13649011, - "username": "aledc", - "fullName": "aledc", + "id": 14514124, + "username": "ViktorOn", + "fullName": "ViktorOn", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13649011/medium/50f275b77f6bfef017c13fe1a51579c3.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png", "preTranslated": 0, - "totalCosts": 82 + "totalCosts": 535 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 82 + "totalCosts": 535 }, "translated": { - "tmMatch": 0, - "default": 82, - "total": 82 + "tmMatch": 132, + "default": 403, + "total": 535 }, "targetTranslated": { - "tmMatch": 0, - "default": 87, - "total": 87 + "tmMatch": 112, + "default": 376, + "total": 488 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 3, "default": 0, - "total": 0 + "total": 3 }, "approved": { "tmMatch": 0, @@ -2431,9 +2327,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 82, - "total": 82 + "tmMatch": 132, + "default": 403, + "total": 535 }, "approvalCosts": { "tmMatch": 0, @@ -2445,37 +2341,37 @@ }, { "user": { - "id": 15215314, - "username": "amirmahdi70", - "fullName": "amirmahdi70", + "id": 15205992, + "username": "Vishal07", + "fullName": "Vishal07", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15215314/medium/1a5360199b0d51c1f242be69a7a1e9da_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15205992/medium/465c1df5cf56d2c9fc47af524525db21_default.png", "preTranslated": 0, - "totalCosts": 499 + "totalCosts": 2899 }, "languages": [ { "language": { - "id": "fa", - "name": "Persian", + "id": "hi", + "name": "Hindi", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 499 + "totalCosts": 2899 }, "translated": { - "tmMatch": 2, - "default": 497, - "total": 499 + "tmMatch": 10, + "default": 2889, + "total": 2899 }, "targetTranslated": { - "tmMatch": 3, - "default": 537, - "total": 540 + "tmMatch": 21, + "default": 4816, + "total": 4837 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 10, + "default": 1, + "total": 11 }, "approved": { "tmMatch": 0, @@ -2483,9 +2379,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 497, - "total": 499 + "tmMatch": 10, + "default": 2889, + "total": 2899 }, "approvalCosts": { "tmMatch": 0, @@ -2497,37 +2393,37 @@ }, { "user": { - "id": 15217584, - "username": "autismeworld", - "fullName": "autismeworld", + "id": 13997401, + "username": "Windfactory", + "fullName": "Windfactory", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15217584/medium/9e44b1c6beb9de85080f67c23dce5829_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13997401/medium/2ab4ff5d8770f710be0d12e4ec9f2123.png", "preTranslated": 0, - "totalCosts": 10 + "totalCosts": 4472 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 10 + "totalCosts": 4472 }, "translated": { - "tmMatch": 0, - "default": 10, - "total": 10 + "tmMatch": 363, + "default": 4109, + "total": 4472 }, "targetTranslated": { - "tmMatch": 0, - "default": 10, - "total": 10 + "tmMatch": 296, + "default": 3082, + "total": 3378 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 18, + "default": 4, + "total": 22 }, "approved": { "tmMatch": 0, @@ -2535,9 +2431,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 10, - "total": 10 + "tmMatch": 363, + "default": 4109, + "total": 4472 }, "approvalCosts": { "tmMatch": 0, @@ -2549,37 +2445,37 @@ }, { "user": { - "id": 15213904, - "username": "bahaaba", - "fullName": "bahaaba", + "id": 15265032, + "username": "a0101054", + "fullName": "a0101054", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15213904/medium/117111831f2e742e9b8e8685f5fc38f7_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15265032/medium/e0b578c29e2f7cc5313c1d36778a08ec_default.png", "preTranslated": 0, - "totalCosts": 106 + "totalCosts": 68 }, "languages": [ { "language": { - "id": "ar", - "name": "Arabic", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 106 + "totalCosts": 68 }, "translated": { - "tmMatch": 4, - "default": 102, - "total": 106 + "tmMatch": 0, + "default": 68, + "total": 68 }, "targetTranslated": { - "tmMatch": 4, - "default": 105, - "total": 109 + "tmMatch": 0, + "default": 124, + "total": 124 }, "translatedByMt": { - "tmMatch": 1, - "default": 21, - "total": 22 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -2587,9 +2483,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 102, - "total": 106 + "tmMatch": 0, + "default": 68, + "total": 68 }, "approvalCosts": { "tmMatch": 0, @@ -2601,37 +2497,37 @@ }, { "user": { - "id": 15242372, - "username": "billwang", - "fullName": "billwang", + "id": 15159056, + "username": "ariel.barros", + "fullName": "ariel.barros", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242372/medium/23bf740e9d096ee0b3de7b9f5528c8c9.JPG", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15159056/medium/a055cc2e6c5ab28d0ebcb99d0eec29e3_default.png", "preTranslated": 0, - "totalCosts": 1760 + "totalCosts": 47 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1758 + "totalCosts": 47 }, "translated": { - "tmMatch": 2, - "default": 1756, - "total": 1758 + "tmMatch": 0, + "default": 47, + "total": 47 }, "targetTranslated": { - "tmMatch": 6, - "default": 3039, - "total": 3045 + "tmMatch": 0, + "default": 59, + "total": 59 }, "translatedByMt": { - "tmMatch": 1, + "tmMatch": 0, "default": 0, - "total": 1 + "total": 0 }, "approved": { "tmMatch": 0, @@ -2639,38 +2535,51 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 1756, - "total": 1758 + "tmMatch": 0, + "default": 47, + "total": 47 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15213904, + "username": "bahaaba", + "fullName": "bahaaba", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15213904/medium/117111831f2e742e9b8e8685f5fc38f7_default.png", + "preTranslated": 0, + "totalCosts": 145 + }, + "languages": [ { "language": { - "id": "eo", - "name": "Esperanto", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 145 }, "translated": { - "tmMatch": 0, - "default": 2, - "total": 2 + "tmMatch": 3, + "default": 142, + "total": 145 }, "targetTranslated": { - "tmMatch": 0, - "default": 1, - "total": 1 + "tmMatch": 4, + "default": 124, + "total": 128 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 3, + "default": 32, + "total": 35 }, "approved": { "tmMatch": 0, @@ -2678,9 +2587,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 2, - "total": 2 + "tmMatch": 3, + "default": 142, + "total": 145 }, "approvalCosts": { "tmMatch": 0, @@ -2692,37 +2601,37 @@ }, { "user": { - "id": 14247352, - "username": "borja_reverter", - "fullName": "borja_reverter", + "id": 15282510, + "username": "beychan", + "fullName": "beychan", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14247352/medium/88273f0b60397d738624b328fe45c13e.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15282510/medium/309bf61e9bada7966a88a1b417f0c428_default.png", "preTranslated": 0, - "totalCosts": 864 + "totalCosts": 27 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 864 + "totalCosts": 27 }, "translated": { - "tmMatch": 506, - "default": 358, - "total": 864 + "tmMatch": 0, + "default": 27, + "total": 27 }, "targetTranslated": { - "tmMatch": 651, - "default": 439, - "total": 1090 + "tmMatch": 0, + "default": 76, + "total": 76 }, "translatedByMt": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -2730,9 +2639,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 506, - "default": 358, - "total": 864 + "tmMatch": 0, + "default": 27, + "total": 27 }, "approvalCosts": { "tmMatch": 0, @@ -2744,32 +2653,32 @@ }, { "user": { - "id": 15247610, - "username": "cggcoming", - "fullName": "cggcoming", + "id": 15293074, + "username": "biaggi888", + "fullName": "biaggi888", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247610/medium/255dcd55a501dfb48bfe271280bfc108_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293074/medium/65e0b01cfdb6524654e39feb02c50f2c_default.png", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 17 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "sq", + "name": "Albanian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 17 }, "translated": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 1, + "default": 16, + "total": 17 }, "targetTranslated": { - "tmMatch": 7, - "default": 0, - "total": 7 + "tmMatch": 4, + "default": 24, + "total": 28 }, "translatedByMt": { "tmMatch": 0, @@ -2782,9 +2691,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 1, + "default": 16, + "total": 17 }, "approvalCosts": { "tmMatch": 0, @@ -2796,32 +2705,32 @@ }, { "user": { - "id": 15237126, - "username": "coffmeman", - "fullName": "coffmeman", + "id": 15242372, + "username": "billwang", + "fullName": "billwang", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15237126/medium/7b2c3db2466f1ed3d091b4dc770e2c34_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242372/medium/23bf740e9d096ee0b3de7b9f5528c8c9.JPG", "preTranslated": 0, - "totalCosts": 100 + "totalCosts": 3378 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 100 + "totalCosts": 371 }, "translated": { "tmMatch": 0, - "default": 100, - "total": 100 + "default": 371, + "total": 371 }, "targetTranslated": { "tmMatch": 0, - "default": 111, - "total": 111 + "default": 589, + "total": 589 }, "translatedByMt": { "tmMatch": 0, @@ -2835,50 +2744,37 @@ }, "translationCosts": { "tmMatch": 0, - "default": 100, - "total": 100 + "default": 371, + "total": 371 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 14984177, - "username": "cokeeee", - "fullName": "cokeeee", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14984177/medium/2a76634a36592a9de92fdc01dbbcc6de_default.png", - "preTranslated": 0, - "totalCosts": 804 - }, - "languages": [ + }, { "language": { - "id": "ko", - "name": "Korean", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 804 + "totalCosts": 3007 }, "translated": { - "tmMatch": 12, - "default": 792, - "total": 804 + "tmMatch": 43, + "default": 2964, + "total": 3007 }, "targetTranslated": { - "tmMatch": 12, - "default": 652, - "total": 664 + "tmMatch": 71, + "default": 4882, + "total": 4953 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approved": { "tmMatch": 0, @@ -2886,9 +2782,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 12, - "default": 792, - "total": 804 + "tmMatch": 43, + "default": 2964, + "total": 3007 }, "approvalCosts": { "tmMatch": 0, @@ -2900,37 +2796,37 @@ }, { "user": { - "id": 15223998, - "username": "eusisaku", - "fullName": "eusisaku", + "id": 15280264, + "username": "budzako", + "fullName": "budzako", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15223998/medium/4021b9a7382785cd2170c90797f713d7_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15280264/medium/abba43c9c134494a85e713123d20f496_default.png", "preTranslated": 0, - "totalCosts": 28 + "totalCosts": 967 }, "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "sk", + "name": "Slovak", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 28 + "totalCosts": 967 }, "translated": { - "tmMatch": 1, - "default": 27, - "total": 28 + "tmMatch": 10, + "default": 957, + "total": 967 }, "targetTranslated": { - "tmMatch": 1, - "default": 25, - "total": 26 + "tmMatch": 13, + "default": 837, + "total": 850 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 4, "default": 0, - "total": 0 + "total": 4 }, "approved": { "tmMatch": 0, @@ -2938,9 +2834,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 27, - "total": 28 + "tmMatch": 10, + "default": 957, + "total": 967 }, "approvalCosts": { "tmMatch": 0, @@ -2952,37 +2848,37 @@ }, { "user": { - "id": 15222188, - "username": "fbinsayeed", - "fullName": "fbinsayeed", + "id": 15269576, + "username": "camolina", + "fullName": "camolina", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15222188/medium/20d99fa02a60ffbe86f07cafcad85565_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269576/medium/1a3566292dbbb3d62c42cba932c6509c_default.png", "preTranslated": 0, - "totalCosts": 12 + "totalCosts": 501 }, "languages": [ { "language": { - "id": "bn", - "name": "Bengali", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 12 + "totalCosts": 501 }, "translated": { "tmMatch": 0, - "default": 12, - "total": 12 + "default": 501, + "total": 501 }, "targetTranslated": { "tmMatch": 0, - "default": 23, - "total": 23 + "default": 538, + "total": 538 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 38, + "total": 38 }, "approved": { "tmMatch": 0, @@ -2991,8 +2887,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 12, - "total": 12 + "default": 501, + "total": 501 }, "approvalCosts": { "tmMatch": 0, @@ -3004,37 +2900,37 @@ }, { "user": { - "id": 15218250, - "username": "ganggang0508", - "fullName": "ganggang0508", + "id": 15267594, + "username": "coolboylcy", + "fullName": "coolboylcy", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218250/medium/ee8923c86477941fead04515451be35e_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15267594/medium/eebade3a00e7375bce232552e84333c1_default.png", "preTranslated": 0, - "totalCosts": 61 + "totalCosts": 99 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 61 + "totalCosts": 99 }, "translated": { - "tmMatch": 1, - "default": 60, - "total": 61 + "tmMatch": 78, + "default": 21, + "total": 99 }, "targetTranslated": { - "tmMatch": 1, - "default": 88, - "total": 89 + "tmMatch": 126, + "default": 40, + "total": 166 }, "translatedByMt": { - "tmMatch": 1, + "tmMatch": 0, "default": 0, - "total": 1 + "total": 0 }, "approved": { "tmMatch": 0, @@ -3042,9 +2938,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 60, - "total": 61 + "tmMatch": 78, + "default": 21, + "total": 99 }, "approvalCosts": { "tmMatch": 0, @@ -3056,37 +2952,37 @@ }, { "user": { - "id": 14899134, - "username": "hajj", - "fullName": "hajj", + "id": 15264510, + "username": "frapes", + "fullName": "frapes", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14899134/medium/61d239ecba8c669e82f65fed05c8515b_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264510/medium/cc979a11f950f93531a26e1c4a7f2bf5_default.png", "preTranslated": 0, - "totalCosts": 52 + "totalCosts": 256 }, "languages": [ { "language": { - "id": "ar", - "name": "Arabic", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 52 + "totalCosts": 256 }, "translated": { - "tmMatch": 0, - "default": 52, - "total": 52 + "tmMatch": 4, + "default": 252, + "total": 256 }, "targetTranslated": { - "tmMatch": 0, - "default": 39, - "total": 39 + "tmMatch": 4, + "default": 241, + "total": 245 }, "translatedByMt": { "tmMatch": 0, - "default": 52, - "total": 52 + "default": 10, + "total": 10 }, "approved": { "tmMatch": 0, @@ -3094,9 +2990,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 52, - "total": 52 + "tmMatch": 4, + "default": 252, + "total": 256 }, "approvalCosts": { "tmMatch": 0, @@ -3108,32 +3004,32 @@ }, { "user": { - "id": 15221784, - "username": "jennacheong", - "fullName": "jennacheong", + "id": 15255782, + "username": "fuliyuan_brian", + "fullName": "fuliyuan_brian", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221784/medium/2ee670ef5cedbf47084eb04e9653eb9a_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15255782/medium/c33621c71c135ba33ed7936551dcbc03_default.png", "preTranslated": 0, - "totalCosts": 2 + "totalCosts": 10 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 10 }, "translated": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 10, + "total": 10 }, "targetTranslated": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 17, + "total": 17 }, "translatedByMt": { "tmMatch": 0, @@ -3147,8 +3043,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 10, + "total": 10 }, "approvalCosts": { "tmMatch": 0, @@ -3160,37 +3056,37 @@ }, { "user": { - "id": 15228584, - "username": "jongerdonger", - "fullName": "jongerdonger", + "id": 15271124, + "username": "gael.jggs", + "fullName": "gael.jggs", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15228584/medium/da35e8b9a8811d96966cd27f8d0354e4_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271124/medium/40d1d2789aa8aa4e636b32dd7d925186_default.png", "preTranslated": 0, - "totalCosts": 10 + "totalCosts": 99 }, "languages": [ { "language": { - "id": "et", - "name": "Estonian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 10 + "totalCosts": 99 }, "translated": { "tmMatch": 0, - "default": 10, - "total": 10 + "default": 99, + "total": 99 }, "targetTranslated": { "tmMatch": 0, - "default": 7, - "total": 7 + "default": 104, + "total": 104 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 14, + "total": 14 }, "approved": { "tmMatch": 0, @@ -3199,8 +3095,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 10, - "total": 10 + "default": 99, + "total": 99 }, "approvalCosts": { "tmMatch": 0, @@ -3212,32 +3108,32 @@ }, { "user": { - "id": 15239524, - "username": "kendrickcheung001", - "fullName": "kendrickcheung001", + "id": 15264472, + "username": "gmillan", + "fullName": "gmillan", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15239524/medium/04b33253697d6fb7e2e11f4ffca0fcea_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264472/medium/3a99aa3a16742c83778956464bd5d055_default.png", "preTranslated": 0, - "totalCosts": 41 + "totalCosts": 68 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "ca", + "name": "Catalan", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 41 + "totalCosts": 68 }, "translated": { "tmMatch": 0, - "default": 41, - "total": 41 + "default": 68, + "total": 68 }, "targetTranslated": { "tmMatch": 0, - "default": 88, - "total": 88 + "default": 62, + "total": 62 }, "translatedByMt": { "tmMatch": 0, @@ -3251,8 +3147,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 41, - "total": 41 + "default": 68, + "total": 68 }, "approvalCosts": { "tmMatch": 0, @@ -3264,32 +3160,32 @@ }, { "user": { - "id": 15238000, - "username": "kimsteph70", - "fullName": "kimsteph70", + "id": 15262046, + "username": "gpcito", + "fullName": "gpcito", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15238000/medium/f63eb1ce1ca1192bef695d1683ea740e_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15262046/medium/f7822227b3408bb16ea6ea08d0ab5362_default.png", "preTranslated": 0, - "totalCosts": 8 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "fi", - "name": "Finnish", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 8 + "totalCosts": 2 }, "translated": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 2, + "default": 0, + "total": 2 }, "targetTranslated": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 3, + "default": 0, + "total": 3 }, "translatedByMt": { "tmMatch": 0, @@ -3302,9 +3198,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 2, + "default": 0, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -3316,37 +3212,37 @@ }, { "user": { - "id": 15188556, - "username": "korinektomas", - "fullName": "korinektomas", + "id": 15281398, + "username": "iamwon", + "fullName": "iamwon", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15188556/medium/ede830d725802daea8fd2fa53e0ae952.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15281398/medium/e6d2ec4003b9f3e73cb469226adceb77_default.png", "preTranslated": 0, - "totalCosts": 1334 + "totalCosts": 104 }, "languages": [ { "language": { - "id": "cs", - "name": "Czech", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1334 + "totalCosts": 104 }, "translated": { - "tmMatch": 42, - "default": 1292, - "total": 1334 + "tmMatch": 0, + "default": 104, + "total": 104 }, "targetTranslated": { - "tmMatch": 39, - "default": 1213, - "total": 1252 + "tmMatch": 0, + "default": 145, + "total": 145 }, "translatedByMt": { - "tmMatch": 17, - "default": 284, - "total": 301 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -3354,9 +3250,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 42, - "default": 1292, - "total": 1334 + "tmMatch": 0, + "default": 104, + "total": 104 }, "approvalCosts": { "tmMatch": 0, @@ -3368,37 +3264,37 @@ }, { "user": { - "id": 13500944, - "username": "krisfremen", - "fullName": "krisfremen", + "id": 14657804, + "username": "jhonnyvianello", + "fullName": "jhonnyvianello", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13500944/medium/5a2ea6e9d1e7a6138d3eaf8f83a36b84.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14657804/medium/005d9fa70fdc5a4fcd818f63cf61e1a0.jpg", "preTranslated": 0, - "totalCosts": 107 + "totalCosts": 3075 }, "languages": [ { "language": { - "id": "mk", - "name": "Macedonian", + "id": "it", + "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 107 + "totalCosts": 3075 }, "translated": { - "tmMatch": 9, - "default": 98, - "total": 107 + "tmMatch": 1042, + "default": 2033, + "total": 3075 }, "targetTranslated": { - "tmMatch": 10, - "default": 105, - "total": 115 + "tmMatch": 1044, + "default": 2068, + "total": 3112 }, "translatedByMt": { - "tmMatch": 2, - "default": 2, - "total": 4 + "tmMatch": 8, + "default": 309, + "total": 317 }, "approved": { "tmMatch": 0, @@ -3406,9 +3302,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 98, - "total": 107 + "tmMatch": 1042, + "default": 2033, + "total": 3075 }, "approvalCosts": { "tmMatch": 0, @@ -3420,37 +3316,37 @@ }, { "user": { - "id": 13219280, - "username": "larsmagnusherland", - "fullName": "larsmagnusherland", + "id": 15258752, + "username": "joserrbv", + "fullName": "joserrbv", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13219280/medium/424b39a9b0f10a08f63eb1aaea1ba180.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15258752/medium/ec21ac21287dcdbd73ab57b6fb0dc50e_default.png", "preTranslated": 0, - "totalCosts": 109 + "totalCosts": 1214 }, "languages": [ { "language": { - "id": "no", - "name": "Norwegian", + "id": "hy-AM", + "name": "Armenian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 109 + "totalCosts": 105 }, "translated": { - "tmMatch": 22, - "default": 87, - "total": 109 + "tmMatch": 0, + "default": 105, + "total": 105 }, "targetTranslated": { - "tmMatch": 21, - "default": 91, - "total": 112 + "tmMatch": 0, + "default": 96, + "total": 96 }, "translatedByMt": { - "tmMatch": 22, - "default": 73, - "total": 95 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -3458,51 +3354,38 @@ "total": 0 }, "translationCosts": { - "tmMatch": 22, - "default": 87, - "total": 109 + "tmMatch": 0, + "default": 105, + "total": 105 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15246418, - "username": "leezapeasy", - "fullName": "leezapeasy", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246418/medium/7bb9df5f68c4ad362b43235db3a93d99_default.png", - "preTranslated": 0, - "totalCosts": 417 - }, - "languages": [ + }, { "language": { - "id": "ka", - "name": "Georgian", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 416 + "totalCosts": 1109 }, "translated": { - "tmMatch": 9, - "default": 407, - "total": 416 + "tmMatch": 127, + "default": 982, + "total": 1109 }, "targetTranslated": { - "tmMatch": 33, - "default": 733, - "total": 766 + "tmMatch": 146, + "default": 1002, + "total": 1148 }, "translatedByMt": { - "tmMatch": 6, - "default": 0, - "total": 6 + "tmMatch": 0, + "default": 72, + "total": 72 }, "approved": { "tmMatch": 0, @@ -3510,33 +3393,46 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 407, - "total": 416 + "tmMatch": 127, + "default": 982, + "total": 1109 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 14050969, + "username": "juanfahler", + "fullName": "juanfahler", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14050969/medium/f49104ea84ba3a57e31f1591aa35eeb7_default.png", + "preTranslated": 0, + "totalCosts": 25 + }, + "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 25 }, "translated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 6, + "default": 19, + "total": 25 }, "targetTranslated": { - "tmMatch": 30, - "default": 0, - "total": 30 + "tmMatch": 5, + "default": 30, + "total": 35 }, "translatedByMt": { "tmMatch": 0, @@ -3549,9 +3445,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 6, + "default": 19, + "total": 25 }, "approvalCosts": { "tmMatch": 0, @@ -3563,37 +3459,37 @@ }, { "user": { - "id": 15215006, - "username": "liliiakozak", - "fullName": "liliiakozak", + "id": 15294248, + "username": "kempo17", + "fullName": "kempo17", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15215006/medium/df11890bcbb2cfcc9b1a6a26c8f8ee08_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15294248/medium/5b2b23f53504fd6a13a351ee58209ec7_default.png", "preTranslated": 0, - "totalCosts": 1 + "totalCosts": 350 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 350 }, "translated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 17, + "default": 333, + "total": 350 }, "targetTranslated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 18, + "default": 382, + "total": 400 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 17, + "total": 17 }, "approved": { "tmMatch": 0, @@ -3601,9 +3497,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 17, + "default": 333, + "total": 350 }, "approvalCosts": { "tmMatch": 0, @@ -3615,32 +3511,32 @@ }, { "user": { - "id": 15253292, - "username": "mark9527", - "fullName": "mark9527", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15253292/medium/de74f7ea5b7ad42560797300a1809cc7_default.png", + "id": 14909719, + "username": "kropecl", + "fullName": "kropecl", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14909719/medium/0f8afaa00b58cb146a279a1d5df3095c_default.png", "preTranslated": 0, - "totalCosts": 86 + "totalCosts": 9 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 86 + "totalCosts": 9 }, "translated": { - "tmMatch": 7, - "default": 79, - "total": 86 + "tmMatch": 9, + "default": 0, + "total": 9 }, "targetTranslated": { - "tmMatch": 20, - "default": 114, - "total": 134 + "tmMatch": 10, + "default": 0, + "total": 10 }, "translatedByMt": { "tmMatch": 0, @@ -3653,61 +3549,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, - "default": 79, - "total": 86 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 15242922, - "username": "nsugimoto", - "fullName": "nsugimoto", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242922/medium/80daa04f1516da24f438a0243036dd09_default.png", - "preTranslated": 0, - "totalCosts": 401 - }, - "languages": [ - { - "language": { - "id": "ja", - "name": "Japanese", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 401 - }, - "translated": { - "tmMatch": 5, - "default": 396, - "total": 401 - }, - "targetTranslated": { - "tmMatch": 8, - "default": 1103, - "total": 1111 - }, - "translatedByMt": { - "tmMatch": 2, - "default": 23, - "total": 25 - }, - "approved": { - "tmMatch": 0, + "tmMatch": 9, "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 5, - "default": 396, - "total": 401 + "total": 9 }, "approvalCosts": { "tmMatch": 0, @@ -3719,13 +3563,13 @@ }, { "user": { - "id": 15246058, - "username": "ouclan", - "fullName": "ouclan", + "id": 15253292, + "username": "mark9527", + "fullName": "mark9527", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246058/medium/7cffd53c5da457f2603263d6da89c787_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15253292/medium/de74f7ea5b7ad42560797300a1809cc7_default.png", "preTranslated": 0, - "totalCosts": 287 + "totalCosts": 104 }, "languages": [ { @@ -3734,56 +3578,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 20 - }, - "translated": { - "tmMatch": 20, - "default": 0, - "total": 20 - }, - "targetTranslated": { - "tmMatch": 44, - "default": 0, - "total": 44 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 20, - "default": 0, - "total": 20 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - }, - { - "language": { - "id": "zh-TW", - "name": "Chinese Traditional", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 267 + "totalCosts": 104 }, "translated": { - "tmMatch": 1, - "default": 266, - "total": 267 + "tmMatch": 9, + "default": 95, + "total": 104 }, "targetTranslated": { - "tmMatch": 1, - "default": 482, - "total": 483 + "tmMatch": 25, + "default": 144, + "total": 169 }, "translatedByMt": { "tmMatch": 0, @@ -3796,9 +3601,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 266, - "total": 267 + "tmMatch": 9, + "default": 95, + "total": 104 }, "approvalCosts": { "tmMatch": 0, @@ -3810,32 +3615,32 @@ }, { "user": { - "id": 14978565, - "username": "paul_1559", - "fullName": "paul_1559", + "id": 15170642, + "username": "nanoni", + "fullName": "nanoni", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14978565/medium/a42c89b279aa5f47881ce11ec25feefe.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15170642/medium/f05625305ab41aecc0da6d53fd9fbcc6_default.png", "preTranslated": 0, - "totalCosts": 4 + "totalCosts": 47 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 47 }, "translated": { - "tmMatch": 4, - "default": 0, - "total": 4 + "tmMatch": 3, + "default": 44, + "total": 47 }, "targetTranslated": { - "tmMatch": 5, - "default": 0, - "total": 5 + "tmMatch": 17, + "default": 98, + "total": 115 }, "translatedByMt": { "tmMatch": 0, @@ -3848,61 +3653,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 0, - "total": 4 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 15226778, - "username": "paulogio", - "fullName": "paulogio", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226778/medium/1bed9c865119e5246c9ac5cc55851dae_default.png", - "preTranslated": 0, - "totalCosts": 1111 - }, - "languages": [ - { - "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 1111 - }, - "translated": { - "tmMatch": 66, - "default": 1045, - "total": 1111 - }, - "targetTranslated": { - "tmMatch": 76, - "default": 1092, - "total": 1168 - }, - "translatedByMt": { - "tmMatch": 9, - "default": 57, - "total": 66 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 66, - "default": 1045, - "total": 1111 + "tmMatch": 3, + "default": 44, + "total": 47 }, "approvalCosts": { "tmMatch": 0, @@ -3914,193 +3667,37 @@ }, { "user": { - "id": 15245258, - "username": "pedroxbm", - "fullName": "pedroxbm", + "id": 15275038, + "username": "nc163", + "fullName": "nc163", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15245258/medium/561e3ccf7fbe927b61111e79f7ffdd9a_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15275038/medium/daa5a569f8935885fed1aa122b8787ba_default.png", "preTranslated": 0, - "totalCosts": 478 + "totalCosts": 37 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 478 + "totalCosts": 37 }, "translated": { - "tmMatch": 2, - "default": 476, - "total": 478 - }, - "targetTranslated": { - "tmMatch": 2, - "default": 503, - "total": 505 - }, - "translatedByMt": { - "tmMatch": 2, - "default": 283, - "total": 285 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 2, - "default": 476, - "total": 478 - }, - "approvalCosts": { - "tmMatch": 0, + "tmMatch": 37, "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 15252970, - "username": "resurs12", - "fullName": "resurs12", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15252970/medium/e6ec9357145fcd7c3bf54ba1441bb4df_default.png", - "preTranslated": 0, - "totalCosts": 34 - }, - "languages": [ - { - "language": { - "id": "ru", - "name": "Russian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 34 - }, - "translated": { - "tmMatch": 6, - "default": 28, - "total": 34 + "total": 37 }, "targetTranslated": { - "tmMatch": 5, - "default": 21, - "total": 26 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 6, - "default": 28, - "total": 34 - }, - "approvalCosts": { - "tmMatch": 0, + "tmMatch": 93, "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 15211006, - "username": "s.joy", - "fullName": "s.joy", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15211006/medium/28bea1b362d046dcfa46b6ed26f8a75f_default.png", - "preTranslated": 0, - "totalCosts": 3 - }, - "languages": [ - { - "language": { - "id": "it", - "name": "Italian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 3 - }, - "translated": { - "tmMatch": 1, - "default": 2, - "total": 3 - }, - "targetTranslated": { - "tmMatch": 1, - "default": 3, - "total": 4 + "total": 93 }, "translatedByMt": { - "tmMatch": 0, - "default": 2, - "total": 2 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 1, - "default": 2, - "total": 3 - }, - "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 - } - } - ] - }, - { - "user": { - "id": 15245586, - "username": "s3ttings", - "fullName": "s3ttings", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15245586/medium/255e604fc64ada6f55a802ea9de2204a_default.png", - "preTranslated": 0, - "totalCosts": 851 - }, - "languages": [ - { - "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 851 - }, - "translated": { - "tmMatch": 0, - "default": 851, - "total": 851 - }, - "targetTranslated": { - "tmMatch": 0, - "default": 920, - "total": 920 - }, - "translatedByMt": { - "tmMatch": 0, - "default": 292, - "total": 292 }, "approved": { "tmMatch": 0, @@ -4108,61 +3705,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 851, - "total": 851 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - } - ] - }, - { - "user": { - "id": 15086195, - "username": "saintchen", - "fullName": "saintchen", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086195/medium/cb67cfa9d14a4cb5d9cb8c9ad9fa18b9.jpg", - "preTranslated": 0, - "totalCosts": 50 - }, - "languages": [ - { - "language": { - "id": "zh-CN", - "name": "Chinese Simplified", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 50 - }, - "translated": { - "tmMatch": 4, - "default": 46, - "total": 50 - }, - "targetTranslated": { - "tmMatch": 9, - "default": 75, - "total": 84 - }, - "translatedByMt": { - "tmMatch": 2, - "default": 29, - "total": 31 - }, - "approved": { - "tmMatch": 0, + "tmMatch": 37, "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 4, - "default": 46, - "total": 50 + "total": 37 }, "approvalCosts": { "tmMatch": 0, @@ -4174,37 +3719,37 @@ }, { "user": { - "id": 15070285, - "username": "snoyyecx", - "fullName": "snoyyecx", + "id": 15168364, + "username": "nloureiro", + "fullName": "nloureiro", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15070285/medium/c04a4822e06a68a151b5eed7da782c11_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15168364/medium/1420a4d4d2a31499067c4c62c59ae2c5.jpg", "preTranslated": 0, - "totalCosts": 73 + "totalCosts": 162 }, "languages": [ { "language": { - "id": "ta", - "name": "Tamil", + "id": "pt-PT", + "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 73 + "totalCosts": 162 }, "translated": { "tmMatch": 0, - "default": 73, - "total": 73 + "default": 162, + "total": 162 }, "targetTranslated": { "tmMatch": 0, - "default": 152, - "total": 152 + "default": 145, + "total": 145 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 8, + "total": 8 }, "approved": { "tmMatch": 0, @@ -4213,8 +3758,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 73, - "total": 73 + "default": 162, + "total": 162 }, "approvalCosts": { "tmMatch": 0, @@ -4226,76 +3771,37 @@ }, { "user": { - "id": 15186456, - "username": "ssNewHouses", - "fullName": "ssNewHouses", + "id": 13986387, + "username": "rafarocha", + "fullName": "rafarocha", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15186456/medium/1c30fc8a15e1b20ca205dece7e1844f6_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/a0c3812dc8e52a7ab934944250304328.jpeg", "preTranslated": 0, - "totalCosts": 2979 + "totalCosts": 10376 }, "languages": [ - { - "language": { - "id": "gl", - "name": "Galician", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 2978 - }, - "translated": { - "tmMatch": 95, - "default": 2883, - "total": 2978 - }, - "targetTranslated": { - "tmMatch": 103, - "default": 3090, - "total": 3193 - }, - "translatedByMt": { - "tmMatch": 2, - "default": 0, - "total": 2 - }, - "approved": { - "tmMatch": 0, - "default": 0, - "total": 0 - }, - "translationCosts": { - "tmMatch": 95, - "default": 2883, - "total": 2978 - }, - "approvalCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 - } - }, { "language": { "id": "pt-BR", "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 10376 }, "translated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 275, + "default": 10101, + "total": 10376 }, "targetTranslated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 300, + "default": 10454, + "total": 10754 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 21, + "default": 136, + "total": 157 }, "approved": { "tmMatch": 0, @@ -4303,9 +3809,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 275, + "default": 10101, + "total": 10376 }, "approvalCosts": { "tmMatch": 0, @@ -4317,32 +3823,32 @@ }, { "user": { - "id": 15228714, - "username": "stan-", - "fullName": "stan-", + "id": 15252970, + "username": "resurs12", + "fullName": "resurs12", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15228714/medium/15c7cf0a4935ac0722ff02cc15cd604d_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15252970/medium/e6ec9357145fcd7c3bf54ba1441bb4df_default.png", "preTranslated": 0, - "totalCosts": 9 + "totalCosts": 34 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 9 + "totalCosts": 34 }, "translated": { - "tmMatch": 0, - "default": 9, - "total": 9 + "tmMatch": 6, + "default": 28, + "total": 34 }, "targetTranslated": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 5, + "default": 21, + "total": 26 }, "translatedByMt": { "tmMatch": 0, @@ -4355,9 +3861,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 9, - "total": 9 + "tmMatch": 6, + "default": 28, + "total": 34 }, "approvalCosts": { "tmMatch": 0, @@ -4369,32 +3875,32 @@ }, { "user": { - "id": 15247878, - "username": "suibianquming", - "fullName": "suibianquming", + "id": 14634932, + "username": "s.alshoikan", + "fullName": "s.alshoikan", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247878/medium/d05c911cffcbcecf6c10690bdb0d0e56_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14634932/medium/d1a8c1ad7b88ee2cf9a9e7d8d969f040_default.png", "preTranslated": 0, - "totalCosts": 919 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 919 + "totalCosts": 2 }, "translated": { - "tmMatch": 10, - "default": 909, - "total": 919 + "tmMatch": 0, + "default": 2, + "total": 2 }, "targetTranslated": { - "tmMatch": 18, - "default": 1608, - "total": 1626 + "tmMatch": 0, + "default": 3, + "total": 3 }, "translatedByMt": { "tmMatch": 0, @@ -4407,9 +3913,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 10, - "default": 909, - "total": 919 + "tmMatch": 0, + "default": 2, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -4421,37 +3927,37 @@ }, { "user": { - "id": 15224386, - "username": "telebee", - "fullName": "telebee", + "id": 15245586, + "username": "s3ttings", + "fullName": "s3ttings", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15224386/medium/52b2ec0ff1b2d2f6893458a3a632a2eb_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15245586/medium/255e604fc64ada6f55a802ea9de2204a_default.png", "preTranslated": 0, - "totalCosts": 268 + "totalCosts": 84 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 24 + "totalCosts": 84 }, "translated": { "tmMatch": 0, - "default": 24, - "total": 24 + "default": 84, + "total": 84 }, "targetTranslated": { "tmMatch": 0, - "default": 48, - "total": 48 + "default": 84, + "total": 84 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 56, + "total": 56 }, "approved": { "tmMatch": 0, @@ -4460,37 +3966,50 @@ }, "translationCosts": { "tmMatch": 0, - "default": 24, - "total": 24 + "default": 84, + "total": 84 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15281848, + "username": "sethuram", + "fullName": "sethuram", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15281848/medium/446710b4652cb7811f2eba3c3c7c15de_default.png", + "preTranslated": 0, + "totalCosts": 1 + }, + "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "ta", + "name": "Tamil", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 244 + "totalCosts": 1 }, "translated": { - "tmMatch": 11, - "default": 233, - "total": 244 + "tmMatch": 1, + "default": 0, + "total": 1 }, "targetTranslated": { - "tmMatch": 25, - "default": 401, - "total": 426 + "tmMatch": 2, + "default": 0, + "total": 2 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approved": { "tmMatch": 0, @@ -4498,9 +4017,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 11, - "default": 233, - "total": 244 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -4512,37 +4031,37 @@ }, { "user": { - "id": 15216062, - "username": "timeout", - "fullName": "timeout", + "id": 15186456, + "username": "ssNewHouses", + "fullName": "ssNewHouses", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15216062/medium/dfae7065e3c518a17c5dab0527e931f1.gif", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15186456/medium/1c30fc8a15e1b20ca205dece7e1844f6_default.png", "preTranslated": 0, - "totalCosts": 130 + "totalCosts": 9 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "gl", + "name": "Galician", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 130 + "totalCosts": 9 }, "translated": { - "tmMatch": 29, - "default": 101, - "total": 130 + "tmMatch": 0, + "default": 9, + "total": 9 }, "targetTranslated": { - "tmMatch": 35, - "default": 129, - "total": 164 + "tmMatch": 0, + "default": 11, + "total": 11 }, "translatedByMt": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -4550,9 +4069,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 29, - "default": 101, - "total": 130 + "tmMatch": 0, + "default": 9, + "total": 9 }, "approvalCosts": { "tmMatch": 0, @@ -4564,37 +4083,37 @@ }, { "user": { - "id": 15236294, - "username": "v.miklos", - "fullName": "v.miklos", + "id": 15224386, + "username": "telebee", + "fullName": "telebee", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15236294/medium/66acaf0cf529627c9f6dddb3e789e464_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15224386/medium/52b2ec0ff1b2d2f6893458a3a632a2eb_default.png", "preTranslated": 0, - "totalCosts": 25 + "totalCosts": 236 }, "languages": [ { "language": { - "id": "hu", - "name": "Hungarian", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 25 + "totalCosts": 236 }, "translated": { - "tmMatch": 4, - "default": 21, - "total": 25 + "tmMatch": 119, + "default": 117, + "total": 236 }, "targetTranslated": { - "tmMatch": 4, - "default": 21, - "total": 25 + "tmMatch": 220, + "default": 193, + "total": 413 }, "translatedByMt": { - "tmMatch": 3, - "default": 4, - "total": 7 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -4602,9 +4121,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 21, - "total": 25 + "tmMatch": 119, + "default": 117, + "total": 236 }, "approvalCosts": { "tmMatch": 0, @@ -4616,32 +4135,32 @@ }, { "user": { - "id": 15227684, - "username": "vatrareksa", - "fullName": "vatrareksa", + "id": 15259076, + "username": "villey", + "fullName": "villey", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15227684/medium/99cbec3693964468fef00f44128bfac0_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15259076/medium/7942615c469be9780574387ab0448d69_default.png", "preTranslated": 0, - "totalCosts": 219 + "totalCosts": 195 }, "languages": [ { "language": { - "id": "et", - "name": "Estonian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 127 + "totalCosts": 195 }, "translated": { - "tmMatch": 21, - "default": 106, - "total": 127 + "tmMatch": 0, + "default": 195, + "total": 195 }, "targetTranslated": { - "tmMatch": 20, - "default": 99, - "total": 119 + "tmMatch": 0, + "default": 235, + "total": 235 }, "translatedByMt": { "tmMatch": 0, @@ -4654,33 +4173,46 @@ "total": 0 }, "translationCosts": { - "tmMatch": 21, - "default": 106, - "total": 127 + "tmMatch": 0, + "default": 195, + "total": 195 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15280274, + "username": "yaseenammaar", + "fullName": "yaseenammaar", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15280274/medium/ff3bb7a12364b4c064801d9c1ac22d7d_default.png", + "preTranslated": 0, + "totalCosts": 115 + }, + "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "hi", + "name": "Hindi", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 92 + "totalCosts": 115 }, "translated": { - "tmMatch": 6, - "default": 86, - "total": 92 + "tmMatch": 1, + "default": 114, + "total": 115 }, "targetTranslated": { - "tmMatch": 6, - "default": 83, - "total": 89 + "tmMatch": 3, + "default": 195, + "total": 198 }, "translatedByMt": { "tmMatch": 0, @@ -4693,9 +4225,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 86, - "total": 92 + "tmMatch": 1, + "default": 114, + "total": 115 }, "approvalCosts": { "tmMatch": 0, @@ -4707,32 +4239,32 @@ }, { "user": { - "id": 14862460, - "username": "vdusart", - "fullName": "vdusart", + "id": 15266036, + "username": "yikaicao", + "fullName": "yikaicao", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14862460/medium/106cb769254652c20ddeab107317fd43_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266036/medium/b9b98db89c2a86d497709b0ff6b94efa_default.png", "preTranslated": 0, - "totalCosts": 586 + "totalCosts": 8 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 586 + "totalCosts": 8 }, "translated": { - "tmMatch": 0, - "default": 586, - "total": 586 + "tmMatch": 8, + "default": 0, + "total": 8 }, "targetTranslated": { - "tmMatch": 0, - "default": 621, - "total": 621 + "tmMatch": 17, + "default": 0, + "total": 17 }, "translatedByMt": { "tmMatch": 0, @@ -4745,9 +4277,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 586, - "total": 586 + "tmMatch": 8, + "default": 0, + "total": 8 }, "approvalCosts": { "tmMatch": 0, @@ -4759,32 +4291,32 @@ }, { "user": { - "id": 15138988, - "username": "zhenya_gidicheva_2000", - "fullName": "zhenya_gidicheva_2000", + "id": 15257248, + "username": "zainulasror87", + "fullName": "zainulasror87", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15138988/medium/4c6e8dff2e22e73eca01b7979759bc13_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15257248/medium/768f734448a30316c54953d4069c5165_default.png", "preTranslated": 0, - "totalCosts": 2400 + "totalCosts": 35 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "id", + "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2400 + "totalCosts": 35 }, "translated": { - "tmMatch": 21, - "default": 2379, - "total": 2400 + "tmMatch": 2, + "default": 33, + "total": 35 }, "targetTranslated": { - "tmMatch": 19, - "default": 2005, - "total": 2024 + "tmMatch": 2, + "default": 33, + "total": 35 }, "translatedByMt": { "tmMatch": 0, @@ -4797,9 +4329,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 21, - "default": 2379, - "total": 2400 + "tmMatch": 2, + "default": 33, + "total": 35 }, "approvalCosts": { "tmMatch": 0, @@ -4811,32 +4343,32 @@ }, { "user": { - "id": 13530232, - "username": "zwoosks", - "fullName": "zwoosks", + "id": 14712604, + "username": "zazadjo", + "fullName": "zazadjo", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13530232/medium/275115e4b9402c6d68676477934a8a41_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14712604/medium/a7ff73990f53a0641d6c851a749f0900_default.png", "preTranslated": 0, - "totalCosts": 234 + "totalCosts": 17 }, "languages": [ { "language": { - "id": "ca", - "name": "Catalan", + "id": "ka", + "name": "Georgian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 234 + "totalCosts": 17 }, "translated": { "tmMatch": 0, - "default": 234, - "total": 234 + "default": 17, + "total": 17 }, "targetTranslated": { "tmMatch": 0, - "default": 265, - "total": 265 + "default": 1, + "total": 1 }, "translatedByMt": { "tmMatch": 0, @@ -4850,8 +4382,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 234, - "total": 234 + "default": 17, + "total": 17 }, "approvalCosts": { "tmMatch": 0, @@ -4863,32 +4395,32 @@ }, { "user": { - "id": 15174096, - "username": "13u22", - "fullName": "13u22", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15174096/medium/2c7598abbcf6dc776b41f9443584bf8f.jpeg", + "id": 14226882, + "username": "FutureTrans01", + "fullName": "ACO_Future Trans (FutureTrans01)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14226882/medium/6f2e227d358c748cdfcd3a1969d69b20_default.png", "preTranslated": 0, - "totalCosts": 19 + "totalCosts": 1710 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 19 + "totalCosts": 1710 }, "translated": { - "tmMatch": 0, - "default": 19, - "total": 19 + "tmMatch": 78, + "default": 1632, + "total": 1710 }, "targetTranslated": { - "tmMatch": 0, - "default": 36, - "total": 36 + "tmMatch": 68, + "default": 1357, + "total": 1425 }, "translatedByMt": { "tmMatch": 0, @@ -4898,12 +4430,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 2547 }, "translationCosts": { - "tmMatch": 0, - "default": 19, - "total": 19 + "tmMatch": 78, + "default": 1632, + "total": 1710 }, "approvalCosts": { "tmMatch": 0, @@ -4915,32 +4447,32 @@ }, { "user": { - "id": 15218796, - "username": "elizabethkim", - "fullName": "Aco_ElizabethKim (elizabethkim)", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218796/medium/b2fe0512f17a60d47a4328127eaee058_default.png", + "id": 15103657, + "username": "uruuriye", + "fullName": "Abdillahi Xaaji Bachir (uruuriye)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15103657/medium/1f536153cd11467c9ae11fc0f1afcbc8.jpeg", "preTranslated": 0, - "totalCosts": 970 + "totalCosts": 14 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "so", + "name": "Somali", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6 + "totalCosts": 14 }, "translated": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 3, + "default": 11, + "total": 14 }, "targetTranslated": { - "tmMatch": 0, - "default": 5, - "total": 5 + "tmMatch": 6, + "default": 10, + "total": 16 }, "translatedByMt": { "tmMatch": 0, @@ -4953,33 +4485,46 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 3, + "default": 11, + "total": 14 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15036379, + "username": "bayan-tech", + "fullName": "Aco-BayanTech (bayan-tech)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15036379/medium/753e141785d6f0c1dd9d90a6df87eb05_default.png", + "preTranslated": 0, + "totalCosts": 2620 + }, + "languages": [ { "language": { - "id": "ro", - "name": "Romanian", + "id": "fa", + "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 964 + "totalCosts": 2620 }, "translated": { - "tmMatch": 37, - "default": 927, - "total": 964 + "tmMatch": 77, + "default": 2543, + "total": 2620 }, "targetTranslated": { - "tmMatch": 36, - "default": 720, - "total": 756 + "tmMatch": 110, + "default": 3276, + "total": 3386 }, "translatedByMt": { "tmMatch": 0, @@ -4989,12 +4534,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 962 + "total": 3002 }, "translationCosts": { - "tmMatch": 37, - "default": 927, - "total": 964 + "tmMatch": 77, + "default": 2543, + "total": 2620 }, "approvalCosts": { "tmMatch": 0, @@ -5006,47 +4551,47 @@ }, { "user": { - "id": 15051667, - "username": "Acc_LSP_Ethereum", - "fullName": "Aco_LSP Team (Acc_LSP_Ethereum)", + "id": 13939103, + "username": "amidas", + "fullName": "Aco_Amidas (amidas)", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15051667/medium/4729d9d91213c24479b981bcfa41cd10_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13939103/medium/d2dbe429cd49b1f80a767cb275a0b83b_default.png", "preTranslated": 0, - "totalCosts": 11537 + "totalCosts": 6466 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "sl", + "name": "Slovenian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 11537 + "totalCosts": 6466 }, "translated": { - "tmMatch": 4726, - "default": 6811, - "total": 11537 + "tmMatch": 1695, + "default": 4771, + "total": 6466 }, "targetTranslated": { - "tmMatch": 5634, - "default": 7949, - "total": 13583 + "tmMatch": 1574, + "default": 4382, + "total": 5956 }, "translatedByMt": { - "tmMatch": 7, - "default": 4, - "total": 11 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 18442 + "total": 9213 }, "translationCosts": { - "tmMatch": 4726, - "default": 6811, - "total": 11537 + "tmMatch": 1695, + "default": 4771, + "total": 6466 }, "approvalCosts": { "tmMatch": 0, @@ -5058,47 +4603,47 @@ }, { "user": { - "id": 15220942, - "username": "marie.winerfeldt", - "fullName": "Aco_Marie Winerfeldt (marie.winerfeldt)", + "id": 15218796, + "username": "elizabethkim", + "fullName": "Aco_ElizabethKim (elizabethkim)", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15220942/medium/64cffdceab5081f702c7e5533ce697f0.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218796/medium/b2fe0512f17a60d47a4328127eaee058_default.png", "preTranslated": 0, - "totalCosts": 56 + "totalCosts": 9002 }, "languages": [ { "language": { - "id": "fi", - "name": "Finnish", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 56 + "totalCosts": 9002 }, "translated": { - "tmMatch": 10, - "default": 46, - "total": 56 + "tmMatch": 381, + "default": 8621, + "total": 9002 }, "targetTranslated": { - "tmMatch": 10, - "default": 38, - "total": 48 + "tmMatch": 316, + "default": 6592, + "total": 6908 }, "translatedByMt": { "tmMatch": 9, - "default": 27, - "total": 36 + "default": 0, + "total": 9 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 10346 }, "translationCosts": { - "tmMatch": 10, - "default": 46, - "total": 56 + "tmMatch": 381, + "default": 8621, + "total": 9002 }, "approvalCosts": { "tmMatch": 0, @@ -5110,19 +4655,19 @@ }, { "user": { - "id": 14952471, - "username": "justatranslator", - "fullName": "Aco_PM_CrinaBalaban (justatranslator)", - "userRole": "Manager", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14952471/medium/0b923ad0f9ac867dc2ba15f179591202_default.png", + "id": 15144574, + "username": "Word_Global_Eyes", + "fullName": "Aco_Larisa Gubareva (Word_Global_Eyes)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15144574/medium/d85fe7c56b9f9e47c9f1a3e27ca32078.jpg", "preTranslated": 0, - "totalCosts": 4282 + "totalCosts": 0 }, "languages": [ { "language": { - "id": "ca", - "name": "Catalan", + "id": "sw", + "name": "Swahili", "tmSavings": 0, "preTranslate": 0, "totalCosts": 0 @@ -5145,7 +4690,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 3 + "total": 2 }, "translationCosts": { "tmMatch": 0, @@ -5157,24 +4702,37 @@ "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 14952471, + "username": "justatranslator", + "fullName": "Aco_PM_CrinaBalaban (justatranslator)", + "userRole": "Manager", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14952471/medium/0b923ad0f9ac867dc2ba15f179591202_default.png", + "preTranslated": 0, + "totalCosts": 7456 + }, + "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "cs", + "name": "Czech", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4282 + "totalCosts": 7456 }, "translated": { "tmMatch": 0, - "default": 4282, - "total": 4282 + "default": 7456, + "total": 7456 }, "targetTranslated": { "tmMatch": 0, - "default": 4672, - "total": 4672 + "default": 6968, + "total": 6968 }, "translatedByMt": { "tmMatch": 0, @@ -5184,116 +4742,51 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 9204 + "total": 10215 }, "translationCosts": { "tmMatch": 0, - "default": 4282, - "total": 4282 + "default": 7456, + "total": 7456 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15048901, - "username": "Joy_Zhang", - "fullName": "Aco_Reviewer_Joy_Zhang (Joy_Zhang)", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15048901/medium/9c2e15bbe4e07a19c6a4d53fd3bd4fac_default.png", - "preTranslated": 0, - "totalCosts": 22361 - }, - "languages": [ + }, { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 22361 + "totalCosts": 0 }, "translated": { - "tmMatch": 6547, - "default": 15814, - "total": 22361 - }, - "targetTranslated": { - "tmMatch": 11496, - "default": 25671, - "total": 37167 - }, - "translatedByMt": { - "tmMatch": 6, - "default": 117, - "total": 123 - }, - "approved": { "tmMatch": 0, "default": 0, - "total": 29513 - }, - "translationCosts": { - "tmMatch": 6547, - "default": 15814, - "total": 22361 + "total": 0 }, - "approvalCosts": { + "targetTranslated": { "tmMatch": 0, "default": 0, "total": 0 - } - } - ] - }, - { - "user": { - "id": 15039155, - "username": "acc_europelocalize0", - "fullName": "Aco_Suhan Yilmaz_EuropeLocalize (acc_europelocalize0)", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15039155/medium/24f88a5019b8ef570a70cb286dc34053_default.png", - "preTranslated": 0, - "totalCosts": 333 - }, - "languages": [ - { - "language": { - "id": "sw", - "name": "Swahili", - "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 333 - }, - "translated": { - "tmMatch": 34, - "default": 299, - "total": 333 - }, - "targetTranslated": { - "tmMatch": 37, - "default": 263, - "total": 300 }, "translatedByMt": { - "tmMatch": 3, + "tmMatch": 0, "default": 0, - "total": 3 + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 10666 + "total": 606 }, "translationCosts": { - "tmMatch": 34, - "default": 299, - "total": 333 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approvalCosts": { "tmMatch": 0, @@ -5305,47 +4798,47 @@ }, { "user": { - "id": 13151214, - "username": "Technolex", - "fullName": "Aco_Technolex (Technolex)", + "id": 15054987, + "username": "Christina_Yuan", + "fullName": "Aco_Reviewer_Christina_Yuan (Christina_Yuan)", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13151214/medium/b366a16aaf40db3f01f06af1042f2649_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15054987/medium/53bd80f3d667bda88ea89e53a29dcc9c_default.png", "preTranslated": 0, - "totalCosts": 4974 + "totalCosts": 14334 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4974 + "totalCosts": 14334 }, "translated": { - "tmMatch": 1267, - "default": 3707, - "total": 4974 + "tmMatch": 688, + "default": 13646, + "total": 14334 }, "targetTranslated": { - "tmMatch": 1192, - "default": 3327, - "total": 4519 + "tmMatch": 1307, + "default": 23437, + "total": 24744 }, "translatedByMt": { - "tmMatch": 6, + "tmMatch": 13, "default": 6, - "total": 12 + "total": 19 }, "approved": { "tmMatch": 0, "default": 0, - "total": 9621 + "total": 210 }, "translationCosts": { - "tmMatch": 1267, - "default": 3707, - "total": 4974 + "tmMatch": 688, + "default": 13646, + "total": 14334 }, "approvalCosts": { "tmMatch": 0, @@ -5357,99 +4850,86 @@ }, { "user": { - "id": 15197762, - "username": "Aco_FR_LauraSanz", - "fullName": "Acolad_FreelanceReviewer_Laura Sanz Gonzalez (Aco_FR_LauraSanz)", + "id": 15048901, + "username": "Joy_Zhang", + "fullName": "Aco_Reviewer_Joy_Zhang (Joy_Zhang)", "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15197762/medium/d8e4fc31646e818d0cedd473fe0525d2_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15048901/medium/9c2e15bbe4e07a19c6a4d53fd3bd4fac_default.png", "preTranslated": 0, - "totalCosts": 6369 + "totalCosts": 15299 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6369 + "totalCosts": 13054 }, "translated": { - "tmMatch": 3256, - "default": 3113, - "total": 6369 + "tmMatch": 6380, + "default": 6674, + "total": 13054 }, "targetTranslated": { - "tmMatch": 3908, - "default": 3593, - "total": 7501 + "tmMatch": 11025, + "default": 11114, + "total": 22139 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 8, + "default": 13, + "total": 21 }, "approved": { "tmMatch": 0, "default": 0, - "total": 9633 + "total": 15502 }, "translationCosts": { - "tmMatch": 3256, - "default": 3113, - "total": 6369 + "tmMatch": 6380, + "default": 6674, + "total": 13054 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15251572, - "username": "adimac93", - "fullName": "Adimac93 (adimac93)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15251572/medium/9d5980c9c79287d4fe5c06efe96f9656.png", - "preTranslated": 0, - "totalCosts": 22 - }, - "languages": [ + }, { "language": { - "id": "pl", - "name": "Polish", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 22 + "totalCosts": 2245 }, "translated": { - "tmMatch": 3, - "default": 19, - "total": 22 + "tmMatch": 113, + "default": 2132, + "total": 2245 }, "targetTranslated": { - "tmMatch": 3, - "default": 19, - "total": 22 + "tmMatch": 216, + "default": 3920, + "total": 4136 }, "translatedByMt": { "tmMatch": 0, - "default": 19, - "total": 19 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 10021 }, "translationCosts": { - "tmMatch": 3, - "default": 19, - "total": 22 + "tmMatch": 113, + "default": 2132, + "total": 2245 }, "approvalCosts": { "tmMatch": 0, @@ -5461,99 +4941,86 @@ }, { "user": { - "id": 15229186, - "username": "adrianpoblette", - "fullName": "Adrian Poblette (adrianpoblette)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15229186/medium/be9dd03a208f2572cdbd1f7536443aa5.jpeg", + "id": 13151214, + "username": "Technolex", + "fullName": "Aco_Technolex (Technolex)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13151214/medium/b366a16aaf40db3f01f06af1042f2649_default.png", "preTranslated": 0, - "totalCosts": 20 + "totalCosts": 16431 }, "languages": [ { "language": { - "id": "tl", - "name": "Tagalog", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 20 + "totalCosts": 14519 }, "translated": { - "tmMatch": 1, - "default": 19, - "total": 20 + "tmMatch": 4692, + "default": 9827, + "total": 14519 }, "targetTranslated": { - "tmMatch": 1, - "default": 19, - "total": 20 + "tmMatch": 4322, + "default": 8745, + "total": 13067 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 7, + "default": 3, + "total": 10 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 23728 }, "translationCosts": { - "tmMatch": 1, - "default": 19, - "total": 20 + "tmMatch": 4692, + "default": 9827, + "total": 14519 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15237056, - "username": "al.corredera", - "fullName": "Alberto Corredera (al.corredera)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15237056/medium/d846ce5a4333a3c90131ebdc6abcb3b5.jpeg", - "preTranslated": 0, - "totalCosts": 35 - }, - "languages": [ + }, { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "uk", + "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 35 + "totalCosts": 1912 }, "translated": { - "tmMatch": 0, - "default": 35, - "total": 35 + "tmMatch": 104, + "default": 1808, + "total": 1912 }, "targetTranslated": { - "tmMatch": 0, - "default": 45, - "total": 45 + "tmMatch": 93, + "default": 1645, + "total": 1738 }, "translatedByMt": { - "tmMatch": 0, - "default": 11, - "total": 11 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 2089 }, "translationCosts": { - "tmMatch": 0, - "default": 35, - "total": 35 + "tmMatch": 104, + "default": 1808, + "total": 1912 }, "approvalCosts": { "tmMatch": 0, @@ -5565,32 +5032,32 @@ }, { "user": { - "id": 15219092, - "username": "hersale", - "fullName": "Aleksandar Veskovic (hersale)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219092/medium/efdf87a8ecc9a620dfe776240ce78d12.jpeg", + "id": 15197762, + "username": "Aco_FR_LauraSanz", + "fullName": "Acolad_FreelanceReviewer_Laura Sanz Gonzalez (Aco_FR_LauraSanz)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15197762/medium/d8e4fc31646e818d0cedd473fe0525d2_default.png", "preTranslated": 0, - "totalCosts": 31 + "totalCosts": 8853 }, "languages": [ { "language": { - "id": "sr-CS", - "name": "Serbian (Latin)", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 31 + "totalCosts": 8853 }, "translated": { - "tmMatch": 0, - "default": 31, - "total": 31 + "tmMatch": 1579, + "default": 7274, + "total": 8853 }, "targetTranslated": { - "tmMatch": 0, - "default": 28, - "total": 28 + "tmMatch": 1623, + "default": 7471, + "total": 9094 }, "translatedByMt": { "tmMatch": 0, @@ -5600,12 +5067,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 11420 }, "translationCosts": { - "tmMatch": 0, - "default": 31, - "total": 31 + "tmMatch": 1579, + "default": 7274, + "total": 8853 }, "approvalCosts": { "tmMatch": 0, @@ -5617,32 +5084,32 @@ }, { "user": { - "id": 15214644, - "username": "Cream_Shardeum", - "fullName": "Alexandr Sokolov (Cream_Shardeum)", + "id": 15297238, + "username": "agampatel1234890", + "fullName": "Agam Patel (agampatel1234890)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214644/medium/6d8fdd92ded7c0a8968446686af35b3a.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15297238/medium/2290b25b89c8b70df206b7af1cef935b.png", "preTranslated": 0, - "totalCosts": 12 + "totalCosts": 6 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "gu-IN", + "name": "Gujarati", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 12 + "totalCosts": 6 }, "translated": { "tmMatch": 0, - "default": 12, - "total": 12 + "default": 6, + "total": 6 }, "targetTranslated": { "tmMatch": 0, - "default": 16, - "total": 16 + "default": 8, + "total": 8 }, "translatedByMt": { "tmMatch": 0, @@ -5656,8 +5123,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 12, - "total": 12 + "default": 6, + "total": 6 }, "approvalCosts": { "tmMatch": 0, @@ -5669,37 +5136,37 @@ }, { "user": { - "id": 15233666, - "username": "Alifarhani", - "fullName": "Ali Farhani (Alifarhani)", + "id": 15268884, + "username": "bikaa2611", + "fullName": "Ahmed Bakry (bikaa2611)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15268884/medium/fe0000fff53424c506353a43751bfc99.png", "preTranslated": 0, - "totalCosts": 2971 + "totalCosts": 178 }, "languages": [ { "language": { - "id": "fa", - "name": "Persian", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2971 + "totalCosts": 178 }, "translated": { - "tmMatch": 28, - "default": 2943, - "total": 2971 + "tmMatch": 0, + "default": 178, + "total": 178 }, "targetTranslated": { - "tmMatch": 33, - "default": 3556, - "total": 3589 + "tmMatch": 0, + "default": 148, + "total": 148 }, "translatedByMt": { - "tmMatch": 5, - "default": 5, - "total": 10 + "tmMatch": 0, + "default": 11, + "total": 11 }, "approved": { "tmMatch": 0, @@ -5707,9 +5174,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 28, - "default": 2943, - "total": 2971 + "tmMatch": 0, + "default": 178, + "total": 178 }, "approvalCosts": { "tmMatch": 0, @@ -5721,32 +5188,32 @@ }, { "user": { - "id": 14555882, - "username": "ElAmir", - "fullName": "Amir Reza (ElAmir)", + "id": 14675092, + "username": "Mousticke", + "fullName": "Akim B. (Mousticke)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14555882/medium/edcaf24c34ef3506613bad9099389fc6.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14675092/medium/93a5a3891a8c8b3f1796baf7ae9c8046.png", "preTranslated": 0, - "totalCosts": 52 + "totalCosts": 332 }, "languages": [ { "language": { - "id": "fa", - "name": "Persian", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 52 + "totalCosts": 332 }, "translated": { "tmMatch": 0, - "default": 52, - "total": 52 + "default": 332, + "total": 332 }, "targetTranslated": { "tmMatch": 0, - "default": 51, - "total": 51 + "default": 370, + "total": 370 }, "translatedByMt": { "tmMatch": 0, @@ -5760,8 +5227,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 52, - "total": 52 + "default": 332, + "total": 332 }, "approvalCosts": { "tmMatch": 0, @@ -5773,37 +5240,37 @@ }, { "user": { - "id": 15229094, - "username": "Amronasr", - "fullName": "Amronasr", + "id": 15237056, + "username": "al.corredera", + "fullName": "Alberto Corredera (al.corredera)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15229094/medium/aeee911dc9638c707bc41c152655b77a.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15237056/medium/d846ce5a4333a3c90131ebdc6abcb3b5.jpeg", "preTranslated": 0, - "totalCosts": 416 + "totalCosts": 327 }, "languages": [ { "language": { - "id": "ar", - "name": "Arabic", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 416 + "totalCosts": 327 }, "translated": { - "tmMatch": 0, - "default": 416, - "total": 416 + "tmMatch": 6, + "default": 321, + "total": 327 }, "targetTranslated": { - "tmMatch": 0, - "default": 351, - "total": 351 + "tmMatch": 5, + "default": 355, + "total": 360 }, "translatedByMt": { "tmMatch": 0, - "default": 26, - "total": 26 + "default": 125, + "total": 125 }, "approved": { "tmMatch": 0, @@ -5811,9 +5278,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 416, - "total": 416 + "tmMatch": 6, + "default": 321, + "total": 327 }, "approvalCosts": { "tmMatch": 0, @@ -5825,37 +5292,37 @@ }, { "user": { - "id": 15242930, - "username": "Fokz", - "fullName": "Andrey (Fokz)", + "id": 15233666, + "username": "Alifarhani", + "fullName": "Ali Farhani (Alifarhani)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242930/medium/de595e63dab6c67a1eceac967b3e0fc9.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg", "preTranslated": 0, - "totalCosts": 17 + "totalCosts": 3145 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "fa", + "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 17 + "totalCosts": 3145 }, "translated": { - "tmMatch": 0, - "default": 17, - "total": 17 + "tmMatch": 29, + "default": 3116, + "total": 3145 }, "targetTranslated": { - "tmMatch": 0, - "default": 17, - "total": 17 + "tmMatch": 36, + "default": 3614, + "total": 3650 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 3, + "default": 1, + "total": 4 }, "approved": { "tmMatch": 0, @@ -5863,9 +5330,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 17, - "total": 17 + "tmMatch": 29, + "default": 3116, + "total": 3145 }, "approvalCosts": { "tmMatch": 0, @@ -5877,13 +5344,13 @@ }, { "user": { - "id": 15099529, - "username": "Aria-Naraghi", - "fullName": "Aria Naraghi (Aria-Naraghi)", + "id": 14555882, + "username": "ElAmir", + "fullName": "Amir Reza (ElAmir)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15099529/medium/77b12f03c6675c85ad45efc6f3e23be3_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14555882/medium/edcaf24c34ef3506613bad9099389fc6.jpg", "preTranslated": 0, - "totalCosts": 62 + "totalCosts": 328 }, "languages": [ { @@ -5892,17 +5359,17 @@ "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 62 + "totalCosts": 328 }, "translated": { "tmMatch": 0, - "default": 62, - "total": 62 + "default": 328, + "total": 328 }, "targetTranslated": { "tmMatch": 0, - "default": 69, - "total": 69 + "default": 372, + "total": 372 }, "translatedByMt": { "tmMatch": 0, @@ -5916,8 +5383,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 62, - "total": 62 + "default": 328, + "total": 328 }, "approvalCosts": { "tmMatch": 0, @@ -5929,37 +5396,37 @@ }, { "user": { - "id": 15206754, - "username": "nixorn", - "fullName": "Artem Kanev (nixorn)", + "id": 15279734, + "username": "Pizza_Princess", + "fullName": "Anna Litvin (Pizza_Princess)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15206754/medium/1f6bb058858c9608582b83fe050bdf67.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279734/medium/97188da12b167157ee0793e1c63396ab_default.png", "preTranslated": 0, - "totalCosts": 4690 + "totalCosts": 1430 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "he", + "name": "Hebrew", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4690 + "totalCosts": 782 }, "translated": { - "tmMatch": 31, - "default": 4659, - "total": 4690 + "tmMatch": 200, + "default": 582, + "total": 782 }, "targetTranslated": { - "tmMatch": 30, - "default": 3893, - "total": 3923 + "tmMatch": 199, + "default": 534, + "total": 733 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 91, + "default": 13, + "total": 104 }, "approved": { "tmMatch": 0, @@ -5967,51 +5434,38 @@ "total": 0 }, "translationCosts": { - "tmMatch": 31, - "default": 4659, - "total": 4690 + "tmMatch": 200, + "default": 582, + "total": 782 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15243504, - "username": "4boa", - "fullName": "Artur Arseni Hakobyan (4boa)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15243504/medium/c2985e9288ce8b36c66b86e491529fab.png", - "preTranslated": 0, - "totalCosts": 2844 - }, - "languages": [ + }, { "language": { - "id": "hy-AM", - "name": "Armenian", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 634 + "totalCosts": 176 }, "translated": { - "tmMatch": 8, - "default": 626, - "total": 634 + "tmMatch": 42, + "default": 134, + "total": 176 }, "targetTranslated": { - "tmMatch": 7, - "default": 569, - "total": 576 + "tmMatch": 38, + "default": 107, + "total": 145 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 23, + "total": 25 }, "approved": { "tmMatch": 0, @@ -6019,9 +5473,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 626, - "total": 634 + "tmMatch": 42, + "default": 134, + "total": 176 }, "approvalCosts": { "tmMatch": 0, @@ -6031,26 +5485,26 @@ }, { "language": { - "id": "de", - "name": "German", + "id": "uk", + "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2210 + "totalCosts": 472 }, "translated": { - "tmMatch": 149, - "default": 2061, - "total": 2210 + "tmMatch": 49, + "default": 423, + "total": 472 }, "targetTranslated": { - "tmMatch": 143, - "default": 2086, - "total": 2229 + "tmMatch": 47, + "default": 366, + "total": 413 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 15, + "default": 121, + "total": 136 }, "approved": { "tmMatch": 0, @@ -6058,9 +5512,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 149, - "default": 2061, - "total": 2210 + "tmMatch": 49, + "default": 423, + "total": 472 }, "approvalCosts": { "tmMatch": 0, @@ -6072,32 +5526,32 @@ }, { "user": { - "id": 15229796, - "username": "Assafgoren1", - "fullName": "Assafgoren1", + "id": 14986349, + "username": "misiura42", + "fullName": "Anna Otto (misiura42)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15229796/medium/86828710878214ed3b90ff6775f51693.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14986349/medium/87150872d02bfae162ed269e7183002e.jpeg", "preTranslated": 0, - "totalCosts": 94 + "totalCosts": 351 }, "languages": [ { "language": { - "id": "he", - "name": "Hebrew", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 94 + "totalCosts": 351 }, "translated": { - "tmMatch": 0, - "default": 94, - "total": 94 + "tmMatch": 7, + "default": 344, + "total": 351 }, "targetTranslated": { - "tmMatch": 0, - "default": 84, - "total": 84 + "tmMatch": 7, + "default": 306, + "total": 313 }, "translatedByMt": { "tmMatch": 0, @@ -6110,9 +5564,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 94, - "total": 94 + "tmMatch": 7, + "default": 344, + "total": 351 }, "approvalCosts": { "tmMatch": 0, @@ -6124,32 +5578,32 @@ }, { "user": { - "id": 15109143, - "username": "avelinomunoz.13.990", - "fullName": "Avelino Muñoz (avelinomunoz.13.990)", + "id": 15099529, + "username": "Aria-Naraghi", + "fullName": "Aria Naraghi (Aria-Naraghi)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15109143/medium/15bc93dea94521f060a6ca73118ace17.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15099529/medium/77b12f03c6675c85ad45efc6f3e23be3_default.png", "preTranslated": 0, - "totalCosts": 24 + "totalCosts": 265 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "fa", + "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 24 + "totalCosts": 265 }, "translated": { "tmMatch": 0, - "default": 24, - "total": 24 + "default": 265, + "total": 265 }, "targetTranslated": { "tmMatch": 0, - "default": 24, - "total": 24 + "default": 330, + "total": 330 }, "translatedByMt": { "tmMatch": 0, @@ -6159,12 +5613,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 938 }, "translationCosts": { "tmMatch": 0, - "default": 24, - "total": 24 + "default": 265, + "total": 265 }, "approvalCosts": { "tmMatch": 0, @@ -6176,32 +5630,32 @@ }, { "user": { - "id": 15236858, - "username": "bek0435", - "fullName": "Beck Sarbassov (bek0435)", + "id": 15206754, + "username": "nixorn", + "fullName": "Artem Kanev (nixorn)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15236858/medium/fe3e3c8474dba69ae1db5c8cc7e6a979.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15206754/medium/1f6bb058858c9608582b83fe050bdf67.jpeg", "preTranslated": 0, - "totalCosts": 29 + "totalCosts": 548 }, "languages": [ { "language": { - "id": "kk", - "name": "Kazakh", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 29 + "totalCosts": 548 }, "translated": { - "tmMatch": 1, - "default": 28, - "total": 29 + "tmMatch": 5, + "default": 543, + "total": 548 }, "targetTranslated": { - "tmMatch": 2, - "default": 25, - "total": 27 + "tmMatch": 5, + "default": 423, + "total": 428 }, "translatedByMt": { "tmMatch": 0, @@ -6214,9 +5668,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 28, - "total": 29 + "tmMatch": 5, + "default": 543, + "total": 548 }, "approvalCosts": { "tmMatch": 0, @@ -6228,32 +5682,32 @@ }, { "user": { - "id": 15238128, - "username": "carlomagnoaf", - "fullName": "C A (carlomagnoaf)", + "id": 15276928, + "username": "betterme", + "fullName": "Better Me (betterme)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15238128/medium/99b3af3b2977a456e2335497f72847f3.PNG", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15276928/medium/a8242d6cce5245250d61f5710094740f_default.png", "preTranslated": 0, - "totalCosts": 30 + "totalCosts": 33 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 30 + "totalCosts": 33 }, "translated": { "tmMatch": 0, - "default": 30, - "total": 30 + "default": 33, + "total": 33 }, "targetTranslated": { "tmMatch": 0, - "default": 35, - "total": 35 + "default": 49, + "total": 49 }, "translatedByMt": { "tmMatch": 0, @@ -6267,8 +5721,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 30, - "total": 30 + "default": 33, + "total": 33 }, "approvalCosts": { "tmMatch": 0, @@ -6280,37 +5734,37 @@ }, { "user": { - "id": 15244194, - "username": "Chogono", - "fullName": "Chogono813 (Chogono)", + "id": 14788762, + "username": "cafeweb", + "fullName": "Carla P (cafeweb)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15244194/medium/4be418d753664bad42be106f75c599ad.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14788762/medium/1ec3f24a57a4081619b7bb8014a245bb.png", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 644 }, "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 644 }, "translated": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 8, + "default": 636, + "total": 644 }, "targetTranslated": { - "tmMatch": 6, - "default": 0, - "total": 6 + "tmMatch": 9, + "default": 730, + "total": 739 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 41, + "total": 41 }, "approved": { "tmMatch": 0, @@ -6318,9 +5772,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 8, + "default": 636, + "total": 644 }, "approvalCosts": { "tmMatch": 0, @@ -6338,7 +5792,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221766/medium/9818a6f07e95c5f3260f34774d4e26fe.jpg", "preTranslated": 0, - "totalCosts": 4486 + "totalCosts": 738 }, "languages": [ { @@ -6347,22 +5801,22 @@ "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4486 + "totalCosts": 738 }, "translated": { - "tmMatch": 129, - "default": 4357, - "total": 4486 + "tmMatch": 26, + "default": 712, + "total": 738 }, "targetTranslated": { - "tmMatch": 131, - "default": 4376, - "total": 4507 + "tmMatch": 28, + "default": 724, + "total": 752 }, "translatedByMt": { - "tmMatch": 19, - "default": 594, - "total": 613 + "tmMatch": 3, + "default": 11, + "total": 14 }, "approved": { "tmMatch": 0, @@ -6370,9 +5824,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 129, - "default": 4357, - "total": 4486 + "tmMatch": 26, + "default": 712, + "total": 738 }, "approvalCosts": { "tmMatch": 0, @@ -6384,37 +5838,37 @@ }, { "user": { - "id": 15219672, - "username": "chrsdyor", - "fullName": "Christian DYOR (chrsdyor)", + "id": 15155844, + "username": "CryptoSpace", + "fullName": "CryptoSpace", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219672/medium/872568c32ce760599f35304e7bdac2da.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15155844/medium/6e6407e27f509308774f480afe52ff7d.png", "preTranslated": 0, - "totalCosts": 264 + "totalCosts": 1945 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 264 + "totalCosts": 1945 }, "translated": { - "tmMatch": 12, - "default": 252, - "total": 264 + "tmMatch": 2, + "default": 1943, + "total": 1945 }, "targetTranslated": { - "tmMatch": 14, - "default": 206, - "total": 220 + "tmMatch": 2, + "default": 2039, + "total": 2041 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 754, + "total": 754 }, "approved": { "tmMatch": 0, @@ -6422,9 +5876,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 12, - "default": 252, - "total": 264 + "tmMatch": 2, + "default": 1943, + "total": 1945 }, "approvalCosts": { "tmMatch": 0, @@ -6436,37 +5890,37 @@ }, { "user": { - "id": 15252430, - "username": "Shiva.Braga", - "fullName": "Conde Braga (Shiva.Braga)", + "id": 15264742, + "username": "jaszczomb", + "fullName": "Daniel (jaszczomb)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15252430/medium/3c1af35836bcb6a919a3ff13b5cf62b9.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264742/medium/864cdac6f83f6d96f5a231668ed65849.png", "preTranslated": 0, - "totalCosts": 7 + "totalCosts": 163 }, "languages": [ { "language": { - "id": "pt-PT", - "name": "Portuguese", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 7 + "totalCosts": 163 }, "translated": { - "tmMatch": 5, - "default": 2, - "total": 7 + "tmMatch": 11, + "default": 152, + "total": 163 }, "targetTranslated": { - "tmMatch": 7, - "default": 4, - "total": 11 + "tmMatch": 10, + "default": 146, + "total": 156 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 5, + "default": 25, + "total": 30 }, "approved": { "tmMatch": 0, @@ -6474,9 +5928,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 2, - "total": 7 + "tmMatch": 11, + "default": 152, + "total": 163 }, "approvalCosts": { "tmMatch": 0, @@ -6488,37 +5942,37 @@ }, { "user": { - "id": 15155844, - "username": "CryptoSpace", - "fullName": "CryptoSpace", + "id": 14981089, + "username": "daniloraisi", + "fullName": "Danilo Tenorio Raisi (daniloraisi)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15155844/medium/6e6407e27f509308774f480afe52ff7d.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14981089/medium/37d319f7ff289b5141aea317cb808deb.jpeg", "preTranslated": 0, - "totalCosts": 1127 + "totalCosts": 131 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1127 + "totalCosts": 131 }, "translated": { - "tmMatch": 69, - "default": 1058, - "total": 1127 + "tmMatch": 0, + "default": 131, + "total": 131 }, "targetTranslated": { - "tmMatch": 70, - "default": 1113, - "total": 1183 + "tmMatch": 0, + "default": 123, + "total": 123 }, "translatedByMt": { "tmMatch": 0, - "default": 222, - "total": 222 + "default": 17, + "total": 17 }, "approved": { "tmMatch": 0, @@ -6526,9 +5980,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 69, - "default": 1058, - "total": 1127 + "tmMatch": 0, + "default": 131, + "total": 131 }, "approvalCosts": { "tmMatch": 0, @@ -6540,37 +5994,37 @@ }, { "user": { - "id": 15231796, - "username": "cassiossantos", - "fullName": "Cássio Santos (cassiossantos)", + "id": 15273564, + "username": "Zarg69", + "fullName": "David Graz (Zarg69)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15231796/medium/669eb2d19983b6eebe3a23ca4876dd35_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15273564/medium/cc41c2e8faec1f3ea98c750eabdca018.jpeg", "preTranslated": 0, - "totalCosts": 16 + "totalCosts": 19 }, "languages": [ { "language": { - "id": "pt-PT", - "name": "Portuguese", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 19 }, "translated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 19, + "total": 19 }, "targetTranslated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 20, + "total": 20 }, "translatedByMt": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -6579,37 +6033,50 @@ }, "translationCosts": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 19, + "total": 19 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15090175, + "username": "echoalizr", + "fullName": "David Perez (echoalizr)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15090175/medium/e2f4cd33b9cde644c73c211df89de4ed_default.png", + "preTranslated": 0, + "totalCosts": 603 + }, + "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 12 + "totalCosts": 603 }, "translated": { - "tmMatch": 0, - "default": 12, - "total": 12 + "tmMatch": 1, + "default": 602, + "total": 603 }, "targetTranslated": { - "tmMatch": 0, - "default": 14, - "total": 14 + "tmMatch": 1, + "default": 659, + "total": 660 }, "translatedByMt": { "tmMatch": 0, - "default": 10, - "total": 10 + "default": 85, + "total": 85 }, "approved": { "tmMatch": 0, @@ -6617,9 +6084,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 12, - "total": 12 + "tmMatch": 1, + "default": 602, + "total": 603 }, "approvalCosts": { "tmMatch": 0, @@ -6631,32 +6098,32 @@ }, { "user": { - "id": 14721858, - "username": "IchMagSchokolade", - "fullName": "Daniel Lehmann (IchMagSchokolade)", + "id": 15253076, + "username": "Dilrong", + "fullName": "Dilrong", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14721858/medium/8cd6fb50348cf96c64b6355dea86230e.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15253076/medium/2551dedf52ffb347b9ee6baee6080755.jpeg", "preTranslated": 0, - "totalCosts": 17 + "totalCosts": 845 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 17 + "totalCosts": 845 }, "translated": { "tmMatch": 0, - "default": 17, - "total": 17 + "default": 845, + "total": 845 }, "targetTranslated": { "tmMatch": 0, - "default": 15, - "total": 15 + "default": 622, + "total": 622 }, "translatedByMt": { "tmMatch": 0, @@ -6670,8 +6137,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 17, - "total": 17 + "default": 845, + "total": 845 }, "approvalCosts": { "tmMatch": 0, @@ -6683,32 +6150,32 @@ }, { "user": { - "id": 15126243, - "username": "DaphBebo", - "fullName": "DaphBebo", + "id": 15260730, + "username": "doris20150920", + "fullName": "Doris Wu (doris20150920)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15126243/medium/99418f0f50c1a8cd1f4d3c51a920dc2c.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15260730/medium/96675a76eefee4a07ba35a22ddd748b3.png", "preTranslated": 0, - "totalCosts": 335 + "totalCosts": 594 }, "languages": [ { "language": { - "id": "ig", - "name": "Igbo", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 335 + "totalCosts": 594 }, "translated": { - "tmMatch": 0, - "default": 335, - "total": 335 + "tmMatch": 105, + "default": 489, + "total": 594 }, "targetTranslated": { - "tmMatch": 0, - "default": 286, - "total": 286 + "tmMatch": 159, + "default": 737, + "total": 896 }, "translatedByMt": { "tmMatch": 0, @@ -6721,9 +6188,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 335, - "total": 335 + "tmMatch": 105, + "default": 489, + "total": 594 }, "approvalCosts": { "tmMatch": 0, @@ -6735,32 +6202,32 @@ }, { "user": { - "id": 15253076, - "username": "Dilrong", - "fullName": "Dilrong", + "id": 14060128, + "username": "duythanhvn", + "fullName": "Duy–Thanh Doan (duythanhvn)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15253076/medium/2551dedf52ffb347b9ee6baee6080755.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14060128/medium/d60f16a46943b9b08216acf607e86c9d_default.png", "preTranslated": 0, - "totalCosts": 227 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "vi", + "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 227 + "totalCosts": 1 }, "translated": { - "tmMatch": 0, - "default": 227, - "total": 227 + "tmMatch": 1, + "default": 0, + "total": 1 }, "targetTranslated": { - "tmMatch": 0, - "default": 167, - "total": 167 + "tmMatch": 3, + "default": 0, + "total": 3 }, "translatedByMt": { "tmMatch": 0, @@ -6773,9 +6240,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 227, - "total": 227 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -6787,37 +6254,37 @@ }, { "user": { - "id": 15036761, - "username": "Zeus27N", - "fullName": "Dominik (Zeus27N)", + "id": 15273150, + "username": "ETeng", + "fullName": "ETeng", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15036761/medium/333fc68b9a7b6f7753d29ff360fba7e4.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15273150/medium/b78eb19889965be4ab41190badfb07d6.jpeg", "preTranslated": 0, - "totalCosts": 100 + "totalCosts": 69 }, "languages": [ { "language": { - "id": "pl", - "name": "Polish", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 100 + "totalCosts": 69 }, "translated": { "tmMatch": 0, - "default": 100, - "total": 100 + "default": 69, + "total": 69 }, "targetTranslated": { "tmMatch": 0, - "default": 79, - "total": 79 + "default": 113, + "total": 113 }, "translatedByMt": { "tmMatch": 0, - "default": 100, - "total": 100 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -6826,8 +6293,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 100, - "total": 100 + "default": 69, + "total": 69 }, "approvalCosts": { "tmMatch": 0, @@ -6845,7 +6312,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15212248/medium/752344d4d4d83a3dc6115bb278dee2a0.png", "preTranslated": 0, - "totalCosts": 86 + "totalCosts": 977 }, "languages": [ { @@ -6854,17 +6321,17 @@ "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 86 + "totalCosts": 977 }, "translated": { - "tmMatch": 0, - "default": 86, - "total": 86 + "tmMatch": 18, + "default": 959, + "total": 977 }, "targetTranslated": { - "tmMatch": 0, - "default": 74, - "total": 74 + "tmMatch": 23, + "default": 1032, + "total": 1055 }, "translatedByMt": { "tmMatch": 0, @@ -6877,9 +6344,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 86, - "total": 86 + "tmMatch": 18, + "default": 959, + "total": 977 }, "approvalCosts": { "tmMatch": 0, @@ -6897,7 +6364,7 @@ "userRole": "Translator", "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg", "preTranslated": 0, - "totalCosts": 821 + "totalCosts": 4093 }, "languages": [ { @@ -6906,22 +6373,22 @@ "name": "Catalan", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 821 + "totalCosts": 4093 }, "translated": { - "tmMatch": 5, - "default": 816, - "total": 821 + "tmMatch": 116, + "default": 3977, + "total": 4093 }, "targetTranslated": { - "tmMatch": 5, - "default": 819, - "total": 824 + "tmMatch": 133, + "default": 4401, + "total": 4534 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 17, + "default": 7, + "total": 24 }, "approved": { "tmMatch": 0, @@ -6929,9 +6396,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 816, - "total": 821 + "tmMatch": 116, + "default": 3977, + "total": 4093 }, "approvalCosts": { "tmMatch": 0, @@ -6943,32 +6410,32 @@ }, { "user": { - "id": 14814690, - "username": "khodaarahmi", - "fullName": "Ehsan Khodaarahmi (khodaarahmi)", + "id": 15248362, + "username": "exstalis", + "fullName": "Elif Ece (exstalis)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14814690/medium/22dbf1e43823e76cb094bff3fdcca212.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15248362/medium/71ba731d5781f49f70bd26e10d347723.png", "preTranslated": 0, - "totalCosts": 221 + "totalCosts": 51 }, "languages": [ { "language": { - "id": "fa", - "name": "Persian", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 221 + "totalCosts": 51 }, "translated": { - "tmMatch": 9, - "default": 212, - "total": 221 + "tmMatch": 0, + "default": 51, + "total": 51 }, "targetTranslated": { - "tmMatch": 13, - "default": 286, - "total": 299 + "tmMatch": 0, + "default": 35, + "total": 35 }, "translatedByMt": { "tmMatch": 0, @@ -6981,9 +6448,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 212, - "total": 221 + "tmMatch": 0, + "default": 51, + "total": 51 }, "approvalCosts": { "tmMatch": 0, @@ -6995,37 +6462,37 @@ }, { "user": { - "id": 15248362, - "username": "exstalis", - "fullName": "Elif Ece (exstalis)", + "id": 15271666, + "username": "0xEnlighten", + "fullName": "Enlighten (0xEnlighten)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15248362/medium/71ba731d5781f49f70bd26e10d347723.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271666/medium/2dbb403b9438de560657292b93109510.jpeg", "preTranslated": 0, - "totalCosts": 379 + "totalCosts": 133 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "bn", + "name": "Bengali", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 379 + "totalCosts": 133 }, "translated": { - "tmMatch": 4, - "default": 375, - "total": 379 + "tmMatch": 5, + "default": 128, + "total": 133 }, "targetTranslated": { - "tmMatch": 6, - "default": 311, - "total": 317 + "tmMatch": 14, + "default": 235, + "total": 249 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approved": { "tmMatch": 0, @@ -7033,9 +6500,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 375, - "total": 379 + "tmMatch": 5, + "default": 128, + "total": 133 }, "approvalCosts": { "tmMatch": 0, @@ -7047,141 +6514,154 @@ }, { "user": { - "id": 14559932, - "username": "emanu.ti", - "fullName": "Emmanuel de Carvalho Garcia (emanu.ti)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14559932/medium/b031ab210c0b9edc01dcea8f4825f8ad.png", - "preTranslated": 0, - "totalCosts": 52 + "id": 13897487, + "username": "ethdotorg", + "fullName": "Ethereum.org Team (ethdotorg)", + "userRole": "Owner", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13897487/medium/246e50d7e9ccde07088ed892b07a0efd.png", + "preTranslated": 161740, + "totalCosts": 13253 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "sq", + "name": "Albanian", "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 52 + "preTranslate": 1582, + "totalCosts": 26 }, "translated": { - "tmMatch": 8, - "default": 44, - "total": 52 + "tmMatch": 12, + "default": 14, + "total": 26 }, "targetTranslated": { - "tmMatch": 9, - "default": 51, - "total": 60 + "tmMatch": 12, + "default": 11, + "total": 23 }, "translatedByMt": { - "tmMatch": 7, - "default": 35, - "total": 42 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { - "tmMatch": 8, - "default": 44, - "total": 52 + "tmMatch": 12, + "default": 14, + "total": 26 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15240064, - "username": "Aco_olbec2", - "fullName": "Erik Eriksen (Aco_olbec2)", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15240064/medium/d382aa4b49660d6e6dbb3c7e3250652b.jpeg", - "preTranslated": 0, - "totalCosts": 470 - }, - "languages": [ + }, { "language": { - "id": "da", - "name": "Danish", + "id": "am", + "name": "Amharic", "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 470 + "preTranslate": 34, + "totalCosts": 17 }, "translated": { - "tmMatch": 103, - "default": 367, - "total": 470 + "tmMatch": 0, + "default": 17, + "total": 17 }, "targetTranslated": { - "tmMatch": 100, - "default": 340, - "total": 440 + "tmMatch": 0, + "default": 12, + "total": 12 }, "translatedByMt": { - "tmMatch": 3, - "default": 48, - "total": 51 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 1535 + "total": 0 }, "translationCosts": { - "tmMatch": 103, - "default": 367, - "total": 470 + "tmMatch": 0, + "default": 17, + "total": 17 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15063431, - "username": "Oba.ersin", - "fullName": "Ersin Oba (Oba.ersin)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15063431/medium/125969df8cf11b8bd6eb6d28b52350b7.jpeg", - "preTranslated": 0, - "totalCosts": 9 - }, - "languages": [ + }, { "language": { - "id": "de", - "name": "German", + "id": "ar", + "name": "Arabic", + "tmSavings": 0, + "preTranslate": 3297, + "totalCosts": 195 + }, + "translated": { + "tmMatch": 1, + "default": 194, + "total": 195 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 171, + "total": 172 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { + "tmMatch": 0, + "default": 0, + "total": 36 + }, + "translationCosts": { + "tmMatch": 1, + "default": 194, + "total": 195 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "hy-AM", + "name": "Armenian", "tmSavings": 0, - "preTranslate": 0, - "totalCosts": 9 + "preTranslate": 47, + "totalCosts": 42 }, "translated": { "tmMatch": 0, - "default": 9, - "total": 9 + "default": 42, + "total": 42 }, "targetTranslated": { "tmMatch": 0, - "default": 9, - "total": 9 + "default": 40, + "total": 40 }, "translatedByMt": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -7190,34 +6670,21 @@ }, "translationCosts": { "tmMatch": 0, - "default": 9, - "total": 9 + "default": 42, + "total": 42 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 13897487, - "username": "ethdotorg", - "fullName": "Ethereum.org Team (ethdotorg)", - "userRole": "Owner", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13897487/medium/246e50d7e9ccde07088ed892b07a0efd.png", - "preTranslated": 154821, - "totalCosts": 5929 - }, - "languages": [ + }, { "language": { - "id": "sq", - "name": "Albanian", + "id": "az", + "name": "Azerbaijani", "tmSavings": 0, - "preTranslate": 353, + "preTranslate": 76, "totalCosts": 0 }, "translated": { @@ -7253,21 +6720,21 @@ }, { "language": { - "id": "am", - "name": "Amharic", + "id": "eu", + "name": "Basque", "tmSavings": 0, - "preTranslate": 219, - "totalCosts": 0 + "preTranslate": 12, + "totalCosts": 67 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 36, + "default": 31, + "total": 67 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 16, + "default": 21, + "total": 37 }, "translatedByMt": { "tmMatch": 0, @@ -7277,12 +6744,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 36, + "default": 31, + "total": 67 }, "approvalCosts": { "tmMatch": 0, @@ -7292,21 +6759,21 @@ }, { "language": { - "id": "ar", - "name": "Arabic", + "id": "bn", + "name": "Bengali", "tmSavings": 0, - "preTranslate": 1061, - "totalCosts": 1 + "preTranslate": 115, + "totalCosts": 87 }, "translated": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 87, + "total": 87 }, "targetTranslated": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 153, + "total": 153 }, "translatedByMt": { "tmMatch": 0, @@ -7316,12 +6783,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 3 + "total": 32 }, "translationCosts": { "tmMatch": 0, - "default": 1, - "total": 1 + "default": 87, + "total": 87 }, "approvalCosts": { "tmMatch": 0, @@ -7331,10 +6798,10 @@ }, { "language": { - "id": "hy-AM", - "name": "Armenian", + "id": "bi", + "name": "Bislama", "tmSavings": 0, - "preTranslate": 18, + "preTranslate": 6, "totalCosts": 0 }, "translated": { @@ -7370,10 +6837,10 @@ }, { "language": { - "id": "az", - "name": "Azerbaijani", + "id": "br-FR", + "name": "Breton", "tmSavings": 0, - "preTranslate": 265, + "preTranslate": 47, "totalCosts": 0 }, "translated": { @@ -7409,21 +6876,21 @@ }, { "language": { - "id": "eu", - "name": "Basque", + "id": "bg", + "name": "Bulgarian", "tmSavings": 0, - "preTranslate": 47, - "totalCosts": 0 + "preTranslate": 3044, + "totalCosts": 72 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 7, + "default": 65, + "total": 72 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 7, + "default": 52, + "total": 59 }, "translatedByMt": { "tmMatch": 0, @@ -7433,12 +6900,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 24 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 7, + "default": 65, + "total": 72 }, "approvalCosts": { "tmMatch": 0, @@ -7448,21 +6915,21 @@ }, { "language": { - "id": "bn", - "name": "Bengali", + "id": "my", + "name": "Burmese", "tmSavings": 0, - "preTranslate": 295, - "totalCosts": 0 + "preTranslate": 92, + "totalCosts": 89 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 20, + "default": 69, + "total": 89 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 30, + "default": 69, + "total": 99 }, "translatedByMt": { "tmMatch": 0, @@ -7475,9 +6942,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 20, + "default": 69, + "total": 89 }, "approvalCosts": { "tmMatch": 0, @@ -7487,21 +6954,21 @@ }, { "language": { - "id": "bi", - "name": "Bislama", + "id": "ca", + "name": "Catalan", "tmSavings": 0, - "preTranslate": 10, - "totalCosts": 0 + "preTranslate": 3084, + "totalCosts": 917 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 64, + "default": 853, + "total": 917 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 55, + "default": 918, + "total": 973 }, "translatedByMt": { "tmMatch": 0, @@ -7511,12 +6978,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1115 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 64, + "default": 853, + "total": 917 }, "approvalCosts": { "tmMatch": 0, @@ -7526,21 +6993,21 @@ }, { "language": { - "id": "br-FR", - "name": "Breton", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, - "preTranslate": 19, - "totalCosts": 0 + "preTranslate": 6278, + "totalCosts": 125 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 18, + "default": 107, + "total": 125 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 30, + "default": 196, + "total": 226 }, "translatedByMt": { "tmMatch": 0, @@ -7550,12 +7017,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1401 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 18, + "default": 107, + "total": 125 }, "approvalCosts": { "tmMatch": 0, @@ -7565,21 +7032,21 @@ }, { "language": { - "id": "bg", - "name": "Bulgarian", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, - "preTranslate": 1351, - "totalCosts": 0 + "preTranslate": 5832, + "totalCosts": 117 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 94, + "default": 23, + "total": 117 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 145, + "default": 53, + "total": 198 }, "translatedByMt": { "tmMatch": 0, @@ -7589,12 +7056,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 347 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 94, + "default": 23, + "total": 117 }, "approvalCosts": { "tmMatch": 0, @@ -7604,21 +7071,21 @@ }, { "language": { - "id": "my", - "name": "Burmese", + "id": "hr", + "name": "Croatian", "tmSavings": 0, - "preTranslate": 29, - "totalCosts": 0 + "preTranslate": 2599, + "totalCosts": 242 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 25, + "default": 217, + "total": 242 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 29, + "default": 182, + "total": 211 }, "translatedByMt": { "tmMatch": 0, @@ -7628,12 +7095,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 3 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 25, + "default": 217, + "total": 242 }, "approvalCosts": { "tmMatch": 0, @@ -7643,21 +7110,21 @@ }, { "language": { - "id": "ca", - "name": "Catalan", + "id": "cs", + "name": "Czech", "tmSavings": 0, - "preTranslate": 993, - "totalCosts": 0 + "preTranslate": 2667, + "totalCosts": 116 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 26, + "default": 90, + "total": 116 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 29, + "default": 87, + "total": 116 }, "translatedByMt": { "tmMatch": 0, @@ -7667,12 +7134,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 25 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 26, + "default": 90, + "total": 116 }, "approvalCosts": { "tmMatch": 0, @@ -7682,21 +7149,21 @@ }, { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "da", + "name": "Danish", "tmSavings": 0, - "preTranslate": 10368, - "totalCosts": 320 + "preTranslate": 2086, + "totalCosts": 36 }, "translated": { - "tmMatch": 1, - "default": 319, - "total": 320 + "tmMatch": 19, + "default": 17, + "total": 36 }, "targetTranslated": { - "tmMatch": 3, - "default": 520, - "total": 523 + "tmMatch": 19, + "default": 16, + "total": 35 }, "translatedByMt": { "tmMatch": 0, @@ -7706,12 +7173,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 343 + "total": 20 }, "translationCosts": { - "tmMatch": 1, - "default": 319, - "total": 320 + "tmMatch": 19, + "default": 17, + "total": 36 }, "approvalCosts": { "tmMatch": 0, @@ -7721,10 +7188,10 @@ }, { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "fa-AF", + "name": "Dari", "tmSavings": 0, - "preTranslate": 6978, + "preTranslate": 3, "totalCosts": 0 }, "translated": { @@ -7760,21 +7227,21 @@ }, { "language": { - "id": "hr", - "name": "Croatian", + "id": "nl", + "name": "Dutch", "tmSavings": 0, - "preTranslate": 743, - "totalCosts": 0 + "preTranslate": 3182, + "totalCosts": 203 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 27, + "default": 176, + "total": 203 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 28, + "default": 187, + "total": 215 }, "translatedByMt": { "tmMatch": 0, @@ -7784,12 +7251,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 20 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 27, + "default": 176, + "total": 203 }, "approvalCosts": { "tmMatch": 0, @@ -7799,10 +7266,10 @@ }, { "language": { - "id": "cs", - "name": "Czech", + "id": "eo", + "name": "Esperanto", "tmSavings": 0, - "preTranslate": 726, + "preTranslate": 6, "totalCosts": 0 }, "translated": { @@ -7838,10 +7305,10 @@ }, { "language": { - "id": "da", - "name": "Danish", + "id": "et", + "name": "Estonian", "tmSavings": 0, - "preTranslate": 238, + "preTranslate": 18, "totalCosts": 0 }, "translated": { @@ -7877,10 +7344,10 @@ }, { "language": { - "id": "fa-AF", - "name": "Dari", + "id": "fil", + "name": "Filipino", "tmSavings": 0, - "preTranslate": 5, + "preTranslate": 331, "totalCosts": 0 }, "translated": { @@ -7916,21 +7383,21 @@ }, { "language": { - "id": "nl", - "name": "Dutch", + "id": "fi", + "name": "Finnish", "tmSavings": 0, - "preTranslate": 5203, - "totalCosts": 0 + "preTranslate": 1584, + "totalCosts": 134 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 19, + "default": 115, + "total": 134 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 14, + "default": 91, + "total": 105 }, "translatedByMt": { "tmMatch": 0, @@ -7940,12 +7407,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 21 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 19, + "default": 115, + "total": 134 }, "approvalCosts": { "tmMatch": 0, @@ -7955,21 +7422,21 @@ }, { "language": { - "id": "eo", - "name": "Esperanto", + "id": "fr", + "name": "French", "tmSavings": 0, - "preTranslate": 7, - "totalCosts": 0 + "preTranslate": 6298, + "totalCosts": 62 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 60, + "total": 62 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 61, + "total": 63 }, "translatedByMt": { "tmMatch": 0, @@ -7979,12 +7446,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 2348 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 60, + "total": 62 }, "approvalCosts": { "tmMatch": 0, @@ -7994,21 +7461,60 @@ }, { "language": { - "id": "et", - "name": "Estonian", + "id": "gl", + "name": "Galician", "tmSavings": 0, - "preTranslate": 107, - "totalCosts": 0 + "preTranslate": 1893, + "totalCosts": 81 }, "translated": { + "tmMatch": 1, + "default": 80, + "total": 81 + }, + "targetTranslated": { + "tmMatch": 1, + "default": 97, + "total": 98 + }, + "translatedByMt": { "tmMatch": 0, "default": 0, "total": 0 }, - "targetTranslated": { + "approved": { + "tmMatch": 0, + "default": 0, + "total": 36 + }, + "translationCosts": { + "tmMatch": 1, + "default": 80, + "total": 81 + }, + "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 + } + }, + { + "language": { + "id": "ka", + "name": "Georgian", + "tmSavings": 0, + "preTranslate": 296, + "totalCosts": 20 + }, + "translated": { + "tmMatch": 11, + "default": 9, + "total": 20 + }, + "targetTranslated": { + "tmMatch": 7, + "default": 7, + "total": 14 }, "translatedByMt": { "tmMatch": 0, @@ -8021,9 +7527,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 11, + "default": 9, + "total": 20 }, "approvalCosts": { "tmMatch": 0, @@ -8033,21 +7539,21 @@ }, { "language": { - "id": "fil", - "name": "Filipino", + "id": "de", + "name": "German", "tmSavings": 0, - "preTranslate": 136, - "totalCosts": 0 + "preTranslate": 6241, + "totalCosts": 807 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 38, + "default": 769, + "total": 807 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 41, + "default": 746, + "total": 787 }, "translatedByMt": { "tmMatch": 0, @@ -8057,12 +7563,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 331 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 38, + "default": 769, + "total": 807 }, "approvalCosts": { "tmMatch": 0, @@ -8072,10 +7578,10 @@ }, { "language": { - "id": "fi", - "name": "Finnish", + "id": "gi", + "name": "Gilbertese", "tmSavings": 0, - "preTranslate": 429, + "preTranslate": 3, "totalCosts": 0 }, "translated": { @@ -8111,21 +7617,21 @@ }, { "language": { - "id": "fr", - "name": "French", + "id": "el", + "name": "Greek", "tmSavings": 0, - "preTranslate": 10379, - "totalCosts": 482 + "preTranslate": 3528, + "totalCosts": 760 }, "translated": { - "tmMatch": 5, - "default": 477, - "total": 482 + "tmMatch": 17, + "default": 743, + "total": 760 }, "targetTranslated": { - "tmMatch": 7, - "default": 486, - "total": 493 + "tmMatch": 25, + "default": 819, + "total": 844 }, "translatedByMt": { "tmMatch": 0, @@ -8135,12 +7641,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 701 + "total": 20 }, "translationCosts": { - "tmMatch": 5, - "default": 477, - "total": 482 + "tmMatch": 17, + "default": 743, + "total": 760 }, "approvalCosts": { "tmMatch": 0, @@ -8150,10 +7656,10 @@ }, { "language": { - "id": "gl", - "name": "Galician", + "id": "gu-IN", + "name": "Gujarati", "tmSavings": 0, - "preTranslate": 1096, + "preTranslate": 50, "totalCosts": 0 }, "translated": { @@ -8174,7 +7680,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { "tmMatch": 0, @@ -8189,10 +7695,10 @@ }, { "language": { - "id": "ka", - "name": "Georgian", + "id": "ha", + "name": "Hausa", "tmSavings": 0, - "preTranslate": 203, + "preTranslate": 6, "totalCosts": 0 }, "translated": { @@ -8228,21 +7734,21 @@ }, { "language": { - "id": "de", - "name": "German", + "id": "he", + "name": "Hebrew", "tmSavings": 0, - "preTranslate": 10125, - "totalCosts": 617 + "preTranslate": 105, + "totalCosts": 52 }, "translated": { - "tmMatch": 0, - "default": 617, - "total": 617 + "tmMatch": 17, + "default": 35, + "total": 52 }, "targetTranslated": { - "tmMatch": 0, - "default": 567, - "total": 567 + "tmMatch": 12, + "default": 35, + "total": 47 }, "translatedByMt": { "tmMatch": 0, @@ -8252,12 +7758,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1 + "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 617, - "total": 617 + "tmMatch": 17, + "default": 35, + "total": 52 }, "approvalCosts": { "tmMatch": 0, @@ -8267,21 +7773,21 @@ }, { "language": { - "id": "gi", - "name": "Gilbertese", + "id": "hi", + "name": "Hindi", "tmSavings": 0, - "preTranslate": 24, - "totalCosts": 0 + "preTranslate": 3184, + "totalCosts": 175 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 45, + "default": 130, + "total": 175 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 33, + "default": 210, + "total": 243 }, "translatedByMt": { "tmMatch": 0, @@ -8291,12 +7797,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 20 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 45, + "default": 130, + "total": 175 }, "approvalCosts": { "tmMatch": 0, @@ -8306,21 +7812,21 @@ }, { "language": { - "id": "el", - "name": "Greek", + "id": "hu", + "name": "Hungarian", "tmSavings": 0, - "preTranslate": 1758, - "totalCosts": 0 + "preTranslate": 5298, + "totalCosts": 4 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 3, + "default": 1, + "total": 4 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 3, + "default": 1, + "total": 4 }, "translatedByMt": { "tmMatch": 0, @@ -8330,12 +7836,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 20 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 3, + "default": 1, + "total": 4 }, "approvalCosts": { "tmMatch": 0, @@ -8345,21 +7851,21 @@ }, { "language": { - "id": "gu-IN", - "name": "Gujarati", + "id": "ig", + "name": "Igbo", "tmSavings": 0, - "preTranslate": 16, - "totalCosts": 0 + "preTranslate": 252, + "totalCosts": 25 }, "translated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 25, + "total": 25 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 0, + "default": 20, + "total": 20 }, "translatedByMt": { "tmMatch": 0, @@ -8373,8 +7879,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 25, + "total": 25 }, "approvalCosts": { "tmMatch": 0, @@ -8384,21 +7890,21 @@ }, { "language": { - "id": "ha", - "name": "Hausa", + "id": "id", + "name": "Indonesian", "tmSavings": 0, - "preTranslate": 6, - "totalCosts": 0 + "preTranslate": 6239, + "totalCosts": 100 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 4, + "default": 96, + "total": 100 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 4, + "default": 83, + "total": 87 }, "translatedByMt": { "tmMatch": 0, @@ -8408,12 +7914,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 62 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 4, + "default": 96, + "total": 100 }, "approvalCosts": { "tmMatch": 0, @@ -8423,21 +7929,21 @@ }, { "language": { - "id": "he", - "name": "Hebrew", + "id": "it", + "name": "Italian", "tmSavings": 0, - "preTranslate": 211, - "totalCosts": 0 + "preTranslate": 6900, + "totalCosts": 58 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 56, + "total": 58 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 59, + "total": 61 }, "translatedByMt": { "tmMatch": 0, @@ -8447,12 +7953,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 290 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 56, + "total": 58 }, "approvalCosts": { "tmMatch": 0, @@ -8462,21 +7968,21 @@ }, { "language": { - "id": "hi", - "name": "Hindi", + "id": "ja", + "name": "Japanese", "tmSavings": 0, - "preTranslate": 476, - "totalCosts": 0 + "preTranslate": 5969, + "totalCosts": 48 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 47, + "total": 48 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 5, + "default": 54, + "total": 59 }, "translatedByMt": { "tmMatch": 0, @@ -8486,12 +7992,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 48 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 47, + "total": 48 }, "approvalCosts": { "tmMatch": 0, @@ -8501,10 +8007,10 @@ }, { "language": { - "id": "hu", - "name": "Hungarian", + "id": "kn", + "name": "Kannada", "tmSavings": 0, - "preTranslate": 3261, + "preTranslate": 32, "totalCosts": 0 }, "translated": { @@ -8525,7 +8031,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { "tmMatch": 0, @@ -8540,10 +8046,10 @@ }, { "language": { - "id": "ig", - "name": "Igbo", + "id": "kk", + "name": "Kazakh", "tmSavings": 0, - "preTranslate": 77, + "preTranslate": 96, "totalCosts": 0 }, "translated": { @@ -8564,7 +8070,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { "tmMatch": 0, @@ -8579,21 +8085,21 @@ }, { "language": { - "id": "id", - "name": "Indonesian", + "id": "km", + "name": "Khmer", "tmSavings": 0, - "preTranslate": 11040, - "totalCosts": 34 + "preTranslate": 3, + "totalCosts": 0 }, "translated": { - "tmMatch": 1, - "default": 33, - "total": 34 + "tmMatch": 0, + "default": 0, + "total": 0 }, "targetTranslated": { - "tmMatch": 1, - "default": 30, - "total": 31 + "tmMatch": 0, + "default": 0, + "total": 0 }, "translatedByMt": { "tmMatch": 0, @@ -8603,12 +8109,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 24 + "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 33, - "total": 34 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approvalCosts": { "tmMatch": 0, @@ -8618,36 +8124,36 @@ }, { "language": { - "id": "it", - "name": "Italian", + "id": "ko", + "name": "Korean", "tmSavings": 0, - "preTranslate": 10405, - "totalCosts": 500 + "preTranslate": 4197, + "totalCosts": 510 }, "translated": { - "tmMatch": 0, - "default": 500, - "total": 500 + "tmMatch": 44, + "default": 466, + "total": 510 }, "targetTranslated": { - "tmMatch": 0, - "default": 503, - "total": 503 + "tmMatch": 32, + "default": 368, + "total": 400 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 3, "default": 0, - "total": 0 + "total": 3 }, "approved": { "tmMatch": 0, "default": 0, - "total": 555 + "total": 139 }, "translationCosts": { - "tmMatch": 0, - "default": 500, - "total": 500 + "tmMatch": 44, + "default": 466, + "total": 510 }, "approvalCosts": { "tmMatch": 0, @@ -8657,21 +8163,21 @@ }, { "language": { - "id": "ja", - "name": "Japanese", + "id": "ku", + "name": "Kurdish", "tmSavings": 0, - "preTranslate": 6166, - "totalCosts": 1050 + "preTranslate": 17, + "totalCosts": 5 }, "translated": { - "tmMatch": 0, - "default": 1050, - "total": 1050 + "tmMatch": 5, + "default": 0, + "total": 5 }, "targetTranslated": { - "tmMatch": 0, - "default": 2307, - "total": 2307 + "tmMatch": 5, + "default": 0, + "total": 5 }, "translatedByMt": { "tmMatch": 0, @@ -8684,9 +8190,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 1050, - "total": 1050 + "tmMatch": 5, + "default": 0, + "total": 5 }, "approvalCosts": { "tmMatch": 0, @@ -8696,10 +8202,10 @@ }, { "language": { - "id": "kn", - "name": "Kannada", + "id": "ky", + "name": "Kyrgyz", "tmSavings": 0, - "preTranslate": 84, + "preTranslate": 17, "totalCosts": 0 }, "translated": { @@ -8720,7 +8226,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { "tmMatch": 0, @@ -8735,10 +8241,10 @@ }, { "language": { - "id": "kk", - "name": "Kazakh", + "id": "lt", + "name": "Lithuanian", "tmSavings": 0, - "preTranslate": 46, + "preTranslate": 281, "totalCosts": 0 }, "translated": { @@ -8774,21 +8280,21 @@ }, { "language": { - "id": "km", - "name": "Khmer", + "id": "mk", + "name": "Macedonian", "tmSavings": 0, - "preTranslate": 5, - "totalCosts": 0 + "preTranslate": 69, + "totalCosts": 4 }, "translated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 4, + "total": 4 }, "targetTranslated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 5, + "total": 5 }, "translatedByMt": { "tmMatch": 0, @@ -8802,8 +8308,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 4, + "total": 4 }, "approvalCosts": { "tmMatch": 0, @@ -8813,10 +8319,10 @@ }, { "language": { - "id": "ko", - "name": "Korean", + "id": "mai", + "name": "Maithili", "tmSavings": 0, - "preTranslate": 1031, + "preTranslate": 3, "totalCosts": 0 }, "translated": { @@ -8852,21 +8358,21 @@ }, { "language": { - "id": "ku", - "name": "Kurdish", + "id": "ms", + "name": "Malay", "tmSavings": 0, - "preTranslate": 33, - "totalCosts": 0 + "preTranslate": 2816, + "totalCosts": 613 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 9, + "default": 604, + "total": 613 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 9, + "default": 510, + "total": 519 }, "translatedByMt": { "tmMatch": 0, @@ -8876,12 +8382,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 3 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 9, + "default": 604, + "total": 613 }, "approvalCosts": { "tmMatch": 0, @@ -8891,21 +8397,21 @@ }, { "language": { - "id": "ky", - "name": "Kyrgyz", + "id": "ml-IN", + "name": "Malayalam", "tmSavings": 0, - "preTranslate": 31, - "totalCosts": 0 + "preTranslate": 2544, + "totalCosts": 3 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 1, + "total": 3 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 1, + "total": 3 }, "translatedByMt": { "tmMatch": 0, @@ -8915,12 +8421,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 3 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 1, + "total": 3 }, "approvalCosts": { "tmMatch": 0, @@ -8930,21 +8436,21 @@ }, { "language": { - "id": "lt", - "name": "Lithuanian", + "id": "mr", + "name": "Marathi", "tmSavings": 0, - "preTranslate": 390, - "totalCosts": 0 + "preTranslate": 145, + "totalCosts": 34 }, "translated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 34, + "total": 34 }, "targetTranslated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 49, + "total": 49 }, "translatedByMt": { "tmMatch": 0, @@ -8954,12 +8460,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 22 }, "translationCosts": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 34, + "total": 34 }, "approvalCosts": { "tmMatch": 0, @@ -8969,10 +8475,10 @@ }, { "language": { - "id": "mk", - "name": "Macedonian", + "id": "mn", + "name": "Mongolian", "tmSavings": 0, - "preTranslate": 87, + "preTranslate": 6, "totalCosts": 0 }, "translated": { @@ -9008,21 +8514,21 @@ }, { "language": { - "id": "mai", - "name": "Maithili", + "id": "ne-NP", + "name": "Nepali", "tmSavings": 0, - "preTranslate": 5, - "totalCosts": 0 + "preTranslate": 28, + "totalCosts": 50 }, "translated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 50, + "total": 50 }, "targetTranslated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 77, + "total": 77 }, "translatedByMt": { "tmMatch": 0, @@ -9036,8 +8542,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 50, + "total": 50 }, "approvalCosts": { "tmMatch": 0, @@ -9047,21 +8553,21 @@ }, { "language": { - "id": "ms", - "name": "Malay", + "id": "no", + "name": "Norwegian", "tmSavings": 0, - "preTranslate": 227, - "totalCosts": 0 + "preTranslate": 144, + "totalCosts": 20 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 19, + "default": 1, + "total": 20 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 17, + "default": 1, + "total": 18 }, "translatedByMt": { "tmMatch": 0, @@ -9071,12 +8577,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 3 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 19, + "default": 1, + "total": 20 }, "approvalCosts": { "tmMatch": 0, @@ -9086,21 +8592,21 @@ }, { "language": { - "id": "ml-IN", - "name": "Malayalam", + "id": "or", + "name": "Odia", "tmSavings": 0, - "preTranslate": 355, - "totalCosts": 0 + "preTranslate": 166, + "totalCosts": 6 }, "translated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 6, + "total": 6 }, "targetTranslated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 8, + "total": 8 }, "translatedByMt": { "tmMatch": 0, @@ -9110,12 +8616,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 30 }, "translationCosts": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 6, + "total": 6 }, "approvalCosts": { "tmMatch": 0, @@ -9125,21 +8631,21 @@ }, { "language": { - "id": "mr", - "name": "Marathi", + "id": "fa", + "name": "Persian", "tmSavings": 0, - "preTranslate": 47, - "totalCosts": 0 + "preTranslate": 4029, + "totalCosts": 1 }, "translated": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "targetTranslated": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "translatedByMt": { "tmMatch": 0, @@ -9149,12 +8655,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 95 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -9164,21 +8670,21 @@ }, { "language": { - "id": "mn", - "name": "Mongolian", + "id": "pl", + "name": "Polish", "tmSavings": 0, - "preTranslate": 18, - "totalCosts": 0 + "preTranslate": 6565, + "totalCosts": 13 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 12, + "default": 1, + "total": 13 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 13, + "default": 1, + "total": 14 }, "translatedByMt": { "tmMatch": 0, @@ -9188,12 +8694,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 19 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 12, + "default": 1, + "total": 13 }, "approvalCosts": { "tmMatch": 0, @@ -9203,21 +8709,21 @@ }, { "language": { - "id": "ne-NP", - "name": "Nepali", + "id": "pt-PT", + "name": "Portuguese", "tmSavings": 0, - "preTranslate": 56, - "totalCosts": 0 + "preTranslate": 2640, + "totalCosts": 187 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 27, + "default": 160, + "total": 187 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 31, + "default": 158, + "total": 189 }, "translatedByMt": { "tmMatch": 0, @@ -9227,12 +8733,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 20 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 27, + "default": 160, + "total": 187 }, "approvalCosts": { "tmMatch": 0, @@ -9242,21 +8748,21 @@ }, { "language": { - "id": "no", - "name": "Norwegian", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, - "preTranslate": 346, - "totalCosts": 0 + "preTranslate": 7579, + "totalCosts": 799 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 25, + "default": 774, + "total": 799 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 27, + "default": 811, + "total": 838 }, "translatedByMt": { "tmMatch": 0, @@ -9266,12 +8772,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 248 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 25, + "default": 774, + "total": 799 }, "approvalCosts": { "tmMatch": 0, @@ -9281,10 +8787,10 @@ }, { "language": { - "id": "or", - "name": "Odia", + "id": "pa-IN", + "name": "Punjabi", "tmSavings": 0, - "preTranslate": 25, + "preTranslate": 9, "totalCosts": 0 }, "translated": { @@ -9320,21 +8826,21 @@ }, { "language": { - "id": "fa", - "name": "Persian", + "id": "ro", + "name": "Romanian", "tmSavings": 0, - "preTranslate": 5765, - "totalCosts": 180 + "preTranslate": 4209, + "totalCosts": 13 }, "translated": { - "tmMatch": 18, - "default": 162, - "total": 180 + "tmMatch": 2, + "default": 11, + "total": 13 }, "targetTranslated": { - "tmMatch": 18, - "default": 177, - "total": 195 + "tmMatch": 2, + "default": 12, + "total": 14 }, "translatedByMt": { "tmMatch": 0, @@ -9344,12 +8850,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 46 + "total": 167 }, "translationCosts": { - "tmMatch": 18, - "default": 162, - "total": 180 + "tmMatch": 2, + "default": 11, + "total": 13 }, "approvalCosts": { "tmMatch": 0, @@ -9359,21 +8865,21 @@ }, { "language": { - "id": "pl", - "name": "Polish", + "id": "ru", + "name": "Russian", "tmSavings": 0, - "preTranslate": 4021, - "totalCosts": 8 + "preTranslate": 5489, + "totalCosts": 1476 }, "translated": { - "tmMatch": 7, - "default": 1, - "total": 8 + "tmMatch": 83, + "default": 1393, + "total": 1476 }, "targetTranslated": { - "tmMatch": 12, - "default": 2, - "total": 14 + "tmMatch": 65, + "default": 1098, + "total": 1163 }, "translatedByMt": { "tmMatch": 0, @@ -9383,12 +8889,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 90 }, "translationCosts": { - "tmMatch": 7, - "default": 1, - "total": 8 + "tmMatch": 83, + "default": 1393, + "total": 1476 }, "approvalCosts": { "tmMatch": 0, @@ -9398,10 +8904,10 @@ }, { "language": { - "id": "pt-PT", - "name": "Portuguese", + "id": "sat", + "name": "Santali", "tmSavings": 0, - "preTranslate": 223, + "preTranslate": 3, "totalCosts": 0 }, "translated": { @@ -9437,21 +8943,21 @@ }, { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "sr-CS", + "name": "Serbian (Latin)", "tmSavings": 0, - "preTranslate": 8487, - "totalCosts": 439 + "preTranslate": 514, + "totalCosts": 172 }, "translated": { - "tmMatch": 5, - "default": 434, - "total": 439 + "tmMatch": 91, + "default": 81, + "total": 172 }, "targetTranslated": { - "tmMatch": 5, - "default": 440, - "total": 445 + "tmMatch": 75, + "default": 76, + "total": 151 }, "translatedByMt": { "tmMatch": 0, @@ -9461,12 +8967,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 5 + "total": 3 }, "translationCosts": { - "tmMatch": 5, - "default": 434, - "total": 439 + "tmMatch": 91, + "default": 81, + "total": 172 }, "approvalCosts": { "tmMatch": 0, @@ -9476,10 +8982,10 @@ }, { "language": { - "id": "pa-IN", - "name": "Punjabi", + "id": "sn", + "name": "Shona", "tmSavings": 0, - "preTranslate": 27, + "preTranslate": 13, "totalCosts": 0 }, "translated": { @@ -9515,21 +9021,21 @@ }, { "language": { - "id": "ro", - "name": "Romanian", + "id": "si-LK", + "name": "Sinhala", "tmSavings": 0, - "preTranslate": 6617, - "totalCosts": 36 + "preTranslate": 30, + "totalCosts": 0 }, "translated": { "tmMatch": 0, - "default": 36, - "total": 36 + "default": 0, + "total": 0 }, "targetTranslated": { "tmMatch": 0, - "default": 35, - "total": 35 + "default": 0, + "total": 0 }, "translatedByMt": { "tmMatch": 0, @@ -9539,12 +9045,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 8 + "total": 0 }, "translationCosts": { "tmMatch": 0, - "default": 36, - "total": 36 + "default": 0, + "total": 0 }, "approvalCosts": { "tmMatch": 0, @@ -9554,21 +9060,21 @@ }, { "language": { - "id": "ru", - "name": "Russian", + "id": "sk", + "name": "Slovak", "tmSavings": 0, - "preTranslate": 6138, - "totalCosts": 6 + "preTranslate": 2163, + "totalCosts": 195 }, "translated": { - "tmMatch": 1, - "default": 5, - "total": 6 + "tmMatch": 2, + "default": 193, + "total": 195 }, "targetTranslated": { - "tmMatch": 1, - "default": 3, - "total": 4 + "tmMatch": 2, + "default": 160, + "total": 162 }, "translatedByMt": { "tmMatch": 0, @@ -9578,12 +9084,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 1 + "total": 3 }, - "translationCosts": { - "tmMatch": 1, - "default": 5, - "total": 6 + "translationCosts": { + "tmMatch": 2, + "default": 193, + "total": 195 }, "approvalCosts": { "tmMatch": 0, @@ -9593,21 +9099,21 @@ }, { "language": { - "id": "sat", - "name": "Santali", + "id": "sl", + "name": "Slovenian", "tmSavings": 0, - "preTranslate": 5, - "totalCosts": 0 + "preTranslate": 5244, + "totalCosts": 2947 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 52, + "default": 2895, + "total": 2947 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 55, + "default": 2621, + "total": 2676 }, "translatedByMt": { "tmMatch": 0, @@ -9617,12 +9123,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 37 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 52, + "default": 2895, + "total": 2947 }, "approvalCosts": { "tmMatch": 0, @@ -9632,21 +9138,21 @@ }, { "language": { - "id": "sr-CS", - "name": "Serbian (Latin)", + "id": "so", + "name": "Somali", "tmSavings": 0, - "preTranslate": 460, - "totalCosts": 0 + "preTranslate": 27, + "totalCosts": 4 }, "translated": { - "tmMatch": 0, + "tmMatch": 4, "default": 0, - "total": 0 + "total": 4 }, "targetTranslated": { - "tmMatch": 0, + "tmMatch": 4, "default": 0, - "total": 0 + "total": 4 }, "translatedByMt": { "tmMatch": 0, @@ -9659,9 +9165,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 4, "default": 0, - "total": 0 + "total": 4 }, "approvalCosts": { "tmMatch": 0, @@ -9671,21 +9177,21 @@ }, { "language": { - "id": "sn", - "name": "Shona", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, - "preTranslate": 136, - "totalCosts": 0 + "preTranslate": 7366, + "totalCosts": 75 }, "translated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 75, + "total": 75 }, "targetTranslated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 79, + "total": 79 }, "translatedByMt": { "tmMatch": 0, @@ -9695,12 +9201,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 161 }, "translationCosts": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 75, + "total": 75 }, "approvalCosts": { "tmMatch": 0, @@ -9710,21 +9216,21 @@ }, { "language": { - "id": "si-LK", - "name": "Sinhala", + "id": "sw", + "name": "Swahili", "tmSavings": 0, - "preTranslate": 15, - "totalCosts": 0 + "preTranslate": 2746, + "totalCosts": 332 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 19, + "default": 313, + "total": 332 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 20, + "default": 303, + "total": 323 }, "translatedByMt": { "tmMatch": 0, @@ -9734,12 +9240,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 196 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 19, + "default": 313, + "total": 332 }, "approvalCosts": { "tmMatch": 0, @@ -9749,21 +9255,21 @@ }, { "language": { - "id": "sk", - "name": "Slovak", + "id": "sv-SE", + "name": "Swedish", "tmSavings": 0, - "preTranslate": 338, - "totalCosts": 0 + "preTranslate": 1456, + "totalCosts": 48 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 28, + "default": 20, + "total": 48 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 27, + "default": 17, + "total": 44 }, "translatedByMt": { "tmMatch": 0, @@ -9773,12 +9279,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 3 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 28, + "default": 20, + "total": 48 }, "approvalCosts": { "tmMatch": 0, @@ -9788,10 +9294,10 @@ }, { "language": { - "id": "sl", - "name": "Slovenian", + "id": "tl", + "name": "Tagalog", "tmSavings": 0, - "preTranslate": 3280, + "preTranslate": 49, "totalCosts": 0 }, "translated": { @@ -9827,10 +9333,10 @@ }, { "language": { - "id": "so", - "name": "Somali", + "id": "tg", + "name": "Tajik", "tmSavings": 0, - "preTranslate": 103, + "preTranslate": 11, "totalCosts": 0 }, "translated": { @@ -9851,7 +9357,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 2 }, "translationCosts": { "tmMatch": 0, @@ -9866,21 +9372,21 @@ }, { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "ta", + "name": "Tamil", "tmSavings": 0, - "preTranslate": 10747, - "totalCosts": 643 + "preTranslate": 95, + "totalCosts": 47 }, "translated": { - "tmMatch": 34, - "default": 609, - "total": 643 + "tmMatch": 0, + "default": 47, + "total": 47 }, "targetTranslated": { - "tmMatch": 36, - "default": 621, - "total": 657 + "tmMatch": 0, + "default": 93, + "total": 93 }, "translatedByMt": { "tmMatch": 0, @@ -9893,9 +9399,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 34, - "default": 609, - "total": 643 + "tmMatch": 0, + "default": 47, + "total": 47 }, "approvalCosts": { "tmMatch": 0, @@ -9905,10 +9411,10 @@ }, { "language": { - "id": "sw", - "name": "Swahili", + "id": "te", + "name": "Telugu", "tmSavings": 0, - "preTranslate": 375, + "preTranslate": 40, "totalCosts": 0 }, "translated": { @@ -9929,7 +9435,7 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { "tmMatch": 0, @@ -9944,21 +9450,21 @@ }, { "language": { - "id": "sv-SE", - "name": "Swedish", + "id": "th", + "name": "Thai", "tmSavings": 0, - "preTranslate": 444, - "totalCosts": 0 + "preTranslate": 1898, + "totalCosts": 85 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 83, + "total": 85 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 21, + "total": 23 }, "translatedByMt": { "tmMatch": 0, @@ -9968,12 +9474,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 36 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 83, + "total": 85 }, "approvalCosts": { "tmMatch": 0, @@ -9983,21 +9489,21 @@ }, { "language": { - "id": "tg", - "name": "Tajik", + "id": "tr", + "name": "Turkish", "tmSavings": 0, - "preTranslate": 30, - "totalCosts": 0 + "preTranslate": 6331, + "totalCosts": 19 }, "translated": { - "tmMatch": 0, + "tmMatch": 19, "default": 0, - "total": 0 + "total": 19 }, "targetTranslated": { - "tmMatch": 0, + "tmMatch": 13, "default": 0, - "total": 0 + "total": 13 }, "translatedByMt": { "tmMatch": 0, @@ -10007,12 +9513,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 95 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 19, "default": 0, - "total": 0 + "total": 19 }, "approvalCosts": { "tmMatch": 0, @@ -10022,21 +9528,21 @@ }, { "language": { - "id": "ta", - "name": "Tamil", + "id": "uk", + "name": "Ukrainian", "tmSavings": 0, - "preTranslate": 94, - "totalCosts": 0 + "preTranslate": 5944, + "totalCosts": 469 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 3, + "default": 466, + "total": 469 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 4, + "default": 373, + "total": 377 }, "translatedByMt": { "tmMatch": 0, @@ -10046,12 +9552,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 32 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 3, + "default": 466, + "total": 469 }, "approvalCosts": { "tmMatch": 0, @@ -10061,10 +9567,10 @@ }, { "language": { - "id": "te", - "name": "Telugu", + "id": "ur-IN", + "name": "Urdu (India)", "tmSavings": 0, - "preTranslate": 136, + "preTranslate": 6, "totalCosts": 0 }, "translated": { @@ -10100,21 +9606,21 @@ }, { "language": { - "id": "th", - "name": "Thai", + "id": "ur-PK", + "name": "Urdu (Pakistan)", "tmSavings": 0, - "preTranslate": 302, - "totalCosts": 0 + "preTranslate": 49, + "totalCosts": 70 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 69, + "total": 70 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 2, + "default": 92, + "total": 94 }, "translatedByMt": { "tmMatch": 0, @@ -10127,9 +9633,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 69, + "total": 70 }, "approvalCosts": { "tmMatch": 0, @@ -10139,21 +9645,21 @@ }, { "language": { - "id": "tr", - "name": "Turkish", + "id": "uz", + "name": "Uzbek", "tmSavings": 0, - "preTranslate": 10172, - "totalCosts": 486 + "preTranslate": 1354, + "totalCosts": 84 }, "translated": { - "tmMatch": 9, - "default": 477, - "total": 486 + "tmMatch": 20, + "default": 64, + "total": 84 }, "targetTranslated": { - "tmMatch": 13, - "default": 356, - "total": 369 + "tmMatch": 17, + "default": 61, + "total": 78 }, "translatedByMt": { "tmMatch": 0, @@ -10163,12 +9669,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1 }, "translationCosts": { - "tmMatch": 9, - "default": 477, - "total": 486 + "tmMatch": 20, + "default": 64, + "total": 84 }, "approvalCosts": { "tmMatch": 0, @@ -10178,21 +9684,21 @@ }, { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "vi", + "name": "Vietnamese", "tmSavings": 0, - "preTranslate": 7655, - "totalCosts": 1118 + "preTranslate": 2992, + "totalCosts": 278 }, "translated": { - "tmMatch": 17, - "default": 1101, - "total": 1118 + "tmMatch": 30, + "default": 248, + "total": 278 }, "targetTranslated": { - "tmMatch": 13, - "default": 957, - "total": 970 + "tmMatch": 29, + "default": 329, + "total": 358 }, "translatedByMt": { "tmMatch": 0, @@ -10202,12 +9708,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 13 + "total": 50 }, "translationCosts": { - "tmMatch": 17, - "default": 1101, - "total": 1118 + "tmMatch": 30, + "default": 248, + "total": 278 }, "approvalCosts": { "tmMatch": 0, @@ -10217,21 +9723,21 @@ }, { "language": { - "id": "ur-IN", - "name": "Urdu (India)", + "id": "yo", + "name": "Yoruba", "tmSavings": 0, - "preTranslate": 5, - "totalCosts": 0 + "preTranslate": 37, + "totalCosts": 17 }, "translated": { - "tmMatch": 0, + "tmMatch": 17, "default": 0, - "total": 0 + "total": 17 }, "targetTranslated": { - "tmMatch": 0, + "tmMatch": 13, "default": 0, - "total": 0 + "total": 13 }, "translatedByMt": { "tmMatch": 0, @@ -10244,9 +9750,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 17, "default": 0, - "total": 0 + "total": 17 }, "approvalCosts": { "tmMatch": 0, @@ -10256,10 +9762,10 @@ }, { "language": { - "id": "ur-PK", - "name": "Urdu (Pakistan)", + "id": "zu", + "name": "Zulu", "tmSavings": 0, - "preTranslate": 129, + "preTranslate": 4, "totalCosts": 0 }, "translated": { @@ -10292,24 +9798,37 @@ "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15225340, + "username": "gabriellassh", + "fullName": "Gabriella S (gabriellassh)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15225340/medium/d0d1a9a2072c5985dcdf413ad6f38986_default.png", + "preTranslated": 0, + "totalCosts": 9 + }, + "languages": [ { "language": { - "id": "uz", - "name": "Uzbek", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, - "preTranslate": 502, - "totalCosts": 0 + "preTranslate": 0, + "totalCosts": 9 }, "translated": { - "tmMatch": 0, + "tmMatch": 9, "default": 0, - "total": 0 + "total": 9 }, "targetTranslated": { - "tmMatch": 0, + "tmMatch": 10, "default": 0, - "total": 0 + "total": 10 }, "translatedByMt": { "tmMatch": 0, @@ -10322,33 +9841,46 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 9, "default": 0, - "total": 0 + "total": 9 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15275976, + "username": "gianluca.sch93", + "fullName": "Gianluca Schettino (gianluca.sch93)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15275976/medium/e0670bcf3b5cf22456eac2aef44bce96.png", + "preTranslated": 0, + "totalCosts": 16 + }, + "languages": [ { "language": { - "id": "vi", - "name": "Vietnamese", + "id": "it", + "name": "Italian", "tmSavings": 0, - "preTranslate": 882, - "totalCosts": 9 + "preTranslate": 0, + "totalCosts": 16 }, "translated": { - "tmMatch": 3, - "default": 6, - "total": 9 + "tmMatch": 0, + "default": 16, + "total": 16 }, "targetTranslated": { - "tmMatch": 3, - "default": 7, - "total": 10 + "tmMatch": 0, + "default": 19, + "total": 19 }, "translatedByMt": { "tmMatch": 0, @@ -10358,36 +9890,49 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 9 + "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 6, - "total": 9 + "tmMatch": 0, + "default": 16, + "total": 16 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15272300, + "username": "godilizarov", + "fullName": "Godik Ilizarov (godilizarov)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15272300/medium/4b2d036e4fe081b8a451354bce4765d9.jpeg", + "preTranslated": 0, + "totalCosts": 12 + }, + "languages": [ { "language": { - "id": "yo", - "name": "Yoruba", + "id": "ru", + "name": "Russian", "tmSavings": 0, - "preTranslate": 40, - "totalCosts": 0 + "preTranslate": 0, + "totalCosts": 12 }, "translated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 12, + "total": 12 }, "targetTranslated": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 10, + "total": 10 }, "translatedByMt": { "tmMatch": 0, @@ -10401,32 +9946,45 @@ }, "translationCosts": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 12, + "total": 12 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 13872277, + "username": "grammyleung", + "fullName": "Grammy Leung (grammyleung)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13872277/medium/770e08e8db0b5af13a9ff1b46c6bd529.jpeg", + "preTranslated": 0, + "totalCosts": 2576 + }, + "languages": [ { "language": { - "id": "zu", - "name": "Zulu", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, - "preTranslate": 64, - "totalCosts": 0 + "preTranslate": 0, + "totalCosts": 2576 }, "translated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 128, + "default": 2448, + "total": 2576 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 216, + "default": 3780, + "total": 3996 }, "translatedByMt": { "tmMatch": 0, @@ -10439,9 +9997,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 128, + "default": 2448, + "total": 2576 }, "approvalCosts": { "tmMatch": 0, @@ -10453,32 +10011,32 @@ }, { "user": { - "id": 15246194, - "username": "Evelyn0x", - "fullName": "Evelyn (Evelyn0x)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246194/medium/0b113055865c18ed324554f966dc09f1.jpeg", + "id": 15219098, + "username": "Aco_GRW", + "fullName": "Grischa Raoul Wenzeler (Aco_GRW)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219098/medium/67ba870ab68dd3e2838d3af325783379.jpg", "preTranslated": 0, - "totalCosts": 328 + "totalCosts": 5592 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 328 + "totalCosts": 5592 }, "translated": { - "tmMatch": 3, - "default": 325, - "total": 328 + "tmMatch": 1836, + "default": 3756, + "total": 5592 }, "targetTranslated": { - "tmMatch": 3, - "default": 252, - "total": 255 + "tmMatch": 1800, + "default": 3626, + "total": 5426 }, "translatedByMt": { "tmMatch": 0, @@ -10488,12 +10046,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 9109 }, "translationCosts": { - "tmMatch": 3, - "default": 325, - "total": 328 + "tmMatch": 1836, + "default": 3756, + "total": 5592 }, "approvalCosts": { "tmMatch": 0, @@ -10505,32 +10063,32 @@ }, { "user": { - "id": 15218932, - "username": "fardiansyahlaodecr7", - "fullName": "Fardiansyah Laode (fardiansyahlaodecr7)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218932/medium/948c961db46840e1b9ecc5e97d4012e2.jpeg", + "id": 15250968, + "username": "Aco_g_lonegro", + "fullName": "Gustavo Lonegro (Aco_g_lonegro)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250968/medium/fe66daa0393af122ae758d1cf2b0738d_default.png", "preTranslated": 0, - "totalCosts": 8 + "totalCosts": 6860 }, "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 8 + "totalCosts": 6860 }, "translated": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 2222, + "default": 4638, + "total": 6860 }, "targetTranslated": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 2741, + "default": 5499, + "total": 8240 }, "translatedByMt": { "tmMatch": 0, @@ -10540,12 +10098,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 7826 }, "translationCosts": { - "tmMatch": 0, - "default": 8, - "total": 8 + "tmMatch": 2222, + "default": 4638, + "total": 6860 }, "approvalCosts": { "tmMatch": 0, @@ -10557,37 +10115,37 @@ }, { "user": { - "id": 15181418, - "username": "flockchain", - "fullName": "Felix (flockchain)", + "id": 15278140, + "username": "iguidre1", + "fullName": "HAMI SAID (iguidre1)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15181418/medium/f80cb1c08c29018a1e9dbd93fa5ff510.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15278140/medium/25d59650f590c85f56f2b8cd84d60296.png", "preTranslated": 0, - "totalCosts": 873 + "totalCosts": 983 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 873 + "totalCosts": 983 }, "translated": { - "tmMatch": 6, - "default": 867, - "total": 873 + "tmMatch": 34, + "default": 949, + "total": 983 }, "targetTranslated": { - "tmMatch": 6, - "default": 876, - "total": 882 + "tmMatch": 33, + "default": 884, + "total": 917 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 7, + "default": 173, + "total": 180 }, "approved": { "tmMatch": 0, @@ -10595,9 +10153,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 867, - "total": 873 + "tmMatch": 34, + "default": 949, + "total": 983 }, "approvalCosts": { "tmMatch": 0, @@ -10609,37 +10167,37 @@ }, { "user": { - "id": 15225340, - "username": "gabriellassh", - "fullName": "Gabriella S (gabriellassh)", + "id": 15248870, + "username": "helloheesu", + "fullName": "Heesu Jung (helloheesu)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15225340/medium/d0d1a9a2072c5985dcdf413ad6f38986_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15248870/medium/3d6bd5145d328511ffe769c3d714f2b3.png", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 1264 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 1264 }, "translated": { - "tmMatch": 0, - "default": 3, - "total": 3 + "tmMatch": 326, + "default": 938, + "total": 1264 }, "targetTranslated": { - "tmMatch": 0, - "default": 3, - "total": 3 + "tmMatch": 248, + "default": 641, + "total": 889 }, "translatedByMt": { "tmMatch": 0, - "default": 3, - "total": 3 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -10647,9 +10205,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 3, - "total": 3 + "tmMatch": 326, + "default": 938, + "total": 1264 }, "approvalCosts": { "tmMatch": 0, @@ -10661,37 +10219,37 @@ }, { "user": { - "id": 15204834, - "username": "garynoh", - "fullName": "Gary Noh (garynoh)", + "id": 15208868, + "username": "HiroyukiNaito", + "fullName": "Hiroyuki Naito (HiroyukiNaito)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15204834/medium/0304cee8365bb93afe443205051970e9.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/7d6ee41dfe3c55a049b59bbd47e19b2a.jpeg", "preTranslated": 0, - "totalCosts": 4724 + "totalCosts": 6347 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4724 + "totalCosts": 6347 }, "translated": { - "tmMatch": 64, - "default": 4660, - "total": 4724 + "tmMatch": 215, + "default": 6132, + "total": 6347 }, "targetTranslated": { - "tmMatch": 54, - "default": 3289, - "total": 3343 + "tmMatch": 623, + "default": 16340, + "total": 16963 }, "translatedByMt": { - "tmMatch": 7, - "default": 10, - "total": 17 + "tmMatch": 27, + "default": 1777, + "total": 1804 }, "approved": { "tmMatch": 0, @@ -10699,9 +10257,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 64, - "default": 4660, - "total": 4724 + "tmMatch": 215, + "default": 6132, + "total": 6347 }, "approvalCosts": { "tmMatch": 0, @@ -10713,32 +10271,32 @@ }, { "user": { - "id": 15224914, - "username": "legendarek", - "fullName": "Gawron (legendarek)", + "id": 14987717, + "username": "honeycv1993", + "fullName": "Honey1993 CV (honeycv1993)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15224914/medium/f834d6656654aa33f1b17f0b273e2ddc.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14987717/medium/44926f698e072cbf75df2a5ae5909b63.png", "preTranslated": 0, - "totalCosts": 16 + "totalCosts": 4 }, "languages": [ { "language": { - "id": "pl", - "name": "Polish", + "id": "my", + "name": "Burmese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 16 + "totalCosts": 4 }, "translated": { - "tmMatch": 3, - "default": 13, - "total": 16 + "tmMatch": 0, + "default": 4, + "total": 4 }, "targetTranslated": { - "tmMatch": 4, - "default": 13, - "total": 17 + "tmMatch": 0, + "default": 6, + "total": 6 }, "translatedByMt": { "tmMatch": 0, @@ -10751,9 +10309,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 13, - "total": 16 + "tmMatch": 0, + "default": 4, + "total": 4 }, "approvalCosts": { "tmMatch": 0, @@ -10765,37 +10323,37 @@ }, { "user": { - "id": 15252348, - "username": "ggraciosomanuel", - "fullName": "Gracioso Manuel (ggraciosomanuel)", + "id": 15100235, + "username": "Mon.", + "fullName": "Isaak Mon Zapata (Mon.)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15252348/medium/163e88444b6ba73135dba5753e1e9878.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15100235/medium/c571e5e4bd338b50cba12bca3ff2dd03.jpeg", "preTranslated": 0, - "totalCosts": 73 + "totalCosts": 314 }, "languages": [ { "language": { - "id": "pt-PT", - "name": "Portuguese", + "id": "fil", + "name": "Filipino", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 71 + "totalCosts": 314 }, "translated": { - "tmMatch": 8, - "default": 63, - "total": 71 + "tmMatch": 53, + "default": 261, + "total": 314 }, "targetTranslated": { - "tmMatch": 8, - "default": 74, - "total": 82 + "tmMatch": 60, + "default": 299, + "total": 359 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 21, + "default": 1, + "total": 22 }, "approved": { "tmMatch": 0, @@ -10803,33 +10361,46 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 63, - "total": 71 + "tmMatch": 53, + "default": 261, + "total": 314 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15281580, + "username": "guzmanjasona29", + "fullName": "JASON A GUZMAN (guzmanjasona29)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15281580/medium/b76836d1cbedc0f9a84c99f7ebb8cdd1.png", + "preTranslated": 0, + "totalCosts": 20 + }, + "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "sq", + "name": "Albanian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 20 }, "translated": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 0, + "default": 20, + "total": 20 }, "targetTranslated": { - "tmMatch": 3, + "tmMatch": 0, "default": 0, - "total": 3 + "total": 0 }, "translatedByMt": { "tmMatch": 0, @@ -10842,9 +10413,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 0, + "default": 20, + "total": 20 }, "approvalCosts": { "tmMatch": 0, @@ -10856,32 +10427,32 @@ }, { "user": { - "id": 15219098, - "username": "Aco_GRW", - "fullName": "Grischa Raoul Wenzeler (Aco_GRW)", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219098/medium/67ba870ab68dd3e2838d3af325783379.jpg", + "id": 15292656, + "username": "Jayendra", + "fullName": "Jayendra More (Jayendra)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15292656/medium/2583a9ef6b494a33b005f0ccf835b3e3.png", "preTranslated": 0, - "totalCosts": 6566 + "totalCosts": 1058 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "hi", + "name": "Hindi", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6566 + "totalCosts": 1058 }, "translated": { - "tmMatch": 232, - "default": 6334, - "total": 6566 + "tmMatch": 3, + "default": 1055, + "total": 1058 }, "targetTranslated": { - "tmMatch": 271, - "default": 6539, - "total": 6810 + "tmMatch": 4, + "default": 1875, + "total": 1879 }, "translatedByMt": { "tmMatch": 0, @@ -10891,12 +10462,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 6934 + "total": 0 }, "translationCosts": { - "tmMatch": 232, - "default": 6334, - "total": 6566 + "tmMatch": 3, + "default": 1055, + "total": 1058 }, "approvalCosts": { "tmMatch": 0, @@ -10908,37 +10479,37 @@ }, { "user": { - "id": 15247752, - "username": "18349693112mingdong", - "fullName": "Gus (18349693112mingdong)", + "id": 15279202, + "username": "jennyzibell", + "fullName": "Jenn Zibell (jennyzibell)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247752/medium/6040b92390942af3589d4671ae199975.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279202/medium/d835ae7ea15891ae6f81acef1fe0c011.jpeg", "preTranslated": 0, - "totalCosts": 801 + "totalCosts": 3 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 801 + "totalCosts": 3 }, "translated": { - "tmMatch": 89, - "default": 712, - "total": 801 + "tmMatch": 0, + "default": 3, + "total": 3 }, "targetTranslated": { - "tmMatch": 185, - "default": 1414, - "total": 1599 + "tmMatch": 0, + "default": 1, + "total": 1 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 3, + "total": 3 }, "approved": { "tmMatch": 0, @@ -10946,9 +10517,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 89, - "default": 712, - "total": 801 + "tmMatch": 0, + "default": 3, + "total": 3 }, "approvalCosts": { "tmMatch": 0, @@ -10960,37 +10531,37 @@ }, { "user": { - "id": 15216626, - "username": "harborchai", - "fullName": "Harbor Chai (harborchai)", + "id": 15271576, + "username": "jesusramirez131200", + "fullName": "Jesus Ramirez (jesusramirez131200)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15216626/medium/ede840b0367ddaba0a7bf05c7f3477d1_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271576/medium/b9b407f7c24fd9a02243395f597d0068.png", "preTranslated": 0, - "totalCosts": 775 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 775 + "totalCosts": 1 }, "translated": { - "tmMatch": 214, - "default": 561, - "total": 775 + "tmMatch": 1, + "default": 0, + "total": 1 }, "targetTranslated": { - "tmMatch": 338, - "default": 895, - "total": 1233 + "tmMatch": 1, + "default": 0, + "total": 1 }, "translatedByMt": { "tmMatch": 0, - "default": 87, - "total": 87 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -10998,9 +10569,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 214, - "default": 561, - "total": 775 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -11012,37 +10583,37 @@ }, { "user": { - "id": 15219478, - "username": "heartbreaker0", - "fullName": "Heart_Breaker0 (heartbreaker0)", + "id": 15061909, + "username": "lealp22", + "fullName": "Jesús (lealp22)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219478/medium/88848b1ea6df792d8a81fc41995bff1a.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15061909/medium/418c844e1b58b7da484f33f1fb1eaaae.jpeg", "preTranslated": 0, - "totalCosts": 2 + "totalCosts": 287 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 287 }, "translated": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 17, + "default": 270, + "total": 287 }, "targetTranslated": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 21, + "default": 308, + "total": 329 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 53, + "total": 53 }, "approved": { "tmMatch": 0, @@ -11050,9 +10621,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 17, + "default": 270, + "total": 287 }, "approvalCosts": { "tmMatch": 0, @@ -11064,37 +10635,37 @@ }, { "user": { - "id": 15248870, - "username": "helloheesu", - "fullName": "Heesu Jung (helloheesu)", + "id": 15123193, + "username": "Coram_Deo", + "fullName": "Jonas Neubert (Coram_Deo)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15248870/medium/3d6bd5145d328511ffe769c3d714f2b3.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg", "preTranslated": 0, - "totalCosts": 507 + "totalCosts": 3897 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 507 + "totalCosts": 3897 }, "translated": { - "tmMatch": 68, - "default": 439, - "total": 507 + "tmMatch": 185, + "default": 3712, + "total": 3897 }, "targetTranslated": { - "tmMatch": 50, - "default": 310, - "total": 360 + "tmMatch": 172, + "default": 3648, + "total": 3820 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 8, + "default": 41, + "total": 49 }, "approved": { "tmMatch": 0, @@ -11102,9 +10673,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 68, - "default": 439, - "total": 507 + "tmMatch": 185, + "default": 3712, + "total": 3897 }, "approvalCosts": { "tmMatch": 0, @@ -11116,32 +10687,32 @@ }, { "user": { - "id": 15251854, - "username": "hippoho328", - "fullName": "Hippoho328 (hippoho328)", + "id": 14686148, + "username": "NotAkih", + "fullName": "João (NotAkih)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15251854/medium/39e556aa8b3d0ae336aff10f90cb6b49.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686148/medium/747848066fb776ce21c9d26ec934daa4.jpg", "preTranslated": 0, - "totalCosts": 1541 + "totalCosts": 32 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1541 + "totalCosts": 32 }, "translated": { - "tmMatch": 14, - "default": 1527, - "total": 1541 + "tmMatch": 8, + "default": 24, + "total": 32 }, "targetTranslated": { - "tmMatch": 33, - "default": 2588, - "total": 2621 + "tmMatch": 8, + "default": 26, + "total": 34 }, "translatedByMt": { "tmMatch": 0, @@ -11154,9 +10725,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 14, - "default": 1527, - "total": 1541 + "tmMatch": 8, + "default": 24, + "total": 32 }, "approvalCosts": { "tmMatch": 0, @@ -11168,37 +10739,37 @@ }, { "user": { - "id": 15208868, - "username": "HiroyukiNaito", - "fullName": "Hiroyuki Naito (HiroyukiNaito)", + "id": 14996861, + "username": "kaanmetu", + "fullName": "Ka2n (kaanmetu)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/7d6ee41dfe3c55a049b59bbd47e19b2a.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg", "preTranslated": 0, - "totalCosts": 3605 + "totalCosts": 5493 }, "languages": [ { "language": { - "id": "ja", - "name": "Japanese", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3605 + "totalCosts": 5493 }, "translated": { - "tmMatch": 82, - "default": 3523, - "total": 3605 + "tmMatch": 27, + "default": 5466, + "total": 5493 }, "targetTranslated": { - "tmMatch": 206, - "default": 9471, - "total": 9677 + "tmMatch": 21, + "default": 4331, + "total": 4352 }, "translatedByMt": { - "tmMatch": 25, - "default": 1206, - "total": 1231 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -11206,9 +10777,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 82, - "default": 3523, - "total": 3605 + "tmMatch": 27, + "default": 5466, + "total": 5493 }, "approvalCosts": { "tmMatch": 0, @@ -11220,37 +10791,37 @@ }, { "user": { - "id": 15084373, - "username": "tarcanhursit", - "fullName": "Hursit Tarcan (tarcanhursit)", + "id": 14824866, + "username": "Kidrobot", + "fullName": "Kadir Ozmen (Kidrobot)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14824866/medium/d9facd000e85e1be46f8d8f667b6f4d7.jpeg", "preTranslated": 0, - "totalCosts": 8966 + "totalCosts": 198 }, "languages": [ { "language": { - "id": "nl", - "name": "Dutch", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 8966 + "totalCosts": 198 }, "translated": { - "tmMatch": 396, - "default": 8570, - "total": 8966 + "tmMatch": 180, + "default": 18, + "total": 198 }, "targetTranslated": { - "tmMatch": 386, - "default": 8769, - "total": 9155 + "tmMatch": 160, + "default": 18, + "total": 178 }, "translatedByMt": { - "tmMatch": 47, - "default": 1495, - "total": 1542 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -11258,9 +10829,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 396, - "default": 8570, - "total": 8966 + "tmMatch": 180, + "default": 18, + "total": 198 }, "approvalCosts": { "tmMatch": 0, @@ -11272,37 +10843,37 @@ }, { "user": { - "id": 14716790, - "username": "eltociear", - "fullName": "Ikko Ashimine (eltociear)", + "id": 14075861, + "username": "Kler", + "fullName": "Kler", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14716790/medium/2a40c64a5e3555f500bdab209b50b767.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14075861/medium/a3cf69cc209acc2c520607aab4d1c615.jpeg", "preTranslated": 0, - "totalCosts": 48 + "totalCosts": 11378 }, "languages": [ { "language": { - "id": "ja", - "name": "Japanese", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 48 + "totalCosts": 11378 }, "translated": { - "tmMatch": 0, - "default": 48, - "total": 48 + "tmMatch": 451, + "default": 10927, + "total": 11378 }, "targetTranslated": { - "tmMatch": 0, - "default": 121, - "total": 121 + "tmMatch": 520, + "default": 11780, + "total": 12300 }, "translatedByMt": { "tmMatch": 0, - "default": 33, - "total": 33 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -11310,9 +10881,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 48, - "total": 48 + "tmMatch": 451, + "default": 10927, + "total": 11378 }, "approvalCosts": { "tmMatch": 0, @@ -11324,37 +10895,37 @@ }, { "user": { - "id": 15158630, - "username": "breakthewall", - "fullName": "Joan Hérisson (breakthewall)", + "id": 15284354, + "username": "hackerfollower", + "fullName": "Lang Liu (hackerfollower)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15158630/medium/b9a6bb842fd3c52dc0834af7a67522f5.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284354/medium/e4f19dd54c37569ecf884aeeb57776aa.png", "preTranslated": 0, - "totalCosts": 819 + "totalCosts": 22 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 819 + "totalCosts": 22 }, "translated": { - "tmMatch": 170, - "default": 649, - "total": 819 + "tmMatch": 1, + "default": 21, + "total": 22 }, "targetTranslated": { - "tmMatch": 213, - "default": 784, - "total": 997 + "tmMatch": 1, + "default": 37, + "total": 38 }, "translatedByMt": { - "tmMatch": 4, - "default": 96, - "total": 100 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approved": { "tmMatch": 0, @@ -11362,9 +10933,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 170, - "default": 649, - "total": 819 + "tmMatch": 1, + "default": 21, + "total": 22 }, "approvalCosts": { "tmMatch": 0, @@ -11376,47 +10947,47 @@ }, { "user": { - "id": 15123193, - "username": "Coram_Deo", - "fullName": "Jonas Neubert (Coram_Deo)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg", + "id": 15226228, + "username": "Aco_LaurenceBotta", + "fullName": "Laurence Botta (Aco_LaurenceBotta)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226228/medium/620129605a41865ae98a2c37492732ee_default.png", "preTranslated": 0, - "totalCosts": 1572 + "totalCosts": 10581 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1572 + "totalCosts": 10581 }, "translated": { - "tmMatch": 40, - "default": 1532, - "total": 1572 + "tmMatch": 789, + "default": 9792, + "total": 10581 }, "targetTranslated": { - "tmMatch": 46, - "default": 1520, - "total": 1566 + "tmMatch": 891, + "default": 10500, + "total": 11391 }, "translatedByMt": { - "tmMatch": 10, - "default": 4, - "total": 14 + "tmMatch": 4, + "default": 173, + "total": 177 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 21664 }, "translationCosts": { - "tmMatch": 40, - "default": 1532, - "total": 1572 + "tmMatch": 789, + "default": 9792, + "total": 10581 }, "approvalCosts": { "tmMatch": 0, @@ -11428,32 +10999,32 @@ }, { "user": { - "id": 15224384, - "username": "mezaj4486", - "fullName": "Jose Meza (mezaj4486)", + "id": 15197398, + "username": "LorenzoB.", + "fullName": "Lorenzo (LorenzoB.)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15224384/medium/a2a78d9a9f74c8e5a5c47cd503aa557d.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15197398/medium/7c96fb46dcaefaf32d920ae9525f6805.png", "preTranslated": 0, - "totalCosts": 8 + "totalCosts": 15 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "it", + "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 8 + "totalCosts": 15 }, "translated": { - "tmMatch": 0, + "tmMatch": 7, "default": 8, - "total": 8 + "total": 15 }, "targetTranslated": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 9, + "default": 7, + "total": 16 }, "translatedByMt": { "tmMatch": 0, @@ -11466,9 +11037,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, + "tmMatch": 7, "default": 8, - "total": 8 + "total": 15 }, "approvalCosts": { "tmMatch": 0, @@ -11480,37 +11051,37 @@ }, { "user": { - "id": 15237912, - "username": "jmontanholi", - "fullName": "João Montanholi (jmontanholi)", + "id": 14241142, + "username": "LudiZHANG", + "fullName": "Ludi (LudiZHANG)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15237912/medium/57ba37fabf85691003181b0eec197893.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14241142/medium/7018d7959237cd0b1356ac97198316f9.jpg", "preTranslated": 0, - "totalCosts": 35 + "totalCosts": 79 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "id", + "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 35 + "totalCosts": 79 }, "translated": { - "tmMatch": 4, - "default": 31, - "total": 35 + "tmMatch": 62, + "default": 17, + "total": 79 }, "targetTranslated": { - "tmMatch": 5, - "default": 36, - "total": 41 + "tmMatch": 55, + "default": 18, + "total": 73 }, "translatedByMt": { - "tmMatch": 2, - "default": 23, - "total": 25 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -11518,9 +11089,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 31, - "total": 35 + "tmMatch": 62, + "default": 17, + "total": 79 }, "approvalCosts": { "tmMatch": 0, @@ -11532,32 +11103,32 @@ }, { "user": { - "id": 15191278, - "username": "julioenrique19", - "fullName": "Julio Enrique Santana Lora (julioenrique19)", + "id": 15171588, + "username": "lukasdauer123", + "fullName": "Lukas (lukasdauer123)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15191278/medium/93a3b7e041a6ed6bb7f72586f223ebd8.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15171588/medium/25b66b84a7f6b0bc03911d55925ef698.jpeg", "preTranslated": 0, - "totalCosts": 39 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 39 + "totalCosts": 2 }, "translated": { - "tmMatch": 0, - "default": 39, - "total": 39 + "tmMatch": 2, + "default": 0, + "total": 2 }, "targetTranslated": { - "tmMatch": 0, - "default": 37, - "total": 37 + "tmMatch": 2, + "default": 0, + "total": 2 }, "translatedByMt": { "tmMatch": 0, @@ -11570,9 +11141,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 39, - "total": 39 + "tmMatch": 2, + "default": 0, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -11584,32 +11155,32 @@ }, { "user": { - "id": 15244518, - "username": "saeysconstructions", - "fullName": "K S (saeysconstructions)", + "id": 15284350, + "username": "Hypnotised1", + "fullName": "Lxx (Hypnotised1)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15244518/medium/def4037ba35e37d83f4bae39e1e1702d.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284350/medium/7e5038628d89d1d42819cb7903d9c506.jpeg", "preTranslated": 0, - "totalCosts": 30 + "totalCosts": 73 }, "languages": [ { "language": { - "id": "nl", - "name": "Dutch", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 30 + "totalCosts": 73 }, "translated": { - "tmMatch": 6, - "default": 24, - "total": 30 + "tmMatch": 0, + "default": 73, + "total": 73 }, "targetTranslated": { - "tmMatch": 6, - "default": 25, - "total": 31 + "tmMatch": 0, + "default": 103, + "total": 103 }, "translatedByMt": { "tmMatch": 0, @@ -11622,9 +11193,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 24, - "total": 30 + "tmMatch": 0, + "default": 73, + "total": 73 }, "approvalCosts": { "tmMatch": 0, @@ -11636,37 +11207,37 @@ }, { "user": { - "id": 15240392, - "username": "kaioPoentes", - "fullName": "Kaio alves (kaioPoentes)", + "id": 15265170, + "username": "MAX0R", + "fullName": "MAX0R", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15240392/medium/bb269e410561d6b5854bcd5a0a61b358.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15265170/medium/47a18ed83811d83174baa9b8967de784.png", "preTranslated": 0, - "totalCosts": 34 + "totalCosts": 25 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 34 + "totalCosts": 25 }, "translated": { - "tmMatch": 3, - "default": 31, - "total": 34 + "tmMatch": 1, + "default": 24, + "total": 25 }, "targetTranslated": { - "tmMatch": 4, - "default": 38, - "total": 42 + "tmMatch": 1, + "default": 21, + "total": 22 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 24, + "total": 25 }, "approved": { "tmMatch": 0, @@ -11674,9 +11245,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 31, - "total": 34 + "tmMatch": 1, + "default": 24, + "total": 25 }, "approvalCosts": { "tmMatch": 0, @@ -11688,32 +11259,32 @@ }, { "user": { - "id": 13802841, - "username": "KataGulyas", - "fullName": "Kata Gulyás (KataGulyas)", + "id": 14614482, + "username": "mahaabdulkaream6", + "fullName": "Maha Abdulkaream Mohammad Sharaf (mahaabdulkaream6)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13802841/medium/cad3f7bd4c023f840c5dbd67ca5e5968.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14614482/medium/2924b19545858930417955677a5ceb23_default.png", "preTranslated": 0, - "totalCosts": 149 + "totalCosts": 123 }, "languages": [ { "language": { - "id": "hu", - "name": "Hungarian", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 149 + "totalCosts": 123 }, "translated": { - "tmMatch": 10, - "default": 139, - "total": 149 + "tmMatch": 9, + "default": 114, + "total": 123 }, "targetTranslated": { - "tmMatch": 12, - "default": 120, - "total": 132 + "tmMatch": 9, + "default": 104, + "total": 113 }, "translatedByMt": { "tmMatch": 0, @@ -11726,9 +11297,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 10, - "default": 139, - "total": 149 + "tmMatch": 9, + "default": 114, + "total": 123 }, "approvalCosts": { "tmMatch": 0, @@ -11740,37 +11311,37 @@ }, { "user": { - "id": 12812474, - "username": "kbicer", - "fullName": "Koray Biçer (kbicer)", + "id": 12844463, + "username": "MATsxm", + "fullName": "Marc Antoine Thevenet (MATsxm)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12812474/medium/28fe05c35787ab3a7ab58bb8492d2ff1.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg", "preTranslated": 0, - "totalCosts": 48 + "totalCosts": 1957 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 48 + "totalCosts": 1957 }, "translated": { - "tmMatch": 7, - "default": 41, - "total": 48 + "tmMatch": 129, + "default": 1828, + "total": 1957 }, "targetTranslated": { - "tmMatch": 6, - "default": 33, - "total": 39 + "tmMatch": 172, + "default": 2262, + "total": 2434 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 5, + "default": 181, + "total": 186 }, "approved": { "tmMatch": 0, @@ -11778,9 +11349,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, - "default": 41, - "total": 48 + "tmMatch": 129, + "default": 1828, + "total": 1957 }, "approvalCosts": { "tmMatch": 0, @@ -11792,37 +11363,37 @@ }, { "user": { - "id": 15139020, - "username": "Nanya", - "fullName": "Krysanova Anastasiya (Nanya)", + "id": 14763374, + "username": "elmarceloc", + "fullName": "Marcelo Cornejo (elmarceloc)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15139020/medium/4030fc0c50208a46eae46443cbbff8fa.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14763374/medium/25a8ac3837c276bc3a9e89b158668552.png", "preTranslated": 0, - "totalCosts": 534 + "totalCosts": 105 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 534 + "totalCosts": 105 }, "translated": { - "tmMatch": 3, - "default": 531, - "total": 534 + "tmMatch": 0, + "default": 105, + "total": 105 }, "targetTranslated": { - "tmMatch": 2, - "default": 476, - "total": 478 + "tmMatch": 0, + "default": 123, + "total": 123 }, "translatedByMt": { - "tmMatch": 3, - "default": 8, - "total": 11 + "tmMatch": 0, + "default": 54, + "total": 54 }, "approved": { "tmMatch": 0, @@ -11830,9 +11401,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 531, - "total": 534 + "tmMatch": 0, + "default": 105, + "total": 105 }, "approvalCosts": { "tmMatch": 0, @@ -11844,37 +11415,37 @@ }, { "user": { - "id": 15216734, - "username": "fyopsaw", - "fullName": "Long Qian (fyopsaw)", + "id": 14830936, + "username": "margarida1", + "fullName": "Margarida Oliveira (margarida1)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15216734/medium/e49f120f40c21dfa86768b440ec69320.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14830936/medium/ce4e671c4bc5e0ff85786892d6a8b96d_default.png", "preTranslated": 0, - "totalCosts": 27 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "pt-PT", + "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 14 + "totalCosts": 1 }, "translated": { "tmMatch": 0, - "default": 14, - "total": 14 + "default": 1, + "total": 1 }, "targetTranslated": { "tmMatch": 0, - "default": 21, - "total": 21 + "default": 1, + "total": 1 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 1, + "total": 1 }, "approved": { "tmMatch": 0, @@ -11883,37 +11454,50 @@ }, "translationCosts": { "tmMatch": 0, - "default": 14, - "total": 14 + "default": 1, + "total": 1 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15221742, + "username": "Marlonfernandes7", + "fullName": "Marlon fernandes dos Santos (Marlonfernandes7)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221742/medium/54e5adfe14e974d37dd5fb25bde84a77.png", + "preTranslated": 0, + "totalCosts": 149 + }, + "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 13 + "totalCosts": 149 }, "translated": { - "tmMatch": 0, - "default": 13, - "total": 13 + "tmMatch": 106, + "default": 43, + "total": 149 }, "targetTranslated": { - "tmMatch": 0, - "default": 20, - "total": 20 + "tmMatch": 114, + "default": 43, + "total": 157 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 43, + "total": 43 }, "approved": { "tmMatch": 0, @@ -11921,9 +11505,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 13, - "total": 13 + "tmMatch": 106, + "default": 43, + "total": 149 }, "approvalCosts": { "tmMatch": 0, @@ -11935,32 +11519,32 @@ }, { "user": { - "id": 15197398, - "username": "LorenzoB.", - "fullName": "Lorenzo (LorenzoB.)", + "id": 15272464, + "username": "martim442007", + "fullName": "Martim Martins (martim442007)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15197398/medium/7c96fb46dcaefaf32d920ae9525f6805.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15272464/medium/82593576826f3192f46d8e8ac259e394_default.png", "preTranslated": 0, - "totalCosts": 126 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "pt-PT", + "name": "Portuguese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 126 + "totalCosts": 2 }, "translated": { - "tmMatch": 6, - "default": 120, - "total": 126 + "tmMatch": 2, + "default": 0, + "total": 2 }, "targetTranslated": { - "tmMatch": 6, - "default": 131, - "total": 137 + "tmMatch": 2, + "default": 0, + "total": 2 }, "translatedByMt": { "tmMatch": 0, @@ -11973,9 +11557,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 120, - "total": 126 + "tmMatch": 2, + "default": 0, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -11987,32 +11571,32 @@ }, { "user": { - "id": 15239368, - "username": "duban.loic.65", - "fullName": "Loïc Duban (duban.loic.65)", + "id": 15284846, + "username": "mattbovo", + "fullName": "Matteo Bovolenta (mattbovo)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15239368/medium/28cc63e6d7571ecd4ac43be1323cc1d6.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284846/medium/0355a6ed121a19ed8b9fe8029c4c3894.jpeg", "preTranslated": 0, - "totalCosts": 9 + "totalCosts": 322 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "it", + "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 9 + "totalCosts": 322 }, "translated": { "tmMatch": 0, - "default": 9, - "total": 9 + "default": 322, + "total": 322 }, "targetTranslated": { "tmMatch": 0, - "default": 16, - "total": 16 + "default": 338, + "total": 338 }, "translatedByMt": { "tmMatch": 0, @@ -12026,8 +11610,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 9, - "total": 9 + "default": 322, + "total": 322 }, "approvalCosts": { "tmMatch": 0, @@ -12039,13 +11623,13 @@ }, { "user": { - "id": 15222794, - "username": "whitetreexiao", - "fullName": "Luke Xiao (whitetreexiao)", + "id": 15219198, + "username": "Mesu_Devastator", + "fullName": "Mesu Devastator (Mesu_Devastator)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15222794/medium/a04f263853876fcf088dfdfcda823105.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219198/medium/b9c40b38edb09fb7578fa333ed14ea69_default.png", "preTranslated": 0, - "totalCosts": 2 + "totalCosts": 218 }, "languages": [ { @@ -12054,17 +11638,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 18 }, "translated": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 0, + "default": 18, + "total": 18 }, "targetTranslated": { - "tmMatch": 4, - "default": 0, - "total": 4 + "tmMatch": 0, + "default": 42, + "total": 42 }, "translatedByMt": { "tmMatch": 0, @@ -12077,46 +11661,33 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 0, + "default": 18, + "total": 18 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15194310, - "username": "MGETH", - "fullName": "MGETH", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/ef0cb84e0b5a24f8e4b018f12cb5ded9.png", - "preTranslated": 0, - "totalCosts": 181 - }, - "languages": [ + }, { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "eo", + "name": "Esperanto", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 181 + "totalCosts": 200 }, "translated": { - "tmMatch": 28, - "default": 153, - "total": 181 + "tmMatch": 0, + "default": 200, + "total": 200 }, "targetTranslated": { - "tmMatch": 40, - "default": 168, - "total": 208 + "tmMatch": 0, + "default": 181, + "total": 181 }, "translatedByMt": { "tmMatch": 0, @@ -12129,9 +11700,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 28, - "default": 153, - "total": 181 + "tmMatch": 0, + "default": 200, + "total": 200 }, "approvalCosts": { "tmMatch": 0, @@ -12143,37 +11714,37 @@ }, { "user": { - "id": 14675712, - "username": "LEMIBANDDEXARI", - "fullName": "MIBAND (LEMIBANDDEXARI)", + "id": 14113969, + "username": "mbiesiad", + "fullName": "Michal (mbiesiad)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14675712/medium/3416b6f2cac5da2e70205556774c847e.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14113969/medium/5ac8b6a9f35466498ebb47b6c43e43df.jpeg", "preTranslated": 0, - "totalCosts": 80 + "totalCosts": 3 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 80 + "totalCosts": 3 }, "translated": { "tmMatch": 0, - "default": 80, - "total": 80 + "default": 3, + "total": 3 }, "targetTranslated": { "tmMatch": 0, - "default": 83, - "total": 83 + "default": 3, + "total": 3 }, "translatedByMt": { "tmMatch": 0, - "default": 60, - "total": 60 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -12182,8 +11753,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 80, - "total": 80 + "default": 3, + "total": 3 }, "approvalCosts": { "tmMatch": 0, @@ -12195,37 +11766,37 @@ }, { "user": { - "id": 12844463, - "username": "MATsxm", - "fullName": "Marc Antoine Thevenet (MATsxm)", + "id": 15258416, + "username": "MichealBay", + "fullName": "Micheal Bay (MichealBay)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15258416/medium/11b17996080e1b0fb9165039516383ea.jpeg", "preTranslated": 0, - "totalCosts": 19338 + "totalCosts": 83 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "mn", + "name": "Mongolian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 19338 + "totalCosts": 83 }, "translated": { - "tmMatch": 1121, - "default": 18217, - "total": 19338 + "tmMatch": 3, + "default": 80, + "total": 83 }, "targetTranslated": { - "tmMatch": 1244, - "default": 19682, - "total": 20926 + "tmMatch": 2, + "default": 88, + "total": 90 }, "translatedByMt": { - "tmMatch": 26, - "default": 3121, - "total": 3147 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approved": { "tmMatch": 0, @@ -12233,9 +11804,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1121, - "default": 18217, - "total": 19338 + "tmMatch": 3, + "default": 80, + "total": 83 }, "approvalCosts": { "tmMatch": 0, @@ -12247,37 +11818,37 @@ }, { "user": { - "id": 14830936, - "username": "margarida1", - "fullName": "Margarida Oliveira (margarida1)", + "id": 15250398, + "username": "Miracle.eth", + "fullName": "Miracle- (Miracle.eth)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14830936/medium/ce4e671c4bc5e0ff85786892d6a8b96d_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250398/medium/71b815b554ec265a755f27263123cec9.jpg", "preTranslated": 0, - "totalCosts": 44 + "totalCosts": 16 }, "languages": [ { "language": { - "id": "pt-PT", - "name": "Portuguese", + "id": "th", + "name": "Thai", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 44 + "totalCosts": 16 }, "translated": { - "tmMatch": 6, - "default": 38, - "total": 44 + "tmMatch": 8, + "default": 8, + "total": 16 }, "targetTranslated": { - "tmMatch": 7, - "default": 43, - "total": 50 + "tmMatch": 6, + "default": 5, + "total": 11 }, "translatedByMt": { - "tmMatch": 2, - "default": 8, - "total": 10 + "tmMatch": 7, + "default": 2, + "total": 9 }, "approved": { "tmMatch": 0, @@ -12285,9 +11856,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 38, - "total": 44 + "tmMatch": 8, + "default": 8, + "total": 16 }, "approvalCosts": { "tmMatch": 0, @@ -12299,32 +11870,32 @@ }, { "user": { - "id": 15221742, - "username": "Marlonfernandes7", - "fullName": "Marlon fernandes dos Santos (Marlonfernandes7)", + "id": 14708760, + "username": "hypebeans", + "fullName": "Muumi (ミュウミ) (hypebeans)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221742/medium/54e5adfe14e974d37dd5fb25bde84a77.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/f039dc85a8469b65d9e3e2413f9c4710.png", "preTranslated": 0, - "totalCosts": 248 + "totalCosts": 246 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "id", + "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 248 + "totalCosts": 246 }, "translated": { - "tmMatch": 4, - "default": 244, - "total": 248 + "tmMatch": 0, + "default": 246, + "total": 246 }, "targetTranslated": { - "tmMatch": 5, - "default": 270, - "total": 275 + "tmMatch": 0, + "default": 232, + "total": 232 }, "translatedByMt": { "tmMatch": 0, @@ -12337,9 +11908,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 4, - "default": 244, - "total": 248 + "tmMatch": 0, + "default": 246, + "total": 246 }, "approvalCosts": { "tmMatch": 0, @@ -12351,37 +11922,37 @@ }, { "user": { - "id": 15126051, - "username": "rosymitch", - "fullName": "Mary M (rosymitch)", + "id": 18711, + "username": "NCAA", + "fullName": "NCAA", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15126051/medium/5ca1e188035a53b0edc93ca6d9f42b73_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/18711/medium/238db0b2ab4e727190e951c803b045b2_default.png", "preTranslated": 0, - "totalCosts": 299 + "totalCosts": 223 }, "languages": [ { "language": { - "id": "fil", - "name": "Filipino", + "id": "da", + "name": "Danish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 195 + "totalCosts": 223 }, "translated": { - "tmMatch": 11, - "default": 184, - "total": 195 + "tmMatch": 0, + "default": 223, + "total": 223 }, "targetTranslated": { - "tmMatch": 15, - "default": 235, - "total": 250 + "tmMatch": 0, + "default": 206, + "total": 206 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 2, + "total": 2 }, "approved": { "tmMatch": 0, @@ -12389,38 +11960,51 @@ "total": 0 }, "translationCosts": { - "tmMatch": 11, - "default": 184, - "total": 195 + "tmMatch": 0, + "default": 223, + "total": 223 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - }, + } + ] + }, + { + "user": { + "id": 15275810, + "username": "sakamotomasayuki7", + "fullName": "NICKEL (sakamotomasayuki7)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15275810/medium/3af3394e8787b462699f2e56425983a1.jpeg", + "preTranslated": 0, + "totalCosts": 3689 + }, + "languages": [ { "language": { - "id": "tl", - "name": "Tagalog", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 104 + "totalCosts": 3689 }, "translated": { - "tmMatch": 3, - "default": 101, - "total": 104 + "tmMatch": 30, + "default": 3659, + "total": 3689 }, "targetTranslated": { - "tmMatch": 2, - "default": 118, - "total": 120 + "tmMatch": 77, + "default": 8994, + "total": 9071 }, "translatedByMt": { - "tmMatch": 2, - "default": 0, - "total": 2 + "tmMatch": 24, + "default": 1083, + "total": 1107 }, "approved": { "tmMatch": 0, @@ -12428,9 +12012,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 101, - "total": 104 + "tmMatch": 30, + "default": 3659, + "total": 3689 }, "approvalCosts": { "tmMatch": 0, @@ -12442,37 +12026,37 @@ }, { "user": { - "id": 14935043, - "username": "Cryptotranslator34", - "fullName": "Mauricio Streicher (Cryptotranslator34)", + "id": 15279334, + "username": "ngothanhnhan054", + "fullName": "Ngo Thanh Nhan (ngothanhnhan054)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14935043/medium/7a0c6527dd41d0221a3ef016afac09df.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279334/medium/c6320a57c6db97421ac89c902332c946.png", "preTranslated": 0, - "totalCosts": 237 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "vi", + "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 237 + "totalCosts": 1 }, "translated": { - "tmMatch": 142, - "default": 95, - "total": 237 + "tmMatch": 1, + "default": 0, + "total": 1 }, "targetTranslated": { - "tmMatch": 166, - "default": 117, - "total": 283 + "tmMatch": 2, + "default": 0, + "total": 2 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approved": { "tmMatch": 0, @@ -12480,9 +12064,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 142, - "default": 95, - "total": 237 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -12494,37 +12078,37 @@ }, { "user": { - "id": 15230264, - "username": "mehmetemingulsen", - "fullName": "Mehmet Emin Gülşen (mehmetemingulsen)", + "id": 15257040, + "username": "nuchanucha", + "fullName": "Nich Nicha (nuchanucha)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15230264/medium/4381f55f6c1ceef000376a23a5297994.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15257040/medium/48b0570ec23b49d3ea9d940b9af853bb.JPG", "preTranslated": 0, - "totalCosts": 243 + "totalCosts": 3931 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "th", + "name": "Thai", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 243 + "totalCosts": 3931 }, "translated": { - "tmMatch": 0, - "default": 243, - "total": 243 + "tmMatch": 119, + "default": 3812, + "total": 3931 }, "targetTranslated": { - "tmMatch": 0, - "default": 173, - "total": 173 + "tmMatch": 45, + "default": 1043, + "total": 1088 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 1, + "default": 8, + "total": 9 }, "approved": { "tmMatch": 0, @@ -12532,9 +12116,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 243, - "total": 243 + "tmMatch": 119, + "default": 3812, + "total": 3931 }, "approvalCosts": { "tmMatch": 0, @@ -12546,37 +12130,37 @@ }, { "user": { - "id": 14727044, - "username": "MetehanOzyurek", - "fullName": "Metehan Özyürek (MetehanOzyurek)", + "id": 14838604, + "username": "lieolik", + "fullName": "Olga Shablykina (lieolik)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14727044/medium/185fcf0359203eb8d719570e8cf23646.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14838604/medium/5efefdeaddfaef83a920a9d228b46686_default.png", "preTranslated": 0, "totalCosts": 7 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, "totalCosts": 7 }, "translated": { - "tmMatch": 1, - "default": 6, + "tmMatch": 0, + "default": 7, "total": 7 }, "targetTranslated": { - "tmMatch": 1, + "tmMatch": 0, "default": 5, - "total": 6 + "total": 5 }, "translatedByMt": { - "tmMatch": 1, + "tmMatch": 0, "default": 0, - "total": 1 + "total": 0 }, "approved": { "tmMatch": 0, @@ -12584,8 +12168,8 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 6, + "tmMatch": 0, + "default": 7, "total": 7 }, "approvalCosts": { @@ -12598,32 +12182,32 @@ }, { "user": { - "id": 14113969, - "username": "mbiesiad", - "fullName": "Michal (mbiesiad)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14113969/medium/5ac8b6a9f35466498ebb47b6c43e43df.jpeg", + "id": 15267250, + "username": "Aco_Pguigou", + "fullName": "Pascal Guigou (Aco_Pguigou)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15267250/medium/fb27646e054fc4cb95b6664b9a54f6a5_default.png", "preTranslated": 0, - "totalCosts": 4 + "totalCosts": 1376 }, "languages": [ { "language": { - "id": "pl", - "name": "Polish", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 1376 }, "translated": { - "tmMatch": 4, - "default": 0, - "total": 4 + "tmMatch": 403, + "default": 973, + "total": 1376 }, "targetTranslated": { - "tmMatch": 4, - "default": 0, - "total": 4 + "tmMatch": 468, + "default": 1082, + "total": 1550 }, "translatedByMt": { "tmMatch": 0, @@ -12633,12 +12217,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 3715 }, "translationCosts": { - "tmMatch": 4, - "default": 0, - "total": 4 + "tmMatch": 403, + "default": 973, + "total": 1376 }, "approvalCosts": { "tmMatch": 0, @@ -12650,32 +12234,32 @@ }, { "user": { - "id": 12974801, - "username": "Ebedami", - "fullName": "Michal “Bedami” Bedáň (Ebedami)", + "id": 17361, + "username": "plamarque", + "fullName": "Patrice Lamarque (plamarque)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12974801/medium/b596dea5c09454c4c828eac558389755.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/0f07d051c549498672744272c10c255c_default.png", "preTranslated": 0, - "totalCosts": 14 + "totalCosts": 1150 }, "languages": [ { "language": { - "id": "cs", - "name": "Czech", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 14 + "totalCosts": 1150 }, "translated": { - "tmMatch": 3, - "default": 11, - "total": 14 + "tmMatch": 72, + "default": 1078, + "total": 1150 }, "targetTranslated": { - "tmMatch": 4, - "default": 12, - "total": 16 + "tmMatch": 84, + "default": 1101, + "total": 1185 }, "translatedByMt": { "tmMatch": 0, @@ -12688,9 +12272,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 11, - "total": 14 + "tmMatch": 72, + "default": 1078, + "total": 1150 }, "approvalCosts": { "tmMatch": 0, @@ -12702,37 +12286,37 @@ }, { "user": { - "id": 14708760, - "username": "hypebeans", - "fullName": "Muumi (ミュウミ) (hypebeans)", + "id": 15252750, + "username": "macias.pawel", + "fullName": "Paweł Macias (macias.pawel)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/f039dc85a8469b65d9e3e2413f9c4710.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15252750/medium/ff4d18e744739f3da32c8fb115f92a16.png", "preTranslated": 0, - "totalCosts": 837 + "totalCosts": 740 }, "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "pl", + "name": "Polish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 837 + "totalCosts": 740 }, "translated": { - "tmMatch": 14, - "default": 823, - "total": 837 + "tmMatch": 0, + "default": 740, + "total": 740 }, "targetTranslated": { - "tmMatch": 14, - "default": 790, - "total": 804 + "tmMatch": 0, + "default": 667, + "total": 667 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 46, + "total": 46 }, "approved": { "tmMatch": 0, @@ -12740,9 +12324,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 14, - "default": 823, - "total": 837 + "tmMatch": 0, + "default": 740, + "total": 740 }, "approvalCosts": { "tmMatch": 0, @@ -12754,37 +12338,37 @@ }, { "user": { - "id": 18711, - "username": "NCAA", - "fullName": "NCAA", + "id": 14977831, + "username": "PeterKecman", + "fullName": "Peter Škoda Kecman (PeterKecman)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/18711/medium/238db0b2ab4e727190e951c803b045b2_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14977831/medium/e1e3f150ce524a6cb88fccb8b4f52422.png", "preTranslated": 0, - "totalCosts": 34 + "totalCosts": 221 }, "languages": [ { "language": { - "id": "da", - "name": "Danish", + "id": "sl", + "name": "Slovenian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 34 + "totalCosts": 221 }, "translated": { - "tmMatch": 6, - "default": 28, - "total": 34 + "tmMatch": 15, + "default": 206, + "total": 221 }, "targetTranslated": { - "tmMatch": 5, - "default": 24, - "total": 29 + "tmMatch": 19, + "default": 175, + "total": 194 }, "translatedByMt": { - "tmMatch": 4, - "default": 3, - "total": 7 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -12792,9 +12376,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 28, - "total": 34 + "tmMatch": 15, + "default": 206, + "total": 221 }, "approvalCosts": { "tmMatch": 0, @@ -12806,37 +12390,37 @@ }, { "user": { - "id": 15158762, - "username": "natsumegu", - "fullName": "Natsumegu (natsumegu)", + "id": 14665128, + "username": "Pierlu_be", + "fullName": "Pierluigi Belpassi (Pierlu_be)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15158762/medium/4f48b79bc8be6936d8490726acec96f5.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14665128/medium/5fdea361fcd2c73a52533056e2709694_default.png", "preTranslated": 0, - "totalCosts": 7 + "totalCosts": 152 }, "languages": [ { "language": { - "id": "ms", - "name": "Malay", + "id": "it", + "name": "Italian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 7 + "totalCosts": 152 }, "translated": { - "tmMatch": 0, - "default": 7, - "total": 7 + "tmMatch": 9, + "default": 143, + "total": 152 }, "targetTranslated": { - "tmMatch": 0, - "default": 7, - "total": 7 + "tmMatch": 10, + "default": 183, + "total": 193 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 3, "default": 0, - "total": 0 + "total": 3 }, "approved": { "tmMatch": 0, @@ -12844,9 +12428,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 7, - "total": 7 + "tmMatch": 9, + "default": 143, + "total": 152 }, "approvalCosts": { "tmMatch": 0, @@ -12858,37 +12442,37 @@ }, { "user": { - "id": 15228152, - "username": "neographer", - "fullName": "Neographer (neographer)", + "id": 15226202, + "username": "pilvijo", + "fullName": "Pilvi Jo (pilvijo)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15228152/medium/af1afc32e07ba524f5156b3992ed4f38.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226202/medium/cd81b82010fd5aa6e5f3a24187554136.png", "preTranslated": 0, - "totalCosts": 102 + "totalCosts": 3096 }, "languages": [ { "language": { - "id": "ml-IN", - "name": "Malayalam", + "id": "fi", + "name": "Finnish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 102 + "totalCosts": 3096 }, "translated": { - "tmMatch": 7, - "default": 95, - "total": 102 + "tmMatch": 59, + "default": 3037, + "total": 3096 }, "targetTranslated": { - "tmMatch": 16, - "default": 154, - "total": 170 + "tmMatch": 63, + "default": 2331, + "total": 2394 }, "translatedByMt": { - "tmMatch": 7, - "default": 0, - "total": 7 + "tmMatch": 10, + "default": 119, + "total": 129 }, "approved": { "tmMatch": 0, @@ -12896,9 +12480,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, - "default": 95, - "total": 102 + "tmMatch": 59, + "default": 3037, + "total": 3096 }, "approvalCosts": { "tmMatch": 0, @@ -12910,37 +12494,37 @@ }, { "user": { - "id": 15229494, - "username": "NerdMan", - "fullName": "Nerd (NerdMan)", + "id": 13652673, + "username": "josprachi", + "fullName": "Prachi Joshi (josprachi)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15229494/medium/d29b92d73e4982720accb16256b54014.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13652673/medium/772e01a764c3488a708f93b122a56ff7.jpeg", "preTranslated": 0, - "totalCosts": 102 + "totalCosts": 146 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "mr", + "name": "Marathi", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 102 + "totalCosts": 146 }, "translated": { - "tmMatch": 0, - "default": 102, - "total": 102 + "tmMatch": 19, + "default": 127, + "total": 146 }, "targetTranslated": { - "tmMatch": 0, - "default": 148, - "total": 148 + "tmMatch": 33, + "default": 212, + "total": 245 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 14, + "default": 1, + "total": 15 }, "approved": { "tmMatch": 0, @@ -12948,9 +12532,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 102, - "total": 102 + "tmMatch": 19, + "default": 127, + "total": 146 }, "approvalCosts": { "tmMatch": 0, @@ -12962,32 +12546,32 @@ }, { "user": { - "id": 15225566, - "username": "xcaro", - "fullName": "Nhan Vo (xcaro)", + "id": 14861756, + "username": "RahayuRafika_12", + "fullName": "Rahayu Rafikahwulan Sari (RahayuRafika_12)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15225566/medium/d5edb114381cf4cd5976eb6413069e7a.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg", "preTranslated": 0, - "totalCosts": 69 + "totalCosts": 68 }, "languages": [ { "language": { - "id": "vi", - "name": "Vietnamese", + "id": "id", + "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 69 + "totalCosts": 68 }, "translated": { - "tmMatch": 7, - "default": 62, - "total": 69 + "tmMatch": 0, + "default": 68, + "total": 68 }, "targetTranslated": { - "tmMatch": 11, - "default": 96, - "total": 107 + "tmMatch": 0, + "default": 65, + "total": 65 }, "translatedByMt": { "tmMatch": 0, @@ -13000,9 +12584,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, - "default": 62, - "total": 69 + "tmMatch": 0, + "default": 68, + "total": 68 }, "approvalCosts": { "tmMatch": 0, @@ -13014,47 +12598,47 @@ }, { "user": { - "id": 14960457, - "username": "alexandermovchan1705", - "fullName": "Olexander Movchan (alexandermovchan1705)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14960457/medium/fe6f5bbe62b7ed8d797c991147412d7f.jpeg", + "id": 15247870, + "username": "Aco_RamonaStanescu", + "fullName": "Ramona Stanescu (Aco_RamonaStanescu)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247870/medium/7b4e01dec70834796b474a4ae6fe2ea4_default.png", "preTranslated": 0, - "totalCosts": 1 + "totalCosts": 10 }, "languages": [ { "language": { - "id": "uk", - "name": "Ukrainian", + "id": "ro", + "name": "Romanian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1 + "totalCosts": 10 }, "translated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 2, + "default": 8, + "total": 10 }, "targetTranslated": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 2, + "default": 7, + "total": 9 }, "translatedByMt": { - "tmMatch": 1, + "tmMatch": 0, "default": 0, - "total": 1 + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 12 }, "translationCosts": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 2, + "default": 8, + "total": 10 }, "approvalCosts": { "tmMatch": 0, @@ -13066,37 +12650,37 @@ }, { "user": { - "id": 15241638, - "username": "Panegali", - "fullName": "Panegali", + "id": 14553216, + "username": "rielychen", + "fullName": "Riely (rielychen)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241638/medium/02280520175445e6c7614a4236546b8f.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14553216/medium/ff7357a18e524ec40facc964cb2d15bc.jpeg", "preTranslated": 0, - "totalCosts": 800 + "totalCosts": 110 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 800 + "totalCosts": 110 }, "translated": { - "tmMatch": 11, - "default": 789, - "total": 800 + "tmMatch": 29, + "default": 81, + "total": 110 }, "targetTranslated": { - "tmMatch": 15, - "default": 857, - "total": 872 + "tmMatch": 42, + "default": 145, + "total": 187 }, "translatedByMt": { - "tmMatch": 7, - "default": 214, - "total": 221 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -13104,9 +12688,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 11, - "default": 789, - "total": 800 + "tmMatch": 29, + "default": 81, + "total": 110 }, "approvalCosts": { "tmMatch": 0, @@ -13118,37 +12702,37 @@ }, { "user": { - "id": 17361, - "username": "plamarque", - "fullName": "Patrice Lamarque (plamarque)", + "id": 14357794, + "username": "robertdosa", + "fullName": "Robert Dosa (robertdosa)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/0f07d051c549498672744272c10c255c_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14357794/medium/a28b741096516a710523b87d9ee07223.png", "preTranslated": 0, - "totalCosts": 11945 + "totalCosts": 348 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "hu", + "name": "Hungarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 11945 + "totalCosts": 348 }, "translated": { - "tmMatch": 3573, - "default": 8372, - "total": 11945 + "tmMatch": 9, + "default": 339, + "total": 348 }, "targetTranslated": { - "tmMatch": 4272, - "default": 9444, - "total": 13716 + "tmMatch": 10, + "default": 283, + "total": 293 }, "translatedByMt": { - "tmMatch": 4, - "default": 976, - "total": 980 + "tmMatch": 9, + "default": 2, + "total": 11 }, "approved": { "tmMatch": 0, @@ -13156,9 +12740,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3573, - "default": 8372, - "total": 11945 + "tmMatch": 9, + "default": 339, + "total": 348 }, "approvalCosts": { "tmMatch": 0, @@ -13170,37 +12754,37 @@ }, { "user": { - "id": 15237446, - "username": "PTK1234", - "fullName": "Patrick Liao (PTK1234)", + "id": 15255998, + "username": "rolandopiconnadales", + "fullName": "Rolando Picon Nadales (rolandopiconnadales)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15237446/medium/336e4e5982745e3eeb0a2fd0f27192b5.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15255998/medium/43dc1eaa54592e9e6c019bef41e1e4eb.jpeg", "preTranslated": 0, - "totalCosts": 181 + "totalCosts": 248 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 181 + "totalCosts": 248 }, "translated": { - "tmMatch": 2, - "default": 179, - "total": 181 + "tmMatch": 8, + "default": 240, + "total": 248 }, "targetTranslated": { - "tmMatch": 4, - "default": 308, - "total": 312 + "tmMatch": 19, + "default": 291, + "total": 310 }, "translatedByMt": { - "tmMatch": 1, - "default": 2, - "total": 3 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -13208,9 +12792,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 2, - "default": 179, - "total": 181 + "tmMatch": 8, + "default": 240, + "total": 248 }, "approvalCosts": { "tmMatch": 0, @@ -13222,37 +12806,37 @@ }, { "user": { - "id": 15252750, - "username": "macias.pawel", - "fullName": "Paweł Macias (macias.pawel)", + "id": 14807238, + "username": "rom1919", + "fullName": "Romualdo Zayas-Lagunas (rom1919)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15252750/medium/ff4d18e744739f3da32c8fb115f92a16.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14807238/medium/4e9d7e22b8ba45851bf0d10bf4bb2f68.jpeg", "preTranslated": 0, - "totalCosts": 740 + "totalCosts": 140 }, "languages": [ { "language": { - "id": "pl", - "name": "Polish", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 740 + "totalCosts": 140 }, "translated": { "tmMatch": 0, - "default": 740, - "total": 740 + "default": 140, + "total": 140 }, "targetTranslated": { "tmMatch": 0, - "default": 667, - "total": 667 + "default": 172, + "total": 172 }, "translatedByMt": { "tmMatch": 0, - "default": 46, - "total": 46 + "default": 42, + "total": 42 }, "approved": { "tmMatch": 0, @@ -13261,8 +12845,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 740, - "total": 740 + "default": 140, + "total": 140 }, "approvalCosts": { "tmMatch": 0, @@ -13274,37 +12858,37 @@ }, { "user": { - "id": 14977831, - "username": "PeterKecman", - "fullName": "Peter Škoda Kecman (PeterKecman)", + "id": 14829178, + "username": "EffectChen", + "fullName": "Rui Chen (EffectChen)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14977831/medium/e1e3f150ce524a6cb88fccb8b4f52422.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/13566f4f50fbac5c80fdecc351488099.png", "preTranslated": 0, - "totalCosts": 1726 + "totalCosts": 706 }, "languages": [ { "language": { - "id": "sl", - "name": "Slovenian", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1726 + "totalCosts": 706 }, "translated": { - "tmMatch": 42, - "default": 1684, - "total": 1726 + "tmMatch": 37, + "default": 669, + "total": 706 }, "targetTranslated": { - "tmMatch": 43, - "default": 1631, - "total": 1674 + "tmMatch": 48, + "default": 956, + "total": 1004 }, "translatedByMt": { - "tmMatch": 1, + "tmMatch": 0, "default": 0, - "total": 1 + "total": 0 }, "approved": { "tmMatch": 0, @@ -13312,9 +12896,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 42, - "default": 1684, - "total": 1726 + "tmMatch": 37, + "default": 669, + "total": 706 }, "approvalCosts": { "tmMatch": 0, @@ -13326,32 +12910,32 @@ }, { "user": { - "id": 14225116, - "username": "kdarkshadoww", - "fullName": "Phạm Quang Khôi (kdarkshadoww)", + "id": 14691832, + "username": "imrulo.eth", + "fullName": "Ruslan Ferrales (imrulo.eth)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14225116/medium/4c58e5b1f71a9530e473d03a84052756.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14691832/medium/edac3ef58631bde43e40ac815ef18dc5.png", "preTranslated": 0, - "totalCosts": 64 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "vi", - "name": "Vietnamese", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 64 + "totalCosts": 2 }, "translated": { - "tmMatch": 7, - "default": 57, - "total": 64 + "tmMatch": 0, + "default": 2, + "total": 2 }, "targetTranslated": { - "tmMatch": 12, - "default": 69, - "total": 81 + "tmMatch": 0, + "default": 3, + "total": 3 }, "translatedByMt": { "tmMatch": 0, @@ -13364,9 +12948,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, - "default": 57, - "total": 64 + "tmMatch": 0, + "default": 2, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -13378,37 +12962,37 @@ }, { "user": { - "id": 15226202, - "username": "pilvijo", - "fullName": "Pilvi Taskinen (pilvijo)", + "id": 15263940, + "username": "r2d2_jp", + "fullName": "Ryo (r2d2_jp)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226202/medium/cd81b82010fd5aa6e5f3a24187554136.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15263940/medium/79ad585145ba5474bca7d35c2719dc43.jpg", "preTranslated": 0, - "totalCosts": 1520 + "totalCosts": 351 }, "languages": [ { "language": { - "id": "fi", - "name": "Finnish", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1520 + "totalCosts": 351 }, "translated": { - "tmMatch": 9, - "default": 1511, - "total": 1520 + "tmMatch": 3, + "default": 348, + "total": 351 }, "targetTranslated": { - "tmMatch": 11, - "default": 1124, - "total": 1135 + "tmMatch": 4, + "default": 953, + "total": 957 }, "translatedByMt": { "tmMatch": 3, - "default": 43, - "total": 46 + "default": 8, + "total": 11 }, "approved": { "tmMatch": 0, @@ -13416,9 +13000,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 1511, - "total": 1520 + "tmMatch": 3, + "default": 348, + "total": 351 }, "approvalCosts": { "tmMatch": 0, @@ -13430,37 +13014,37 @@ }, { "user": { - "id": 15165600, - "username": "Horberlan", - "fullName": "Pois.Nada (Horberlan)", + "id": 15226930, + "username": "jensenpanlilio51", + "fullName": "Sad Boi (jensenpanlilio51)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15165600/medium/5ba9d519f33745fa64879cff2511ace4.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226930/medium/46b74e4ecb6dfd2976afb2ce111bf382.jpeg", "preTranslated": 0, - "totalCosts": 201 + "totalCosts": 17 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "fil", + "name": "Filipino", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 201 + "totalCosts": 17 }, "translated": { - "tmMatch": 5, - "default": 196, - "total": 201 + "tmMatch": 0, + "default": 17, + "total": 17 }, "targetTranslated": { - "tmMatch": 3, - "default": 194, - "total": 197 + "tmMatch": 0, + "default": 21, + "total": 21 }, "translatedByMt": { - "tmMatch": 1, - "default": 191, - "total": 192 + "tmMatch": 0, + "default": 5, + "total": 5 }, "approved": { "tmMatch": 0, @@ -13468,9 +13052,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 196, - "total": 201 + "tmMatch": 0, + "default": 17, + "total": 17 }, "approvalCosts": { "tmMatch": 0, @@ -13482,32 +13066,32 @@ }, { "user": { - "id": 13652673, - "username": "josprachi", - "fullName": "Prachi Joshi (josprachi)", + "id": 14914333, + "username": "SamB", + "fullName": "Samira Bourai (SamB)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13652673/medium/772e01a764c3488a708f93b122a56ff7.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14914333/medium/4149c052b7957f062739bbeef72b1866_default.png", "preTranslated": 0, - "totalCosts": 98 + "totalCosts": 14 }, "languages": [ { "language": { - "id": "mr", - "name": "Marathi", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 98 + "totalCosts": 14 }, "translated": { "tmMatch": 0, - "default": 98, - "total": 98 + "default": 14, + "total": 14 }, "targetTranslated": { "tmMatch": 0, - "default": 162, - "total": 162 + "default": 12, + "total": 12 }, "translatedByMt": { "tmMatch": 0, @@ -13521,8 +13105,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 98, - "total": 98 + "default": 14, + "total": 14 }, "approvalCosts": { "tmMatch": 0, @@ -13534,37 +13118,37 @@ }, { "user": { - "id": 14861756, - "username": "RahayuRafika_12", - "fullName": "Rahayu Rafikahwulan Sari (RahayuRafika_12)", + "id": 15289296, + "username": "sanzhar.umbet", + "fullName": "Sanzhar Umbet (sanzhar.umbet)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15289296/medium/5c4c75e28177ed05c0d98d158085bb94.png", "preTranslated": 0, - "totalCosts": 1602 + "totalCosts": 42 }, "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "kk", + "name": "Kazakh", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1602 + "totalCosts": 42 }, "translated": { - "tmMatch": 8, - "default": 1594, - "total": 1602 + "tmMatch": 15, + "default": 27, + "total": 42 }, "targetTranslated": { - "tmMatch": 11, - "default": 1469, - "total": 1480 + "tmMatch": 17, + "default": 24, + "total": 41 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 7, + "default": 2, + "total": 9 }, "approved": { "tmMatch": 0, @@ -13572,9 +13156,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 1594, - "total": 1602 + "tmMatch": 15, + "default": 27, + "total": 42 }, "approvalCosts": { "tmMatch": 0, @@ -13586,47 +13170,47 @@ }, { "user": { - "id": 15247870, - "username": "Aco_RamonaStanescu", - "fullName": "Ramona Stanescu (Aco_RamonaStanescu)", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247870/medium/7b4e01dec70834796b474a4ae6fe2ea4_default.png", + "id": 14851224, + "username": "ladybear7817", + "fullName": "Seanna Price (ladybear7817)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14851224/medium/696955991fca8ffd1257ac24ebe8200a.jpeg", "preTranslated": 0, - "totalCosts": 1792 + "totalCosts": 64 }, "languages": [ { "language": { - "id": "ro", - "name": "Romanian", + "id": "fi", + "name": "Finnish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1792 + "totalCosts": 64 }, "translated": { - "tmMatch": 125, - "default": 1667, - "total": 1792 + "tmMatch": 2, + "default": 62, + "total": 64 }, "targetTranslated": { - "tmMatch": 121, - "default": 1794, - "total": 1915 + "tmMatch": 2, + "default": 61, + "total": 63 }, "translatedByMt": { "tmMatch": 0, - "default": 21, - "total": 21 + "default": 7, + "total": 7 }, "approved": { "tmMatch": 0, "default": 0, - "total": 2201 + "total": 0 }, "translationCosts": { - "tmMatch": 125, - "default": 1667, - "total": 1792 + "tmMatch": 2, + "default": 62, + "total": 64 }, "approvalCosts": { "tmMatch": 0, @@ -13638,37 +13222,37 @@ }, { "user": { - "id": 14553216, - "username": "rielychen", - "fullName": "Riely (rielychen)", + "id": 13559834, + "username": "DasMergo", + "fullName": "Seied Ali Mirkarimi (DasMergo)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14553216/medium/ff7357a18e524ec40facc964cb2d15bc.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13559834/medium/1022545f1391447b44113ac76076957a.jpg", "preTranslated": 0, - "totalCosts": 179 + "totalCosts": 162 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "fa", + "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 179 + "totalCosts": 162 }, "translated": { - "tmMatch": 22, - "default": 157, - "total": 179 + "tmMatch": 19, + "default": 143, + "total": 162 }, "targetTranslated": { - "tmMatch": 53, - "default": 258, - "total": 311 + "tmMatch": 29, + "default": 173, + "total": 202 }, "translatedByMt": { - "tmMatch": 1, - "default": 0, - "total": 1 + "tmMatch": 8, + "default": 5, + "total": 13 }, "approved": { "tmMatch": 0, @@ -13676,9 +13260,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 22, - "default": 157, - "total": 179 + "tmMatch": 19, + "default": 143, + "total": 162 }, "approvalCosts": { "tmMatch": 0, @@ -13690,32 +13274,32 @@ }, { "user": { - "id": 14357794, - "username": "robertdosa", - "fullName": "Robert Dosa (robertdosa)", + "id": 14765612, + "username": "mintleaf", + "fullName": "Shawna Lee (mintleaf)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14357794/medium/a28b741096516a710523b87d9ee07223.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14765612/medium/95146c9af272a6aa0fe1ee9060d19ab4.jpeg", "preTranslated": 0, - "totalCosts": 51 + "totalCosts": 876 }, "languages": [ { "language": { - "id": "hu", - "name": "Hungarian", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 51 + "totalCosts": 876 }, "translated": { - "tmMatch": 0, - "default": 51, - "total": 51 + "tmMatch": 28, + "default": 848, + "total": 876 }, "targetTranslated": { - "tmMatch": 0, - "default": 50, - "total": 50 + "tmMatch": 58, + "default": 1374, + "total": 1432 }, "translatedByMt": { "tmMatch": 0, @@ -13728,9 +13312,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 51, - "total": 51 + "tmMatch": 28, + "default": 848, + "total": 876 }, "approvalCosts": { "tmMatch": 0, @@ -13742,32 +13326,32 @@ }, { "user": { - "id": 14829178, - "username": "EffectChen", - "fullName": "Rui Chen (EffectChen)", + "id": 15254166, + "username": "Sipsin", + "fullName": "Sina Ahmadzadeh (Sipsin)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/13566f4f50fbac5c80fdecc351488099.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15254166/medium/97bc228eabf1db39471815cc1e5a2da6.jpg", "preTranslated": 0, - "totalCosts": 27 + "totalCosts": 13 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "fa", + "name": "Persian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 27 + "totalCosts": 13 }, "translated": { - "tmMatch": 14, + "tmMatch": 0, "default": 13, - "total": 27 + "total": 13 }, "targetTranslated": { - "tmMatch": 31, - "default": 20, - "total": 51 + "tmMatch": 0, + "default": 16, + "total": 16 }, "translatedByMt": { "tmMatch": 0, @@ -13780,9 +13364,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 14, + "tmMatch": 0, "default": 13, - "total": 27 + "total": 13 }, "approvalCosts": { "tmMatch": 0, @@ -13794,37 +13378,37 @@ }, { "user": { - "id": 15213342, - "username": "morusalba", - "fullName": "S Singh (morusalba)", + "id": 15263048, + "username": "SinisaDakovic", + "fullName": "Sinisa Dakovic (SinisaDakovic)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15213342/medium/c045e810f7dcfbf8e7bdc7c5ee684b98.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15263048/medium/e7cf3db3dbcc96ebefe653c805fd028b.jpeg", "preTranslated": 0, - "totalCosts": 925 + "totalCosts": 10 }, "languages": [ { "language": { - "id": "hi", - "name": "Hindi", + "id": "sr-CS", + "name": "Serbian (Latin)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 925 + "totalCosts": 10 }, "translated": { - "tmMatch": 45, - "default": 880, - "total": 925 + "tmMatch": 4, + "default": 6, + "total": 10 }, "targetTranslated": { - "tmMatch": 85, - "default": 1457, - "total": 1542 + "tmMatch": 4, + "default": 6, + "total": 10 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approved": { "tmMatch": 0, @@ -13832,9 +13416,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 45, - "default": 880, - "total": 925 + "tmMatch": 4, + "default": 6, + "total": 10 }, "approvalCosts": { "tmMatch": 0, @@ -13846,32 +13430,32 @@ }, { "user": { - "id": 15226930, - "username": "jensenpanlilio51", - "fullName": "Sad Boi (jensenpanlilio51)", + "id": 15277140, + "username": "LeterTW", + "fullName": "Snrat (LeterTW)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226930/medium/46b74e4ecb6dfd2976afb2ce111bf382.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15277140/medium/582e03c9c18167159a4d4eb8f7c62455.png", "preTranslated": 0, - "totalCosts": 4 + "totalCosts": 5 }, "languages": [ { "language": { - "id": "fil", - "name": "Filipino", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4 + "totalCosts": 5 }, "translated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 5, + "total": 5 }, "targetTranslated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 10, + "total": 10 }, "translatedByMt": { "tmMatch": 0, @@ -13885,8 +13469,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 5, + "total": 5 }, "approvalCosts": { "tmMatch": 0, @@ -13898,37 +13482,37 @@ }, { "user": { - "id": 15228404, - "username": "slee_422", - "fullName": "Sangmin Lee (slee_422)", + "id": 15266442, + "username": "soranaturally", + "fullName": "Sora Nature (soranaturally)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15228404/medium/05a7a5674086b7e7c7764c4546262e4e.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266442/medium/762206e3c8cb55e78c7f9301e7d652bc.png", "preTranslated": 0, - "totalCosts": 224 + "totalCosts": 1115 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 224 + "totalCosts": 1115 }, "translated": { - "tmMatch": 15, - "default": 209, - "total": 224 + "tmMatch": 163, + "default": 952, + "total": 1115 }, "targetTranslated": { - "tmMatch": 13, - "default": 127, - "total": 140 + "tmMatch": 425, + "default": 2249, + "total": 2674 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 9, + "default": 269, + "total": 278 }, "approved": { "tmMatch": 0, @@ -13936,9 +13520,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 15, - "default": 209, - "total": 224 + "tmMatch": 163, + "default": 952, + "total": 1115 }, "approvalCosts": { "tmMatch": 0, @@ -13950,37 +13534,37 @@ }, { "user": { - "id": 15082707, - "username": "selcuk45", - "fullName": "Selçuk (selcuk45)", + "id": 15266042, + "username": "aintbe", + "fullName": "Sori Lim (aintbe)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266042/medium/44b78d9324900cb015d8dc5ba4cf8b9e.png", "preTranslated": 0, - "totalCosts": 8654 + "totalCosts": 11 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 8654 + "totalCosts": 11 }, "translated": { - "tmMatch": 306, - "default": 8348, - "total": 8654 + "tmMatch": 0, + "default": 11, + "total": 11 }, "targetTranslated": { - "tmMatch": 251, - "default": 6514, - "total": 6765 + "tmMatch": 0, + "default": 6, + "total": 6 }, "translatedByMt": { - "tmMatch": 2, + "tmMatch": 0, "default": 0, - "total": 2 + "total": 0 }, "approved": { "tmMatch": 0, @@ -13988,9 +13572,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 306, - "default": 8348, - "total": 8654 + "tmMatch": 0, + "default": 11, + "total": 11 }, "approvalCosts": { "tmMatch": 0, @@ -14002,32 +13586,32 @@ }, { "user": { - "id": 14765612, - "username": "mintleaf", - "fullName": "Shawna Lee (mintleaf)", + "id": 15082843, + "username": "merceasy7", + "fullName": "Steven Rups (merceasy7)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14765612/medium/95146c9af272a6aa0fe1ee9060d19ab4.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082843/medium/8bed2246335ec6e776196d05d80018a8.png", "preTranslated": 0, - "totalCosts": 964 + "totalCosts": 36 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "de", + "name": "German", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 964 + "totalCosts": 36 }, "translated": { - "tmMatch": 29, - "default": 935, - "total": 964 + "tmMatch": 0, + "default": 36, + "total": 36 }, "targetTranslated": { - "tmMatch": 60, - "default": 1557, - "total": 1617 + "tmMatch": 0, + "default": 35, + "total": 35 }, "translatedByMt": { "tmMatch": 0, @@ -14040,9 +13624,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 29, - "default": 935, - "total": 964 + "tmMatch": 0, + "default": 36, + "total": 36 }, "approvalCosts": { "tmMatch": 0, @@ -14054,37 +13638,37 @@ }, { "user": { - "id": 14582152, - "username": "Shokhe", - "fullName": "Shokhrukh Ermanov (Shokhe)", + "id": 13249257, + "username": "SuperDelphi", + "fullName": "SuperDelphi", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14582152/medium/4fc89c53adc0e65a7af6a181eba9a10d.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13249257/medium/f566e07e86e26f5911df1ddf5fae796d.png", "preTranslated": 0, - "totalCosts": 793 + "totalCosts": 759 }, "languages": [ { "language": { - "id": "uz", - "name": "Uzbek", + "id": "fr", + "name": "French", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 793 + "totalCosts": 759 }, "translated": { - "tmMatch": 29, - "default": 764, - "total": 793 + "tmMatch": 155, + "default": 604, + "total": 759 }, "targetTranslated": { - "tmMatch": 28, - "default": 672, - "total": 700 + "tmMatch": 183, + "default": 706, + "total": 889 }, "translatedByMt": { - "tmMatch": 18, - "default": 3, - "total": 21 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -14092,9 +13676,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 29, - "default": 764, - "total": 793 + "tmMatch": 155, + "default": 604, + "total": 759 }, "approvalCosts": { "tmMatch": 0, @@ -14106,32 +13690,32 @@ }, { "user": { - "id": 15218148, - "username": "andilexmchunu", - "fullName": "SkywalkingZulu Azanian (andilexmchunu)", + "id": 15294766, + "username": "tacrew", + "fullName": "Tacrew (tacrew)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15218148/medium/2e5703ac2a3a7b5b6eb8f10d435ca59e.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15294766/medium/abbc7ffa6f97a689bcaed863a6454241.jpeg", "preTranslated": 0, - "totalCosts": 146 + "totalCosts": 144 }, "languages": [ { "language": { - "id": "zu", - "name": "Zulu", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 146 + "totalCosts": 144 }, "translated": { - "tmMatch": 1, - "default": 145, - "total": 146 + "tmMatch": 144, + "default": 0, + "total": 144 }, "targetTranslated": { - "tmMatch": 1, - "default": 103, - "total": 104 + "tmMatch": 473, + "default": 0, + "total": 473 }, "translatedByMt": { "tmMatch": 0, @@ -14144,9 +13728,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 145, - "total": 146 + "tmMatch": 144, + "default": 0, + "total": 144 }, "approvalCosts": { "tmMatch": 0, @@ -14158,32 +13742,32 @@ }, { "user": { - "id": 15082843, - "username": "merceasy7", - "fullName": "Steven Rups (merceasy7)", + "id": 15105599, + "username": "SaturnPiece", + "fullName": "Taegyeong Kim (SaturnPiece)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082843/medium/8bed2246335ec6e776196d05d80018a8.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15105599/medium/a3e031fc91bbbf728f3bb5dd384e8400_default.png", "preTranslated": 0, - "totalCosts": 4665 + "totalCosts": 4119 }, "languages": [ { "language": { - "id": "de", - "name": "German", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 4665 + "totalCosts": 4119 }, "translated": { - "tmMatch": 91, - "default": 4574, - "total": 4665 + "tmMatch": 22, + "default": 4097, + "total": 4119 }, "targetTranslated": { - "tmMatch": 92, - "default": 4566, - "total": 4658 + "tmMatch": 17, + "default": 3128, + "total": 3145 }, "translatedByMt": { "tmMatch": 0, @@ -14196,9 +13780,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 91, - "default": 4574, - "total": 4665 + "tmMatch": 22, + "default": 4097, + "total": 4119 }, "approvalCosts": { "tmMatch": 0, @@ -14210,37 +13794,37 @@ }, { "user": { - "id": 15250062, - "username": "21sunil21", - "fullName": "Sunil S Yadav (21sunil21)", + "id": 14778126, + "username": "Thalma", + "fullName": "Thalma", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250062/medium/c46fa0ba063333dd048a7a1d1db87cba.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14778126/medium/3927ee487076db1a7dd83d45a6d2dc64.jpeg", "preTranslated": 0, - "totalCosts": 97 + "totalCosts": 110 }, "languages": [ { "language": { - "id": "mr", - "name": "Marathi", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 97 + "totalCosts": 110 }, "translated": { - "tmMatch": 11, - "default": 86, - "total": 97 + "tmMatch": 0, + "default": 110, + "total": 110 }, "targetTranslated": { - "tmMatch": 22, - "default": 150, - "total": 172 + "tmMatch": 0, + "default": 106, + "total": 106 }, "translatedByMt": { - "tmMatch": 11, - "default": 2, - "total": 13 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -14248,9 +13832,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 11, - "default": 86, - "total": 97 + "tmMatch": 0, + "default": 110, + "total": 110 }, "approvalCosts": { "tmMatch": 0, @@ -14262,32 +13846,32 @@ }, { "user": { - "id": 13249257, - "username": "SuperDelphi", - "fullName": "SuperDelphi", + "id": 15269844, + "username": "thespeedypack", + "fullName": "TheSpeedyPack Social Media (thespeedypack)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13249257/medium/f566e07e86e26f5911df1ddf5fae796d.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269844/medium/89bad950fad7e6e8a506d1efe7f093b8.png", "preTranslated": 0, - "totalCosts": 2452 + "totalCosts": 74 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "ur-PK", + "name": "Urdu (Pakistan)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2452 + "totalCosts": 74 }, "translated": { - "tmMatch": 135, - "default": 2317, - "total": 2452 + "tmMatch": 1, + "default": 73, + "total": 74 }, "targetTranslated": { - "tmMatch": 160, - "default": 2610, - "total": 2770 + "tmMatch": 1, + "default": 79, + "total": 80 }, "translatedByMt": { "tmMatch": 0, @@ -14300,9 +13884,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 135, - "default": 2317, - "total": 2452 + "tmMatch": 1, + "default": 73, + "total": 74 }, "approvalCosts": { "tmMatch": 0, @@ -14314,37 +13898,37 @@ }, { "user": { - "id": 15105599, - "username": "SaturnPiece", - "fullName": "Taegyeong Kim (SaturnPiece)", + "id": 14690454, + "username": "sekoman01", + "fullName": "Uğur Daloğlu (sekoman01)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15105599/medium/a3e031fc91bbbf728f3bb5dd384e8400_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg", "preTranslated": 0, - "totalCosts": 1813 + "totalCosts": 3027 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1813 + "totalCosts": 3027 }, "translated": { - "tmMatch": 82, - "default": 1731, - "total": 1813 + "tmMatch": 127, + "default": 2900, + "total": 3027 }, "targetTranslated": { - "tmMatch": 70, - "default": 1260, - "total": 1330 + "tmMatch": 116, + "default": 2343, + "total": 2459 }, "translatedByMt": { - "tmMatch": 0, - "default": 0, - "total": 0 + "tmMatch": 11, + "default": 7, + "total": 18 }, "approved": { "tmMatch": 0, @@ -14352,9 +13936,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 82, - "default": 1731, - "total": 1813 + "tmMatch": 127, + "default": 2900, + "total": 3027 }, "approvalCosts": { "tmMatch": 0, @@ -14366,37 +13950,37 @@ }, { "user": { - "id": 15233878, - "username": "tayko", - "fullName": "TayKo (tayko)", + "id": 15152468, + "username": "whenimondamic", + "fullName": "Victor K (whenimondamic)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233878/medium/6f888f1bafc5f19619e939644cc1ed8a.gif", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15152468/medium/1230c72e6dbf29250738476923383c89.png", "preTranslated": 0, - "totalCosts": 10 + "totalCosts": 201 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 10 + "totalCosts": 201 }, "translated": { "tmMatch": 0, - "default": 10, - "total": 10 + "default": 201, + "total": 201 }, "targetTranslated": { "tmMatch": 0, - "default": 13, - "total": 13 + "default": 170, + "total": 170 }, "translatedByMt": { "tmMatch": 0, - "default": 7, - "total": 7 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -14405,8 +13989,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 10, - "total": 10 + "default": 201, + "total": 201 }, "approvalCosts": { "tmMatch": 0, @@ -14418,37 +14002,37 @@ }, { "user": { - "id": 15217546, - "username": "sulaoglu", - "fullName": "Taylan Sulaoglu (sulaoglu)", + "id": 15269446, + "username": "vivid.vi.liu", + "fullName": "Vivi Liu (vivid.vi.liu)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15217546/medium/76c923f19832d5b0cb107704973363ae.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269446/medium/bacfde2043325073085d9e7d50a89b22.png", "preTranslated": 0, - "totalCosts": 1636 + "totalCosts": 1 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1636 + "totalCosts": 1 }, "translated": { - "tmMatch": 24, - "default": 1612, - "total": 1636 + "tmMatch": 1, + "default": 0, + "total": 1 }, "targetTranslated": { - "tmMatch": 24, - "default": 1379, - "total": 1403 + "tmMatch": 4, + "default": 0, + "total": 4 }, "translatedByMt": { - "tmMatch": 13, - "default": 2, - "total": 15 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -14456,9 +14040,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 24, - "default": 1612, - "total": 1636 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approvalCosts": { "tmMatch": 0, @@ -14470,32 +14054,32 @@ }, { "user": { - "id": 15188420, - "username": "ThomasErhel", - "fullName": "Thomas Erhel (ThomasErhel)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15188420/medium/efbc381fcf795ef3a73849dfc1a5031f.jpeg", + "id": 15241608, + "username": "aco_novatranslate", + "fullName": "Vladimir Angelov (aco_novatranslate)", + "userRole": "Proofreader", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241608/medium/dfa20fade20b2314f45079d92687afee_default.png", "preTranslated": 0, - "totalCosts": 6 + "totalCosts": 1579 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "bg", + "name": "Bulgarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6 + "totalCosts": 1579 }, "translated": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 36, + "default": 1543, + "total": 1579 }, "targetTranslated": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 46, + "default": 1652, + "total": 1698 }, "translatedByMt": { "tmMatch": 0, @@ -14505,12 +14089,12 @@ "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 1818 }, "translationCosts": { - "tmMatch": 0, - "default": 6, - "total": 6 + "tmMatch": 36, + "default": 1543, + "total": 1579 }, "approvalCosts": { "tmMatch": 0, @@ -14522,37 +14106,37 @@ }, { "user": { - "id": 15230060, - "username": "thomas.lucyfer", - "fullName": "Thomas L (thomas.lucyfer)", + "id": 14008271, + "username": "comodoro", + "fullName": "Vojtěch Drábek (comodoro)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15230060/medium/71a3913a7d7312c010e0e90013f8e14c.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14008271/medium/c7b5cf629f7c0a1a3c8be6944f69983e.png", "preTranslated": 0, - "totalCosts": 15 + "totalCosts": 164 }, "languages": [ { "language": { - "id": "fr", - "name": "French", + "id": "cs", + "name": "Czech", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 15 + "totalCosts": 164 }, "translated": { - "tmMatch": 0, - "default": 15, - "total": 15 + "tmMatch": 7, + "default": 157, + "total": 164 }, "targetTranslated": { - "tmMatch": 0, - "default": 17, - "total": 17 + "tmMatch": 6, + "default": 154, + "total": 160 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 21, + "total": 21 }, "approved": { "tmMatch": 0, @@ -14560,9 +14144,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 15, - "total": 15 + "tmMatch": 7, + "default": 157, + "total": 164 }, "approvalCosts": { "tmMatch": 0, @@ -14574,37 +14158,37 @@ }, { "user": { - "id": 13654433, - "username": "alettelturki", - "fullName": "Turki NASSER aLETTEL (alettelturki)", + "id": 15265026, + "username": "spovilusko", + "fullName": "WST Smledott (spovilusko)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13654433/medium/f7d0d389c0594db9ba49737ffb957750_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15265026/medium/6ee7020d6f4f0c7bae76613b210ef0b1.png", "preTranslated": 0, - "totalCosts": 88 + "totalCosts": 3631 }, "languages": [ { "language": { - "id": "ar", - "name": "Arabic", + "id": "id", + "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 88 + "totalCosts": 3631 }, "translated": { - "tmMatch": 9, - "default": 79, - "total": 88 + "tmMatch": 5, + "default": 3626, + "total": 3631 }, "targetTranslated": { - "tmMatch": 9, - "default": 50, - "total": 59 + "tmMatch": 5, + "default": 3091, + "total": 3096 }, "translatedByMt": { "tmMatch": 0, - "default": 14, - "total": 14 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -14612,9 +14196,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 79, - "total": 88 + "tmMatch": 5, + "default": 3626, + "total": 3631 }, "approvalCosts": { "tmMatch": 0, @@ -14626,37 +14210,37 @@ }, { "user": { - "id": 14690454, - "username": "sekoman01", - "fullName": "Uğur Daloğlu (sekoman01)", + "id": 15219862, + "username": "YangIO", + "fullName": "YangIO", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219862/medium/9e4172499882462a3fc790d83b7a1a9d.jpg", "preTranslated": 0, - "totalCosts": 10837 + "totalCosts": 96 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 10837 + "totalCosts": 96 }, "translated": { - "tmMatch": 307, - "default": 10530, - "total": 10837 + "tmMatch": 4, + "default": 92, + "total": 96 }, "targetTranslated": { - "tmMatch": 282, - "default": 7982, - "total": 8264 + "tmMatch": 15, + "default": 161, + "total": 176 }, "translatedByMt": { - "tmMatch": 1, - "default": 5, - "total": 6 + "tmMatch": 0, + "default": 65, + "total": 65 }, "approved": { "tmMatch": 0, @@ -14664,9 +14248,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 307, - "default": 10530, - "total": 10837 + "tmMatch": 4, + "default": 92, + "total": 96 }, "approvalCosts": { "tmMatch": 0, @@ -14678,37 +14262,37 @@ }, { "user": { - "id": 14514124, - "username": "ViktorOn", - "fullName": "Vik (ViktorOn)", + "id": 15246044, + "username": "Hakeen_", + "fullName": "Yann (Hakeen_)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246044/medium/171bf1c1254d3780b9dc57afe145d835.jpeg", "preTranslated": 0, - "totalCosts": 808 + "totalCosts": 192 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "zh-TW", + "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 808 + "totalCosts": 192 }, "translated": { - "tmMatch": 116, - "default": 692, - "total": 808 + "tmMatch": 2, + "default": 190, + "total": 192 }, "targetTranslated": { - "tmMatch": 101, - "default": 629, - "total": 730 + "tmMatch": 5, + "default": 298, + "total": 303 }, "translatedByMt": { - "tmMatch": 14, - "default": 41, - "total": 55 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -14716,9 +14300,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 116, - "default": 692, - "total": 808 + "tmMatch": 2, + "default": 190, + "total": 192 }, "approvalCosts": { "tmMatch": 0, @@ -14730,32 +14314,32 @@ }, { "user": { - "id": 15210560, - "username": "Vitor_Pinheiro", - "fullName": "Vitor Pinheiro (Vitor_Pinheiro)", + "id": 14866604, + "username": "yeremiaryangunadi", + "fullName": "Yeremia Ryan Gunadi (yeremiaryangunadi)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15210560/medium/ff8ea1936b838affc178037b3d436634.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png", "preTranslated": 0, - "totalCosts": 298 + "totalCosts": 149 }, "languages": [ { "language": { - "id": "pt-BR", - "name": "Portuguese, Brazilian", + "id": "id", + "name": "Indonesian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 298 + "totalCosts": 149 }, "translated": { - "tmMatch": 8, - "default": 290, - "total": 298 + "tmMatch": 7, + "default": 142, + "total": 149 }, "targetTranslated": { - "tmMatch": 8, - "default": 278, - "total": 286 + "tmMatch": 6, + "default": 131, + "total": 137 }, "translatedByMt": { "tmMatch": 0, @@ -14768,9 +14352,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 290, - "total": 298 + "tmMatch": 7, + "default": 142, + "total": 149 }, "approvalCosts": { "tmMatch": 0, @@ -14782,47 +14366,47 @@ }, { "user": { - "id": 15241608, - "username": "aco_novatranslate", - "fullName": "Vladimir Angelov (aco_novatranslate)", - "userRole": "Proofreader", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15241608/medium/dfa20fade20b2314f45079d92687afee_default.png", + "id": 15295270, + "username": "yoselyn2210", + "fullName": "Yoselyn Leon (yoselyn2210)", + "userRole": "Translator", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15295270/medium/2a151e354a2c66324aaee4899215389e.jpeg", "preTranslated": 0, - "totalCosts": 753 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "bg", - "name": "Bulgarian", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 753 + "totalCosts": 2 }, "translated": { - "tmMatch": 134, - "default": 619, - "total": 753 + "tmMatch": 2, + "default": 0, + "total": 2 }, "targetTranslated": { - "tmMatch": 133, - "default": 662, - "total": 795 + "tmMatch": 3, + "default": 0, + "total": 3 }, "translatedByMt": { - "tmMatch": 4, + "tmMatch": 0, "default": 0, - "total": 4 + "total": 0 }, "approved": { "tmMatch": 0, "default": 0, - "total": 863 + "total": 0 }, "translationCosts": { - "tmMatch": 134, - "default": 619, - "total": 753 + "tmMatch": 2, + "default": 0, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -14834,37 +14418,37 @@ }, { "user": { - "id": 15203704, - "username": "WENNETHAU", - "fullName": "Vladislav Kuka (WENNETHAU)", + "id": 15260596, + "username": "Zepphire", + "fullName": "Zepphire", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15203704/medium/daedd358504062e2645bedb118ee5ad3.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15260596/medium/cb3b9f65b0b6d8338eb83bd78128df3b.jpeg", "preTranslated": 0, - "totalCosts": 216 + "totalCosts": 13 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "pt-BR", + "name": "Portuguese, Brazilian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 216 + "totalCosts": 13 }, "translated": { - "tmMatch": 11, - "default": 205, - "total": 216 + "tmMatch": 0, + "default": 13, + "total": 13 }, "targetTranslated": { - "tmMatch": 11, - "default": 196, - "total": 207 + "tmMatch": 0, + "default": 13, + "total": 13 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 9, + "total": 9 }, "approved": { "tmMatch": 0, @@ -14872,9 +14456,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 11, - "default": 205, - "total": 216 + "tmMatch": 0, + "default": 13, + "total": 13 }, "approvalCosts": { "tmMatch": 0, @@ -14886,37 +14470,37 @@ }, { "user": { - "id": 15090253, - "username": "watcharin1215", - "fullName": "WATCHARIN Torwong (watcharin1215)", + "id": 15292102, + "username": "zodaicman", + "fullName": "Zodaicman (zodaicman)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15090253/medium/0048052233c7fe0fc9ab8d08a5c60cbe.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15292102/medium/2ba5a81ed4c4aee52aaa98688513bc11.jpg", "preTranslated": 0, - "totalCosts": 7 + "totalCosts": 495 }, "languages": [ { "language": { - "id": "th", - "name": "Thai", + "id": "tk", + "name": "Turkmen", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 7 + "totalCosts": 495 }, "translated": { - "tmMatch": 7, - "default": 0, - "total": 7 + "tmMatch": 4, + "default": 491, + "total": 495 }, "targetTranslated": { - "tmMatch": 7, - "default": 0, - "total": 7 + "tmMatch": 4, + "default": 381, + "total": 385 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approved": { "tmMatch": 0, @@ -14924,9 +14508,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 7, - "default": 0, - "total": 7 + "tmMatch": 4, + "default": 491, + "total": 495 }, "approvalCosts": { "tmMatch": 0, @@ -14938,32 +14522,32 @@ }, { "user": { - "id": 15096161, - "username": "Wilmina", - "fullName": "Wilmina Dela Pena (Wilmina)", + "id": 14870630, + "username": "a8832021", + "fullName": "a8832021", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15096161/medium/cc623dcb267286de4488e90863efe584.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14870630/medium/b36889c699124e54c6b781e3ba477726.png", "preTranslated": 0, - "totalCosts": 97 + "totalCosts": 18 }, "languages": [ { "language": { - "id": "fil", - "name": "Filipino", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 97 + "totalCosts": 18 }, "translated": { - "tmMatch": 40, - "default": 57, - "total": 97 + "tmMatch": 0, + "default": 18, + "total": 18 }, "targetTranslated": { - "tmMatch": 45, - "default": 64, - "total": 109 + "tmMatch": 0, + "default": 41, + "total": 41 }, "translatedByMt": { "tmMatch": 0, @@ -14976,9 +14560,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 40, - "default": 57, - "total": 97 + "tmMatch": 0, + "default": 18, + "total": 18 }, "approvalCosts": { "tmMatch": 0, @@ -14990,37 +14574,37 @@ }, { "user": { - "id": 15245924, - "username": "Wolt68", - "fullName": "Wolt (Wolt68)", + "id": 14016583, + "username": "adamlaska.ivanov", + "fullName": "adam ivanov (adamlaska.ivanov)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15245924/medium/ead6cbc074fc3de37cb9d3f77651cfe7.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14016583/medium/4b266dea24a22397952d46e3d267a75e.jpeg", "preTranslated": 0, - "totalCosts": 89 + "totalCosts": 39 }, "languages": [ { "language": { - "id": "hy-AM", - "name": "Armenian", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 89 + "totalCosts": 39 }, "translated": { "tmMatch": 0, - "default": 89, - "total": 89 + "default": 39, + "total": 39 }, "targetTranslated": { "tmMatch": 0, - "default": 79, - "total": 79 + "default": 31, + "total": 31 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 10, + "total": 10 }, "approved": { "tmMatch": 0, @@ -15029,8 +14613,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 89, - "total": 89 + "default": 39, + "total": 39 }, "approvalCosts": { "tmMatch": 0, @@ -15042,37 +14626,37 @@ }, { "user": { - "id": 15219862, - "username": "YangIO", - "fullName": "YangIO", + "id": 14727038, + "username": "agolautner", + "fullName": "agolautner", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15219862/medium/9e4172499882462a3fc790d83b7a1a9d.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14727038/medium/4150668cd11c03c029aeaaa44409248e.png", "preTranslated": 0, - "totalCosts": 269 + "totalCosts": 151 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "hu", + "name": "Hungarian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 269 + "totalCosts": 151 }, "translated": { - "tmMatch": 67, - "default": 202, - "total": 269 + "tmMatch": 0, + "default": 151, + "total": 151 }, "targetTranslated": { - "tmMatch": 109, - "default": 353, - "total": 462 + "tmMatch": 0, + "default": 137, + "total": 137 }, "translatedByMt": { "tmMatch": 0, - "default": 19, - "total": 19 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15080,9 +14664,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 67, - "default": 202, - "total": 269 + "tmMatch": 0, + "default": 151, + "total": 151 }, "approvalCosts": { "tmMatch": 0, @@ -15094,32 +14678,32 @@ }, { "user": { - "id": 15246044, - "username": "Hakeen_", - "fullName": "Yann (Hakeen_)", + "id": 15270840, + "username": "Mak00", + "fullName": "aman khan (Mak00)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246044/medium/171bf1c1254d3780b9dc57afe145d835.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15270840/medium/6ddf13dfa91b0c7a74b2d70bdf2d858c.png", "preTranslated": 0, - "totalCosts": 100 + "totalCosts": 21 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 24 + "totalCosts": 11 }, "translated": { - "tmMatch": 3, - "default": 21, - "total": 24 + "tmMatch": 1, + "default": 10, + "total": 11 }, "targetTranslated": { - "tmMatch": 6, - "default": 33, - "total": 39 + "tmMatch": 1, + "default": 11, + "total": 12 }, "translatedByMt": { "tmMatch": 0, @@ -15132,9 +14716,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 21, - "total": 24 + "tmMatch": 1, + "default": 10, + "total": 11 }, "approvalCosts": { "tmMatch": 0, @@ -15144,26 +14728,26 @@ }, { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 76 + "totalCosts": 10 }, "translated": { "tmMatch": 0, - "default": 76, - "total": 76 + "default": 10, + "total": 10 }, "targetTranslated": { "tmMatch": 0, - "default": 147, - "total": 147 + "default": 13, + "total": 13 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 7, + "total": 7 }, "approved": { "tmMatch": 0, @@ -15172,8 +14756,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 76, - "total": 76 + "default": 10, + "total": 10 }, "approvalCosts": { "tmMatch": 0, @@ -15185,37 +14769,37 @@ }, { "user": { - "id": 14866604, - "username": "yeremiaryangunadi", - "fullName": "Yeremia Ryan Gunadi (yeremiaryangunadi)", + "id": 14987149, + "username": "banuri.iqbal", + "fullName": "banuri iqbal (banuri.iqbal)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14987149/medium/fa69bc8352ffca5145216f5ea0f963ca.png", "preTranslated": 0, - "totalCosts": 5917 + "totalCosts": 99 }, "languages": [ { "language": { - "id": "id", - "name": "Indonesian", + "id": "ms", + "name": "Malay", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 5917 + "totalCosts": 99 }, "translated": { - "tmMatch": 119, - "default": 5798, - "total": 5917 + "tmMatch": 0, + "default": 99, + "total": 99 }, "targetTranslated": { - "tmMatch": 112, - "default": 5540, - "total": 5652 + "tmMatch": 0, + "default": 99, + "total": 99 }, "translatedByMt": { - "tmMatch": 3, - "default": 6, - "total": 9 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15223,9 +14807,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 119, - "default": 5798, - "total": 5917 + "tmMatch": 0, + "default": 99, + "total": 99 }, "approvalCosts": { "tmMatch": 0, @@ -15237,32 +14821,32 @@ }, { "user": { - "id": 15214414, - "username": "yurokeryou", - "fullName": "Yu Alypse (yurokeryou)", + "id": 15250098, + "username": "dangg", + "fullName": "dangg", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214414/medium/3f099c722eac59a406eee33477d188a3.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250098/medium/e0bf575c362ae1ae0c478a8e5004e162.jpeg", "preTranslated": 0, - "totalCosts": 925 + "totalCosts": 685 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "vi", + "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 925 + "totalCosts": 685 }, "translated": { - "tmMatch": 0, - "default": 925, - "total": 925 + "tmMatch": 1, + "default": 684, + "total": 685 }, "targetTranslated": { - "tmMatch": 0, - "default": 805, - "total": 805 + "tmMatch": 4, + "default": 1061, + "total": 1065 }, "translatedByMt": { "tmMatch": 0, @@ -15275,9 +14859,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 925, - "total": 925 + "tmMatch": 1, + "default": 684, + "total": 685 }, "approvalCosts": { "tmMatch": 0, @@ -15289,37 +14873,37 @@ }, { "user": { - "id": 15230654, - "username": "jay52121y", - "fullName": "Zhou Yang (jay52121y)", + "id": 14631802, + "username": "edgargrau", + "fullName": "eDgar gRau (edgargrau)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15230654/medium/707fc06df9b8723efb23f4f7362a0b74.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14631802/medium/49b31ee9ceace460558cf61dcaaa1e2f.jpeg", "preTranslated": 0, - "totalCosts": 14 + "totalCosts": 193 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 14 + "totalCosts": 193 }, "translated": { - "tmMatch": 0, - "default": 14, - "total": 14 + "tmMatch": 4, + "default": 189, + "total": 193 }, "targetTranslated": { - "tmMatch": 0, - "default": 30, - "total": 30 + "tmMatch": 5, + "default": 233, + "total": 238 }, "translatedByMt": { "tmMatch": 0, - "default": 12, - "total": 12 + "default": 113, + "total": 113 }, "approved": { "tmMatch": 0, @@ -15327,9 +14911,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 14, - "total": 14 + "tmMatch": 4, + "default": 189, + "total": 193 }, "approvalCosts": { "tmMatch": 0, @@ -15341,37 +14925,37 @@ }, { "user": { - "id": 15240590, - "username": "aldiuxx27", - "fullName": "aldo s (aldiuxx27)", + "id": 15087917, + "username": "seoh", + "fullName": "eth.seoh (seoh)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15240590/medium/5f4cf95e960ea458e49cf05b8681c0be.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15087917/medium/436328b66c11b44622caf9b3de1c4ef0_default.png", "preTranslated": 0, - "totalCosts": 12 + "totalCosts": 10 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "ko", + "name": "Korean", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 12 + "totalCosts": 10 }, "translated": { - "tmMatch": 0, - "default": 12, - "total": 12 + "tmMatch": 2, + "default": 8, + "total": 10 }, "targetTranslated": { - "tmMatch": 0, - "default": 17, - "total": 17 + "tmMatch": 2, + "default": 6, + "total": 8 }, "translatedByMt": { "tmMatch": 0, - "default": 7, - "total": 7 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15379,9 +14963,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 12, - "total": 12 + "tmMatch": 2, + "default": 8, + "total": 10 }, "approvalCosts": { "tmMatch": 0, @@ -15393,47 +14977,47 @@ }, { "user": { - "id": 15228908, - "username": "batuhanmn", - "fullName": "batuhanmn", + "id": 14568334, + "username": "norhorn", + "fullName": "george kitsoukakis (norhorn)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15228908/medium/f51b877c2ff9c8c5802d23a4d0738b32.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/85dd0d12b6d2d490447bbba939a888ba.jpeg", "preTranslated": 0, - "totalCosts": 240 + "totalCosts": 770 }, "languages": [ { "language": { - "id": "tr", - "name": "Turkish", + "id": "el", + "name": "Greek", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 240 + "totalCosts": 770 }, "translated": { - "tmMatch": 36, - "default": 204, - "total": 240 + "tmMatch": 13, + "default": 757, + "total": 770 }, "targetTranslated": { - "tmMatch": 30, - "default": 182, - "total": 212 + "tmMatch": 14, + "default": 795, + "total": 809 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 27, + "total": 27 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 761 }, "translationCosts": { - "tmMatch": 36, - "default": 204, - "total": 240 + "tmMatch": 13, + "default": 757, + "total": 770 }, "approvalCosts": { "tmMatch": 0, @@ -15445,32 +15029,32 @@ }, { "user": { - "id": 15238136, - "username": "clau13_19", - "fullName": "claudia fernanda cardenas farfan (clau13_19)", + "id": 15274556, + "username": "gilenlecuona", + "fullName": "guyguy120 (gilenlecuona)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15238136/medium/7bc99402506842cb70d3a6fb67f47503.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15274556/medium/171aed1bf197511befac6b87394bccb1.png", "preTranslated": 0, - "totalCosts": 137 + "totalCosts": 50 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "eu", + "name": "Basque", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 137 + "totalCosts": 50 }, "translated": { - "tmMatch": 0, - "default": 137, - "total": 137 + "tmMatch": 3, + "default": 47, + "total": 50 }, "targetTranslated": { - "tmMatch": 0, - "default": 166, - "total": 166 + "tmMatch": 4, + "default": 36, + "total": 40 }, "translatedByMt": { "tmMatch": 0, @@ -15483,9 +15067,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 137, - "total": 137 + "tmMatch": 3, + "default": 47, + "total": 50 }, "approvalCosts": { "tmMatch": 0, @@ -15497,37 +15081,37 @@ }, { "user": { - "id": 15250098, - "username": "dangg", - "fullName": "dangg", + "id": 15135089, + "username": "indwm", + "fullName": "indwm", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15250098/medium/e0bf575c362ae1ae0c478a8e5004e162.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15135089/medium/ad0dde7b6943eb1bdc2b8c64223dd070.png", "preTranslated": 0, - "totalCosts": 992 + "totalCosts": 279 }, "languages": [ { "language": { - "id": "vi", - "name": "Vietnamese", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 992 + "totalCosts": 279 }, "translated": { - "tmMatch": 26, - "default": 966, - "total": 992 + "tmMatch": 0, + "default": 279, + "total": 279 }, "targetTranslated": { - "tmMatch": 49, - "default": 1369, - "total": 1418 + "tmMatch": 0, + "default": 595, + "total": 595 }, "translatedByMt": { - "tmMatch": 11, - "default": 12, - "total": 23 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15535,9 +15119,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 26, - "default": 966, - "total": 992 + "tmMatch": 0, + "default": 279, + "total": 279 }, "approvalCosts": { "tmMatch": 0, @@ -15549,47 +15133,47 @@ }, { "user": { - "id": 15212772, - "username": "cokeyy", - "fullName": "ehrsa (cokeyy)", + "id": 14957177, + "username": "joeurassa", + "fullName": "joeurassa", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15212772/medium/091cb85c4d9daaf8ab2fcdb25c87d573.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14957177/medium/a88c293bcc8b749456d71edee74329f5.jpeg", "preTranslated": 0, - "totalCosts": 1044 + "totalCosts": 4057 }, "languages": [ { "language": { - "id": "sq", - "name": "Albanian", + "id": "sw", + "name": "Swahili", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1044 + "totalCosts": 4057 }, "translated": { - "tmMatch": 8, - "default": 1036, - "total": 1044 + "tmMatch": 65, + "default": 3992, + "total": 4057 }, "targetTranslated": { - "tmMatch": 8, - "default": 746, - "total": 754 + "tmMatch": 72, + "default": 4055, + "total": 4127 }, "translatedByMt": { - "tmMatch": 0, + "tmMatch": 1, "default": 0, - "total": 0 + "total": 1 }, "approved": { "tmMatch": 0, "default": 0, - "total": 0 + "total": 852 }, "translationCosts": { - "tmMatch": 8, - "default": 1036, - "total": 1044 + "tmMatch": 65, + "default": 3992, + "total": 4057 }, "approvalCosts": { "tmMatch": 0, @@ -15601,37 +15185,37 @@ }, { "user": { - "id": 14568334, - "username": "norhorn", - "fullName": "george kitsoukakis (norhorn)", + "id": 15270742, + "username": "julgz", + "fullName": "julgz", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/85dd0d12b6d2d490447bbba939a888ba.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15270742/medium/2975fe9718959071e4db816a58e009d1.png", "preTranslated": 0, - "totalCosts": 6359 + "totalCosts": 10 }, "languages": [ { "language": { - "id": "el", - "name": "Greek", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 6359 + "totalCosts": 10 }, "translated": { - "tmMatch": 146, - "default": 6213, - "total": 6359 + "tmMatch": 0, + "default": 10, + "total": 10 }, "targetTranslated": { - "tmMatch": 163, - "default": 6611, - "total": 6774 + "tmMatch": 0, + "default": 11, + "total": 11 }, "translatedByMt": { - "tmMatch": 12, - "default": 6, - "total": 18 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15639,9 +15223,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 146, - "default": 6213, - "total": 6359 + "tmMatch": 0, + "default": 10, + "total": 10 }, "approvalCosts": { "tmMatch": 0, @@ -15653,37 +15237,37 @@ }, { "user": { - "id": 15245070, - "username": "fohefxl", - "fullName": "haxm haxm (fohefxl)", + "id": 15285990, + "username": "lxlxw", + "fullName": "lx5 (lxlxw)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15245070/medium/bdbde78d9ac80dd2e13dcf34a1de03f5.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15285990/medium/4ff4140a6e7161de6f8cf6fe8fd728ca.jpeg", "preTranslated": 0, - "totalCosts": 616 + "totalCosts": 250 }, "languages": [ { "language": { - "id": "ar", - "name": "Arabic", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 616 + "totalCosts": 250 }, "translated": { - "tmMatch": 5, - "default": 611, - "total": 616 + "tmMatch": 96, + "default": 154, + "total": 250 }, "targetTranslated": { - "tmMatch": 6, - "default": 561, - "total": 567 + "tmMatch": 169, + "default": 237, + "total": 406 }, "translatedByMt": { - "tmMatch": 4, - "default": 164, - "total": 168 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15691,9 +15275,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 5, - "default": 611, - "total": 616 + "tmMatch": 96, + "default": 154, + "total": 250 }, "approvalCosts": { "tmMatch": 0, @@ -15705,32 +15289,32 @@ }, { "user": { - "id": 15240216, - "username": "miaomiaohong98", - "fullName": "hong miaomiao (miaomiaohong98)", + "id": 15293776, + "username": "i.rarafy", + "fullName": "rarafy (i.rarafy)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15240216/medium/1b77e602ead01d201a1c8f4bde74aac2.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15293776/medium/c65704f36f82067d1bb1ad464ad54ba1.png", "preTranslated": 0, - "totalCosts": 37 + "totalCosts": 3 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "ja", + "name": "Japanese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 37 + "totalCosts": 3 }, "translated": { "tmMatch": 0, - "default": 37, - "total": 37 + "default": 3, + "total": 3 }, "targetTranslated": { "tmMatch": 0, - "default": 74, - "total": 74 + "default": 7, + "total": 7 }, "translatedByMt": { "tmMatch": 0, @@ -15744,8 +15328,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 37, - "total": 37 + "default": 3, + "total": 3 }, "approvalCosts": { "tmMatch": 0, @@ -15757,37 +15341,37 @@ }, { "user": { - "id": 14365554, - "username": "hydai", - "fullName": "hydai", + "id": 15271954, + "username": "simpleboy", + "fullName": "simpleboy", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14365554/medium/0eaad18aa54e9f87636e0bf3f5d20dc3.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15271954/medium/5bac3cfeb619cfcf28a4e3d02f697d60.jpg", "preTranslated": 0, - "totalCosts": 219 + "totalCosts": 819 }, "languages": [ { "language": { - "id": "zh-TW", - "name": "Chinese Traditional", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 219 + "totalCosts": 819 }, "translated": { - "tmMatch": 8, - "default": 211, - "total": 219 + "tmMatch": 0, + "default": 819, + "total": 819 }, "targetTranslated": { - "tmMatch": 17, - "default": 349, - "total": 366 + "tmMatch": 0, + "default": 1306, + "total": 1306 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 7, + "total": 7 }, "approved": { "tmMatch": 0, @@ -15795,9 +15379,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 211, - "total": 219 + "tmMatch": 0, + "default": 819, + "total": 819 }, "approvalCosts": { "tmMatch": 0, @@ -15809,48 +15393,48 @@ }, { "user": { - "id": 15234592, - "username": "urunny", - "fullName": "hyungsuk ahn (urunny)", + "id": 14921757, + "username": "trungkien.nt92", + "fullName": "trung kiên nguyễn (trungkien.nt92)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15234592/medium/518f4895665a62a0fb8d864108f31dbe.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14921757/medium/80e6fd8d3f0be1e5feab67dccc614d82.jpg", "preTranslated": 0, - "totalCosts": 36 + "totalCosts": 4920 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "vi", + "name": "Vietnamese", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 36 + "totalCosts": 4920 }, "translated": { - "tmMatch": 0, - "default": 36, - "total": 36 + "tmMatch": 55, + "default": 4865, + "total": 4920 }, "targetTranslated": { - "tmMatch": 0, - "default": 33, - "total": 33 + "tmMatch": 85, + "default": 7458, + "total": 7543 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 6, + "total": 6 }, "approved": { "tmMatch": 0, "default": 0, "total": 0 }, - "translationCosts": { - "tmMatch": 0, - "default": 36, - "total": 36 - }, + "translationCosts": { + "tmMatch": 55, + "default": 4865, + "total": 4920 + }, "approvalCosts": { "tmMatch": 0, "default": 0, @@ -15861,37 +15445,37 @@ }, { "user": { - "id": 15246162, - "username": "idontdom_eth", - "fullName": "idontdom_eth", + "id": 15264882, + "username": "villysony", + "fullName": "vishnu watcharanopkun (villysony)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246162/medium/f6165a302a7a35acb06f3f4ef4d057c1.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15264882/medium/4cd0aab731abe22b4b4994359846e830.jpeg", "preTranslated": 0, - "totalCosts": 32 + "totalCosts": 18 }, "languages": [ { "language": { - "id": "pl", - "name": "Polish", + "id": "th", + "name": "Thai", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 32 + "totalCosts": 18 }, "translated": { - "tmMatch": 0, - "default": 32, - "total": 32 + "tmMatch": 5, + "default": 13, + "total": 18 }, "targetTranslated": { - "tmMatch": 0, - "default": 26, - "total": 26 + "tmMatch": 1, + "default": 3, + "total": 4 }, "translatedByMt": { "tmMatch": 0, - "default": 7, - "total": 7 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15899,9 +15483,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 32, - "total": 32 + "tmMatch": 5, + "default": 13, + "total": 18 }, "approvalCosts": { "tmMatch": 0, @@ -15913,13 +15497,13 @@ }, { "user": { - "id": 15137116, - "username": "isiahlin", - "fullName": "isiahlin", + "id": 15254466, + "username": "web3driver", + "fullName": "web3driver", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137116/medium/f09a868c77db00f7c111674b9f55083e.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15254466/medium/adde580dfcc331b56eb1c3823aaa9f0d.png", "preTranslated": 0, - "totalCosts": 182 + "totalCosts": 1380 }, "languages": [ { @@ -15928,22 +15512,22 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 182 + "totalCosts": 1380 }, "translated": { - "tmMatch": 21, - "default": 161, - "total": 182 + "tmMatch": 52, + "default": 1328, + "total": 1380 }, "targetTranslated": { - "tmMatch": 37, - "default": 262, - "total": 299 + "tmMatch": 90, + "default": 2274, + "total": 2364 }, "translatedByMt": { "tmMatch": 0, - "default": 13, - "total": 13 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -15951,9 +15535,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 21, - "default": 161, - "total": 182 + "tmMatch": 52, + "default": 1328, + "total": 1380 }, "approvalCosts": { "tmMatch": 0, @@ -15965,37 +15549,37 @@ }, { "user": { - "id": 15247956, - "username": "kenip", - "fullName": "kenip", + "id": 15193608, + "username": "yuping", + "fullName": "yuping", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247956/medium/d5a5d69f6aecc80fe75873d940743a36.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15193608/medium/c3b5342b0fef9f5f51eff5b0c2b93c70.jpg", "preTranslated": 0, - "totalCosts": 392 + "totalCosts": 9577 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 392 + "totalCosts": 9577 }, "translated": { - "tmMatch": 13, - "default": 379, - "total": 392 + "tmMatch": 1354, + "default": 8223, + "total": 9577 }, "targetTranslated": { - "tmMatch": 18, - "default": 413, - "total": 431 + "tmMatch": 2094, + "default": 12480, + "total": 14574 }, "translatedByMt": { - "tmMatch": 0, - "default": 13, - "total": 13 + "tmMatch": 1, + "default": 0, + "total": 1 }, "approved": { "tmMatch": 0, @@ -16003,9 +15587,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 13, - "default": 379, - "total": 392 + "tmMatch": 1354, + "default": 8223, + "total": 9577 }, "approvalCosts": { "tmMatch": 0, @@ -16017,32 +15601,32 @@ }, { "user": { - "id": 15246102, - "username": "ll1198518639", - "fullName": "lin luo (ll1198518639)", + "id": 12465480, + "username": "ondernuray", + "fullName": "Önder Nuray (ondernuray)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15246102/medium/16ba0a18555a5486ec1e324616a4f267.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12465480/medium/10edc9a851d4c50c0a414f4b24955423.png", "preTranslated": 0, - "totalCosts": 223 + "totalCosts": 4555 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "tr", + "name": "Turkish", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 223 + "totalCosts": 4555 }, "translated": { - "tmMatch": 1, - "default": 222, - "total": 223 + "tmMatch": 371, + "default": 4184, + "total": 4555 }, "targetTranslated": { - "tmMatch": 1, - "default": 373, - "total": 374 + "tmMatch": 300, + "default": 3321, + "total": 3621 }, "translatedByMt": { "tmMatch": 0, @@ -16055,9 +15639,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 1, - "default": 222, - "total": 223 + "tmMatch": 371, + "default": 4184, + "total": 4555 }, "approvalCosts": { "tmMatch": 0, @@ -16069,13 +15653,13 @@ }, { "user": { - "id": 15190490, - "username": "mina_k", - "fullName": "mina k (mina_k)", + "id": 15269290, + "username": "John01", + "fullName": "Ιωάννης Λιάλιος (John01)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15190490/medium/18b89670b95d176f8c85e25d50135806.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269290/medium/b903da51f95d4eaece4abb52eb8003de.png", "preTranslated": 0, - "totalCosts": 740 + "totalCosts": 73 }, "languages": [ { @@ -16084,22 +15668,22 @@ "name": "Greek", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 740 + "totalCosts": 73 }, "translated": { - "tmMatch": 8, - "default": 732, - "total": 740 + "tmMatch": 0, + "default": 73, + "total": 73 }, "targetTranslated": { - "tmMatch": 8, - "default": 781, - "total": 789 + "tmMatch": 0, + "default": 80, + "total": 80 }, "translatedByMt": { "tmMatch": 0, - "default": 332, - "total": 332 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -16107,9 +15691,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 8, - "default": 732, - "total": 740 + "tmMatch": 0, + "default": 73, + "total": 73 }, "approvalCosts": { "tmMatch": 0, @@ -16121,37 +15705,37 @@ }, { "user": { - "id": 14313472, - "username": "ntotao", - "fullName": "ntotao", + "id": 13495634, + "username": "aleksnder74", + "fullName": "Александр Кирьянов (aleksnder74)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14313472/medium/c09ed4450f8a65235c896745bd06abd0.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13495634/medium/2bb6c9935c48233c344c42e22f7a0b64.jpg", "preTranslated": 0, - "totalCosts": 1547 + "totalCosts": 105 }, "languages": [ { "language": { - "id": "it", - "name": "Italian", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1547 + "totalCosts": 105 }, "translated": { - "tmMatch": 633, - "default": 914, - "total": 1547 + "tmMatch": 11, + "default": 94, + "total": 105 }, "targetTranslated": { - "tmMatch": 731, - "default": 1005, - "total": 1736 + "tmMatch": 13, + "default": 87, + "total": 100 }, "translatedByMt": { - "tmMatch": 14, - "default": 8, - "total": 22 + "tmMatch": 5, + "default": 84, + "total": 89 }, "approved": { "tmMatch": 0, @@ -16159,9 +15743,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 633, - "default": 914, - "total": 1547 + "tmMatch": 11, + "default": 94, + "total": 105 }, "approvalCosts": { "tmMatch": 0, @@ -16173,32 +15757,32 @@ }, { "user": { - "id": 15226658, - "username": "JorgeRibeiro", - "fullName": "pinygmr (JorgeRibeiro)", + "id": 15214262, + "username": "andrejklim480", + "fullName": "Андрей Клим (andrejklim480)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226658/medium/fcb888d4fcb79f281a9174d1256ac3db.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214262/medium/5727db09ace3c2d258ba36991ad941ea.jpg", "preTranslated": 0, - "totalCosts": 41 + "totalCosts": 370 }, "languages": [ { "language": { - "id": "pt-PT", - "name": "Portuguese", + "id": "cs", + "name": "Czech", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 41 + "totalCosts": 9 }, "translated": { "tmMatch": 0, - "default": 41, - "total": 41 + "default": 9, + "total": 9 }, "targetTranslated": { "tmMatch": 0, - "default": 48, - "total": 48 + "default": 7, + "total": 7 }, "translatedByMt": { "tmMatch": 0, @@ -16212,45 +15796,32 @@ }, "translationCosts": { "tmMatch": 0, - "default": 41, - "total": 41 + "default": 9, + "total": 9 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15175928, - "username": "smallironman666", - "fullName": "small white (smallironman666)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15175928/medium/28720f576059b41681c218d7650c11d8.jpeg", - "preTranslated": 0, - "totalCosts": 188 - }, - "languages": [ + }, { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 188 + "totalCosts": 353 }, "translated": { - "tmMatch": 0, - "default": 188, - "total": 188 + "tmMatch": 77, + "default": 276, + "total": 353 }, "targetTranslated": { - "tmMatch": 0, - "default": 334, - "total": 334 + "tmMatch": 70, + "default": 251, + "total": 321 }, "translatedByMt": { "tmMatch": 0, @@ -16263,9 +15834,48 @@ "total": 0 }, "translationCosts": { + "tmMatch": 77, + "default": 276, + "total": 353 + }, + "approvalCosts": { + "tmMatch": 0, + "default": 0, + "total": 0 + } + }, + { + "language": { + "id": "es-EM", + "name": "Spanish (Modern)", + "tmSavings": 0, + "preTranslate": 0, + "totalCosts": 8 + }, + "translated": { + "tmMatch": 8, + "default": 0, + "total": 8 + }, + "targetTranslated": { + "tmMatch": 10, + "default": 0, + "total": 10 + }, + "translatedByMt": { + "tmMatch": 0, + "default": 0, + "total": 0 + }, + "approved": { "tmMatch": 0, - "default": 188, - "total": 188 + "default": 0, + "total": 0 + }, + "translationCosts": { + "tmMatch": 8, + "default": 0, + "total": 8 }, "approvalCosts": { "tmMatch": 0, @@ -16277,37 +15887,37 @@ }, { "user": { - "id": 15097185, - "username": "sunbeam.", - "fullName": "sunbeam (sunbeam.)", + "id": 15233448, + "username": "ATATAWKA", + "fullName": "БОГ (ATATAWKA)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15097185/medium/ef91246c2b7ee8bc15d5b2834ce6fc70.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233448/medium/7aecc0f3a4fd3fbda82e8214fdf5fbe7.jpeg", "preTranslated": 0, - "totalCosts": 1220 + "totalCosts": 121 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 1220 + "totalCosts": 121 }, "translated": { - "tmMatch": 6, - "default": 1214, - "total": 1220 + "tmMatch": 0, + "default": 121, + "total": 121 }, "targetTranslated": { - "tmMatch": 14, - "default": 1643, - "total": 1657 + "tmMatch": 0, + "default": 102, + "total": 102 }, "translatedByMt": { - "tmMatch": 2, - "default": 886, - "total": 888 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -16315,9 +15925,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 1214, - "total": 1220 + "tmMatch": 0, + "default": 121, + "total": 121 }, "approvalCosts": { "tmMatch": 0, @@ -16329,37 +15939,37 @@ }, { "user": { - "id": 15248770, - "username": "theflyhigh", - "fullName": "theflyhigh", + "id": 15274392, + "username": "kostya.74.74", + "fullName": "Костя Аристов (kostya.74.74)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15248770/medium/b8e4a3d00862335ecfea62d9c78548bc.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15274392/medium/1479cb1e29576e3989b6fbf7c807eb29.jpeg", "preTranslated": 0, - "totalCosts": 2 + "totalCosts": 6 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 2 + "totalCosts": 6 }, "translated": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 6, + "total": 6 }, "targetTranslated": { "tmMatch": 0, - "default": 4, - "total": 4 + "default": 6, + "total": 6 }, "translatedByMt": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 3, + "total": 3 }, "approved": { "tmMatch": 0, @@ -16368,8 +15978,8 @@ }, "translationCosts": { "tmMatch": 0, - "default": 2, - "total": 2 + "default": 6, + "total": 6 }, "approvalCosts": { "tmMatch": 0, @@ -16381,37 +15991,37 @@ }, { "user": { - "id": 14921757, - "username": "trungkien.nt92", - "fullName": "trung kiên nguyễn (trungkien.nt92)", + "id": 15199956, + "username": "zhooookova", + "fullName": "Надежда Жукова (zhooookova)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14921757/medium/80e6fd8d3f0be1e5feab67dccc614d82.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15199956/medium/74aea56a748b12af52448b2ecf7ca2ac.png", "preTranslated": 0, - "totalCosts": 3058 + "totalCosts": 3974 }, "languages": [ { "language": { - "id": "vi", - "name": "Vietnamese", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3058 + "totalCosts": 3974 }, "translated": { - "tmMatch": 86, - "default": 2972, - "total": 3058 + "tmMatch": 103, + "default": 3871, + "total": 3974 }, "targetTranslated": { - "tmMatch": 140, - "default": 4840, - "total": 4980 + "tmMatch": 92, + "default": 3345, + "total": 3437 }, "translatedByMt": { - "tmMatch": 6, - "default": 10, - "total": 16 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -16419,9 +16029,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 86, - "default": 2972, - "total": 3058 + "tmMatch": 103, + "default": 3871, + "total": 3974 }, "approvalCosts": { "tmMatch": 0, @@ -16433,37 +16043,37 @@ }, { "user": { - "id": 15152978, - "username": "moc2", - "fullName": "w.moc (moc2)", + "id": 14564238, + "username": "FreddyAndresParra", + "fullName": "Фредди Андрес Парра Орельяна (FreddyAndresParra)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15152978/medium/818fdcadb68f65bb751549ec25cf1a07_default.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14564238/medium/e6feebc5a27754079a07907fffac8389.jpg", "preTranslated": 0, - "totalCosts": 67 + "totalCosts": 2285 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "es-EM", + "name": "Spanish (Modern)", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 67 + "totalCosts": 2285 }, "translated": { - "tmMatch": 0, - "default": 67, - "total": 67 + "tmMatch": 75, + "default": 2210, + "total": 2285 }, "targetTranslated": { - "tmMatch": 0, - "default": 49, - "total": 49 + "tmMatch": 105, + "default": 2503, + "total": 2608 }, "translatedByMt": { "tmMatch": 0, - "default": 0, - "total": 0 + "default": 3, + "total": 3 }, "approved": { "tmMatch": 0, @@ -16471,9 +16081,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 0, - "default": 67, - "total": 67 + "tmMatch": 75, + "default": 2210, + "total": 2285 }, "approvalCosts": { "tmMatch": 0, @@ -16485,37 +16095,37 @@ }, { "user": { - "id": 15193608, - "username": "yuping", - "fullName": "yuping", + "id": 15283644, + "username": "VrotEbalETH", + "fullName": "эй ты 1352791ш (VrotEbalETH)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15193608/medium/c3b5342b0fef9f5f51eff5b0c2b93c70.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15283644/medium/27f2bab6237cea341a224e3b1268f0ef.png", "preTranslated": 0, - "totalCosts": 15233 + "totalCosts": 126 }, "languages": [ { "language": { - "id": "zh-CN", - "name": "Chinese Simplified", + "id": "ru", + "name": "Russian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 15233 + "totalCosts": 76 }, "translated": { - "tmMatch": 843, - "default": 14390, - "total": 15233 + "tmMatch": 1, + "default": 75, + "total": 76 }, "targetTranslated": { - "tmMatch": 1429, - "default": 22065, - "total": 23494 + "tmMatch": 3, + "default": 52, + "total": 55 }, "translatedByMt": { - "tmMatch": 13, - "default": 42, - "total": 55 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -16523,51 +16133,38 @@ "total": 0 }, "translationCosts": { - "tmMatch": 843, - "default": 14390, - "total": 15233 + "tmMatch": 1, + "default": 75, + "total": 76 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 12465480, - "username": "ondernuray", - "fullName": "Önder Nuray (ondernuray)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12465480/medium/10edc9a851d4c50c0a414f4b24955423.png", - "preTranslated": 0, - "totalCosts": 510 - }, - "languages": [ + }, { "language": { - "id": "tr", - "name": "Turkish", + "id": "uk", + "name": "Ukrainian", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 510 + "totalCosts": 50 }, "translated": { - "tmMatch": 43, - "default": 467, - "total": 510 + "tmMatch": 2, + "default": 48, + "total": 50 }, "targetTranslated": { - "tmMatch": 32, - "default": 406, - "total": 438 + "tmMatch": 3, + "default": 6, + "total": 9 }, "translatedByMt": { - "tmMatch": 6, + "tmMatch": 0, "default": 0, - "total": 6 + "total": 0 }, "approved": { "tmMatch": 0, @@ -16575,9 +16172,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 43, - "default": 467, - "total": 510 + "tmMatch": 2, + "default": 48, + "total": 50 }, "approvalCosts": { "tmMatch": 0, @@ -16589,37 +16186,37 @@ }, { "user": { - "id": 15214262, - "username": "andrejklim480", - "fullName": "Андрей Клим (andrejklim480)", + "id": 15207930, + "username": "rayg", + "fullName": "راجي الحارثي (rayg)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214262/medium/4a4b628824641d9cbdac74e00ecdb39d.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15207930/medium/b810ceacea24be83757399fa7cc431ef_default.png", "preTranslated": 0, - "totalCosts": 79 + "totalCosts": 47 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "ar", + "name": "Arabic", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 79 + "totalCosts": 47 }, "translated": { - "tmMatch": 9, - "default": 70, - "total": 79 + "tmMatch": 0, + "default": 47, + "total": 47 }, "targetTranslated": { - "tmMatch": 10, - "default": 62, - "total": 72 + "tmMatch": 0, + "default": 40, + "total": 40 }, "translatedByMt": { - "tmMatch": 3, - "default": 70, - "total": 73 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -16627,9 +16224,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 9, - "default": 70, - "total": 79 + "tmMatch": 0, + "default": 47, + "total": 47 }, "approvalCosts": { "tmMatch": 0, @@ -16641,37 +16238,37 @@ }, { "user": { - "id": 15199956, - "username": "zhooookova", - "fullName": "Надежда Жукова (zhooookova)", + "id": 15279280, + "username": "CHOOCHATJUMPATHONG", + "fullName": "ชูชาติ จําปาทอง (CHOOCHATJUMPATHONG)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15199956/medium/74aea56a748b12af52448b2ecf7ca2ac.png", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15279280/medium/21c0636452ffadcdd0672a0c455ba748.png", "preTranslated": 0, - "totalCosts": 707 + "totalCosts": 77 }, "languages": [ { "language": { - "id": "ru", - "name": "Russian", + "id": "ca", + "name": "Catalan", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 707 + "totalCosts": 37 }, "translated": { - "tmMatch": 61, - "default": 646, - "total": 707 + "tmMatch": 0, + "default": 37, + "total": 37 }, "targetTranslated": { - "tmMatch": 55, - "default": 635, - "total": 690 + "tmMatch": 0, + "default": 37, + "total": 37 }, "translatedByMt": { "tmMatch": 0, - "default": 5, - "total": 5 + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -16679,51 +16276,38 @@ "total": 0 }, "translationCosts": { - "tmMatch": 61, - "default": 646, - "total": 707 + "tmMatch": 0, + "default": 37, + "total": 37 }, "approvalCosts": { "tmMatch": 0, "default": 0, "total": 0 } - } - ] - }, - { - "user": { - "id": 15214436, - "username": "cheremmmisin", - "fullName": "Роман Черемисин (cheremmmisin)", - "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214436/medium/cebd8b7747a8b3ae790e25828eb135ed_default.png", - "preTranslated": 0, - "totalCosts": 352 - }, - "languages": [ + }, { "language": { - "id": "ru", - "name": "Russian", + "id": "th", + "name": "Thai", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 352 + "totalCosts": 40 }, "translated": { - "tmMatch": 3, - "default": 349, - "total": 352 + "tmMatch": 0, + "default": 40, + "total": 40 }, "targetTranslated": { - "tmMatch": 2, - "default": 305, - "total": 307 + "tmMatch": 0, + "default": 40, + "total": 40 }, "translatedByMt": { - "tmMatch": 1, - "default": 41, - "total": 42 + "tmMatch": 0, + "default": 0, + "total": 0 }, "approved": { "tmMatch": 0, @@ -16731,9 +16315,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 349, - "total": 352 + "tmMatch": 0, + "default": 40, + "total": 40 }, "approvalCosts": { "tmMatch": 0, @@ -16745,32 +16329,32 @@ }, { "user": { - "id": 14564238, - "username": "FreddyAndresParra", - "fullName": "Фредди Андрес Парра Орельяна (FreddyAndresParra)", + "id": 14060898, + "username": "PoknoRoyal", + "fullName": "ប៉ុកណូ រ៉ូយ៉ាល់ (PoknoRoyal)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14564238/medium/e6feebc5a27754079a07907fffac8389.jpg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14060898/medium/ab3c1d769772b14369a1d98492a8bb0c.png", "preTranslated": 0, - "totalCosts": 72 + "totalCosts": 270 }, "languages": [ { "language": { - "id": "es-EM", - "name": "Spanish (Modern)", + "id": "km", + "name": "Khmer", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 72 + "totalCosts": 270 }, "translated": { - "tmMatch": 20, - "default": 52, - "total": 72 + "tmMatch": 3, + "default": 267, + "total": 270 }, "targetTranslated": { - "tmMatch": 21, - "default": 57, - "total": 78 + "tmMatch": 4, + "default": 269, + "total": 273 }, "translatedByMt": { "tmMatch": 0, @@ -16783,9 +16367,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 20, - "default": 52, - "total": 72 + "tmMatch": 3, + "default": 267, + "total": 270 }, "approvalCosts": { "tmMatch": 0, @@ -16797,13 +16381,13 @@ }, { "user": { - "id": 15217074, - "username": "timothy0912", - "fullName": "劉庭聿 (timothy0912)", + "id": 15289398, + "username": "howardwu83", + "fullName": "吳成昊 (howardwu83)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15217074/medium/3a9c9afb0a35b0b1ac680ba0098c2651.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15289398/medium/86d1f2d23a0b34ad5630a2bbd6199b32.jpeg", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 15 }, "languages": [ { @@ -16812,17 +16396,17 @@ "name": "Chinese Traditional", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 15 }, "translated": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 2, + "default": 13, + "total": 15 }, "targetTranslated": { - "tmMatch": 8, - "default": 0, - "total": 8 + "tmMatch": 7, + "default": 18, + "total": 25 }, "translatedByMt": { "tmMatch": 0, @@ -16835,9 +16419,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, - "default": 0, - "total": 3 + "tmMatch": 2, + "default": 13, + "total": 15 }, "approvalCosts": { "tmMatch": 0, @@ -16849,32 +16433,32 @@ }, { "user": { - "id": 15201798, - "username": "Ekuboex", - "fullName": "松村篤 (Ekuboex)", + "id": 15282666, + "username": "guozhiyu1202", + "fullName": "流藻 (guozhiyu1202)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201798/medium/4e401de146947b2e25071ebe1ca31a3b.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15282666/medium/d76840814978ab08cdfe32cb9f626599.jpeg", "preTranslated": 0, - "totalCosts": 847 + "totalCosts": 2 }, "languages": [ { "language": { - "id": "ja", - "name": "Japanese", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 847 + "totalCosts": 2 }, "translated": { - "tmMatch": 11, - "default": 836, - "total": 847 + "tmMatch": 2, + "default": 0, + "total": 2 }, "targetTranslated": { - "tmMatch": 23, - "default": 1955, - "total": 1978 + "tmMatch": 4, + "default": 0, + "total": 4 }, "translatedByMt": { "tmMatch": 0, @@ -16887,9 +16471,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 11, - "default": 836, - "total": 847 + "tmMatch": 2, + "default": 0, + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -16901,13 +16485,13 @@ }, { "user": { - "id": 15228468, - "username": "k12312351", - "fullName": "葉子 (k12312351)", + "id": 15254628, + "username": "a957417045", + "fullName": "蒙桢 (a957417045)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15228468/medium/a24ddcd7102203c115aa134fe646b74d.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15254628/medium/586746fc5db81908724cdbc824ff1b59.gif", "preTranslated": 0, - "totalCosts": 3 + "totalCosts": 2 }, "languages": [ { @@ -16916,17 +16500,17 @@ "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 3 + "totalCosts": 2 }, "translated": { - "tmMatch": 3, + "tmMatch": 2, "default": 0, - "total": 3 + "total": 2 }, "targetTranslated": { - "tmMatch": 6, + "tmMatch": 4, "default": 0, - "total": 6 + "total": 4 }, "translatedByMt": { "tmMatch": 0, @@ -16939,9 +16523,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 3, + "tmMatch": 2, "default": 0, - "total": 3 + "total": 2 }, "approvalCosts": { "tmMatch": 0, @@ -16953,32 +16537,32 @@ }, { "user": { - "id": 14564174, - "username": "lch5490", - "fullName": "임치헌 (lch5490)", + "id": 15290682, + "username": "kelegele", + "fullName": "蕉太 (kelegele)", "userRole": "Translator", - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14564174/medium/b8e4fee1f0c81e8ad49b606df8b07208.jpeg", + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15290682/medium/3f29686a60282fce10aa9b9b72a6d92c.jpeg", "preTranslated": 0, - "totalCosts": 110 + "totalCosts": 8 }, "languages": [ { "language": { - "id": "ko", - "name": "Korean", + "id": "zh-CN", + "name": "Chinese Simplified", "tmSavings": 0, "preTranslate": 0, - "totalCosts": 110 + "totalCosts": 8 }, "translated": { - "tmMatch": 6, - "default": 104, - "total": 110 + "tmMatch": 2, + "default": 6, + "total": 8 }, "targetTranslated": { - "tmMatch": 3, - "default": 93, - "total": 96 + "tmMatch": 4, + "default": 9, + "total": 13 }, "translatedByMt": { "tmMatch": 0, @@ -16991,9 +16575,9 @@ "total": 0 }, "translationCosts": { - "tmMatch": 6, - "default": 104, - "total": 110 + "tmMatch": 2, + "default": 6, + "total": 8 }, "approvalCosts": { "tmMatch": 0, From dd4f98820cd6b0bf429cca2cb54f8197a599c4ae Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 2 Jun 2022 18:24:47 -0700 Subject: [PATCH 296/298] Apply suggestions from code review Co-authored-by: Corwin Smith --- .../docs/scaling/sidechains/index.md | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/src/content/developers/docs/scaling/sidechains/index.md b/src/content/developers/docs/scaling/sidechains/index.md index bd4cb6be047..17770310cc1 100644 --- a/src/content/developers/docs/scaling/sidechains/index.md +++ b/src/content/developers/docs/scaling/sidechains/index.md @@ -25,7 +25,7 @@ One of the qualities that make sidechains unique (i.e., different from Ethereum) Like Ethereum, sidechains have validating nodes that verify and process transactions, produce blocks, and store the blockchain state. Validators are also responsible for maintaining consensus across the network and securing it against malicious attacks. -#### Block parameters +#### Block parameters {#block-parameters} Ethereum places limits on [block times](/developers/docs/blocks/#block-time) (i.e., the time it takes to produce new blocks) and [block sizes](/developers/docs/blocks/#block-size) (i.e., the amount of data contained per block denominated in gas). Conversely, sidechains often adopt different parameters, such as faster block times and higher gas limits, to achieve high throughput, fast transactions, and low fees. @@ -37,7 +37,7 @@ For blockchains to scale without harming decentralization, running a node must b Some sidechains are EVM-compatible and are able to execute contracts developed for the [Ethereum Virtual Machine (EVM)](/developers/docs/evm/). EVM-compatible sidechains support smart contracts [written in Solidity](/developers/docs/smart-contracts/languages/), as well as other EVM smart contract languages, which means smart contracts written for Ethereum Mainnet will also work on EVM-compatible sidechains. -This means if you want to use your [dapp](/developers/docs/dapps/) on a sidechain, it's just a matter of deploying your [smart contract](/developers/docs/smart-contracts/) to this sidechain. It looks, feels, and acts just like Mainnet – you write contracts in Solidity, and interact with the chain via the sidechains RPC. +This means if you want to use your [dapp](/developers/docs/dapps/) on a sidechain, it's just a matter of deploying your [smart contract](/developers/docs/smart-contracts/) to this sidechain. It looks, feels, and acts just like Mainnet—you write contracts in Solidity, and interact with the chain via the sidechains RPC. Because sidechains are EVM-compatible, they are considered a useful [scaling solution](/developers/docs/scaling/) for Ethereum-native dapps. With your dapp on a sidechain, users can enjoy lower gas fees and faster transactions, especially if Mainnet is congested. @@ -47,26 +47,7 @@ However, as explained previously, using a sidechain involves significant trade-o In order for a separate blockchain to become a sidechain to Ethereum Mainnet it needs the ability to facilitate the transfer of assets from and to Ethereum Mainnet. This interoperability with Ethereum is achieved using a blockchain bridge. [Bridges](/bridges/) use smart contracts deployed on Ethereum Mainnet and a sidechain to control the bridging of funds between them. -While bridges help users move funds between Ethereum and the sidechain, the assets are not physically moved across the two chains. Instead, a "lock-mint-burn" mechanism is used for transferring value across chains. Here is a description of the actual process: - -- **Moving funds from Ethereum to a sidechain** - -Bob (an Ethereum user) wishes to use a sidechain. This is what he does to move funds from Mainnet to the sidechain: - -1. Bob sends ERC-20 tokens to a smart contract on the Ethereum chain (e.g. Ethereum) and pays the transaction fee. -2. Bob’s ERC-20 tokens are locked up in the smart contract, with the event being relayed to the smart contract on the sidechain. -3. Once it receives proof of Bob’s deposit, the sidechain’s smart contract triggers the creation or “minting” of an amount of tokens equal to Bob’s initial deposit. -4. Bob receives the new tokens in his wallet address and can use it to execute transactions on the sidechain. - -- **Moving funds from a sidechain to Ethereum Mainnet** - -Having concluded his business on the sidechain, Bob wants to withdraw his remaining funds to Ethereum Mainnet. This is what happens: - -1. Bob sends his remaining tokens to the sidechain’s smart contract for “burning”. Burning is a mechanism for destroying tokens by making them irrecoverable. -2. Information concerning Bob’s deposit transaction and the token burning is relayed to the smart contract on Ethereum. -3. The smart contract then triggers the release of Bob’s ERC-20 tokens on Ethereum, which are sent back to his wallet. - -Note: Bridging funds between Mainnet and sidechains carries its own set of problems (e.g., smart contracts can be hacked), which is another drawback associated with sidechains. More on the [risks of blockchain bridges](/bridges/#bridge-risk). +While bridges help users move funds between Ethereum and the sidechain, the assets are not physically moved across the two chains. Instead, mechanisms that typically involve minting and burning are used for transferring value across chains. More on [how bridges work](/developers/docs/bridges/#how-do-bridges-work). ## Pros and cons of sidechains {#pros-and-cons-of-sidechains} From 55643c2cfc0202b755c559ea722bd4800445fd60 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 2 Jun 2022 18:43:23 -0700 Subject: [PATCH 297/298] Update src/content/developers/docs/scaling/validium/index.md Co-authored-by: Corwin Smith --- src/content/developers/docs/scaling/validium/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/developers/docs/scaling/validium/index.md b/src/content/developers/docs/scaling/validium/index.md index 626745ea054..4c5390a58f0 100644 --- a/src/content/developers/docs/scaling/validium/index.md +++ b/src/content/developers/docs/scaling/validium/index.md @@ -7,7 +7,7 @@ incomplete: true sidebarDepth: 3 --- -Validium is a [scaling solution](/developers/docs/scaling/) that enforces integrity of transactions using validity proofs like [ZK-rollups](/developers/docs/scaling/zk-rollups/), but doesn’t store transaction data on the Ethereum Mainnet. While off-chain data availability introduces trade-offs, it can lead to massive improvements in scalability (validiums can process ~ 9,000 transactions, or more, per second). +Validium is a [scaling solution](/developers/docs/scaling/) that enforces integrity of transactions using validity proofs like [ZK-rollups](/developers/docs/scaling/zk-rollups/), but doesn’t store transaction data on the Ethereum Mainnet. While off-chain data availability introduces trade-offs, it can lead to massive improvements in scalability (validiums can process [~9,000 transactions, or more, per second](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)). ## Prerequisites {#prerequisites} From 1566f0a725928b10e26e6365af9e1038bc28d98d Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 2 Jun 2022 19:23:46 -0700 Subject: [PATCH 298/298] v4.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 50b42ff8744..3416356af97 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-org-website", - "version": "4.0.1", + "version": "4.1.0", "description": "Website of ethereum.org", "main": "index.js", "repository": "git@github.com:ethereum/ethereum-org-website.git",