From 2d14adab9fc378cc0ce574de1a8f82d3df0cfabd Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 21 Sep 2023 13:26:50 -0700 Subject: [PATCH 001/219] add Figment to SaaS products --- src/components/icons/Icons.stories.tsx | 2 ++ .../icons/staking/FigmentGlyphIcon.tsx | 21 ++++++++++++++ src/components/icons/staking/index.ts | 1 + src/data/staking-products.json | 29 +++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 src/components/icons/staking/FigmentGlyphIcon.tsx diff --git a/src/components/icons/Icons.stories.tsx b/src/components/icons/Icons.stories.tsx index c376606a59d..362946663ad 100644 --- a/src/components/icons/Icons.stories.tsx +++ b/src/components/icons/Icons.stories.tsx @@ -45,6 +45,7 @@ import { DockerGlyphIcon, EconomicalIcon, EthpoolGlyphIcon, + FigmentGlyphIcon, GreenCheckProductGlyphIcon, KilnGlyphIcon, LidoGlyphIcon, @@ -130,6 +131,7 @@ const iconsDefinitions = [ DockerGlyphIcon, EconomicalIcon, EthpoolGlyphIcon, + FigmentGlyphIcon, GreenCheckProductGlyphIcon, KilnGlyphIcon, LidoGlyphIcon, diff --git a/src/components/icons/staking/FigmentGlyphIcon.tsx b/src/components/icons/staking/FigmentGlyphIcon.tsx new file mode 100644 index 00000000000..e596fbb78ab --- /dev/null +++ b/src/components/icons/staking/FigmentGlyphIcon.tsx @@ -0,0 +1,21 @@ +import React from "react" +import { createIcon } from "@chakra-ui/react" + +export const FigmentGlyphIcon = createIcon({ + displayName: "FigmentGlyphIcon", + viewBox: "0 0 32 32", + defaultProps: { + width: "32px", + height: "32px", + fill: "none", + }, + path: [ + , + , + ], +}) diff --git a/src/components/icons/staking/index.ts b/src/components/icons/staking/index.ts index 6d5e4609e24..51e4eef70ba 100644 --- a/src/components/icons/staking/index.ts +++ b/src/components/icons/staking/index.ts @@ -11,6 +11,7 @@ export * from "./DefaultOpenSourceGlyphIcon" export * from "./DockerGlyphIcon" export * from "./EconomicalIcon" export * from "./EthpoolGlyphIcon" +export * from "./FigmentGlyphIcon" export * from "./GreenCheckProductGlyphIcon" export * from "./KilnGlyphIcon" export * from "./LaunchnodesGlyphIcon" diff --git a/src/data/staking-products.json b/src/data/staking-products.json index 9c28073bf33..0ee6333c54a 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -636,6 +636,35 @@ "eventAction": "Clicked", "eventName": "Clicked Sensei Node go to link" } + }, + { + "name": "Figment", + "imageName": "Figment", + "hue": 52, + "launchDate": "2021-12-31", + "url": "https://figment.io/", + "audits": [], + "minEth": 32, + "monthlyFee": 30, + "monthlyFeeUnit": "% execution rewards", + "isFoss": false, + "hasBugBounty": false, + "isTrustless": false, + "isPermissionless": false, + "pctMajorityExecutionClient": 85, + "pctMajorityConsensusClient": 0, + "isSelfCustody": false, + "platforms": ["Browser"], + "ui": ["GUI"], + "socials": { + "twitter": "https://twitter.com/Figment_io", + "linkedin": "https://www.linkedin.com/company/figment-io" + }, + "matomo": { + "eventCategory": "StakingProductCard", + "eventAction": "Clicked", + "eventName": "Clicked Figment go to link" + } } ], "pools": [ From f0e76ee8a850230e188602e32e431640766a7e8d Mon Sep 17 00:00:00 2001 From: kuhant <34025634+beetrootkid@users.noreply.github.com> Date: Mon, 9 Oct 2023 17:05:13 +0100 Subject: [PATCH 002/219] Update staking-products.json Added Consensys Staking --- src/data/staking-products.json | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/data/staking-products.json b/src/data/staking-products.json index a1b009cc854..1e428fa0933 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -705,6 +705,43 @@ "eventAction": "Clicked", "eventName": "Clicked RockX go to link" } + }, + { + "name": "ConsensysStaking", + "imageName": "ConsensysStaking", + "hue": 341, + "launchDate": "2020-12-01", + "url": "https://consensys.io/staking", + "audits": [ + { + "name": "SOC2 and Penttests", + "url": "https://app.drata.com/trust/9cbca327-0c38-11ee-865f-029d78a187d9" + } + ], + "minEth": 32, + "additionalStake": null, + "additionalStakeUnit": null, + "monthlyFee": null, + "monthlyFeeUnit": null, + "isFoss": true, + "hasBugBounty": true, + "isTrustless": false, + "isPermissionless": false, + "pctMajorityExecutionClient": 95, + "pctMajorityConsensusClient": 0, + "isSelfCustody": true, + "platforms": ["macOS", "Windows"], + "ui": ["GUI", "API", "GraphiQL"], + "socials": { + "discord": "https://discord.gg/AbYHBfjkDY", + "twitter": "https://twitter.com/ssv_network", + "github": "https://github.com/bloxapp/blox-live" + }, + "matomo": { + "eventCategory": "StakingProductCard", + "eventAction": "Clicked", + "eventName": "Clicked ConsensysStaking go to link" + } } ], "pools": [ From 592db9b17b4e6384d9416b5a24b1788be739efab Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:46:15 -0700 Subject: [PATCH 003/219] Update Figment exec client usage --- 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 0ee6333c54a..084fa5a5c25 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -651,7 +651,7 @@ "hasBugBounty": false, "isTrustless": false, "isPermissionless": false, - "pctMajorityExecutionClient": 85, + "pctMajorityExecutionClient": 50, "pctMajorityConsensusClient": 0, "isSelfCustody": false, "platforms": ["Browser"], From 3181b1f893b30a50b8c0f37870c18cc86fd3fb4e Mon Sep 17 00:00:00 2001 From: Rashid Ma Date: Fri, 20 Oct 2023 02:39:27 +0300 Subject: [PATCH 004/219] Content revision for blockchain bridges --- src/content/bridges/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/bridges/index.md b/src/content/bridges/index.md index 7f6a5664ab4..9073a4adac5 100644 --- a/src/content/bridges/index.md +++ b/src/content/bridges/index.md @@ -6,7 +6,7 @@ lang: en # Blockchain bridges {#prerequisites} -_Web3 has evolved into an ecosystem of L1 blockchains and L2 scaling solutions, each designed with unique capabilities and trade-offs. As the number of blockchains protocols increases, so does [the demand to move assets across chains](). To fulfill this demand, we need bridges._ +_Web3 has evolved into an ecosystem of L1 blockchains and L2 scaling solutions, each designed with unique capabilities and trade-offs. As the number of blockchain protocols increases, so does [the demand to move assets across chains](). To fulfill this demand, we need bridges._ @@ -16,7 +16,7 @@ Blockchain bridges work just like the bridges we know in the physical world. Jus Let's consider an example: -You're from the USA and are planning a trip to Europe. You have USD, but you need EUR to spend. To exchange your USD for EUR you can use a currency exchange for a small fee. +You're from the USA and are planning a trip to Europe, where only EUR is accepted. You can use a currency exchange for a small fee to exchange your USD for EUR. But, what do you do if you want to make a similar exchange to use a different blockchain? Let's say you want to exchange ETH on Ethereum Mainnet for ETH on [Arbitrum](https://arbitrum.io/). Like the currency exchange we made for EUR, we need a mechanism to move our ETH from Ethereum to Arbitrum. Bridges make such a transaction possible. In this case, [Arbitrum has a native bridge](https://bridge.arbitrum.io/) that can transfer ETH from Mainnet onto Arbitrum. @@ -57,7 +57,7 @@ If you have ETH on Ethereum Mainnet and you want to explore an alt L1 to try out ### Own native crypto assets {#own-native} -Let’s say you want to own native Bitcoin (BTC), but you only have funds on Ethereum Mainnet. To gain exposure to BTC on Ethereum, you can buy Wrapped Bitcoin (WBTC). However, WBTC is an ERC-20 token native to the Ethereum network, which means it’s an Ethereum version of Bitcoin and not the original asset on the Bitcoin blockchain. To own native BTC, you would have to bridge your assets from Ethereum to Bitcoin using a bridge. This will bridge your WBTC and convert it into native BTC. Alternatively, you might own BTC and want to use it in Ethereum DeFi protocols. This would require bridging the other way, from BTC to WBTC which can then be used as an asset on Ethereum. +Let’s say you want to own native Bitcoin (BTC), but you only have funds on Ethereum Mainnet. To gain exposure to BTC on Ethereum, you can buy Wrapped Bitcoin (WBTC). However, WBTC is an ERC-20 token native to the Ethereum network, which means it’s an Ethereum version of Bitcoin and not the original asset on the Bitcoin blockchain. To own a native BTC, you would have to bridge your assets from Ethereum to Bitcoin using a bridge. This will bridge your WBTC and convert it into a native BTC. Alternatively, you might own BTC and want to use it in Ethereum DeFi protocols. This would require bridging the other way, from BTC to WBTC which can then be used as an asset on Ethereum. You can also do all of the above using a centralized exchange. However, unless your funds are already on an exchange, it would involve multiple steps, and you’d likely be better off using a bridge. @@ -87,7 +87,7 @@ Imagine you’re at the airport security checkpoint. There are two types of chec 1. Manual Checkpoints — operated by officials who manually check all the details of your ticket and identity before handing over the boarding pass. 2. Self Check-In — operated by a machine where you put in your flight details and receive the boarding pass if everything checks out. -Manual checkpoints are similar to a trusted model as it depends upon a third party, i.e., the officials, for its operations. As a user, you trust the officials to make the right decisions and use your private information correctly. +A manual checkpoint is similar to a trusted model as it depends upon a third party, i.e., the officials, for its operations. As a user, you trust the officials to make the right decisions and use your private information correctly. Self check-in is similar to a trustless model as it removes the operator's role and uses technology for its operations. Users always remain in control of their data and don’t have to trust a third party with their private information. From f6b754235f7cc07fb7a123846f2f893172af95e7 Mon Sep 17 00:00:00 2001 From: James Prestwich Date: Sat, 28 Oct 2023 11:17:16 -0700 Subject: [PATCH 005/219] fix: address ambiguities in RLP spec description Clarifies handling of positive integers in the RLP specification document by updating the definition and description sections --- .../data-structures-and-encoding/rlp/index.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/content/developers/docs/data-structures-and-encoding/rlp/index.md b/src/content/developers/docs/data-structures-and-encoding/rlp/index.md index 990e399f15a..7b34f503a11 100644 --- a/src/content/developers/docs/data-structures-and-encoding/rlp/index.md +++ b/src/content/developers/docs/data-structures-and-encoding/rlp/index.md @@ -5,7 +5,7 @@ lang: en sidebarDepth: 2 --- -Recursive Length Prefix (RLP) serialization is used extensively in Ethereum's execution clients. RLP standardizes the transfer of data between nodes in a space-efficient format. The purpose of RLP is to encode arbitrarily nested arrays of binary data, and RLP is the primary encoding method used to serialize objects in Ethereum's execution layer. The only purpose of RLP is to encode structure; encoding specific data types (e.g. strings, floats) is left up to higher-order protocols; but positive RLP integers must be represented in big-endian binary form with no leading zeroes (thus making the integer value zero equivalent to the empty byte array). Deserialized positive integers with leading zeroes get treated as invalid. The integer representation of string length must also be encoded this way, as well as integers in the payload. +Recursive Length Prefix (RLP) serialization is used extensively in Ethereum's execution clients. RLP standardizes the transfer of data between nodes in a space-efficient format. The purpose of RLP is to encode arbitrarily nested arrays of binary data, and RLP is the primary encoding method used to serialize objects in Ethereum's execution layer. The main purpose of RLP is to encode structure; with the exception of positive integers, RLP delegates encoding specific data types (e.g. strings, floats) to higher-order protocols. Positive integers must be represented in big-endian binary form with no leading zeroes (thus making the integer value zero equivalent to the empty byte array). Deserialized positive integers with leading zeroes must be treated as invalid by any higher-order protocol using RLP. More information in [the Ethereum yellow paper (Appendix B)](https://ethereum.github.io/yellowpaper/paper.pdf#page=19). @@ -20,6 +20,7 @@ The RLP encoding function takes in an item. An item is defined as follows: - a string (i.e. byte array) is an item - a list of items is an item +- a positive integer is an item For example, all of the following are items: @@ -27,14 +28,17 @@ For example, all of the following are items: - the string containing the word "cat"; - a list containing any number of strings; - and a more complex data structures like `["cat", ["puppy", "cow"], "horse", [[]], "pig", [""], "sheep"]`. +- the number `100` -Note that in the context of the rest of this page, 'string' means "a certain number of bytes of binary data"; no special encodings are used, and no knowledge about the content of the strings is implied. +Note that in the context of the rest of this page, 'string' means "a certain number of bytes of binary data"; no special encodings are used, and no knowledge about the content of the strings is implied (except as required by the rule against non-minimal positive integers). RLP encoding is defined as follows: +- For a positive integer, it is converted to the the shortest byte array whose big-endian interpretation is the integer, and then encoded as a string according to the rules below. - For a single byte whose value is in the `[0x00, 0x7f]` (decimal `[0, 127]`) range, that byte is its own RLP encoding. - Otherwise, if a string is 0-55 bytes long, the RLP encoding consists of a single byte with value **0x80** (dec. 128) plus the length of the string followed by the string. The range of the first byte is thus `[0x80, 0xb7]` (dec. `[128, 183]`). - If a string is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xb7** (dec. 183) plus the length in bytes of the length of the string in binary form, followed by the length of the string, followed by the string. For example, a 1024 byte long string would be encoded as `\xb9\x04\x00` (dec. `185, 4, 0`) followed by the string. Here, `0xb9` (183 + 2 = 185) as the first byte, followed by the 2 bytes `0x0400` (dec. 1024) that denote the length of the actual string. The range of the first byte is thus `[0xb8, 0xbf]` (dec. `[184, 191]`). +- If a string is 2^64 bytes long, or longer, it may not be encoded. - If the total payload of a list (i.e. the combined length of all its items being RLP encoded) is 0-55 bytes long, the RLP encoding consists of a single byte with value **0xc0** plus the length of the payload followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xc0, 0xf7]` (dec. `[192, 247]`). - If the total payload of a list is more than 55 bytes long, the RLP encoding consists of a single byte with value **0xf7** plus the length in bytes of the length of the payload in binary form, followed by the length of the payload, followed by the concatenation of the RLP encodings of the items. The range of the first byte is thus `[0xf8, 0xff]` (dec. `[248, 255]`). @@ -73,9 +77,9 @@ def to_binary(x): - the empty string ('null') = `[ 0x80 ]` - the empty list = `[ 0xc0 ]` - the integer 0 = `[ 0x80 ]` -- the encoded integer 0 ('\\x00') = `[ 0x00 ]` -- the encoded integer 15 ('\\x0f') = `[ 0x0f ]` -- the encoded integer 1024 ('\\x04\\x00') = `[ 0x82, 0x04, 0x00 ]` +- the byte '\\x00' = `[ 0x00 ]` +- the byte '\\x0f' = `[ 0x0f ]` +- the bytes '\\x04\\x00' = `[ 0x82, 0x04, 0x00 ]` - the [set theoretical representation](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers) of three, `[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` - the string "Lorem ipsum dolor sit amet, consectetur adipisicing elit" = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ... , 'e', 'l', 'i', 't' ]` @@ -85,7 +89,7 @@ According to the rules and process of RLP encoding, the input of RLP decode is r 1. according to the first byte (i.e. prefix) of input data and decoding the data type, the length of the actual data and offset; -2. according to the type and offset of data, decode the data correspondingly; +2. according to the type and offset of data, decode the data correspondingly, respecting the minimal encoding rule for positive integers; 3. continue to decode the rest of the input; From b5ac9c624bc0f01032d5c5cd8e613dbbaa546b24 Mon Sep 17 00:00:00 2001 From: Dai Wentao Date: Mon, 30 Oct 2023 17:02:35 +0800 Subject: [PATCH 006/219] =?UTF-8?q?Fix=20a=20typo=20"=E6=9D=83=E7=9B=8A?= =?UTF-8?q?=E6=AD=A3=E6=98=8E"=20in=20Chinese=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/intl/zh/page-developers-docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/intl/zh/page-developers-docs.json b/src/intl/zh/page-developers-docs.json index 976100cecc7..8a9c6d56772 100644 --- a/src/intl/zh/page-developers-docs.json +++ b/src/intl/zh/page-developers-docs.json @@ -129,7 +129,7 @@ "docs-nav-archive-nodes": "归档节点", "docs-nav-attack-and-defense": "权益证明攻击与防御", "docs-nav-pos-vs-pow": "权益证明与工作量证明", - "docs-nav-pos-faqs": "权益正明常见问题", + "docs-nav-pos-faqs": "权益证明常见问题", "page-calltocontribute-desc-1": "如果你是这方面的专家,并想发表意见,那么编辑此页分享你的智慧。", "page-calltocontribute-desc-2": "你将获得嘉奖并会为以太坊社区提供帮助!", "page-calltocontribute-desc-3": "自由发挥", From 4d00086c6057cfce27dbd5cd8659b764c8b0dc6a Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Sun, 5 Nov 2023 00:07:37 -0400 Subject: [PATCH 007/219] feat: create Stat component and stories --- src/components/Stat/Stat.stories.tsx | 43 +++++++++++++++++++++ src/components/Stat/index.tsx | 58 ++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 src/components/Stat/Stat.stories.tsx create mode 100644 src/components/Stat/index.tsx diff --git a/src/components/Stat/Stat.stories.tsx b/src/components/Stat/Stat.stories.tsx new file mode 100644 index 00000000000..644c8be29d9 --- /dev/null +++ b/src/components/Stat/Stat.stories.tsx @@ -0,0 +1,43 @@ +import { Meta, StoryObj } from "@storybook/react" + +import StatComponent from "." + +const meta = { + title: "Molecules / Display Content / Stat", + component: StatComponent, +} satisfies Meta + +export default meta + +export const Stat: StoryObj = { + args: { + tooltipProps: { + content: "Tooltip content", + }, + isError: false, + label: "Label", + value: "000", + }, + argTypes: { + isError: { + table: { + disable: true, + }, + }, + }, +} + +export const StatError: StoryObj = { + args: { + ...Stat.args, + isError: true, + value: undefined, + }, + argTypes: { + value: { + table: { + disable: true, + }, + }, + }, +} diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx new file mode 100644 index 00000000000..1089fff019b --- /dev/null +++ b/src/components/Stat/index.tsx @@ -0,0 +1,58 @@ +import * as React from "react" +import { Flex, HStack, Icon, Text } from "@chakra-ui/react" +import type { IconType } from "react-icons/lib" +import { MdInfoOutline, MdWarning } from "react-icons/md" + +import Tooltip, { IProps as TooltipProps } from "../Tooltip" + +const nullValue = <>— + +const initialContent = { + contentValue: nullValue, + tooltipIcon: MdInfoOutline, +} + +export type StatProps = { + tooltipProps?: TooltipProps + value: string | undefined + label: string + isError: boolean +} + +const Stat = ({ tooltipProps, value, label, isError }: StatProps) => { + const [content, setContent] = React.useState<{ + contentValue: string | JSX.Element + tooltipIcon: IconType + }>(initialContent) + + React.useEffect(() => { + if (isError) { + return setContent({ + contentValue: nullValue, + tooltipIcon: MdWarning, + }) + } + + if (!value) return + + return setContent({ ...initialContent, contentValue: value }) + }, [isError]) + + return ( + + + {label} + {!!tooltipProps && ( + + + + )} + + + {content.contentValue} + + + ) +} + +export default Stat From 5d215e9d625079a2aa1cf50b2a4f925f9b67d7eb Mon Sep 17 00:00:00 2001 From: beetrootkid <34025634+beetrootkid@users.noreply.github.com> Date: Wed, 8 Nov 2023 10:13:31 +0000 Subject: [PATCH 008/219] Create ConsensysStakingGlyphIcon.tsx --- .../icons/staking/ConsensysStakingGlyphIcon.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/components/icons/staking/ConsensysStakingGlyphIcon.tsx diff --git a/src/components/icons/staking/ConsensysStakingGlyphIcon.tsx b/src/components/icons/staking/ConsensysStakingGlyphIcon.tsx new file mode 100644 index 00000000000..a563c719771 --- /dev/null +++ b/src/components/icons/staking/ConsensysStakingGlyphIcon.tsx @@ -0,0 +1,11 @@ +import { createIcon } from "@chakra-ui/react" + +export const ConsensysStakingGlyphIcon = createIcon({ + displayName: "ConsensysStakingGlyphIcon", + viewBox: "0 0 32 32", + defaultProps: { + width: "32px", + height: "32px", + }, + d: "M16 0C24.8366 0 32 7.16344 32 16C32 19.8328 30.6523 23.3508 28.405 26.106L22.2067 14.2118L22.1734 14.1504L22.1389 14.0902L19.5622 9.14944C19.0835 8.22784 18.1325 7.65184 17.0944 7.65184H13.321C13.2083 7.65184 13.0982 7.67872 12.9997 7.7312C12.6592 7.90784 12.5261 8.32896 12.704 8.66944L23.8047 29.9706C21.496 31.2632 18.834 32 16 32C13.1431 32 10.4611 31.2512 8.13954 29.9393L14.8736 17.0176L14.9222 16.9011C15.0195 16.5862 14.8813 16.2355 14.5792 16.0794C14.4794 16.0282 14.3693 16 14.2566 16H10.4832L10.2618 16.009C9.312 16.0845 8.4608 16.6426 8.01536 17.4963L3.55496 26.0567C1.33167 23.3089 0 19.81 0 16C0 7.16344 7.16344 0 16 0Z", +}) From 48a06bd1b3ba5efb4b709877705b81796eb165e8 Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:12:51 -0500 Subject: [PATCH 009/219] Update index.md --- src/content/developers/docs/frameworks/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/content/developers/docs/frameworks/index.md b/src/content/developers/docs/frameworks/index.md index bd83e0e135b..c5a867f7cda 100644 --- a/src/content/developers/docs/frameworks/index.md +++ b/src/content/developers/docs/frameworks/index.md @@ -95,6 +95,12 @@ Before diving into frameworks, we recommend you first read through our introduct - [GitHub](https://github.com/chainstack) - [Discord](https://discord.gg/BSb5zfp9AT) +**Crossmint -** **_The leading enterprise-grade web3 development platform, that allows you to build NFT applications without requiring any blockchain experience or holding cryptocurrency, and making the blockchain invisible to end users. The platform offers a one-stop-shop for most of your NFT infrastructure needs across all major chains EVM Chains(and others), including creating, distributing, selling, storing digital assets, and offering post-mint utility._** + +- [Website](https://www.crossmint.com/?utm_source=backlinks) +- [Documentation](https://docs.crossmint.com/?utm_source=backlinks) +- [Discord](https://discord.com/invite/crossmint/?utm_source=backlinks) + **Brownie -** **_Python-based development environment and testing framework._** - [Documentation](https://eth-brownie.readthedocs.io/en/latest/) From 053603d1da3286b0e8c5233079cb6f2d5bafa0f0 Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:21:01 -0500 Subject: [PATCH 010/219] Adding Crossmint as a Related Tool for Smart Contract deployment --- .../developers/docs/smart-contracts/deploying/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/content/developers/docs/smart-contracts/deploying/index.md b/src/content/developers/docs/smart-contracts/deploying/index.md index 58b5402c4dd..33167759ae6 100644 --- a/src/content/developers/docs/smart-contracts/deploying/index.md +++ b/src/content/developers/docs/smart-contracts/deploying/index.md @@ -53,6 +53,12 @@ The specific steps involved will depend on the development framework in question - [Documentation](https://portal.thirdweb.com/deploy/) +**Crossmint - _Enterprise-grade web3 development platform to deploy smart contracts, enable credit-card and cross chain payments, and use APIs to create, distribute, sell, store, and edit NFTs._** + +- [crossmint.com](https://www.crossmint.com/?utm_source=backlinks) +- [Documentation](https://docs.crossmint.com/?utm_source=backlinks) +- [Discord](https://discord.com/invite/crossmint/?utm_source=backlinks) + ## Related tutorials {#related-tutorials} - [Deploying your first smart contract](/developers/tutorials/deploying-your-first-smart-contract/) _– An introduction to deploying your first smart contract on an Ethereum test network._ From 8e964df33d725925fc9f00e88f8fec4f124582e7 Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:38:39 -0500 Subject: [PATCH 011/219] Updating Tools for Creating DAPPS to include Crossmint --- src/content/developers/docs/dapps/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/content/developers/docs/dapps/index.md b/src/content/developers/docs/dapps/index.md index 5301dc23409..bee2afbf0ec 100644 --- a/src/content/developers/docs/dapps/index.md +++ b/src/content/developers/docs/dapps/index.md @@ -74,6 +74,12 @@ A smart contract is code that lives on the Ethereum blockchain and runs exactly - [Documentation](https://portal.thirdweb.com/) - [GitHub](https://github.com/thirdweb-dev/) +**Crossmint _- Enterprise-grade web3 development platform to deploy smart contracts, enable credit-card and cross chain payments, and use APIs to create, distribute, sell, store, and edit NFTs._** + +- [crossmint.com](https://www.crossmint.com/?utm_source=backlinks) +- [Documentation](https://docs.crossmint.com/?utm_source=backlinks) +- [Discord](https://discord.com/invite/crossmint/?utm_source=backlinks) + ## Further reading {#further-reading} - [Explore dapps](/dapps) From 8703faf5ee5bc25d57503683eefafad0226e241c Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Fri, 17 Nov 2023 19:48:35 -0500 Subject: [PATCH 012/219] Updating Ethereum Mainnet for enterprise doc to show Crossmint --- src/content/enterprise/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/content/enterprise/index.md b/src/content/enterprise/index.md index fc76a5082cd..8216eb8781a 100644 --- a/src/content/enterprise/index.md +++ b/src/content/enterprise/index.md @@ -56,6 +56,7 @@ Some collaborative efforts to make Ethereum enterprise friendly have been made b - [Blockapps](https://blockapps.net/) _implementation of the Enterprise Ethereum protocol, tooling and APIs that form the STRATO platform_ - [Chainstack](https://chainstack.com/) _mainnet and testnet Ethereum infrastructure hosted in public & isolated customer clouds_ - [ConsenSys](https://consensys.net/) _provides a range of products and tools for building on Ethereum, as well as consulting and custom development services_ +- [Crossmint](http://crossmint.com/?utm_source=backlinks) _Enterprise-grade web3 development platform to deploy smart contracts, enable credit-card and cross chain payments, and use APIs to create, distribute, sell, store, and edit NFTs._ - [Envision Blockchain](https://envisionblockchain.com/) _provides enterprise focused consulting and development services specializing in Ethereum Mainnet_ - [EY OpsChain](https://blockchain.ey.com/products/contract-manager) _provides a procurement workflow by issuing RFQ’s, contracts, purchase orders, and invoices across your network of trusted business partners_ - [Hyperledger Besu](https://www.hyperledger.org/use/besu) _an enterprise focused open-source Ethereum client developed under the Apache 2.0 license and written in Java_ @@ -72,6 +73,7 @@ Some collaborative efforts to make Ethereum enterprise friendly have been made b ### Tooling and libraries {#tooling-and-libraries} - [Alethio](https://explorer.aleth.io/) _Ethereum Data Analytics Platform_ +- [Crossmint](http://crossmint.com/?utm_source=backlinks) _Enterprise-grade APIs to create, distribute, sell, store, and edit NFTs_ - [Sirato](https://www.web3labs.com/sirato) _a data and analytics platform for public and private Ethereum compatible networks by Web3 Labs_ - [Ernst & Young's ‘Nightfall'](https://github.com/EYBlockchain/nightfall) _a toolkit for private transactions_ - [EthSigner](https://github.com/ConsenSys/ethsigner) _a transaction signing application to be used with a web3 provider_ @@ -91,6 +93,7 @@ Here are some of the enterprise applications that have been built on top of the ### Payments {#payments} - [Brave Browser](https://basicattentiontoken.org/) _pays users for their attention to advertisements and users can pay publishers to support them, via the Basic Attention Token_ +- [Crossmint](http://crossmint.com/?utm_source=backlinks) _Enable credit card and cross-chain payments for your NFT Collections._ - [hCaptcha](https://www.hcaptcha.com/) _Bot prevention CAPTCHA system which pays web site operators for the work done by users to label data for machine learning. Now deployed by Cloudflare_ - [EthereumAds](https://ethereumads.com/) _lets web site operators sell advertising space and get paid via Ethereum_ From 02b949f4e2242c9ec9cd50f1f428389c497ab990 Mon Sep 17 00:00:00 2001 From: Lucas Aschenbach <37406743+LucasAschenbach@users.noreply.github.com> Date: Sat, 9 Dec 2023 23:49:24 +0100 Subject: [PATCH 013/219] Refine post-quantum security section --- src/content/zero-knowledge-proofs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/zero-knowledge-proofs/index.md b/src/content/zero-knowledge-proofs/index.md index f49e0ff82e6..ee3b991cc14 100644 --- a/src/content/zero-knowledge-proofs/index.md +++ b/src/content/zero-knowledge-proofs/index.md @@ -196,9 +196,9 @@ But there’s really no way for users to assess the honesty of participants and ### Quantum computing threats {#quantum-computing-threats} -ZK-SNARK uses elliptic curve cryptography ([ECDSA](/glossary/#ecdsa)) for encryption. While the ECDSA algorithm is secure for now, the development of quantum computers could break its security model in the future. +ZK-SNARK uses elliptic curve cryptography for encryption. While the elliptic curve discrete logarithm problem is assumed to be intractable for now, the development of quantum computers could break this security model in the future. -ZK-STARK is considered immune to the threat of quantum computing, as it uses collision-resistant hashes for encryption. Unlike public-private key pairings used in elliptic curve cryptography, collision-resistant hashing is more difficult for quantum computing algorithms to break. +ZK-STARK is considered immune to the threat of quantum computing, as it only relies on collision-resistant hash functions for its security. Unlike public-private key pairings used in elliptic curve cryptography, collision-resistant hashing is more difficult for quantum computing algorithms to break. ## Further reading {#further-reading} From cd890e4804ce9fd91a28f8dd83ea7c2dd08a4f14 Mon Sep 17 00:00:00 2001 From: juliettech Date: Tue, 12 Dec 2023 19:45:13 -0500 Subject: [PATCH 014/219] Update index.md Adding Cyfrin Updraft (https://updraft.cyfrin.io) as an educational resource to learn Solidity and smart contract development. Cyfrin is the smart contract security firm behind Updraft - the ultimate educational platform for smart contract development and auditing. Leveraging over 100+ hours of content from industry experts, Patrick Collins is the main teacher behind the platform. With hundreds of thousands of views in his courses, Updraft's content teaches everything from Solidity basics all the way to Advanced Foundry, Hardhat, Security, DeFi, and more - all containing hours of content on Ethereum development and auditing. --- src/content/developers/docs/smart-contracts/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/developers/docs/smart-contracts/index.md b/src/content/developers/docs/smart-contracts/index.md index 5549d62ff9f..4be9a10e4c6 100644 --- a/src/content/developers/docs/smart-contracts/index.md +++ b/src/content/developers/docs/smart-contracts/index.md @@ -109,3 +109,4 @@ Multisig (multiple-signature) contracts are smart contract accounts that require - [Coinbase: What is a smart contract?](https://www.coinbase.com/learn/crypto-basics/what-is-a-smart-contract) - [Chainlink: What is a smart contract?](https://chain.link/education/smart-contracts) - [Video: Simply Explained - Smart Contracts](https://youtu.be/ZE2HxTmxfrI) +- [Cyfrin Updraft: Web3 learning and auditing platform](https://updraft.cyfrin.io) From f3068fffafa112e3f05aab8cdbcb7c1ad3fe5dee Mon Sep 17 00:00:00 2001 From: juliettech Date: Tue, 12 Dec 2023 20:05:37 -0500 Subject: [PATCH 015/219] Adding Cyfrin offerings Cyfrin is a smart contract security firm, offering services like private audits, competitive audits, education platform, among others. --- .../developers/docs/smart-contracts/security/index.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/content/developers/docs/smart-contracts/security/index.md b/src/content/developers/docs/smart-contracts/security/index.md index b115f4942cb..03b47b081f3 100644 --- a/src/content/developers/docs/smart-contracts/security/index.md +++ b/src/content/developers/docs/smart-contracts/security/index.md @@ -214,7 +214,7 @@ Decentralized governance can be beneficial, especially because it aligns the int One way of preventing problems related to on-chain governance is to [use a timelock](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/). A timelock prevents a smart contract from executing certain actions until a specific amount of time passes. Other strategies include assigning a “voting weight” to each token based on how long it has been locked up for, or measuring the voting power of an address at a historical period (for example, 2-3 blocks in the past) instead of the current block. Both methods reduce the possibility of quickly amassing voting power to swing on-chain votes. -More on [designing secure governance systems](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/) and [different voting mechanisms in DAOs](https://hackernoon.com/governance-is-the-holy-grail-for-daos). +More on [designing secure governance systems](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/), [different voting mechanisms in DAOs](https://hackernoon.com/governance-is-the-holy-grail-for-daos), and [the common DAO attack vectors leveraging DeFi](https://dacian.me/dao-governance-defi-attacks) in the shared links. ### 8. Reduce complexity in code to a minimum {#reduce-code-complexity} @@ -468,6 +468,8 @@ If you plan on querying an on-chain oracle for asset prices, consider using one - **[ABI Encoder](https://abi.hashex.org/)** - _A free online service for encoding your Solidity contract functions and constructor arguments._ +- **[Aderyn](https://github.com/Cyfrin/aderyn)** - _Solidity Static Analyzer, traversing the Abstract Syntax Trees (AST) to pinpoint suspected vulnerabilities and printing out issues in an easy-to-consume markdown format._ + ### Tools for monitoring smart contracts {#smart-contract-monitoring-tools} - **[OpenZeppelin Defender Sentinels](https://docs.openzeppelin.com/defender/v1/sentinel)** - _A tool for automatically monitoring and responding to events, functions, and transaction parameters on your smart contracts._ @@ -490,6 +492,8 @@ If you plan on querying an on-chain oracle for asset prices, consider using one - **[Trail of Bits](https://www.trailofbits.com/)** - _Cybersecurity company that combines security research with an attacker mentality to reduce risk and fortify code._ +- **[Cyfrin](https://cyfrin.io)** - _Web3 security powerhouse, incubating crypto security through products and smart contract auditing services._ + - **[PeckShield](https://peckshield.com/)** - _Blockchain security company offering products and services for the security, privacy, and usability of the entire blockchain ecosystem._ - **[QuantStamp](https://quantstamp.com/)** - _Auditing service facilitating the mainstream adoption of blockchain technology through security and risk assessment services._ @@ -506,6 +510,8 @@ If you plan on querying an on-chain oracle for asset prices, consider using one - **[Code4rena](https://code4rena.com/)** - _Competitive audit platform that incentivizes smart contract security experts to find vulnerabilities and help make web3 more secure._ +- **[CodeHawks](https://codehawks.com)** - _Leading competitive smart contract audit marketplace for security researchers and Web3 projects._ + ### Bug bounty platforms {#bug-bounty-platforms} - **[Immunefi](https://immunefi.com/)** - _Bug bounty platform for smart contracts and DeFi projects, where security researchers review code, disclose vulnerabilities, get paid, and make crypto safer._ @@ -542,6 +548,8 @@ If you plan on querying an on-chain oracle for asset prices, consider using one - **[Smart Contract Security Verification Standard](https://github.com/securing/SCSVS)** - _Fourteen-part checklist created to standardize the security of smart contracts for developers, architects, security reviewers and vendors._ +- **[Learn Smart Contract Security and Auditing](https://updraft.cyfrin.io/courses/security) - _Ultimate smart contract security and auditing course, created for smart contract developers looking to level up their security best practices and become security researchers._ + ### Tutorials on smart contract security {#tutorials-on-smart-contract-security} - [How to write secure smart contracts](/developers/tutorials/secure-development-workflow/) From f535f1a0f543b46055a512889de7e67f9595da12 Mon Sep 17 00:00:00 2001 From: oladeleseyi Date: Wed, 3 Jan 2024 23:33:34 +0100 Subject: [PATCH 016/219] add article from Taiko --- src/content/developers/docs/scaling/zk-rollups/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/developers/docs/scaling/zk-rollups/index.md b/src/content/developers/docs/scaling/zk-rollups/index.md index 56e1b731473..ecebb799c2e 100644 --- a/src/content/developers/docs/scaling/zk-rollups/index.md +++ b/src/content/developers/docs/scaling/zk-rollups/index.md @@ -250,6 +250,7 @@ Projects working on zkEVMs include: - [What are zero-knowledge rollups?](https://alchemy.com/blog/zero-knowledge-rollups) - [STARKs vs SNARKs](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) - [What is a zkEVM?](https://www.alchemy.com/overviews/zkevm) +- [ZK-EVM types: Ethereum-equivalent, EVM-equivalent, Type 1, Type 4, and other cryptic buzzwords](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) - [Intro to zkEVM](https://hackmd.io/@yezhang/S1_KMMbGt) - [Awesome-zkEVM resources](https://github.com/LuozhuZhang/awesome-zkevm) - [ZK-SNARKS under the hood](https://vitalik.ca/general/2017/02/01/zk_snarks.html) From f109ac7572e9fb80ac1af999a3d9f33d19b57fd5 Mon Sep 17 00:00:00 2001 From: Sean O'Connor Date: Thu, 4 Jan 2024 13:32:02 -0700 Subject: [PATCH 017/219] Add Mempool Data Program .md Adding in the data available to the community via the Mempool Data Program --- src/content/developers/docs/data-and-analytics/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/developers/docs/data-and-analytics/index.md b/src/content/developers/docs/data-and-analytics/index.md index 20317509f02..f62fc320786 100644 --- a/src/content/developers/docs/data-and-analytics/index.md +++ b/src/content/developers/docs/data-and-analytics/index.md @@ -36,6 +36,10 @@ Using [GraphQL](https://graphql.org/), developers can query any of the curated o [Dune Analytics](https://dune.com/) pre-processes blockchain data into relational database (PostgreSQL and DatabricksSQL) tables, allows users to query blockchain data using SQL and build dashboards based on query results. On-chain data are organized into 4 raw tables: `blocks`, `transactions`, (event) `logs` and (call) `traces`. Popular contracts and protocols have been decoded, and each has its own set of event and call tables. Those event and call tables are processed further and organized into abstraction tables by the type of protocols, for example, dex, lending, stablecoins, etc. +## Ethernow - Mempool Data Program {#ethernow} +[Blocknative](https://www.blocknative.com/) provides open access to its Ethereum historical [mempool data archive](https://www.ethernow.xyz/mempool-data-archive). This enables researchers and community good projects to explore the pre-chain layer of Ethereum Mainnet. The data set is actively maintained and represents the most comprehensive historical record of mempool transaction events within the Ethereum ecosystem. Learn more at [Ethernow](https://www.ethernow.xyz/). + + ## Further Reading {#further-reading} - [Graph Network Overview](https://thegraph.com/docs/en/about/network/) From fcb3c37466cd4886a8c7a00533908a98f3154e9f Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 2 Jan 2024 14:35:27 +0100 Subject: [PATCH 018/219] Correct example trie structure [Fixes #6860] --- .../patricia-merkle-trie/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index fb850273ca2..544aed4b8ab 100644 --- a/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ Here is the extended code for getting a node in the Merkle Patricia trie: ### Example Trie {#example-trie} -Suppose we want a trie containing four path/value pairs `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`. +Suppose we want a trie containing four path/value pairs `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. First, we convert both paths and values to `bytes`. Below, actual byte representations for _paths_ are denoted by `<>`, although _values_ are still shown as strings, denoted by `''`, for easier comprehension (they, too, would actually be `bytes`): ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ Now, we build such a trie with the following key/value pairs in the underlying D ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -When one node is referenced inside another node, what is included is `H(rlp.encode(x))`, where `H(x) = keccak256(x) if len(x) >= 32 else x` and `rlp.encode` is the [RLP](/developers/docs/data-structures-and-encoding/rlp) encoding function. +When one node is referenced inside another node, what is included is `H(rlp.encode(node))`, where `H(x) = keccak256(x) if len(x) >= 32 else x` and `rlp.encode` is the [RLP](/developers/docs/data-structures-and-encoding/rlp) encoding function. Note that when updating a trie, one needs to store the key/value pair `(keccak256(x), x)` in a persistent lookup table _if_ the newly-created node has length >= 32. However, if the node is shorter than that, one does not need to store anything, since the function f(x) = x is reversible. From 18dbc1d75df48d0bf8e9ebf040270c334ce8e215 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 2 Jan 2024 14:40:57 +0100 Subject: [PATCH 019/219] Apply changes to translations [Fixes #6860] --- .../patricia-merkle-trie/index.md | 12 ++++++------ .../patricia-merkle-trie/index.md | 12 ++++++------ .../patricia-merkle-trie/index.md | 12 ++++++------ .../patricia-merkle-trie/index.md | 12 ++++++------ .../patricia-merkle-trie/index.md | 12 ++++++------ .../patricia-merkle-trie/index.md | 12 ++++++------ .../patricia-merkle-trie/index.md | 12 ++++++------ 7 files changed, 42 insertions(+), 42 deletions(-) diff --git a/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 5c88fc85a4a..07e34cacaca 100644 --- a/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ Aquí está el código extendido para obtener un nodo en el Merkle Patricia trie ### Ejemplo de Trie {#example-trie} -Supongamos que queremos un trie que contenga cuatro pares ruta/valor `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`. +Supongamos que queremos un trie que contenga cuatro pares ruta/valor `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. En primer lugar, convertimos tanto las rutas como los valores en `bytes`. A continuación, las representaciones reales de bytes para _rutas_ se denotan con `<>`, aunque los _valores_ todavía se muestran como cadenas, denotadas por `''`, para facilitar la comprensión (estos también en realidad serían `bytes`): ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ Ahora, construimos un trie con los siguientes pares clave/valor en la base de da ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -Cuando se hace referencia a un nodo dentro de otro nodo, lo que se incluye es `H(rlp.encode(x))`, donde `H(x) = keccak256(x) if len(x) >= 32 else x` y `rlp.encode` es la función de codificación [RLP](/developers/docs/data-structures-and-encoding/rlp). +Cuando se hace referencia a un nodo dentro de otro nodo, lo que se incluye es `H(rlp.encode(node))`, donde `H(x) = keccak256(x) if len(x) >= 32 else x` y `rlp.encode` es la función de codificación [RLP](/developers/docs/data-structures-and-encoding/rlp). Tenga en cuenta que al actualizar un trie, es necesario almacenar el par clave/valor `(keccak256(x), x)` en una tabla de búsqueda persistente _si_ el nodo recién creado tiene una longitud >= 32. Sin embargo, si el nodo es más corto, no es necesario almacenar nada, ya que la función f(x) = x es reversible. diff --git a/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index bad4ea2f8a2..a15f7dd10da 100644 --- a/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ Voici le code étendu pour obtenir un nœud dans l'arbre de Merkle Patricia : ### Exemple d'arbre {#example-trie} -Supposons que nous voulions un tableau contenant quatre couples chemin/valeur `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`. +Supposons que nous voulions un tableau contenant quatre couples chemin/valeur `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. Tout d'abord, nous convertissons les chemins et les valeurs en `bytes` (octets). Ci-dessous, les représentations réelles d'octets pour les _chemins_ sont désignées par `<>`, bien que les _valeurs_ soient toujours représentées sous forme de chaînes, désignées par `''`, pour une compréhension plus facile (elles aussi seraient en fait des `octets`) : ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ Nous construisons un tel arbre avec les paires clé/valeur suivantes dans la bas ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -Lorsqu'un nœud est référencé à l'intérieur d'un autre nœud, ce qui est inclus est `H(rlp.encode(x))`, où `H(x) = keccak256(x) if len(x) >= 32 else x` et `rlp.encode` est la fonction d'encodage [RLP](/developers/docs/data-structures-and-encoding/rlp). +Lorsqu'un nœud est référencé à l'intérieur d'un autre nœud, ce qui est inclus est `H(rlp.encode(node))`, où `H(x) = keccak256(x) if len(x) >= 32 else x` et `rlp.encode` est la fonction d'encodage [RLP](/developers/docs/data-structures-and-encoding/rlp). Notez que lors de la mise à jour d'un arbre, on doit stocker la paire clé/valeur `(keccak256(x), x)`dans une table de consultation persistante _si_ le nœud nouvellement créé a une longueur >= 32. Toutefois, si le nœud est plus court que cela, il n'est pas nécessaire de stocker quoi que ce soit, puisque la fonction f(x) = x est réversible. diff --git a/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 1154446e7ba..20ef5ca963a 100644 --- a/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ Ecco il codice esteso per ottenere un nodo nel trie di Patricia Merkle: ### Esempio di Trie {#example-trie} -Supponiamo di volere un trie contenente quattro coppie percorso/valore `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`. +Supponiamo di volere un trie contenente quattro coppie percorso/valore `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. Per prima cosa, convertiamo sia i percorsi che i valori in `bytes`. Di seguito, le rappresentazioni reali dei byte per i _percorsi_ sono denotate da `<>`, sebbene i _valori_ siano mostrati ancora come stringhe, denotate da `"`, per maggiore facilità di comprensione (anch'essi, sarebbero in realtà `bytes`): ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ Ora, costruiamo un trie di questo tipo con le seguenti coppie chiave/valore nel ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -Quando in un nodo si fa riferimento a un altro nodo, viene inserito `H(rlp.encode(x))`, dove `H(x) = keccak256(x) if len(x) >= 32 else x` e `rlp.encode` è la funzione di codifica [RLP](/developers/docs/data-structures-and-encoding/rlp). +Quando in un nodo si fa riferimento a un altro nodo, viene inserito `H(rlp.encode(node))`, dove `H(x) = keccak256(x) if len(x) >= 32 else x` e `rlp.encode` è la funzione di codifica [RLP](/developers/docs/data-structures-and-encoding/rlp). Nota che, aggiornando un trie, si deve memorizzare la coppia chiave/valore `(keccak256(x), x)` in una tabella di ricerca persistente _se_ il nodo appena creato ha una lunghezza >= 32. Se invece il nodo è inferiore a questo valore, non è necessario memorizzare nulla, poiché la funzione f(x) = x è reversibile. diff --git a/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 678ca3a386c..cca463cfc30 100644 --- a/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ sidebarDepth: 2 ### ツリーの例 {#example-trie} -次の 4 つのパスバリューのペアを含むツリーが必要だとします。 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coin')`、`('horse', 'stallion')` +次の 4 つのパスバリューのペアを含むツリーが必要だとします。 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coins')`、`('horse', 'stallion')` まず、パスと値(バリュー)の両方を`bytes`に変換します。 以下では、*paths*を実際のバイト表現 `<>`によって表示しています。しかし、 *values*は、分かりやすいように文字列として`''`で表示しています(実際は`bytes`) 。 ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ sidebarDepth: 2 ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -1 つのノードが内部の別のノードから参照されるとき、含まれているのは、`H(rlp.encode(x))`であり、`H(x) = keccak256(x) if len(x) >= 32 else x`と`rlp.encode`は、[RLP](/developers/docs/data-structures-and-encoding/rlp)エンコーディング関数です。 +1 つのノードが内部の別のノードから参照されるとき、含まれているのは、`H(rlp.encode(node))`であり、`H(x) = keccak256(x) if len(x) >= 32 else x`と`rlp.encode`は、[RLP](/developers/docs/data-structures-and-encoding/rlp)エンコーディング関数です。 ツリーを更新するとき、新しく作成されたノードの長さが 32 以上の*場合*、キーバリューのペア`(keccak256(x), x)`を永続的なルックアップテーブルに格納する必要があることに注意してください。 ただし、ノードがそれよりも短い場合、関数 function f(x) = x は可逆であるため、何も格納する必要はありません。 diff --git a/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 81dea175177..d4f7b55cda2 100644 --- a/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/pt-br/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ Aqui está o código estendido para obter um nó na árvore Merkle Patricia: ### Árvore de exemplo {#example-trie} -Suponha que nós queremos uma árvore contendo quatro pares de caminho/valor `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`. +Suponha que nós queremos uma árvore contendo quatro pares de caminho/valor `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. Primeiro, convertemos ambos caminhos e valores para `bytes`. Abaixo, representações reais em bytes para _caminhos_ são indicadas por `<>`, embora _valores_ ainda sejam mostrados como strings, denotado por `''`, para melhor compreensão (eles, também, seriam `bytes`): ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ Agora, construímos uma árvore com os seguintes pares chave/valor no banco de d ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -Quando um nó é referenciado dentro de outro nó, o que é incluído é `H(rlp. ncode(x))`, onde `H(x) = keccak256(x) if len(x) >= 32 else x` e `rlp. ncode` é a função de codificação [RLP](/developers/docs/data-structures-and-encoding/rlp). +Quando um nó é referenciado dentro de outro nó, o que é incluído é `H(rlp. ncode(node))`, onde `H(x) = keccak256(x) if len(x) >= 32 else x` e `rlp. ncode` é a função de codificação [RLP](/developers/docs/data-structures-and-encoding/rlp). Observe que, ao atualizar uma árvore, é necessário armazenar o par chave/valor `(keccak256(x), x)` em uma tabela de pesquisa persistente _se_ o nó recém-criado tem comprimento >= 32. Entretanto, se o nó é menor do que isso, não é preciso armazenar nada, já que a função f(x) = x é reversível. diff --git a/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 6483075ebd0..7b1f4e4ec40 100644 --- a/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/tr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ Merkle Patricia dijital ağacında bir düğüm almak için genişletilmiş kod: ### Örnek Dijital Ağaç {#example-trie} -Dört yol/değer çifti içeren bir dijital ağaç istediğimizi varsayalım: `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`. +Dört yol/değer çifti içeren bir dijital ağaç istediğimizi varsayalım: `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. İlk olarak, hem yolları hem de değerleri `bytes`' dönüştürürüz. Aşağıda, daha kolay anlaşılması için _yollar_ için gerçek bayt gösterimleri `<>` ile gösterilirken _değerler_ hala `''` dizeler olarak gösterilir(bunlar da aslında `byte` olacaktır): ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ Dört yol/değer çifti içeren bir dijital ağaç istediğimizi varsayalım: `( ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -Bir düğüme başka bir düğüm içinde başvurulduğunda, dahil edilenler `H(rlp.encode(x))` olur, burada `H(x) = keccak256(x) if len(x) > = 32 else x` ve `rlp.encode`, [RLP](/developers/docs/data-structures-and-encoding/rlp) kodlama işlevidir. +Bir düğüme başka bir düğüm içinde başvurulduğunda, dahil edilenler `H(rlp.encode(node))` olur, burada `H(x) = keccak256(x) if len(x) > = 32 else x` ve `rlp.encode`, [RLP](/developers/docs/data-structures-and-encoding/rlp) kodlama işlevidir. Bir dijital ağacı güncellerken _eğer_ yeni oluşturulan düğümün uzunluğu >= 32 ise, `(keccak 256 (x), x)` anahtar/değer çiftini kalıcı bir arama tablosunda saklamanız gerektiğini unutmayın. Bununla birlikte düğüm bundan daha kısaysa, f (x) = x işlevi tersine çevrilebilir olduğundan hiçbir şeyin depolanmasına gerek yoktur. diff --git a/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 7381a2a2b52..da55ba79af0 100644 --- a/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/zh/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -160,14 +160,14 @@ sidebarDepth: 2 ### 前缀树示例 {#example-trie} -假定我们想要包含四个路径/值对 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coin')`、`('horse', 'stallion')` 的前缀树。 +假定我们想要包含四个路径/值对 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coins')`、`('horse', 'stallion')` 的前缀树。 首先,我们将路径和值都转换为 `bytes`。 在下方代码中,*路径*的实际字节代表用 `<>` 表示。而*值*仍然显示为字符串,用 `''` 表示,以便于理解(值也应为 `bytes`): ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -176,12 +176,12 @@ sidebarDepth: 2 ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -当一个节点在另一个节点内部引用时,包含的是 `H(rlp.encode(x))`,其中 `H(x) = keccak256(x) if len(x) > > = 32 else x` 和 `rlp.encode` 是[递归长度前缀](/developers/docs/data-structures-and-encoding/rlp)编码函数。 +当一个节点在另一个节点内部引用时,包含的是 `H(rlp.encode(node))`,其中 `H(x) = keccak256(x) if len(x) > > = 32 else x` 和 `rlp.encode` 是[递归长度前缀](/developers/docs/data-structures-and-encoding/rlp)编码函数。 请注意,更新前缀树时,*如果*新创建节点的长度 >= 32,则需要将键/值对 `(keccak256(x), x)` 存储在一个持久的查询表中。 然而,如果节点比这短,则不需要存储任何数据,因为函数 f(x) = x 是可逆的。 From 3171593922b72871d39adf8d63ff5c585e9897f0 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Wed, 24 Jan 2024 23:44:43 -0500 Subject: [PATCH 020/219] fix(CallToAction): update and constrain prop object type shape --- src/components/Hero/CallToAction.tsx | 12 ++++++++---- src/components/Hero/ContentHero/index.tsx | 2 +- src/components/Hero/HubHero/index.tsx | 4 ++-- src/lib/types.ts | 6 ++++-- src/pages/layer-2.tsx | 2 -- src/pages/learn.tsx | 1 - 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/components/Hero/CallToAction.tsx b/src/components/Hero/CallToAction.tsx index 2714d9143a9..e27110e354c 100644 --- a/src/components/Hero/CallToAction.tsx +++ b/src/components/Hero/CallToAction.tsx @@ -4,17 +4,21 @@ import { Button, type ButtonProps } from "@/components/Buttons" import { type MatomoEventOptions, trackCustomEvent } from "@/lib/utils/matomo" -export type CallToActionProps = Omit & { +export type CallToActionProps = Omit< + ButtonProps, + "children" | "content" | "variant" | "isSecondary" +> & { content: ReactNode matomo: MatomoEventOptions + index: number } -export function CallToAction({ +export const CallToAction = ({ content, matomo, - key: index, + index, ...props -}: CallToActionProps) { +}: CallToActionProps) => { const handleClick = () => trackCustomEvent(matomo) const buttonProps: ButtonProps = { diff --git a/src/components/Hero/ContentHero/index.tsx b/src/components/Hero/ContentHero/index.tsx index c48cb3825bc..e2bf26988ea 100644 --- a/src/components/Hero/ContentHero/index.tsx +++ b/src/components/Hero/ContentHero/index.tsx @@ -38,7 +38,7 @@ const ContentHero = (props: ContentHeroProps) => { {buttons!.map((button, idx) => { if (!button) return - return + return })} diff --git a/src/components/Hero/HubHero/index.tsx b/src/components/Hero/HubHero/index.tsx index 968940a3662..1a1d0a649db 100644 --- a/src/components/Hero/HubHero/index.tsx +++ b/src/components/Hero/HubHero/index.tsx @@ -67,9 +67,9 @@ const HubHero = ({ {description} - {(buttons || []).map((button, idx) => { + {buttons?.map((button, idx) => { if (!button) return - return + return })} diff --git a/src/lib/types.ts b/src/lib/types.ts index 2e9cd328717..c1bd4fc0f2b 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -239,12 +239,14 @@ export type IRemarkTocOptions = { callback: (toc: TocNodeType) => void } +type HeroButtonProps = Omit + export type CommonHeroProps = { heroImg: StaticImageData header: string title: string description: string - buttons?: [CallToActionProps, CallToActionProps?] + buttons?: [HeroButtonProps, HeroButtonProps?] } // Learning Tools @@ -354,4 +356,4 @@ export type CommunityConference = { description: string startDate: string endDate: string -} \ No newline at end of file +} diff --git a/src/pages/layer-2.tsx b/src/pages/layer-2.tsx index 4b497f9a603..ca460f905f4 100644 --- a/src/pages/layer-2.tsx +++ b/src/pages/layer-2.tsx @@ -139,7 +139,6 @@ const Layer2Page = () => { { content: t("layer-2-hero-button-1"), toId: "what-is-layer-2", - variant: "solid", matomo: { eventCategory: "layer 2 hero buttons", eventAction: "click", @@ -149,7 +148,6 @@ const Layer2Page = () => { { content: t("layer-2-hero-button-2"), toId: "use-layer-2", - variant: "outline", matomo: { eventCategory: "layer 2 hero buttons", eventAction: "click", diff --git a/src/pages/learn.tsx b/src/pages/learn.tsx index ce2f03c6040..edca3b85ecf 100644 --- a/src/pages/learn.tsx +++ b/src/pages/learn.tsx @@ -198,7 +198,6 @@ const LearnPage = () => { eventAction: "click", eventName: "lets get started", }, - variant: "solid", }, ], } From 50067fdc3139feae69344eeaed1220aa9e871664 Mon Sep 17 00:00:00 2001 From: Ahmad Bitar <33181301+smartprogrammer93@users.noreply.github.com> Date: Fri, 26 Jan 2024 03:39:31 +0300 Subject: [PATCH 021/219] Update index.md --- .../docs/consensus-mechanisms/pos/attestations/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md b/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md index 78a35ca1d7d..1d7c0ae5e04 100644 --- a/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md +++ b/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md @@ -32,7 +32,7 @@ Finally, the validator signs the attestation and broadcasts it to the network. There is a substantial overhead associated with passing this data around the network for every validator. Therefore, the attestations from individual validators are aggregated within subnets before being broadcast more widely. This includes aggregating signatures together so that an attestation that gets broadcast includes the consensus `data` and a single signature formed by combining the signatures of all the validators that agree with that `data`. This can be checked using `aggregation_bits` because this provides the index of each validator in their committee (whose ID is provided in `data`) which can be used to query individual signatures. -In each epoch a validator in each subnet is selected to be the `aggregator`. The aggregator collects all the attestations it hears about over the gossip network that have equivalent `data` to its own. The sender of each matching attestation is recorded in the `aggregation_bits`. The aggregator then broadcasts the attestation aggregate to the wider network. +In each epoch 16 validators in each subnet are selected to be the `aggregators`. The aggregators collects all the attestations they hears about over the gossip network that have equivalent `data` to their own. The sender of each matching attestation is recorded in the `aggregation_bits`. The aggregators then broadcasts the attestation aggregate to the wider network. When a validator is selected to be a block proposer they package aggregate attestations from the subnets up to the latest slot in the new block. From bf696479348226d4107702062084e80c1f226d06 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Sat, 27 Jan 2024 11:09:55 -0500 Subject: [PATCH 022/219] build: add and set up @chakra-ui/cli --- package.json | 6 +- tsconfig.json | 2 +- yarn.lock | 210 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 215 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ec01398faf7..de391f74f8f 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "dev": "next dev", + "postinstall": "yarn theme", "build": "next build", "postbuild": "next-sitemap", "start": "next start", @@ -16,7 +17,9 @@ "build-storybook": "storybook build", "crowdin-clean": "rm -rf .crowdin && mkdir .crowdin", "crowdin-import": "ts-node src/scripts/crowdin-import.ts", - "markdown-checker": "ts-node -O '{ \"module\": \"commonjs\" }' src/scripts/markdownChecker.ts" + "markdown-checker": "ts-node -O '{ \"module\": \"commonjs\" }' src/scripts/markdownChecker.ts", + "theme": "chakra-cli tokens ./src/@chakra-ui/theme.ts --strict-token-types --strict-component-types", + "theme:watch": "chakra-cli tokens ./src/@chakra-ui/theme.ts --strict-token-types --strict-component-types --watch" }, "dependencies": { "@chakra-ui/next-js": "^2.1.5", @@ -56,6 +59,7 @@ "yaml-loader": "^0.8.0" }, "devDependencies": { + "@chakra-ui/cli": "^2.4.1", "@chakra-ui/storybook-addon": "5.1.0", "@netlify/plugin-nextjs": "^4.41.3", "@storybook/addon-essentials": "7.6.6", diff --git a/tsconfig.json b/tsconfig.json index 29abc9fb3ec..fa67f03dc13 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "ESNext", "lib": ["dom", "dom.iterable", "esnext", "ES2021.String"], "allowJs": true, "skipLibCheck": true, diff --git a/yarn.lock b/yarn.lock index 21e666ac654..7190b8fdcaf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1537,6 +1537,19 @@ "@chakra-ui/visually-hidden" "2.2.0" "@zag-js/focus-visible" "0.16.0" +"@chakra-ui/cli@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/cli/-/cli-2.4.1.tgz#254a0f229a38c2ba235e2a7cc24c6c20deee8117" + integrity sha512-GZZuHUA1cXJWpmYNiVTLPihvY4VhIssRl+AXgw/0IbeodTMop3jWlIioPKLAQeXu5CwvRA6iESyGjnu1V8Zykg== + dependencies: + chokidar "^3.5.3" + cli-check-node "^1.3.4" + cli-handle-unhandled "^1.1.1" + cli-welcome "^2.2.2" + commander "^9.3.0" + esbuild "^0.17.18" + prettier "^2.8.8" + "@chakra-ui/clickable@2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-2.1.0.tgz#800fa8d10cf45a41fc50a3df32c679a3ce1921c3" @@ -2430,111 +2443,221 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== + "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== + "@esbuild/android-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== + "@esbuild/android-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== + "@esbuild/darwin-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== + "@esbuild/darwin-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== + "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== + "@esbuild/freebsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== + "@esbuild/linux-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== + "@esbuild/linux-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== + "@esbuild/linux-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== + "@esbuild/linux-loong64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== + "@esbuild/linux-mips64el@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== + "@esbuild/linux-ppc64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== + "@esbuild/linux-riscv64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== + "@esbuild/linux-s390x@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== + "@esbuild/linux-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== + "@esbuild/netbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== + "@esbuild/openbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== + "@esbuild/sunos-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== + "@esbuild/win32-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== + "@esbuild/win32-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== + "@esbuild/win32-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" @@ -6017,6 +6140,14 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -6112,6 +6243,19 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +clear-any-console@^1.16.0: + version "1.16.2" + resolved "https://registry.yarnpkg.com/clear-any-console/-/clear-any-console-1.16.2.tgz#0543bb068da00151bf77b7a01ebf05d611086bb9" + integrity sha512-OL/7wZpNy9x0GBSzz3poWja84Nr7iaH8aYNsJ5Uet2BVLj6Lm1zvWpZN/yH46Vv3ae7YfHmLLMmfHj911fshJg== + +cli-check-node@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/cli-check-node/-/cli-check-node-1.3.4.tgz#f48f5b088ce4ab2ff5630ae007461b4f12ee2bb7" + integrity sha512-iLGgQXm82iP8eH3R67qbOWs5qqUOLmNnMy5Lzl/RybcMh3y+H2zWU5POzuQ6oDUOdz4XWuxcFhP75szqd6frLg== + dependencies: + chalk "^3.0.0" + log-symbols "^3.0.0" + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -6119,6 +6263,21 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-handle-error@^4.1.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cli-handle-error/-/cli-handle-error-4.4.0.tgz#f65d7d66c3d648a063696b5c83f3b8cc850da25d" + integrity sha512-RyBCnKlc7xVr79cKb9RfBq+4fjwQeX8HKeNzIPnI/W+DWWIUUKh2ur576DpwJ3kZt2UGHlIAOF7N9txy+mgZsA== + dependencies: + chalk "^3.0.0" + log-symbols "^3.0.0" + +cli-handle-unhandled@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cli-handle-unhandled/-/cli-handle-unhandled-1.1.1.tgz#8a62e244e29cc74ec3f89954a8e8871a4d81e7d8" + integrity sha512-Em91mJvU7VdgT2MxQpyY633vW1tDzRjPDbii6ZjEBHHLLh0xDoVkFt/wjvi9nSvJcz9rJmvtJSK8KL/hvF0Stg== + dependencies: + cli-handle-error "^4.1.0" + cli-spinners@^2.5.0: version "2.9.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" @@ -6133,6 +6292,15 @@ cli-table3@^0.6.1: optionalDependencies: "@colors/colors" "1.5.0" +cli-welcome@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/cli-welcome/-/cli-welcome-2.2.2.tgz#a67c55e7826acbd8117266db73590e35b3611261" + integrity sha512-LgDGS0TW4nIf8v81wpuZzfOEDPcy68u0jKR0Fy5IaWftqdminI6FoDiMFt1mjPylqKGNv/wFsZ7fCs93IeDMIw== + dependencies: + chalk "^2.4.2" + clear-any-console "^1.16.0" + prettier "^2.0.5" + client-only@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" @@ -6276,6 +6444,11 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^9.3.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -7290,6 +7463,34 @@ esbuild@^0.12.9: resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.29.tgz#be602db7c4dc78944a9dbde0d1ea19d36c1f882d" integrity sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g== +esbuild@^0.17.18: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== + optionalDependencies: + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" + esbuild@^0.18.0: version "0.18.20" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" @@ -9517,6 +9718,13 @@ lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -11105,7 +11313,7 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^2.8.0: +prettier@^2.0.5, prettier@^2.8.0, prettier@^2.8.8: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== From 75c0dd0d69beac4479fed5f911107da637a1f129 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Sat, 27 Jan 2024 11:10:26 -0500 Subject: [PATCH 023/219] build: use `concurrently` command for dev script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de391f74f8f..f92eede0adf 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "8.0.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "npx concurrently \"yarn next dev\" \"yarn theme:watch\"", "postinstall": "yarn theme", "build": "next build", "postbuild": "next-sitemap", From e4b7c534c9fe84294e47d1133045dc45eae7fe92 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Sat, 27 Jan 2024 18:48:04 -0500 Subject: [PATCH 024/219] revert(package.json): remove strict typing flags from theme gen scripts --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f92eede0adf..6c71c97c8af 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "crowdin-clean": "rm -rf .crowdin && mkdir .crowdin", "crowdin-import": "ts-node src/scripts/crowdin-import.ts", "markdown-checker": "ts-node -O '{ \"module\": \"commonjs\" }' src/scripts/markdownChecker.ts", - "theme": "chakra-cli tokens ./src/@chakra-ui/theme.ts --strict-token-types --strict-component-types", - "theme:watch": "chakra-cli tokens ./src/@chakra-ui/theme.ts --strict-token-types --strict-component-types --watch" + "theme": "chakra-cli tokens ./src/@chakra-ui/theme.ts", + "theme:watch": "chakra-cli tokens ./src/@chakra-ui/theme.ts --watch" }, "dependencies": { "@chakra-ui/next-js": "^2.1.5", From 1927353380f49ba5ab8c6c55010bc4cf41d553ef Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Fri, 2 Feb 2024 11:49:01 -0500 Subject: [PATCH 025/219] chore(Stat): update imports --- src/components/Stat/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx index 1089fff019b..6b0a67be59c 100644 --- a/src/components/Stat/index.tsx +++ b/src/components/Stat/index.tsx @@ -1,9 +1,9 @@ import * as React from "react" -import { Flex, HStack, Icon, Text } from "@chakra-ui/react" import type { IconType } from "react-icons/lib" import { MdInfoOutline, MdWarning } from "react-icons/md" +import { Flex, HStack, Icon, Text } from "@chakra-ui/react" -import Tooltip, { IProps as TooltipProps } from "../Tooltip" +import Tooltip, { TooltipProps } from "../Tooltip" const nullValue = <>— From 6ccb52e26ee7b57b52ab878e9e1c031b4e1c8fe0 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Fri, 2 Feb 2024 11:49:33 -0500 Subject: [PATCH 026/219] chore(Stat): add missing useEffect dep --- src/components/Stat/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx index 6b0a67be59c..733b705095b 100644 --- a/src/components/Stat/index.tsx +++ b/src/components/Stat/index.tsx @@ -36,7 +36,7 @@ const Stat = ({ tooltipProps, value, label, isError }: StatProps) => { if (!value) return return setContent({ ...initialContent, contentValue: value }) - }, [isError]) + }, [isError, value]) return ( From 29b5790cb96444dcdfed2a93ce8b5fd791b84d34 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Thu, 15 Feb 2024 00:30:29 -0500 Subject: [PATCH 027/219] revert(package.json): simplify dev script back to `next dev` --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6c71c97c8af..e62683787c5 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "8.0.0", "private": true, "scripts": { - "dev": "npx concurrently \"yarn next dev\" \"yarn theme:watch\"", + "dev": "next dev", "postinstall": "yarn theme", "build": "next build", "postbuild": "next-sitemap", @@ -95,4 +95,4 @@ "resolutions": { "jackspeak": "2.1.1" } -} +} \ No newline at end of file From 5fe9e1546e446c16aa843ca16523385c1803d99f Mon Sep 17 00:00:00 2001 From: davidzhangg Date: Tue, 20 Feb 2024 16:01:46 -0800 Subject: [PATCH 028/219] add covalent info into backend API libraries --- public/content/developers/docs/apis/backend/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/content/developers/docs/apis/backend/index.md b/public/content/developers/docs/apis/backend/index.md index 6ddc486bf72..3ad4a5af53b 100644 --- a/public/content/developers/docs/apis/backend/index.md +++ b/public/content/developers/docs/apis/backend/index.md @@ -167,6 +167,14 @@ These libraries abstract away much of the complexity of interacting directly wit - [Documentation](https://services.tokenview.io/docs?type=api) - [GitHub](https://github.com/Tokenview) +**Covalent -** **_Enriched blockchain APIs for 200+ Chains._** + +- [covalenthq.com](https://www.covalenthq.com/) +- [Documentation](https://www.covalenthq.com/docs/api/) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + + ## Further reading {#further-reading} _Know of a community resource that helped you? Edit this page and add it!_ From 1348e6e78466908a339fce881f3b85edd59c7e30 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 31 Mar 2024 00:48:46 +0000 Subject: [PATCH 029/219] Update community events --- src/data/community-events.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index 93729a23278..b65f0146ad0 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -545,4 +545,4 @@ "description": "Bringing developers onchain to build the future of the internet.", "imageUrl": "https://ethglobal.com/og.png" } -] +] \ No newline at end of file From c9687fba21b4968a132323cfed780036ef71366b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:43:33 -0700 Subject: [PATCH 030/219] fix: consensys staking icon and label --- src/components/icons/staking/ConsensysStakingGlyphIcon.tsx | 2 +- src/components/icons/staking/index.ts | 1 + src/data/staking-products.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/icons/staking/ConsensysStakingGlyphIcon.tsx b/src/components/icons/staking/ConsensysStakingGlyphIcon.tsx index a563c719771..403e5cd29cd 100644 --- a/src/components/icons/staking/ConsensysStakingGlyphIcon.tsx +++ b/src/components/icons/staking/ConsensysStakingGlyphIcon.tsx @@ -7,5 +7,5 @@ export const ConsensysStakingGlyphIcon = createIcon({ width: "32px", height: "32px", }, - d: "M16 0C24.8366 0 32 7.16344 32 16C32 19.8328 30.6523 23.3508 28.405 26.106L22.2067 14.2118L22.1734 14.1504L22.1389 14.0902L19.5622 9.14944C19.0835 8.22784 18.1325 7.65184 17.0944 7.65184H13.321C13.2083 7.65184 13.0982 7.67872 12.9997 7.7312C12.6592 7.90784 12.5261 8.32896 12.704 8.66944L23.8047 29.9706C21.496 31.2632 18.834 32 16 32C13.1431 32 10.4611 31.2512 8.13954 29.9393L14.8736 17.0176L14.9222 16.9011C15.0195 16.5862 14.8813 16.2355 14.5792 16.0794C14.4794 16.0282 14.3693 16 14.2566 16H10.4832L10.2618 16.009C9.312 16.0845 8.4608 16.6426 8.01536 17.4963L3.55496 26.0567C1.33167 23.3089 0 19.81 0 16C0 7.16344 7.16344 0 16 0Z", + d: "M30.9951 11.9093V16.0004C30.9951 24.2845 24.2807 31 15.9979 31C7.71527 31 1 24.2836 1 15.9995C1 7.7155 7.71441 1 15.9971 1H20.0876L12.5889 8.49977V19.4125H23.4948L30.9951 11.9093ZM30.9951 1H20.0876V11.9093H30.9951V1Z", }) diff --git a/src/components/icons/staking/index.ts b/src/components/icons/staking/index.ts index d2e49374a7c..80366f24fa3 100644 --- a/src/components/icons/staking/index.ts +++ b/src/components/icons/staking/index.ts @@ -9,6 +9,7 @@ export * from "./BloxstakingGlyphIcon" export * from "./BugBountyIcon" export * from "./CautionProductGlyphIcon" export * from "./ChainLaboGlyphIcon" +export * from "./ConsensysStakingGlyphIcon" export * from "./DefaultOpenSourceGlyphIcon" export * from "./DockerGlyphIcon" export * from "./EconomicalIcon" diff --git a/src/data/staking-products.json b/src/data/staking-products.json index 351696a288f..fa97e6b0dcb 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -750,7 +750,7 @@ } }, { - "name": "ConsensysStaking", + "name": "Consensys Staking", "imageName": "ConsensysStaking", "hue": 341, "launchDate": "2020-12-01", From 2654771105a6e7ef973d4d1753ba4c7c5b622c39 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:51:29 -0700 Subject: [PATCH 031/219] fix: consensys staking product details --- src/data/staking-products.json | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/data/staking-products.json b/src/data/staking-products.json index fa97e6b0dcb..c5e487d2448 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -749,10 +749,10 @@ "eventName": "Clicked RockX go to link" } }, - { + { "name": "Consensys Staking", "imageName": "ConsensysStaking", - "hue": 341, + "hue": 231, "launchDate": "2020-12-01", "url": "https://consensys.io/staking", "audits": [ @@ -764,22 +764,18 @@ "minEth": 32, "additionalStake": null, "additionalStakeUnit": null, - "monthlyFee": null, - "monthlyFeeUnit": null, - "isFoss": true, + "monthlyFee": 8, + "monthlyFeeUnit": "%", + "isFoss": false, "hasBugBounty": true, "isTrustless": false, "isPermissionless": false, "pctMajorityExecutionClient": 95, "pctMajorityConsensusClient": 0, - "isSelfCustody": true, + "isSelfCustody": false, "platforms": ["macOS", "Windows"], - "ui": ["GUI", "API", "GraphiQL"], - "socials": { - "discord": "https://discord.gg/AbYHBfjkDY", - "twitter": "https://twitter.com/ssv_network", - "github": "https://github.com/bloxapp/blox-live" - }, + "ui": ["GUI", "API"], + "socials": {}, "matomo": { "eventCategory": "StakingProductCard", "eventAction": "Clicked", From b3cbbd24a9d531d6a1620afaca647e433f5b6c5e Mon Sep 17 00:00:00 2001 From: Vid Kersic Date: Tue, 2 Apr 2024 10:31:02 +0200 Subject: [PATCH 032/219] fix: strong statelessness --- public/content/roadmap/statelessness/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/roadmap/statelessness/index.md b/public/content/roadmap/statelessness/index.md index cd10a008d47..ac2b26c8865 100644 --- a/public/content/roadmap/statelessness/index.md +++ b/public/content/roadmap/statelessness/index.md @@ -81,7 +81,7 @@ Weak statelessness is in an advanced state of research, but it relies upon propo ### Strong statelessness {#strong-statelessness} -Strong statelessness removes the need for any blocks to store state data. Instead, transactions are sent with witnesses that can be aggregated by block producers. The block producers are then responsible for storing only that state that are needed for generating witnesses for relevant accounts. The responsibility for state is almost entirely moved to users, as they send witnesses and 'access lists' to declare which accounts and storage keys they are interacting with. This would enable extremely lightweight nodes, but there are tradeoffs including making it more difficult to transact with smart contracts. +Strong statelessness removes the need for any node to store state data. Instead, transactions are sent with witnesses that can be aggregated by block producers. The block producers are then responsible for storing only that state that are needed for generating witnesses for relevant accounts. The responsibility for state is almost entirely moved to users, as they send witnesses and 'access lists' to declare which accounts and storage keys they are interacting with. This would enable extremely lightweight nodes, but there are tradeoffs including making it more difficult to transact with smart contracts. Strong statelessness has been investigated by researchers but is not currently expected to be part of Ethereum's roadmap - it is more likely that weak statelessness is sufficient for Ethereum's scaling needs. From c3822293b75bf01209f32b7497d5cf73a9e4f23d Mon Sep 17 00:00:00 2001 From: Dharmik79 Date: Wed, 3 Apr 2024 11:37:26 -0600 Subject: [PATCH 033/219] handle the button click based on the event called [Fixes #12644] --- src/components/FindWallet/WalletTable/index.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/components/FindWallet/WalletTable/index.tsx b/src/components/FindWallet/WalletTable/index.tsx index c731ce15a0b..56acf9f5e4f 100644 --- a/src/components/FindWallet/WalletTable/index.tsx +++ b/src/components/FindWallet/WalletTable/index.tsx @@ -309,7 +309,15 @@ const WalletTable = ({ sliceSize ) - const showMoreInfo = (wallet) => { + const showMoreInfo = (wallet, event) => { + // Prevent expanding the wallet more info section when clicking on the "Visit website" button + let classList = event?.target?.classList + if ( + Object.values(classList)?.includes("chakra-button") || + Object.values(classList)?.includes("css-1bbj57d") + ) { + return + } updateMoreInfo(wallet.key) // Log "more info" event only on expanding wallet.moreInfo && @@ -328,9 +336,11 @@ const WalletTable = ({ { - if (e.key === "Enter") showMoreInfo(wallet) + if (e.key === "Enter") showMoreInfo(wallet, e) + }} + onClick={(e) => { + showMoreInfo(wallet, e) }} - onClick={() => showMoreInfo(wallet)} > Date: Wed, 3 Apr 2024 23:27:11 -0400 Subject: [PATCH 034/219] chore(Stat): add import type modifier for `TooltipProps` Co-authored-by: Paul Wackerow <54227730+wackerow@users.noreply.github.com> --- src/components/Stat/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx index 733b705095b..5bbe8fd2893 100644 --- a/src/components/Stat/index.tsx +++ b/src/components/Stat/index.tsx @@ -3,7 +3,7 @@ import type { IconType } from "react-icons/lib" import { MdInfoOutline, MdWarning } from "react-icons/md" import { Flex, HStack, Icon, Text } from "@chakra-ui/react" -import Tooltip, { TooltipProps } from "../Tooltip" +import Tooltip, { type TooltipProps } from "../Tooltip" const nullValue = <>— From e697f21c32a193d6aa62ab288ed767f9591e23de Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Wed, 3 Apr 2024 23:35:56 -0400 Subject: [PATCH 035/219] refactor(Stat): move null value variable to constants file --- src/components/Stat/index.tsx | 8 ++++---- src/lib/constants.ts | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx index 5bbe8fd2893..c8c4fc726e7 100644 --- a/src/components/Stat/index.tsx +++ b/src/components/Stat/index.tsx @@ -3,12 +3,12 @@ import type { IconType } from "react-icons/lib" import { MdInfoOutline, MdWarning } from "react-icons/md" import { Flex, HStack, Icon, Text } from "@chakra-ui/react" -import Tooltip, { type TooltipProps } from "../Tooltip" +import { NULL_VALUE } from "@/lib/constants" -const nullValue = <>— +import Tooltip, { type TooltipProps } from "../Tooltip" const initialContent = { - contentValue: nullValue, + contentValue: NULL_VALUE, tooltipIcon: MdInfoOutline, } @@ -28,7 +28,7 @@ const Stat = ({ tooltipProps, value, label, isError }: StatProps) => { React.useEffect(() => { if (isError) { return setContent({ - contentValue: nullValue, + contentValue: NULL_VALUE, tooltipIcon: MdWarning, }) } diff --git a/src/lib/constants.ts b/src/lib/constants.ts index e00dbb8f8ab..4082dafacd3 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -11,6 +11,8 @@ export const TRANSLATED_IMAGES_DIR = "/content/translations" export const PLACEHOLDER_IMAGE_DIR = "src/data/placeholders" export const INTL_JSON_DIR = "src/intl" +export const NULL_VALUE = "—" + // i18n export const DEFAULT_LOCALE = "en" export const FAKE_LOCALE = "default" From e5af1a316ca49db318c83a96f1f6b14d04d75a83 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Thu, 4 Apr 2024 00:04:23 -0400 Subject: [PATCH 036/219] chore(Stat): use named imports from react --- src/components/Stat/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx index c8c4fc726e7..ef81e2b1240 100644 --- a/src/components/Stat/index.tsx +++ b/src/components/Stat/index.tsx @@ -1,4 +1,4 @@ -import * as React from "react" +import { useEffect, useState } from "react" import type { IconType } from "react-icons/lib" import { MdInfoOutline, MdWarning } from "react-icons/md" import { Flex, HStack, Icon, Text } from "@chakra-ui/react" @@ -20,12 +20,12 @@ export type StatProps = { } const Stat = ({ tooltipProps, value, label, isError }: StatProps) => { - const [content, setContent] = React.useState<{ + const [content, setContent] = useState<{ contentValue: string | JSX.Element tooltipIcon: IconType }>(initialContent) - React.useEffect(() => { + useEffect(() => { if (isError) { return setContent({ contentValue: NULL_VALUE, From c671eb7abe7761a1e9d73e97857205918e85e206 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Thu, 4 Apr 2024 00:30:47 -0400 Subject: [PATCH 037/219] fix(Tooltip): update prop type name --- src/components/Tooltip/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Tooltip/index.tsx b/src/components/Tooltip/index.tsx index 2dcdfb0399a..66ea5a6781b 100644 --- a/src/components/Tooltip/index.tsx +++ b/src/components/Tooltip/index.tsx @@ -11,18 +11,18 @@ import { import { isMobile } from "@/lib/utils/isMobile" -export interface IProps extends PopoverProps { +export interface TooltipProps extends PopoverProps { content: ReactNode children?: ReactNode onBeforeOpen?: () => void } -const Tooltip: React.FC = ({ +const Tooltip = ({ content, children, onBeforeOpen, ...rest -}) => { +}: TooltipProps) => { const { isOpen, onOpen, onClose } = useDisclosure() // Close the popover when the user scrolls. From bbec16861cc1571490f1be00ce2099c2de2a03eb Mon Sep 17 00:00:00 2001 From: iepn Date: Thu, 4 Apr 2024 17:58:49 +0000 Subject: [PATCH 038/219] fix: StablecoinsTable components dark mode text color not see #12648 --- src/components/StablecoinsTable.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/StablecoinsTable.tsx b/src/components/StablecoinsTable.tsx index 77d94c7ac04..2aa456f4b8b 100644 --- a/src/components/StablecoinsTable.tsx +++ b/src/components/StablecoinsTable.tsx @@ -94,8 +94,7 @@ const StablecoinsTable = ({ _hover={{ textDecoration: "none", borderBottom: `1px solid ${textColor}`, - bg: "primary200", - color: "black300", + bg: "primary200" }} _focus={{ borderBottom: `1px solid ${textColor}`, From 55a1c38129d1774ecebfd4ed1f1ae5b2dfdeeedf Mon Sep 17 00:00:00 2001 From: iepn Date: Fri, 5 Apr 2024 02:07:45 +0800 Subject: [PATCH 039/219] Update community-events.json --- src/data/community-events.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/community-events.json b/src/data/community-events.json index 7a25524d209..f2b47eeedb8 100644 --- a/src/data/community-events.json +++ b/src/data/community-events.json @@ -562,4 +562,4 @@ "description": "Building together for a decentralized future.", "imageUrl": "https://uploads-ssl.webflow.com/6463b2b2401a64107c84634f/6463f95db5abb4d10aeabfb5_eth-uy-logo-3.png" } -] \ No newline at end of file +] From d41008dc45f84ef908fe1f74af77ef11756be33b Mon Sep 17 00:00:00 2001 From: iepn Date: Fri, 5 Apr 2024 03:51:34 +0800 Subject: [PATCH 040/219] style: use new design system token --- src/components/StablecoinsTable.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/StablecoinsTable.tsx b/src/components/StablecoinsTable.tsx index 2aa456f4b8b..a8e0df4c6c1 100644 --- a/src/components/StablecoinsTable.tsx +++ b/src/components/StablecoinsTable.tsx @@ -56,7 +56,7 @@ const StablecoinsTable = ({ mb={8} minW="720px" > - + {columns.map((column, idx) => ( From 5c46c0e5bf251741097b6f1fdfbc73572785a641 Mon Sep 17 00:00:00 2001 From: iepn Date: Fri, 5 Apr 2024 04:07:34 +0800 Subject: [PATCH 041/219] style: use new table DS --- src/components/StablecoinsTable.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/components/StablecoinsTable.tsx b/src/components/StablecoinsTable.tsx index a8e0df4c6c1..59a73f78a83 100644 --- a/src/components/StablecoinsTable.tsx +++ b/src/components/StablecoinsTable.tsx @@ -50,14 +50,12 @@ const StablecoinsTable = ({ - + {columns.map((column, idx) => ( {url && ( +
Date: Fri, 5 Apr 2024 04:52:26 +0800 Subject: [PATCH 042/219] style: title font weight and Flex center --- src/components/StablecoinsTable.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/StablecoinsTable.tsx b/src/components/StablecoinsTable.tsx index 59a73f78a83..f92a25edc59 100644 --- a/src/components/StablecoinsTable.tsx +++ b/src/components/StablecoinsTable.tsx @@ -60,6 +60,7 @@ const StablecoinsTable = ({ - + {image && } <>{name} - {marketCap} + {marketCap} - {stablecoinsType[type]} + {stablecoinsType[type]} From 281155ebc0a5185a1fe12bca1c2699ae2db7faf1 Mon Sep 17 00:00:00 2001 From: iepn Date: Fri, 5 Apr 2024 06:18:52 +0800 Subject: [PATCH 043/219] fix: del duplicate code error --- src/components/StablecoinsTable.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/StablecoinsTable.tsx b/src/components/StablecoinsTable.tsx index f92a25edc59..599501e67cc 100644 --- a/src/components/StablecoinsTable.tsx +++ b/src/components/StablecoinsTable.tsx @@ -62,7 +62,6 @@ const StablecoinsTable = ({ py={5} fontWeight="bold" fontSize="md" - fontWeight="normal" letterSpacing="normal" > {column} From f5f9e57bbac65f14c18ff0b171da126944392747 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Thu, 4 Apr 2024 23:12:14 -0400 Subject: [PATCH 044/219] chore(tsconfig): specify ES6 target --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index fa67f03dc13..cdb435001a4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ESNext", + "target": "ES6", "lib": ["dom", "dom.iterable", "esnext", "ES2021.String"], "allowJs": true, "skipLibCheck": true, From 8ffd25aaafe2ef69d6f1fe035d5e8bd1bb9cc9ff Mon Sep 17 00:00:00 2001 From: Dharmik79 Date: Mon, 8 Apr 2024 22:21:14 -0600 Subject: [PATCH 045/219] added the tag for the svg to avoid showing the detailed information for the wallet --- .../FindWallet/WalletTable/index.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/components/FindWallet/WalletTable/index.tsx b/src/components/FindWallet/WalletTable/index.tsx index 56acf9f5e4f..c1c1189eb78 100644 --- a/src/components/FindWallet/WalletTable/index.tsx +++ b/src/components/FindWallet/WalletTable/index.tsx @@ -309,15 +309,9 @@ const WalletTable = ({ sliceSize ) - const showMoreInfo = (wallet, event) => { + const showMoreInfo = (wallet) => { // Prevent expanding the wallet more info section when clicking on the "Visit website" button - let classList = event?.target?.classList - if ( - Object.values(classList)?.includes("chakra-button") || - Object.values(classList)?.includes("css-1bbj57d") - ) { - return - } + updateMoreInfo(wallet.key) // Log "more info" event only on expanding wallet.moreInfo && @@ -336,10 +330,15 @@ const WalletTable = ({ { - if (e.key === "Enter") showMoreInfo(wallet, e) + if (e.key === "Enter") showMoreInfo(wallet) }} onClick={(e) => { - showMoreInfo(wallet, e) + if ( + (e.target as HTMLTableRowElement).tagName === "A" || + (e.target as HTMLTableRowElement).tagName === "svg" + ) + return + showMoreInfo(wallet) }} > From 85a511b093874460d5817fdcde7509c4b2cd2604 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Tue, 9 Apr 2024 19:49:26 +0200 Subject: [PATCH 046/219] tmp hide search modal until we resolve issues with Algolia API key --- src/components/Nav/Mobile/MenuFooter.tsx | 8 +++++--- src/components/Nav/index.tsx | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/Nav/Mobile/MenuFooter.tsx b/src/components/Nav/Mobile/MenuFooter.tsx index 1f653bb7e76..6f000d30a9e 100644 --- a/src/components/Nav/Mobile/MenuFooter.tsx +++ b/src/components/Nav/Mobile/MenuFooter.tsx @@ -39,8 +39,9 @@ const MenuFooter = ({ py={0} mt="auto" > - - + {/* Temporarily hide search for now until we resolve issues with the API key */} + {/* { // Workaround to ensure the input for the search modal can have focus @@ -49,7 +50,8 @@ const MenuFooter = ({ }} > {t("search")} - + */} + {t(themeLabelKey)} diff --git a/src/components/Nav/index.tsx b/src/components/Nav/index.tsx index 5f98ec4ef21..c39b5e6ab3c 100644 --- a/src/components/Nav/index.tsx +++ b/src/components/Nav/index.tsx @@ -94,8 +94,10 @@ const Nav = () => { ms={{ base: 3, xl: 8 }} > - - + + {/* Temporarily hide search for now until we resolve issues with the API key */} + {/* */} + {/* Desktop */} Date: Wed, 10 Apr 2024 05:19:55 +0800 Subject: [PATCH 047/219] style: new ds token and vertically --- src/components/StablecoinsTable.tsx | 30 ++++++++++------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/components/StablecoinsTable.tsx b/src/components/StablecoinsTable.tsx index 599501e67cc..1eb96b2a7de 100644 --- a/src/components/StablecoinsTable.tsx +++ b/src/components/StablecoinsTable.tsx @@ -47,21 +47,15 @@ const StablecoinsTable = ({ } return ( - - - +
+ + {columns.map((column, idx) => ( - - + + {url && ( +
{column} @@ -90,25 +84,21 @@ const StablecoinsTable = ({ color="text" _hover={{ textDecoration: "none", - bg: "background.highlight" + bg: "background.highlight", }} _focus={{ bg: "background.base", color: "body.base", }} > - - + + {image && } <>{name} - {marketCap} - - {stablecoinsType[type]} - {marketCap}{stablecoinsType[type]} From 6d8d7ef4b45223c84d11b61296b962e8dd22a81a Mon Sep 17 00:00:00 2001 From: Dharmik79 Date: Wed, 10 Apr 2024 00:34:37 -0600 Subject: [PATCH 048/219] added the selector approach to resolve the svg tag issue --- src/components/FindWallet/WalletTable/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/FindWallet/WalletTable/index.tsx b/src/components/FindWallet/WalletTable/index.tsx index c1c1189eb78..bcad91c9739 100644 --- a/src/components/FindWallet/WalletTable/index.tsx +++ b/src/components/FindWallet/WalletTable/index.tsx @@ -334,8 +334,7 @@ const WalletTable = ({ }} onClick={(e) => { if ( - (e.target as HTMLTableRowElement).tagName === "A" || - (e.target as HTMLTableRowElement).tagName === "svg" + (e.target as HTMLElement).matches("a, a svg") ) return showMoreInfo(wallet) From e429a21a25377de31f727d078ded0133fe2655b0 Mon Sep 17 00:00:00 2001 From: davidzhangg Date: Wed, 10 Apr 2024 12:55:31 -0700 Subject: [PATCH 049/219] fix --- public/content/developers/docs/apis/backend/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/developers/docs/apis/backend/index.md b/public/content/developers/docs/apis/backend/index.md index 935c7835d43..670237d0f46 100644 --- a/public/content/developers/docs/apis/backend/index.md +++ b/public/content/developers/docs/apis/backend/index.md @@ -169,7 +169,7 @@ These libraries abstract away much of the complexity of interacting directly wit - [Documentation](https://services.tokenview.io/docs?type=api) - [GitHub](https://github.com/Tokenview) -=**Watchdata -** **_Provide simple and reliable API access to Ethereum blockchain._** +**Watchdata -** **_Provide simple and reliable API access to Ethereum blockchain._** - [Watchdata](https://watchdata.io/) - [Documentation](https://docs.watchdata.io/) From 7497c240c748594c367071808a05e6872a62514b Mon Sep 17 00:00:00 2001 From: Hiroyuki Naito Date: Thu, 11 Apr 2024 13:58:30 +0900 Subject: [PATCH 050/219] Typo a residual parenthesis in EVM page --- public/content/developers/docs/evm/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/developers/docs/evm/index.md b/public/content/developers/docs/evm/index.md index b62a6dad2b0..442b92dd84f 100644 --- a/public/content/developers/docs/evm/index.md +++ b/public/content/developers/docs/evm/index.md @@ -76,7 +76,7 @@ Over Ethereum's nine year history, the EVM has undergone several revisions, and - [Ethereum Virtual Machine Opcodes](https://www.ethervm.io/) - [Ethereum Virtual Machine Opcodes Interactive Reference](https://www.evm.codes/) - [A short introduction in Solidity's documentation](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) -- [Mastering Ethereum - The Ethereum Virtual Machine](https://github.com/ethereumbook/ethereumbook/blob/develop/13evm.asciidoc)) +- [Mastering Ethereum - The Ethereum Virtual Machine](https://github.com/ethereumbook/ethereumbook/blob/develop/13evm.asciidoc) ## Related Topics {#related-topics} From fc284c1c7bfa9fdd130aac84a6dca42557745477 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Thu, 11 Apr 2024 10:22:10 -0600 Subject: [PATCH 051/219] Remove doge from CallToContribute component --- src/components/CallToContribute.tsx | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/components/CallToContribute.tsx b/src/components/CallToContribute.tsx index 821c8b40920..a98f77d72d7 100644 --- a/src/components/CallToContribute.tsx +++ b/src/components/CallToContribute.tsx @@ -55,27 +55,15 @@ const CallToContribute = ({ editPath }: CallToContributeProps) => { borderRadius="base" boxShadow="inset 0 -2px 0 0 var(--eth-colors-primary400)" > - - ░░░░░░░░░▄░░░░░░░░░░░░░░▄░░░░ ░░░░░░░░▌▒█░░░░░░░░░░░▄▀▒▌░░░ - ░░░░░░░░▌▒▒█░░░░░░░░▄▀▒▒▒▐░░░ ░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐░░░ - ░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐░░░ ░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌░░░ - ░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒▌░░ ░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐░░ - ░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄▌░ ░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒▌░ - ▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒▐░ ▐▒▒▐▀▐▀▒░▄▄▒▄▒▒▒▒▒▒░▒░▒░▒▒▒▒▌ - ▐▒▒▒▀▀▄▄▒▒▒▄▒▒▒▒▒▒▒▒░▒░▒░▒▒▐░ ░▌▒▒▒▒▒▒▀▀▀▒▒▒▒▒▒░▒░▒░▒░▒▒▒▌░ - ░▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▒▄▒▒▐░░ ░░▀▄▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▄▒▒▒▒▌░░ - ░░░░▀▄▒▒▒▒▒▒▒▒▒▒▄▄▄▀▒▒▒▒▄▀░░░ ░░░░░░▀▄▄▄▄▄▄▀▀▀▒▒▒▒▒▄▄▀░░░░░ - ░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▀▀░░░░░░░░ - From f6f22186ecc440ea6c490c1c9d131adb778035d5 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Thu, 11 Apr 2024 20:18:35 +0200 Subject: [PATCH 052/219] update footer styles with ds specs --- src/components/Footer.tsx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 4edd89f802c..16404e1644e 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -9,6 +9,7 @@ import { List, ListItem, SimpleGrid, + Text, } from "@chakra-ui/react" import type { FooterLink, FooterLinkSection, Lang } from "@/lib/types" @@ -23,19 +24,16 @@ const socialLinks = [ icon: FaGithub, to: "https://github.com/ethereum/ethereum-org-website", ariaLabel: "GitHub", - color: "#333", }, { icon: FaTwitter, to: "https://twitter.com/ethdotorg", ariaLabel: "Twitter", - color: "#1DA1F2", }, { icon: FaDiscord, to: "https://discord.gg/ethereum-org", ariaLabel: "Discord", - color: "#7289da", }, ] @@ -325,7 +323,7 @@ const Footer = ({ lastDeployDate }: FooterProps) => { _hover: hoverStyles, sx: { "& svg": { - fill: "text200", + fill: "body.medium", }, }, } @@ -339,25 +337,25 @@ const Footer = ({ lastDeployDate }: FooterProps) => { flexWrap="wrap" > {lastDeployDate && ( - + :{" "} {getLocaleTimestamp(locale as Lang, lastDeployDate)} - + )} - {socialLinks.map(({ to, ariaLabel, icon, color }) => ( + {socialLinks.map(({ to, ariaLabel, icon }) => ( Date: Thu, 11 Apr 2024 20:36:22 +0200 Subject: [PATCH 053/219] fix hydration issue with tooltip and glossary tooltip --- src/components/Glossary/GlossaryTooltip/index.tsx | 2 +- src/components/Tooltip/index.tsx | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/Glossary/GlossaryTooltip/index.tsx b/src/components/Glossary/GlossaryTooltip/index.tsx index abe9d22f6f4..be5a14c7884 100644 --- a/src/components/Glossary/GlossaryTooltip/index.tsx +++ b/src/components/Glossary/GlossaryTooltip/index.tsx @@ -17,7 +17,7 @@ const GlossaryTooltip = ({ children, termKey }: GlossaryTooltipProps) => { const { asPath } = useRouter() return ( - + = ({ {...rest} > {children} - - - {content} - + + + + {content} + + ) } From c2ec1c4f45e0c22eca201f112abc1094219ce6ce Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Thu, 11 Apr 2024 20:40:56 +0200 Subject: [PATCH 054/219] remove custom listitem from Static layout in favor of the default md listitem --- src/layouts/Static.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/layouts/Static.tsx b/src/layouts/Static.tsx index 467d81f11fc..f1598d92983 100644 --- a/src/layouts/Static.tsx +++ b/src/layouts/Static.tsx @@ -1,5 +1,5 @@ import { useRouter } from "next/router" -import { Box, chakra, Flex, type HeadingProps, Icon } from "@chakra-ui/react" +import { Box, Flex, type HeadingProps, Icon } from "@chakra-ui/react" import type { ChildOnlyProp, Lang } from "@/lib/types" import type { MdPageContent, StaticFrontmatter } from "@/lib/interfaces" @@ -51,17 +51,12 @@ const Heading4 = (props: HeadingProps) => ( ) -const ListItem = (props: ChildOnlyProp) => ( - -) - // Static layout components export const staticComponents = { h1: Heading1, h2: Heading2, h3: Heading3, h4: Heading4, - li: ListItem, Callout, Contributors, EnergyConsumptionChart, From b4dbddb8d48f265e68bf61a9600c43d19c6eaabf Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Fri, 12 Apr 2024 12:40:29 +0200 Subject: [PATCH 055/219] remove custom ListItems from layouts --- src/layouts/Docs.tsx | 7 ------- src/layouts/Tutorial.tsx | 6 ------ src/layouts/Upgrade.tsx | 7 +------ src/layouts/UseCases.tsx | 2 +- 4 files changed, 2 insertions(+), 20 deletions(-) diff --git a/src/layouts/Docs.tsx b/src/layouts/Docs.tsx index 98c457222d2..d279c26f6f7 100644 --- a/src/layouts/Docs.tsx +++ b/src/layouts/Docs.tsx @@ -7,8 +7,6 @@ import { Flex, type FlexProps, type HeadingProps, - ListItem as ChakraListItem, - type ListItemProps, type ListProps, OrderedList as ChakraOrderedList, UnorderedList as ChakraUnorderedList, @@ -138,10 +136,6 @@ const OrderedList = (props: ListProps) => ( ) -const ListItem = (props: ListItemProps) => ( - -) - // Apply styles for classes within markdown here const Content = (props: ChildOnlyProp) => { const mdBreakpoint = useToken("breakpoints", "md") @@ -190,7 +184,6 @@ export const docsComponents = { p: Paragraph, ul: UnorderedList, ol: OrderedList, - li: ListItem, pre: Codeblock, ...mdxTableComponents, Badge, diff --git a/src/layouts/Tutorial.tsx b/src/layouts/Tutorial.tsx index 8c2cfdc92ac..c451028c68b 100644 --- a/src/layouts/Tutorial.tsx +++ b/src/layouts/Tutorial.tsx @@ -3,7 +3,6 @@ import { Badge, Box, type BoxProps, - chakra, Divider, Flex, type HeadingProps, @@ -125,10 +124,6 @@ const Paragraph = (props: TextProps) => ( ) -const ListItem = (props) => { - return -} - const KBD = (props) => { const borderColor = useToken("colors", "primary.base") @@ -151,7 +146,6 @@ export const tutorialsComponents = { h4: Heading4, p: Paragraph, kbd: KBD, - li: ListItem, pre: Codeblock, ...mdxTableComponents, Badge, diff --git a/src/layouts/Upgrade.tsx b/src/layouts/Upgrade.tsx index 3f2e4055ca1..ccf9668f8bf 100644 --- a/src/layouts/Upgrade.tsx +++ b/src/layouts/Upgrade.tsx @@ -9,7 +9,6 @@ import { Icon, List, ListItem, - Skeleton, Text, useToken, } from "@chakra-ui/react" @@ -53,10 +52,6 @@ const Title = (props: ChildOnlyProp) => ( /> ) -const SummaryPoint = (props: ChildOnlyProp) => ( - -) - type ContainerProps = Pick const Container = (props: ContainerProps) => ( @@ -190,7 +185,7 @@ export const UpgradeLayout = ({ {summaryPoints.map((point, idx) => ( - {point} + {point} ))} diff --git a/src/layouts/UseCases.tsx b/src/layouts/UseCases.tsx index b056b373d12..676ea11c71c 100644 --- a/src/layouts/UseCases.tsx +++ b/src/layouts/UseCases.tsx @@ -197,7 +197,7 @@ export const UseCasesLayout = ({ {summaryPoints.map((point, idx) => ( - + {point} ))} From 8c7dccfb79a7e2f5f5459af7b6438c5940f7bb3c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 14 Apr 2024 02:20:24 +0000 Subject: [PATCH 056/219] Update Crowdin contributors --- src/data/crowdin/combined-translators.json | 5332 ++++++++++------- .../crowdin/translation-buckets-dirs.json | 6 +- 2 files changed, 3256 insertions(+), 2082 deletions(-) diff --git a/src/data/crowdin/combined-translators.json b/src/data/crowdin/combined-translators.json index f07d92ba828..c6d19856c85 100644 --- a/src/data/crowdin/combined-translators.json +++ b/src/data/crowdin/combined-translators.json @@ -8,7 +8,7 @@ { "id": 15567971, "username": "HASANTAHHAN", - "totalCosts": 981.72, + "totalCosts": 437.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15567971/medium/82c26b32ac2312ed1fbb253a222ec9e1.jpg" }, { @@ -20,7 +20,7 @@ { "id": 15104739, "username": "mnet8999", - "totalCosts": 51.51, + "totalCosts": 32.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15104739/medium/03271622c0f21b11866ae6dc57709fdb_default.png" }, { @@ -67,7 +67,7 @@ { "id": 15567971, "username": "HASANTAHHAN", - "totalCosts": 2130.09, + "totalCosts": 1828.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15567971/medium/82c26b32ac2312ed1fbb253a222ec9e1.jpg" }, { @@ -90,7 +90,7 @@ { "id": 15567971, "username": "HASANTAHHAN", - "totalCosts": 2384.61, + "totalCosts": 2286.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15567971/medium/82c26b32ac2312ed1fbb253a222ec9e1.jpg" }, { @@ -162,22 +162,22 @@ { "fileId": "5565", "contributors": [ - { - "id": 16188542, - "username": "gmalasma95", - "totalCosts": 227.25, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16188542/medium/ef7869f44e3c495d0207aff5d99e9d05.png" - }, { "id": 15966777, "username": "tareqgh", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966777/medium/c434fa240e13cc295e9947bd14d0394f_default.png" }, + { + "id": 16188542, + "username": "gmalasma95", + "totalCosts": 109.08, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16188542/medium/ef7869f44e3c495d0207aff5d99e9d05.png" + }, { "id": 15930651, "username": "0xOZ", - "totalCosts": 147.46, + "totalCosts": 79.79, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15930651/medium/b4738a8e10109842b168d657d53eeaec.jpeg" }, { @@ -216,6 +216,12 @@ "totalCosts": 3.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16197178/medium/0aea948e76b4de5edc20633d6592a209.jpg" }, + { + "id": 16288342, + "username": "almodaber966", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16288342/medium/6d55aa5cf94fd28a40fb2a493cf58490_default.png" + }, { "id": 15677817, "username": "Brivan-26", @@ -323,7 +329,7 @@ { "id": 15503382, "username": "mohammedE22", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15503382/medium/b5e1fa8943e236c07bbe459d92d23dcb.png" }, { @@ -332,17 +338,17 @@ "totalCosts": 77.77, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15567971/medium/82c26b32ac2312ed1fbb253a222ec9e1.jpg" }, - { - "id": 15930651, - "username": "0xOZ", - "totalCosts": 28.28, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15930651/medium/b4738a8e10109842b168d657d53eeaec.jpeg" - }, { "id": 15075281, "username": "Noufilosophy", "totalCosts": 10.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15075281/medium/5ba3cb81d30b3f0d41667f5035f298e7_default.png" + }, + { + "id": 15930651, + "username": "0xOZ", + "totalCosts": 9.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15930651/medium/b4738a8e10109842b168d657d53eeaec.jpeg" } ] }, @@ -352,14 +358,8 @@ { "id": 15567971, "username": "HASANTAHHAN", - "totalCosts": 1265.53, + "totalCosts": 589.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15567971/medium/82c26b32ac2312ed1fbb253a222ec9e1.jpg" - }, - { - "id": 15930651, - "username": "0xOZ", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15930651/medium/b4738a8e10109842b168d657d53eeaec.jpeg" } ] }, @@ -369,7 +369,7 @@ { "id": 15029207, "username": "mohammedouahman", - "totalCosts": 581.76, + "totalCosts": 308.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15029207/medium/da39ed145b99af8a9ad688d94669b468_default.png" } ] @@ -380,7 +380,7 @@ { "id": 15565893, "username": "khalilhammod19", - "totalCosts": 712.05, + "totalCosts": 417.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15565893/medium/d917912c05b0d8b8eb75649989e9df6b.png" } ] @@ -474,6 +474,12 @@ "username": "adseagncy", "totalCosts": 15.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15672439/medium/c3cab4663d453ce99d38a343900a8ab5.png" + }, + { + "id": 13324494, + "username": "hdmed", + "totalCosts": 4.04, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13324494/medium/e15dc911ade7cf545aeb847438d6742c.jpeg" } ] }, @@ -505,13 +511,13 @@ { "id": 15804803, "username": "sun_dariia", - "totalCosts": 376.73, + "totalCosts": 240.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" }, { "id": 14787370, "username": "agulani", - "totalCosts": 256.54, + "totalCosts": 159.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14787370/medium/9bb8a2d0d244e04f14b523e895b08100.jpg" }, { @@ -528,10 +534,106 @@ { "id": 14787370, "username": "agulani", - "totalCosts": 1344.31, + "totalCosts": 646.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14787370/medium/9bb8a2d0d244e04f14b523e895b08100.jpg" } ] + }, + { + "fileId": "7316", + "contributors": [ + { + "id": 14787370, + "username": "agulani", + "totalCosts": 1669.53, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14787370/medium/9bb8a2d0d244e04f14b523e895b08100.jpg" + }, + { + "id": 15904933, + "username": "Zumrud.I", + "totalCosts": 196.95, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15904933/medium/ce660fe41e2369fe77bcb152090a99d5.png" + }, + { + "id": 15804803, + "username": "sun_dariia", + "totalCosts": 56.56, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" + } + ] + }, + { + "fileId": "5561", + "contributors": [ + { + "id": 15804803, + "username": "sun_dariia", + "totalCosts": 1679.63, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" + }, + { + "id": 14787370, + "username": "agulani", + "totalCosts": 785.78, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14787370/medium/9bb8a2d0d244e04f14b523e895b08100.jpg" + }, + { + "id": 15966191, + "username": "0xokan", + "totalCosts": 521.16, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966191/medium/a5d1d36d7404974d591cbcf59f089df9.jpg" + } + ] + }, + { + "fileId": "7461", + "contributors": [ + { + "id": 15804803, + "username": "sun_dariia", + "totalCosts": 1193.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" + } + ] + }, + { + "fileId": "8035", + "contributors": [ + { + "id": 15804803, + "username": "sun_dariia", + "totalCosts": 582.77, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" + } + ] + }, + { + "fileId": "6440", + "contributors": [ + { + "id": 15804803, + "username": "sun_dariia", + "totalCosts": 443.39, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" + }, + { + "id": 15963465, + "username": "Ozje", + "totalCosts": 186.85, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963465/medium/da85affc52fa58f2bf27e2e90cebb31e_default.png" + } + ] + }, + { + "fileId": "7314", + "contributors": [ + { + "id": 15804803, + "username": "sun_dariia", + "totalCosts": 628.22, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" + } + ] } ] }, @@ -597,7 +699,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 1346.33, + "totalCosts": 648.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -608,7 +710,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 2167.46, + "totalCosts": 1865.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -619,7 +721,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 3106.76, + "totalCosts": 2986.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -630,7 +732,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 1582.67, + "totalCosts": 1165.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -641,7 +743,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 355.52, + "totalCosts": 191.9, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -652,7 +754,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -663,7 +765,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 699.93, + "totalCosts": 630.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -674,7 +776,7 @@ { "id": 15954257, "username": "arifulone", - "totalCosts": 1333.2, + "totalCosts": 628.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954257/medium/a836f4b9acb6585087ed674cb6b3b77e.jpg" } ] @@ -756,7 +858,7 @@ { "id": 14643068, "username": "egelizo", - "totalCosts": 382.79, + "totalCosts": 374.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg" } ] @@ -807,7 +909,7 @@ { "id": 14643068, "username": "egelizo", - "totalCosts": 496.92, + "totalCosts": 451.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg" } ] @@ -815,29 +917,29 @@ { "fileId": "5559", "contributors": [ - { - "id": 15344526, - "username": "Joanmacat", - "totalCosts": 495.91, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15344526/medium/9c82a079035424edd8b43ca59a8dcb3f.jpg" - }, { "id": 14643068, "username": "egelizo", - "totalCosts": 337.34, + "totalCosts": 303, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg" }, { - "id": 15743107, - "username": "samuel.sole", - "totalCosts": 10.1, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15743107/medium/54b0498f81903ef73ad1f02c64a8c4ce.jpeg" + "id": 15344526, + "username": "Joanmacat", + "totalCosts": 101, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15344526/medium/9c82a079035424edd8b43ca59a8dcb3f.jpg" }, { "id": 15028313, "username": "jafuda", "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15028313/medium/fffb96b68633dc4e006f6209276a3737_default.png" + }, + { + "id": 15743107, + "username": "samuel.sole", + "totalCosts": 7.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15743107/medium/54b0498f81903ef73ad1f02c64a8c4ce.jpeg" } ] }, @@ -847,7 +949,7 @@ { "id": 15028385, "username": "oriolbcn", - "totalCosts": 1213.01, + "totalCosts": 1193.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15028385/medium/53bd80afa16ac5f3c7de232c4dc1e253_default.png" }, { @@ -915,9 +1017,15 @@ { "id": 15344526, "username": "Joanmacat", - "totalCosts": 212.1, + "totalCosts": 115.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15344526/medium/9c82a079035424edd8b43ca59a8dcb3f.jpg" }, + { + "id": 16291550, + "username": "xavier.figuls", + "totalCosts": 30.3, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16291550/medium/c7575f83289b1357bfda21165030822f_default.png" + }, { "id": 14915329, "username": "Mariam163", @@ -990,7 +1098,7 @@ { "id": 14643068, "username": "egelizo", - "totalCosts": 1321.08, + "totalCosts": 1166.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg" } ] @@ -1010,13 +1118,13 @@ { "id": 15086733, "username": "hedwika", - "totalCosts": 392.89, + "totalCosts": 203.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" }, { "id": 15701215, "username": "drsticka.david", - "totalCosts": 289.87, + "totalCosts": 189.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15701215/medium/e88deaad9afa8cb84d012b354f516a21.jpeg" }, { @@ -1048,17 +1156,17 @@ { "fileId": "5559", "contributors": [ - { - "id": 15843833, - "username": "FoltinV", - "totalCosts": 595.9, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" - }, { "id": 15188556, "username": "korinektomas", - "totalCosts": 346.43, + "totalCosts": 312.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15188556/medium/ede830d725802daea8fd2fa53e0ae952.png" + }, + { + "id": 15843833, + "username": "FoltinV", + "totalCosts": 140.39, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" } ] }, @@ -1068,7 +1176,7 @@ { "id": 15843833, "username": "FoltinV", - "totalCosts": 2184.63, + "totalCosts": 1867.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" }, { @@ -1085,13 +1193,13 @@ { "id": 15843833, "username": "FoltinV", - "totalCosts": 2807.8, + "totalCosts": 2707.81, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" }, { "id": 15086733, "username": "hedwika", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" }, { @@ -1108,13 +1216,13 @@ { "id": 15086733, "username": "hedwika", - "totalCosts": 1458.44, + "totalCosts": 1089.79, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" }, { "id": 15843833, "username": "FoltinV", - "totalCosts": 354.51, + "totalCosts": 233.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" } ] @@ -1125,7 +1233,7 @@ { "id": 15086733, "username": "hedwika", - "totalCosts": 1194.83, + "totalCosts": 583.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" } ] @@ -1136,7 +1244,7 @@ { "id": 15086733, "username": "hedwika", - "totalCosts": 590.85, + "totalCosts": 521.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" }, { @@ -1159,16 +1267,124 @@ { "id": 15086733, "username": "hedwika", - "totalCosts": 1309.97, + "totalCosts": 606, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" }, { "id": 15425750, "username": "Funville", - "totalCosts": 24.24, + "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15425750/medium/220f750bc1e65a50acdead8f139a0a67_default.png" } ] + }, + { + "fileId": "7320", + "contributors": [ + { + "id": 15086733, + "username": "hedwika", + "totalCosts": 1092.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" + }, + { + "id": 15481764, + "username": "dominik060", + "totalCosts": 14.14, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15481764/medium/2267964d8995842ec44532f18f539d6a.jpeg" + }, + { + "id": 15843833, + "username": "FoltinV", + "totalCosts": 7.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" + } + ] + }, + { + "fileId": "6183", + "contributors": [ + { + "id": 15843833, + "username": "FoltinV", + "totalCosts": 421.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" + }, + { + "id": 15086733, + "username": "hedwika", + "totalCosts": 229.27, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" + } + ] + }, + { + "fileId": "5563", + "contributors": [ + { + "id": 15086733, + "username": "hedwika", + "totalCosts": 2083.63, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" + }, + { + "id": 15843833, + "username": "FoltinV", + "totalCosts": 22.22, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" + } + ] + }, + { + "fileId": "6187", + "contributors": [ + { + "id": 15843833, + "username": "FoltinV", + "totalCosts": 2288.66, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" + }, + { + "id": 15086733, + "username": "hedwika", + "totalCosts": 82.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" + }, + { + "id": 15425750, + "username": "Funville", + "totalCosts": 15.15, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15425750/medium/220f750bc1e65a50acdead8f139a0a67_default.png" + } + ] + }, + { + "fileId": "6428", + "contributors": [ + { + "id": 15086733, + "username": "hedwika", + "totalCosts": 1582.67, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" + } + ] + }, + { + "fileId": "7465", + "contributors": [ + { + "id": 15086733, + "username": "hedwika", + "totalCosts": 2607.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086733/medium/e58bffb1edb2cd4a9e2bbe7046a0d1e8.jpeg" + }, + { + "id": 15843833, + "username": "FoltinV", + "totalCosts": 24.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843833/medium/d9afa5c66a59b8166143dd4e1cca0630.jpeg" + } + ] } ] }, @@ -1240,7 +1456,7 @@ { "id": 15371878, "username": "Tedmeier", - "totalCosts": 364.61, + "totalCosts": 249.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15371878/medium/162454f1968a82ecbaceb7915709fe37_default.png" }, { @@ -1324,12 +1540,6 @@ "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15047729/medium/705657a47d8515302fce11fdaf1e1081.png" }, - { - "id": 15402888, - "username": "bernte1609", - "totalCosts": 16.16, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15402888/medium/1fa061589de850c06553db30ffe8b585.jpeg" - }, { "id": 14927031, "username": "thiesgrade", @@ -1361,7 +1571,7 @@ { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 447.43, + "totalCosts": 401.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, { @@ -1370,12 +1580,6 @@ "totalCosts": 45.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221766/medium/9818a6f07e95c5f3260f34774d4e26fe.jpg" }, - { - "id": 16191582, - "username": "Rise101", - "totalCosts": 9.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16191582/medium/227a43e48b1efc223a413da42c733ab4_default.png" - }, { "id": 15947755, "username": "RubenSilva", @@ -1614,39 +1818,39 @@ { "id": 14950177, "username": "tapioka84", - "totalCosts": 508.03, + "totalCosts": 235.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14950177/medium/beb313e77ee6f94f342383baac038e40_default.png" }, { "id": 14887772, "username": "bruderbuck.eth", - "totalCosts": 129.28, + "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14887772/medium/38c9634b12b554feef20f4e9f88bf8c1.png" }, { "id": 15447952, "username": "SeleneSilverstone", - "totalCosts": 61.61, + "totalCosts": 49.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15447952/medium/eef708e38e5f07dabf3e61317e4bbb69_default.png" }, { "id": 15547721, "username": "AmazinglyComfortableCat.eth", - "totalCosts": 56.56, + "totalCosts": 35.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15547721/medium/93b66b37088b4e29cd828691e8eeaa88.png" }, - { - "id": 15559043, - "username": "nonverbale3", - "totalCosts": 54.54, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15559043/medium/c7b359ac6b2ad725b4f459062d7f98ee.png" - }, { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 47.47, + "totalCosts": 32.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, + { + "id": 15559043, + "username": "nonverbale3", + "totalCosts": 18.18, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15559043/medium/c7b359ac6b2ad725b4f459062d7f98ee.png" + }, { "id": 14952363, "username": "ensingerphilipp", @@ -1667,25 +1871,25 @@ { "id": 15421538, "username": "johannt", - "totalCosts": 1403.9, + "totalCosts": 1223.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15421538/medium/7e1f5d90509951072c0de0d9684baa35.png" }, { "id": 15353484, "username": "Jakob.jar", - "totalCosts": 323.2, + "totalCosts": 268.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15353484/medium/b962e1530554eedd4dbef0216d94c5af_default.png" }, { "id": 15367678, "username": "damisch_citranova", - "totalCosts": 303, + "totalCosts": 257.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15367678/medium/6337a2ea19a84199b7753e367ff54850_default.png" }, { "id": 15082843, "username": "StevenR73", - "totalCosts": 116.15, + "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082843/medium/9bd744aeb105dfeb6c55c0a7bb68a51e.jpeg" }, { @@ -1693,12 +1897,6 @@ "username": "Coram_Deo", "totalCosts": 72.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" - }, - { - "id": 16191582, - "username": "Rise101", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16191582/medium/227a43e48b1efc223a413da42c733ab4_default.png" } ] }, @@ -1708,13 +1906,13 @@ { "id": 14952363, "username": "ensingerphilipp", - "totalCosts": 1037.27, + "totalCosts": 1018.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14952363/medium/491e25bf6c69040369e342c3b1d12249.jpeg" }, { "id": 15947755, "username": "RubenSilva", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947755/medium/cf9980cfafab6b7c43f6e16e1ca48324_default.png" }, { @@ -1743,21 +1941,15 @@ { "id": 15707609, "username": "RvonRoit", - "totalCosts": 1245.33, + "totalCosts": 1003.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15707609/medium/79e71a64e2766240d93e42ed8730852d_default.png" }, { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 371.68, + "totalCosts": 195.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, - { - "id": 16191582, - "username": "Rise101", - "totalCosts": 27.27, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16191582/medium/227a43e48b1efc223a413da42c733ab4_default.png" - }, { "id": 15947755, "username": "RubenSilva", @@ -2240,7 +2432,7 @@ { "id": 15810863, "username": "bitblondy", - "totalCosts": 769.62, + "totalCosts": 765.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15810863/medium/36dab07f1a377151348d57285a7955f7_default.png" }, { @@ -2385,7 +2577,7 @@ { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 11.11, + "totalCosts": 8.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, { @@ -2402,13 +2594,13 @@ { "id": 15810863, "username": "bitblondy", - "totalCosts": 1946.27, + "totalCosts": 1938.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15810863/medium/36dab07f1a377151348d57285a7955f7_default.png" }, { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 83.83, + "totalCosts": 82.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, { @@ -2437,7 +2629,7 @@ { "id": 15932515, "username": "Astronaut828", - "totalCosts": 3058.28, + "totalCosts": 3027.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15932515/medium/ff4f1f9efa429e626e53821ae26ecf21.png" }, { @@ -3013,7 +3205,7 @@ { "id": 15932515, "username": "Astronaut828", - "totalCosts": 4821.74, + "totalCosts": 4749.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15932515/medium/ff4f1f9efa429e626e53821ae26ecf21.png" }, { @@ -3135,7 +3327,7 @@ { "id": 14697500, "username": "rbmilch", - "totalCosts": 139.38, + "totalCosts": 137.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14697500/medium/e8102876603e29ba276175e300c93704.jpeg" }, { @@ -3777,7 +3969,7 @@ { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 654.48, + "totalCosts": 655.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, { @@ -3924,7 +4116,7 @@ { "id": 15932515, "username": "Astronaut828", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15932515/medium/ff4f1f9efa429e626e53821ae26ecf21.png" }, { @@ -3947,7 +4139,7 @@ { "id": 15421538, "username": "johannt", - "totalCosts": 980.71, + "totalCosts": 458.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15421538/medium/7e1f5d90509951072c0de0d9684baa35.png" } ] @@ -4028,7 +4220,7 @@ { "id": 15221766, "username": "chrboesch", - "totalCosts": 696.9, + "totalCosts": 684.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15221766/medium/9818a6f07e95c5f3260f34774d4e26fe.jpg" }, { @@ -4051,7 +4243,7 @@ { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 3170.39, + "totalCosts": 2591.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, { @@ -4074,7 +4266,7 @@ { "id": 14927031, "username": "thiesgrade", - "totalCosts": 94.94, + "totalCosts": 86.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14927031/medium/61dbd44991ed6142d8802bdb16440e1b.png" }, { @@ -4603,7 +4795,7 @@ { "id": 15932515, "username": "Astronaut828", - "totalCosts": 555.5, + "totalCosts": 495.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15932515/medium/ff4f1f9efa429e626e53821ae26ecf21.png" }, { @@ -4635,18 +4827,18 @@ { "fileId": "7529", "contributors": [ - { - "id": 15189582, - "username": "Mainnesti", - "totalCosts": 298.96, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15189582/medium/607fd2e858dc07184c9200683f906fdb.jpg" - }, { "id": 15123193, "username": "Coram_Deo", "totalCosts": 222.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, + { + "id": 15189582, + "username": "Mainnesti", + "totalCosts": 203.01, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15189582/medium/607fd2e858dc07184c9200683f906fdb.jpg" + }, { "id": 15810863, "username": "bitblondy", @@ -4661,7 +4853,7 @@ { "id": 15741843, "username": "ausprxche", - "totalCosts": 213.11, + "totalCosts": 177.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15741843/medium/be13bc9815072e873b79771e877bd11e.png" }, { @@ -4759,33 +4951,33 @@ { "id": 16191582, "username": "Rise101", - "totalCosts": 213.11, + "totalCosts": 153.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16191582/medium/227a43e48b1efc223a413da42c733ab4_default.png" }, { "id": 15947755, "username": "RubenSilva", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947755/medium/cf9980cfafab6b7c43f6e16e1ca48324_default.png" }, + { + "id": 15123193, + "username": "Coram_Deo", + "totalCosts": 32.32, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" + }, { "id": 16184516, "username": "tanqe", - "totalCosts": 81.81, + "totalCosts": 31.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16184516/medium/347a90f6c867232e5e94d0d6ad91a5f9_default.png" }, { "id": 16131602, "username": "Davsennn", - "totalCosts": 49.49, + "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16131602/medium/5a7d91b8bb2a21522b0c3281766e4b5e_default.png" }, - { - "id": 15123193, - "username": "Coram_Deo", - "totalCosts": 32.32, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" - }, { "id": 14952363, "username": "ensingerphilipp", @@ -4806,13 +4998,13 @@ { "id": 15102795, "username": "GreatWhiteOwl", - "totalCosts": 681.75, + "totalCosts": 634.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15102795/medium/6a304953d1334287ce899623011e92cd_default.png" }, { "id": 15047729, "username": "EricTheTurtle", - "totalCosts": 661.55, + "totalCosts": 526.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15047729/medium/705657a47d8515302fce11fdaf1e1081.png" }, { @@ -4929,13 +5121,13 @@ { "id": 15947755, "username": "RubenSilva", - "totalCosts": 993.84, + "totalCosts": 510.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947755/medium/cf9980cfafab6b7c43f6e16e1ca48324_default.png" }, { "id": 15810863, "username": "bitblondy", - "totalCosts": 198.97, + "totalCosts": 44.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15810863/medium/36dab07f1a377151348d57285a7955f7_default.png" } ] @@ -4946,7 +5138,7 @@ { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 1955.36, + "totalCosts": 1758.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, { @@ -4963,7 +5155,7 @@ { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 1112.01, + "totalCosts": 1095.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" }, { @@ -4980,7 +5172,7 @@ { "id": 15123193, "username": "Coram_Deo", - "totalCosts": 492.88, + "totalCosts": 379.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15123193/medium/b3211607cc43c707c0034f7502299d8d.jpeg" } ] @@ -4991,7 +5183,7 @@ { "id": 15932515, "username": "Astronaut828", - "totalCosts": 1087.77, + "totalCosts": 739.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15932515/medium/ff4f1f9efa429e626e53821ae26ecf21.png" }, { @@ -5048,13 +5240,13 @@ { "id": 15947755, "username": "RubenSilva", - "totalCosts": 416.12, + "totalCosts": 332.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947755/medium/cf9980cfafab6b7c43f6e16e1ca48324_default.png" }, { "id": 15810863, "username": "bitblondy", - "totalCosts": 120.19, + "totalCosts": 103.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15810863/medium/36dab07f1a377151348d57285a7955f7_default.png" } ] @@ -5076,7 +5268,7 @@ { "id": 15932515, "username": "Astronaut828", - "totalCosts": 845.37, + "totalCosts": 514.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15932515/medium/ff4f1f9efa429e626e53821ae26ecf21.png" }, { @@ -5121,7 +5313,7 @@ { "id": 15924581, "username": "ethersuisse.eth", - "totalCosts": 586.81, + "totalCosts": 472.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15924581/medium/73f8095ef673913e9d454b484a8c9ad2_default.png" } ] @@ -5216,7 +5408,7 @@ { "id": 15810863, "username": "bitblondy", - "totalCosts": 668.62, + "totalCosts": 636.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15810863/medium/36dab07f1a377151348d57285a7955f7_default.png" } ] @@ -5277,7 +5469,7 @@ { "id": 15947755, "username": "RubenSilva", - "totalCosts": 2.02, + "totalCosts": 1.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947755/medium/cf9980cfafab6b7c43f6e16e1ca48324_default.png" } ] @@ -5327,7 +5519,7 @@ { "id": 15421538, "username": "johannt", - "totalCosts": 1127.16, + "totalCosts": 1107.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15421538/medium/7e1f5d90509951072c0de0d9684baa35.png" }, { @@ -5372,7 +5564,7 @@ }, { "id": 15938713, - "username": "redddd", + "username": "red311", "totalCosts": 58.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15938713/medium/dbc4099d602e205ae50fd432f66e1adf_default.png" }, @@ -5412,7 +5604,7 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 600.95, + "totalCosts": 811.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" }, { @@ -5463,13 +5655,13 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 674.68, + "totalCosts": 647.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" }, { "id": 15190490, "username": "mina_k", - "totalCosts": 240.38, + "totalCosts": 221.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15190490/medium/18b89670b95d176f8c85e25d50135806.png" } ] @@ -5486,7 +5678,7 @@ { "id": 14897770, "username": "0xmike7", - "totalCosts": 435.31, + "totalCosts": 324.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14897770/medium/48581e20c04cdfde4e05e0b73f80e7c5_default.png" } ] @@ -5497,19 +5689,19 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 2506.82, + "totalCosts": 2504.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" }, { "id": 15190490, "username": "mina_k", - "totalCosts": 613.07, + "totalCosts": 580.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15190490/medium/18b89670b95d176f8c85e25d50135806.png" }, { "id": 14996091, "username": "divas7", - "totalCosts": 569.64, + "totalCosts": 550.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996091/medium/4d2347cacdcce726067e53597b27f8cc_default.png" }, { @@ -5526,7 +5718,7 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 1666.5, + "totalCosts": 1614.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" } ] @@ -5554,13 +5746,13 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 1212, + "totalCosts": 865.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" }, { "id": 15072667, "username": "andreaslagoud", - "totalCosts": 128.27, + "totalCosts": 107.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15072667/medium/d1405ff868ce11c7a8dca644586df76d.jpeg" } ] @@ -5571,7 +5763,7 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 1194.83, + "totalCosts": 743.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" } ] @@ -5615,7 +5807,7 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 681.75, + "totalCosts": 692.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" } ] @@ -5637,7 +5829,7 @@ { "id": 14568334, "username": "mr_giorgos", - "totalCosts": 573.68, + "totalCosts": 533.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" } ] @@ -5650,12 +5842,6 @@ "username": "mr_giorgos", "totalCosts": 312.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" - }, - { - "id": 15618027, - "username": "Chachlis", - "totalCosts": 29.29, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15618027/medium/0a87e1d8533d696281d67ac87d2ddd78_default.png" } ] }, @@ -5712,12 +5898,6 @@ "totalCosts": 2001.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14568334/medium/245b5c69aab62ffabb575daf603b70b8.jpg" }, - { - "id": 15618027, - "username": "Chachlis", - "totalCosts": 83.83, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15618027/medium/0a87e1d8533d696281d67ac87d2ddd78_default.png" - }, { "id": 15072667, "username": "andreaslagoud", @@ -5783,7 +5963,7 @@ { "id": 14970317, "username": "0xnats", - "totalCosts": 294.92, + "totalCosts": 286.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14970317/medium/3bf7365a2c248c83944a92590efecbdf.png" }, { @@ -5887,12 +6067,6 @@ "totalCosts": 10.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14111187/medium/fe245408c845d689664e2daace62d768_default.png" }, - { - "id": 15982199, - "username": "danielgruesso", - "totalCosts": 8.08, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15982199/medium/e7939afde0016707d20dddef04e6fca2.jpeg" - }, { "id": 15490162, "username": "Mathewvizc7", @@ -6302,56 +6476,50 @@ { "id": 14956243, "username": "Troyracer", - "totalCosts": 349.46, + "totalCosts": 315.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14956243/medium/bed7fbaa6537d3585635207750beb0ec_default.png" }, { "id": 15511756, "username": "Daniela-Camacho-Villalobo-110198", - "totalCosts": 175.74, + "totalCosts": 86.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15511756/medium/513599bdff63b6d935fa6d4fc6cca119_default.png" }, { - "id": 15513946, - "username": "eb023024", - "totalCosts": 163.62, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15513946/medium/6f5724ecc1daa09198ecb6c26fb71532.png" + "id": 15515640, + "username": ".ViCkYs.", + "totalCosts": 27.27, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515640/medium/f37c030a23874f0c41c5caa55096fc2f_default.png" }, { "id": 15538393, "username": "ballesterosliliana70", - "totalCosts": 128.27, + "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15538393/medium/d8116baf1e8920a2369fb749f235586b.jpeg" }, { - "id": 15515640, - "username": ".ViCkYs.", - "totalCosts": 108.07, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515640/medium/f37c030a23874f0c41c5caa55096fc2f_default.png" + "id": 15534443, + "username": "ebsoft", + "totalCosts": 12.12, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15534443/medium/0d01dd66707b9a113c5a419163b468d9_default.png" }, { "id": 15532581, "username": "malopaes", - "totalCosts": 57.57, + "totalCosts": 10.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532581/medium/a0e70a6e9167aa3309b955fb577d8147_default.png" }, - { - "id": 15524743, - "username": "ErickMinero", - "totalCosts": 21.21, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15524743/medium/3d4222bdb97403698dad4898c3466641_default.png" - }, - { - "id": 15534443, - "username": "ebsoft", - "totalCosts": 12.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15534443/medium/0d01dd66707b9a113c5a419163b468d9_default.png" - }, { "id": 15418890, "username": "Cypherpunkfish1", "totalCosts": 6.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15418890/medium/e4ddbefa9793c099a4bd2b97bdd5f42b.jpg" + }, + { + "id": 15513946, + "username": "eb023024", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15513946/medium/6f5724ecc1daa09198ecb6c26fb71532.png" } ] }, @@ -6361,13 +6529,13 @@ { "id": 15398216, "username": "manuelgvirtz", - "totalCosts": 1253.41, + "totalCosts": 1083.73, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15398216/medium/0ec5c62865b1458abee86638dd0a30c2.jpeg" }, { "id": 15421106, "username": "rogerdaltry193", - "totalCosts": 845.37, + "totalCosts": 713.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15421106/medium/42065b2af539333bb83278e6ef5e2f29.png" }, { @@ -6376,12 +6544,6 @@ "totalCosts": 56.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" }, - { - "id": 15448050, - "username": "santi-gnzlz", - "totalCosts": 30.3, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15448050/medium/b795cd3e997f1157bb866ef1a077fef2.png" - }, { "id": 15135505, "username": "Andrea00P", @@ -6401,10 +6563,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15914025/medium/b2c5e012bade4e011c918815c86c4968.png" }, { - "id": 15194310, - "username": "MGETH", + "id": 15448050, + "username": "santi-gnzlz", "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15448050/medium/b795cd3e997f1157bb866ef1a077fef2.png" }, { "id": 15447840, @@ -6432,7 +6594,7 @@ { "id": 14958973, "username": "cryptobull", - "totalCosts": 1122.11, + "totalCosts": 1102.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14958973/medium/949ee0b2f35755fd0a63677506812d86_default.png" }, { @@ -6447,22 +6609,22 @@ "totalCosts": 411.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14320782/medium/db9b49609d804eb2048076de466d3162_default.png" }, - { - "id": 15287132, - "username": "0xAntonio", - "totalCosts": 151.5, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15287132/medium/67c5a079a19f5b0cd46f8d628cff446d.png" - }, { "id": 13981955, "username": "orzalaga", "totalCosts": 142.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13981955/medium/dfd17ae7d8a17413f45733fb2c672a35.jpeg" }, + { + "id": 15287132, + "username": "0xAntonio", + "totalCosts": 131.3, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15287132/medium/67c5a079a19f5b0cd46f8d628cff446d.png" + }, { "id": 14953547, "username": "Tostaito", - "totalCosts": 65.65, + "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14953547/medium/49fb806cf50b5b40e0539f0bd1ef2445_default.png" }, { @@ -6506,24 +6668,24 @@ { "fileId": "7461", "contributors": [ + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 419.15, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15704001, "username": "joelca", - "totalCosts": 695.89, + "totalCosts": 399.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15704001/medium/0d2121c62c049140bc80c8bce144afc2.jpeg" }, { "id": 15155844, "username": "CryptoSpace", - "totalCosts": 198.97, + "totalCosts": 144.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15155844/medium/6e6407e27f509308774f480afe52ff7d.png" }, - { - "id": 14995487, - "username": "Gu1ll0t3", - "totalCosts": 152.51, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14995487/medium/f890d1e85e50d0289ca19930aae629d1.png" - }, { "id": 15751029, "username": "4ndr3s", @@ -6536,10 +6698,16 @@ "totalCosts": 124.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15741847/medium/b6dfb039c39057b612dec75f75e5a800_default.png" }, + { + "id": 14995487, + "username": "Gu1ll0t3", + "totalCosts": 115.14, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14995487/medium/f890d1e85e50d0289ca19930aae629d1.png" + }, { "id": 15680151, "username": "cryptonahue", - "totalCosts": 107.06, + "totalCosts": 77.77, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15680151/medium/414e5362d3a16a4bbc4b7cac6f85c95b.jpeg" }, { @@ -6548,12 +6716,6 @@ "totalCosts": 53.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15770841/medium/f82644a45b17eed3facb1815dcc83d13.jpeg" }, - { - "id": 15763783, - "username": "1Arc", - "totalCosts": 44.44, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763783/medium/e4da44dd445c10e4efb260be2defe551.png" - }, { "id": 15469750, "username": "taoista1", @@ -6573,10 +6735,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" }, { - "id": 15714091, - "username": "Karym_GG", - "totalCosts": 27.27, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" + "id": 15763783, + "username": "1Arc", + "totalCosts": 15.15, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763783/medium/e4da44dd445c10e4efb260be2defe551.png" }, { "id": 15966545, @@ -6980,6 +7142,12 @@ "totalCosts": 26.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15674887/medium/adf7358a1af66b39938e57334b2ce312.jpg" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 13.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 14595552, "username": "jgcarrere", @@ -7009,6 +7177,12 @@ "totalCosts": 79.79, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15632203/medium/3b167445c46b70a002114501f19ae12d_default.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 17.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 14807238, "username": "rom1919", @@ -7062,6 +7236,12 @@ "totalCosts": 161.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14620388/medium/8d1224ce00c0cb29a835ea393629e5f9.jpeg" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 62.62, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 14743704, "username": "MarceloPires", @@ -7187,7 +7367,7 @@ { "id": 15946267, "username": "socopower", - "totalCosts": 623.17, + "totalCosts": 619.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15946267/medium/094f1891b25266289c4aa5df7b08cfb7.jpg" }, { @@ -7490,18 +7670,18 @@ "totalCosts": 432.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15522923/medium/539a9115b9d375bde4eb4bc0fc37995c.png" }, - { - "id": 15553253, - "username": "EmelyGarcia", - "totalCosts": 60.6, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15553253/medium/2077ec790711bf21dd6cad91f776f003.png" - }, { "id": 15966607, "username": "Hackedd.eth", "totalCosts": 59.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966607/medium/233013bfe6b35fd53264071d722f63f1.png" }, + { + "id": 15553253, + "username": "EmelyGarcia", + "totalCosts": 59.59, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15553253/medium/2077ec790711bf21dd6cad91f776f003.png" + }, { "id": 15967747, "username": "fernandostds9", @@ -7550,12 +7730,6 @@ "totalCosts": 14.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14807238/medium/4e9d7e22b8ba45851bf0d10bf4bb2f68.jpeg" }, - { - "id": 15724425, - "username": "nahuelchagas7", - "totalCosts": 8.08, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15724425/medium/b889a3aceecef782622b0ff7d282a498.jpeg" - }, { "id": 14924253, "username": "Ernestiko", @@ -7588,7 +7762,7 @@ { "id": 15522923, "username": "llucC", - "totalCosts": 121.2, + "totalCosts": 102.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15522923/medium/539a9115b9d375bde4eb4bc0fc37995c.png" }, { @@ -7937,6 +8111,12 @@ "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15160522/medium/d85407776c94ea7ad76ca6c061fd4fcd_default.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 8.08, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15194310, "username": "MGETH", @@ -8091,7 +8271,7 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 3402.69, + "totalCosts": 3385.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" }, { @@ -8404,6 +8584,12 @@ "username": "Lgallardo", "totalCosts": 118.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15899559/medium/ecdf8f03a04339dbb187185df6b7fce4_default.png" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 14.14, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -9447,12 +9633,30 @@ { "fileId": "2680", "contributors": [ + { + "id": 15553253, + "username": "EmelyGarcia", + "totalCosts": 356.53, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15553253/medium/2077ec790711bf21dd6cad91f776f003.png" + }, { "id": 14755966, "username": "RealGoye", "totalCosts": 344.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14755966/medium/f5becfea2dd543f57f356dfb3e42487d_default.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 244.42, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, + { + "id": 15194310, + "username": "MGETH", + "totalCosts": 180.79, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" + }, { "id": 14794760, "username": "ignv", @@ -9471,6 +9675,12 @@ "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14564238/medium/e6feebc5a27754079a07907fffac8389.jpg" }, + { + "id": 15959599, + "username": "JUANCARLOSS1977", + "totalCosts": 4.04, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15959599/medium/af95a7176a863708dedb04b35f4ee223.jpg" + }, { "id": 14791370, "username": "williamx", @@ -9512,12 +9722,6 @@ "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966607/medium/233013bfe6b35fd53264071d722f63f1.png" }, - { - "id": 15429360, - "username": "davidgomezhernandez155", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15429360/medium/ed757f2577b1e4993a142a5f60869cf8.jpeg" - }, { "id": 14755966, "username": "RealGoye", @@ -9659,6 +9863,12 @@ { "fileId": "2672", "contributors": [ + { + "id": 15194310, + "username": "MGETH", + "totalCosts": 439.35, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" + }, { "id": 15874711, "username": "JHON38", @@ -9671,12 +9881,6 @@ "totalCosts": 249.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15864595/medium/9901e0dba4ead65619b8b1b9a591caf7_default.png" }, - { - "id": 15194310, - "username": "MGETH", - "totalCosts": 157.56, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" - }, { "id": 14691832, "username": "imrulo.eth", @@ -9772,40 +9976,46 @@ { "fileId": "5565", "contributors": [ + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 440.36, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15714091, "username": "Karym_GG", - "totalCosts": 376.73, + "totalCosts": 240.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" }, { "id": 15966545, "username": "askr", - "totalCosts": 252.5, + "totalCosts": 116.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966545/medium/350ebd9c64c3a9a5244827c6f34d05e7_default.png" }, - { - "id": 15287132, - "username": "0xAntonio", - "totalCosts": 172.71, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15287132/medium/67c5a079a19f5b0cd46f8d628cff446d.png" - }, { "id": 15989457, "username": "narurololiloops", - "totalCosts": 158.57, + "totalCosts": 84.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15989457/medium/538d4b5dd55c92e2e8e0759fc6870270_default.png" }, + { + "id": 15287132, + "username": "0xAntonio", + "totalCosts": 78.78, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15287132/medium/67c5a079a19f5b0cd46f8d628cff446d.png" + }, { "id": 16040604, "username": "CeciSakura", - "totalCosts": 84.84, + "totalCosts": 58.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16040604/medium/46704125c8bb6dee2677db6eeaf8e80f.jpg" }, { "id": 15730101, "username": "anaphant", - "totalCosts": 53.53, + "totalCosts": 50.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15730101/medium/54df140ba50202fe839069eb63683d45.png" }, { @@ -9980,17 +10190,23 @@ { "fileId": "6187", "contributors": [ + { + "id": 14581548, + "username": "danielpg2106", + "totalCosts": 588.83, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14581548/medium/15cfd2d3d8015efbcfbc20c47deeb5be.jpeg" + }, { "id": 15085311, "username": "bunturx", - "totalCosts": 625.19, + "totalCosts": 489.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15085311/medium/ead5dd5aa5070be2f8d446c286f27d7a.jpeg" }, { - "id": 14581548, - "username": "danielpg2106", - "totalCosts": 608.02, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14581548/medium/15cfd2d3d8015efbcfbc20c47deeb5be.jpeg" + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 82.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" }, { "id": 15104875, @@ -10066,25 +10282,31 @@ { "id": 15421106, "username": "rogerdaltry193", - "totalCosts": 995.86, + "totalCosts": 448.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15421106/medium/42065b2af539333bb83278e6ef5e2f29.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 337.34, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15135505, "username": "Andrea00P", - "totalCosts": 206.04, + "totalCosts": 99.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15135505/medium/8e95dff743c0a7e4feedb53ef122eba5_default.png" }, { "id": 15451332, "username": "Andreslool", - "totalCosts": 147.46, + "totalCosts": 56.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15451332/medium/43237bd024725592d8622b2dcbc8ddc1.jpg" }, { "id": 15155844, "username": "CryptoSpace", - "totalCosts": 70.7, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15155844/medium/6e6407e27f509308774f480afe52ff7d.png" }, { @@ -10284,7 +10506,7 @@ { "id": 15424846, "username": "Josevff03", - "totalCosts": 1470.56, + "totalCosts": 1444.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15424846/medium/b0e1090bb446f82b25732b4278b09573_default.png" }, { @@ -10296,7 +10518,7 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 823.15, + "totalCosts": 796.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" }, { @@ -10415,31 +10637,31 @@ { "id": 15421106, "username": "rogerdaltry193", - "totalCosts": 1279.67, + "totalCosts": 1047.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15421106/medium/42065b2af539333bb83278e6ef5e2f29.png" }, { "id": 15638587, "username": "Nidden", - "totalCosts": 188.87, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15638587/medium/350c60a52fd8d46d2569bf95f3d8fede_default.png" }, { "id": 15616183, "username": "YAYO664", - "totalCosts": 163.62, + "totalCosts": 117.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15616183/medium/9c7a56a29f9857eed6540ad35eb0e407_default.png" }, { "id": 15850581, "username": "Saiki", - "totalCosts": 57.57, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15850581/medium/b874bdf6ccaacb8b8ed0933889637505_default.png" }, { "id": 15556955, "username": "feraga92", - "totalCosts": 53.53, + "totalCosts": 37.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15556955/medium/d46084fc5d1327af195bd95decdf08dc.jpeg" }, { @@ -10489,6 +10711,12 @@ "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15150468/medium/4d44fae782af9bd5e371ce94ffa585c9.jpeg" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15522923, "username": "llucC", @@ -10503,13 +10731,13 @@ { "id": 15058949, "username": "gracieluu_ar", - "totalCosts": 445.41, + "totalCosts": 399.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15058949/medium/c8bf678ba85795ea778fbc67e30f0733.jpeg" }, { "id": 15522923, "username": "llucC", - "totalCosts": 69.69, + "totalCosts": 47.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15522923/medium/539a9115b9d375bde4eb4bc0fc37995c.png" }, { @@ -10521,7 +10749,7 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 21.21, + "totalCosts": 1.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" } ] @@ -11038,7 +11266,7 @@ { "id": 14630992, "username": "YeiOz", - "totalCosts": 264.62, + "totalCosts": 262.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14630992/medium/5b635093aa84e77f956aba430141b90b.jpeg" }, { @@ -11117,6 +11345,12 @@ "totalCosts": 50.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16010703/medium/97c299201d2fe2be8c7fef377883e484_default.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 15.15, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 14995487, "username": "Gu1ll0t3", @@ -11206,18 +11440,18 @@ { "fileId": "6440", "contributors": [ - { - "id": 15287132, - "username": "0xAntonio", - "totalCosts": 298.96, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15287132/medium/67c5a079a19f5b0cd46f8d628cff446d.png" - }, { "id": 15966545, "username": "askr", - "totalCosts": 275.73, + "totalCosts": 256.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966545/medium/350ebd9c64c3a9a5244827c6f34d05e7_default.png" }, + { + "id": 15287132, + "username": "0xAntonio", + "totalCosts": 245.43, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15287132/medium/67c5a079a19f5b0cd46f8d628cff446d.png" + }, { "id": 15243012, "username": "Aitorgrcn", @@ -11315,13 +11549,13 @@ { "id": 14564238, "username": "FreddyAndresParra", - "totalCosts": 614.08, + "totalCosts": 604.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14564238/medium/e6feebc5a27754079a07907fffac8389.jpg" }, { "id": 15274148, "username": "almartinez", - "totalCosts": 448.44, + "totalCosts": 430.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15274148/medium/ba6827b07726231f6fa2a149da7c2627.png" }, { @@ -11339,7 +11573,7 @@ { "id": 15090175, "username": "echoalizr", - "totalCosts": 138.37, + "totalCosts": 126.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15090175/medium/e2f4cd33b9cde644c73c211df89de4ed_default.png" }, { @@ -11348,12 +11582,6 @@ "totalCosts": 74.74, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247956/medium/d5a5d69f6aecc80fe75873d940743a36.png" }, - { - "id": 15770841, - "username": "Angelito_18", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15770841/medium/f82644a45b17eed3facb1815dcc83d13.jpeg" - }, { "id": 15243012, "username": "Aitorgrcn", @@ -11368,19 +11596,19 @@ { "id": 15770841, "username": "Angelito_18", - "totalCosts": 2765.38, + "totalCosts": 2433.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15770841/medium/f82644a45b17eed3facb1815dcc83d13.jpeg" }, { "id": 15751029, "username": "4ndr3s", - "totalCosts": 196.95, + "totalCosts": 105.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15751029/medium/5c541b87c5cb9da1ec885228cb23d33b.png" }, { "id": 15485432, "username": "invrhino", - "totalCosts": 184.83, + "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15485432/medium/3987e05cab0c3d106ff8a795ebd9b84a.png" }, { @@ -11490,6 +11718,12 @@ "username": "pollocastro", "totalCosts": 71.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967289/medium/1753e7e93a66aeb2665fd2ac7d73c6ac.jpeg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 19.19, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -11546,6 +11780,12 @@ "username": "MGETH", "totalCosts": 1347.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 17.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -11604,6 +11844,12 @@ "username": "yalexis-eth", "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15417740/medium/2dc70cf4fc09165a3bcdc60f7a582336.jpeg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 12.12, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -11622,6 +11868,12 @@ "totalCosts": 53.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15474196/medium/7d0c8d1b9a3745f3d1dbfaec3ab9e4a2.jpeg" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 9.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15317682, "username": "junowoz", @@ -11668,6 +11920,12 @@ "username": "junowoz", "totalCosts": 28.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15317682/medium/81940bf015f6f858cb88c0363d135cfa.jpeg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 6.06, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -11683,7 +11941,7 @@ { "id": 15866753, "username": "gonzab27", - "totalCosts": 9.09, + "totalCosts": 8.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15866753/medium/1f6bb2900a3f89af7cf2dffb4ca6df4d.png" } ] @@ -11781,7 +12039,7 @@ { "id": 15946267, "username": "socopower", - "totalCosts": 1490.76, + "totalCosts": 1471.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15946267/medium/094f1891b25266289c4aa5df7b08cfb7.jpg" } ] @@ -11892,13 +12150,13 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 2745.18, + "totalCosts": 2718.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" }, { "id": 15513032, "username": "ancestral_alien", - "totalCosts": 1734.17, + "totalCosts": 1687.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15513032/medium/c7779a1923a78ddb5329278998d14c12.JPG" }, { @@ -11951,7 +12209,7 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 751.44, + "totalCosts": 691.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" }, { @@ -12009,13 +12267,13 @@ { "id": 15770841, "username": "Angelito_18", - "totalCosts": 277.75, + "totalCosts": 267.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15770841/medium/f82644a45b17eed3facb1815dcc83d13.jpeg" }, { "id": 15554555, "username": "disruptivus.allegoria", - "totalCosts": 252.5, + "totalCosts": 156.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15554555/medium/6cee00b3a7d4397d5ab0de1e5b185e64.jpg" }, { @@ -12044,8 +12302,14 @@ { "id": 15854595, "username": "badillos1998", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15854595/medium/5237fb21647f11d9482225a1295ed2d9.png" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 28.28, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -12109,22 +12373,22 @@ { "fileId": "8035", "contributors": [ - { - "id": 15966545, - "username": "askr", - "totalCosts": 809.01, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966545/medium/350ebd9c64c3a9a5244827c6f34d05e7_default.png" - }, { "id": 15287132, "username": "0xAntonio", - "totalCosts": 733.26, + "totalCosts": 315.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15287132/medium/67c5a079a19f5b0cd46f8d628cff446d.png" }, + { + "id": 15966545, + "username": "askr", + "totalCosts": 304.01, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966545/medium/350ebd9c64c3a9a5244827c6f34d05e7_default.png" + }, { "id": 15553253, "username": "EmelyGarcia", - "totalCosts": 432.28, + "totalCosts": 239.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15553253/medium/2077ec790711bf21dd6cad91f776f003.png" }, { @@ -12218,13 +12482,13 @@ { "id": 15966349, "username": "chiogonzalezt", - "totalCosts": 1026.16, + "totalCosts": 970.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966349/medium/1d277519e5b8ccdfc1de7b60ec89e1b0.jpeg" }, { "id": 16028920, "username": "paopastorelli", - "totalCosts": 970.61, + "totalCosts": 953.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16028920/medium/e3049f379e035388449ee79ea5b75888.jpeg" }, { @@ -12236,7 +12500,7 @@ { "id": 15553253, "username": "EmelyGarcia", - "totalCosts": 721.14, + "totalCosts": 646.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15553253/medium/2077ec790711bf21dd6cad91f776f003.png" }, { @@ -12248,7 +12512,7 @@ { "id": 15946267, "username": "socopower", - "totalCosts": 309.06, + "totalCosts": 260.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15946267/medium/094f1891b25266289c4aa5df7b08cfb7.jpg" }, { @@ -12286,6 +12550,12 @@ "username": "MGETH", "totalCosts": 9.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 8.08, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -12483,7 +12753,7 @@ { "id": 15903171, "username": "SidWeb", - "totalCosts": 2434.1, + "totalCosts": 2251.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15903171/medium/16aea0b15b034302e6e656749a0a7b8e.jpg" }, { @@ -12501,7 +12771,7 @@ { "id": 16028920, "username": "paopastorelli", - "totalCosts": 35.35, + "totalCosts": 21.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16028920/medium/e3049f379e035388449ee79ea5b75888.jpeg" }, { @@ -12521,6 +12791,12 @@ "totalCosts": 653.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15968127/medium/0c91665492f81a2479639eba5271d7bc.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 350.47, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15553253, "username": "EmelyGarcia", @@ -12530,7 +12806,7 @@ { "id": 15875251, "username": "noagona", - "totalCosts": 156.55, + "totalCosts": 140.39, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15875251/medium/beafaf5c34722390e1d1e1dc58ab193b_default.png" } ] @@ -12541,7 +12817,7 @@ { "id": 15903171, "username": "SidWeb", - "totalCosts": 492.88, + "totalCosts": 379.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15903171/medium/16aea0b15b034302e6e656749a0a7b8e.jpg" } ] @@ -12552,7 +12828,7 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 984.75, + "totalCosts": 636.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" }, { @@ -12561,6 +12837,12 @@ "totalCosts": 98.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15960287/medium/82ae690984766dd6f391b26757bfedab_default.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 24.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15847249, "username": "AlexanderMartinezz", @@ -12594,6 +12876,12 @@ "username": "SidWeb", "totalCosts": 1034.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15903171/medium/16aea0b15b034302e6e656749a0a7b8e.jpg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 21.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -12603,8 +12891,14 @@ { "id": 15801343, "username": "tonior", - "totalCosts": 539.34, + "totalCosts": 438.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15801343/medium/47a6621fc47ecf631c19ee0fc5f812e7_default.png" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 71.71, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -12631,19 +12925,25 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 413.09, + "totalCosts": 347.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" }, { "id": 15908639, "username": "mettal", - "totalCosts": 309.06, + "totalCosts": 109.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15908639/medium/5b02a8579a760cb22bf5f82c312082f2.png" }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 83.83, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" + }, { "id": 15763783, "username": "1Arc", - "totalCosts": 128.27, + "totalCosts": 62.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763783/medium/e4da44dd445c10e4efb260be2defe551.png" } ] @@ -12668,6 +12968,12 @@ "username": "Angelito_18", "totalCosts": 265.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15770841/medium/f82644a45b17eed3facb1815dcc83d13.jpeg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 20.2, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -12694,7 +13000,7 @@ { "id": 15194310, "username": "MGETH", - "totalCosts": 586.81, + "totalCosts": 472.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" } ] @@ -12854,6 +13160,12 @@ "username": "socopower", "totalCosts": 237.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15946267/medium/094f1891b25266289c4aa5df7b08cfb7.jpg" + }, + { + "id": 16293112, + "username": "AleCox1980", + "totalCosts": 174.73, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16293112/medium/3cc05399e6a1c894db05b1b9eb0ff61d.jpeg" } ] }, @@ -12882,18 +13194,18 @@ { "fileId": "7935", "contributors": [ - { - "id": 15714091, - "username": "Karym_GG", - "totalCosts": 338.35, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" - }, { "id": 15770841, "username": "Angelito_18", "totalCosts": 307.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15770841/medium/f82644a45b17eed3facb1815dcc83d13.jpeg" }, + { + "id": 15714091, + "username": "Karym_GG", + "totalCosts": 306.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" + }, { "id": 15946267, "username": "socopower", @@ -14488,6 +14800,83 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" } ] + }, + { + "fileId": "6239", + "contributors": [ + { + "id": 15714091, + "username": "Karym_GG", + "totalCosts": 1919, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" + }, + { + "id": 15194310, + "username": "MGETH", + "totalCosts": 1625.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15194310/medium/7729d9dbda8c9420c26f689b4a2b2918.jpg" + }, + { + "id": 15440792, + "username": "RobRock", + "totalCosts": 1393.8, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15440792/medium/e75d5feb80e2f8cf34918bbec0a9c707.jpeg" + }, + { + "id": 15500572, + "username": "aspoky_dev", + "totalCosts": 1214.02, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15500572/medium/82f4c4ed41642c9eab1d510f97122467.jpg" + }, + { + "id": 15135505, + "username": "Andrea00P", + "totalCosts": 692.86, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15135505/medium/8e95dff743c0a7e4feedb53ef122eba5_default.png" + }, + { + "id": 15058949, + "username": "gracieluu_ar", + "totalCosts": 440.36, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15058949/medium/c8bf678ba85795ea778fbc67e30f0733.jpeg" + }, + { + "id": 14926537, + "username": "Ogion", + "totalCosts": 417.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14926537/medium/43b283793d5f025f62a367784571a478_default.png" + }, + { + "id": 16163238, + "username": "Morpherine", + "totalCosts": 107.06, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16163238/medium/3fa8401e436362a4a838ec11fca999e9.jpeg" + }, + { + "id": 16186988, + "username": "Chiago", + "totalCosts": 67.67, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16186988/medium/ecbf83e8ec54fad32f81e31b9b36c98b.jpeg" + }, + { + "id": 15109143, + "username": "avelinomunoz.13.990", + "totalCosts": 65.65, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15109143/medium/15bc93dea94521f060a6ca73118ace17.png" + }, + { + "id": 15161680, + "username": "agustinasegat", + "totalCosts": 54.54, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15161680/medium/62b2a3ce8e4003b84a0fceb6be409bba.jpeg" + }, + { + "id": 13649011, + "username": "aledc", + "totalCosts": 24.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13649011/medium/50f275b77f6bfef017c13fe1a51579c3.jpg" + } + ] } ] }, @@ -14511,7 +14900,7 @@ { "id": 15097099, "username": "nader.sedigh", - "totalCosts": 347.44, + "totalCosts": 339.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15097099/medium/4fca4ea357c99c5d605850315f21ae65.png" }, { @@ -14552,7 +14941,7 @@ { "id": 15233666, "username": "Alifarhani", - "totalCosts": 23.23, + "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg" } ] @@ -14580,13 +14969,13 @@ { "id": 15097099, "username": "nader.sedigh", - "totalCosts": 451.47, + "totalCosts": 406.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15097099/medium/4fca4ea357c99c5d605850315f21ae65.png" }, { "id": 15233666, "username": "Alifarhani", - "totalCosts": 114.13, + "totalCosts": 91.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg" }, { @@ -14609,32 +14998,32 @@ { "id": 15074339, "username": "mmp8103", - "totalCosts": 266.64, + "totalCosts": 247.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15074339/medium/5199c5dafe0b10d9bf8a99c34ff3a277.png" }, { - "id": 15855621, - "username": "subriper", - "totalCosts": 220.18, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15855621/medium/ab1a2868b313e6dfc113a754286d37d5.jpg" - }, - { - "id": 15233666, - "username": "Alifarhani", - "totalCosts": 90.9, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg" + "id": 15967353, + "username": "sipbikardi", + "totalCosts": 117.16, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967353/medium/bdbc4e456ff62160eead47d69c036137.jpg" }, { "id": 15097099, "username": "nader.sedigh", - "totalCosts": 81.81, + "totalCosts": 66.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15097099/medium/4fca4ea357c99c5d605850315f21ae65.png" }, { - "id": 14814690, - "username": "khodaarahmi", - "totalCosts": 37.37, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14814690/medium/22dbf1e43823e76cb094bff3fdcca212.jpeg" + "id": 15233666, + "username": "Alifarhani", + "totalCosts": 57.57, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg" + }, + { + "id": 15855621, + "username": "subriper", + "totalCosts": 17.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15855621/medium/ab1a2868b313e6dfc113a754286d37d5.jpg" } ] }, @@ -14644,13 +15033,13 @@ { "id": 15099529, "username": "Aria-Naraghi", - "totalCosts": 2924.96, + "totalCosts": 2826.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15099529/medium/77b12f03c6675c85ad45efc6f3e23be3_default.png" }, { "id": 15967119, "username": "timtey", - "totalCosts": 158.57, + "totalCosts": 138.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" }, { @@ -14945,12 +15334,6 @@ "totalCosts": 155.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15099529/medium/77b12f03c6675c85ad45efc6f3e23be3_default.png" }, - { - "id": 15967119, - "username": "timtey", - "totalCosts": 4.04, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" - }, { "id": 14665754, "username": "R3z4_Pr0gramm3r", @@ -15344,31 +15727,31 @@ { "id": 16279808, "username": "alien_max", - "totalCosts": 269.67, + "totalCosts": 169.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16279808/medium/569d39880c4f22122a7b4a18290b56e5.png" }, { "id": 16001243, "username": "0xArkonomi", - "totalCosts": 252.5, + "totalCosts": 132.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16001243/medium/b75b58e1e84d60e633167eb068b1253e.jpg" }, { "id": 15967119, "username": "timtey", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" }, { "id": 15971303, "username": "web3senior", - "totalCosts": 119.18, + "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15971303/medium/6f6d7db906ee32c836d3daf71181b5da.png" }, { "id": 15967239, "username": "MahdiRezaeian", - "totalCosts": 62.62, + "totalCosts": 26.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967239/medium/a3fdd1e460fca7c1a39ec8f00a4ad059_default.png" }, { @@ -15485,7 +15868,7 @@ { "id": 15099529, "username": "Aria-Naraghi", - "totalCosts": 952.43, + "totalCosts": 797.9, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15099529/medium/77b12f03c6675c85ad45efc6f3e23be3_default.png" }, { @@ -15523,18 +15906,18 @@ "totalCosts": 184.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" }, - { - "id": 15967115, - "username": "itsdeeters", - "totalCosts": 86.86, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967115/medium/f3008c834c6c279d6567a82bee569b7c.png" - }, { "id": 14814690, "username": "khodaarahmi", "totalCosts": 70.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14814690/medium/22dbf1e43823e76cb094bff3fdcca212.jpeg" }, + { + "id": 15967115, + "username": "itsdeeters", + "totalCosts": 33.33, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967115/medium/f3008c834c6c279d6567a82bee569b7c.png" + }, { "id": 15967125, "username": "erfanej", @@ -15648,15 +16031,9 @@ { "id": 15233666, "username": "Alifarhani", - "totalCosts": 1144.33, + "totalCosts": 1114.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg" }, - { - "id": 15967119, - "username": "timtey", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" - }, { "id": 15099529, "username": "Aria-Naraghi", @@ -15746,13 +16123,13 @@ { "id": 15144242, "username": "sharifi.masoud", - "totalCosts": 1054.44, + "totalCosts": 990.81, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15144242/medium/afcb9846e0abee60cd0b4755effdebac.jpg" }, { "id": 15233666, "username": "Alifarhani", - "totalCosts": 622.16, + "totalCosts": 463.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233666/medium/deec4866c37352c795ed3d0000236714.jpeg" }, { @@ -15780,7 +16157,7 @@ { "id": 15588607, "username": "msnik", - "totalCosts": 1266.54, + "totalCosts": 590.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15588607/medium/719d8651304e60b42af2a7db78ee9fc8_default.png" } ] @@ -15788,23 +16165,23 @@ { "fileId": "8035", "contributors": [ - { - "id": 15967119, - "username": "timtey", - "totalCosts": 525.2, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" - }, { "id": 15967125, "username": "erfanej", - "totalCosts": 397.94, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967125/medium/2223e574efc34243ef6e77236d77a6ba.png" }, { "id": 15967115, "username": "itsdeeters", - "totalCosts": 298.96, + "totalCosts": 154.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967115/medium/f3008c834c6c279d6567a82bee569b7c.png" + }, + { + "id": 15967119, + "username": "timtey", + "totalCosts": 153.52, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" } ] }, @@ -15848,7 +16225,7 @@ { "id": 15942179, "username": "erfan1366erfan", - "totalCosts": 1306.94, + "totalCosts": 1074.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15942179/medium/01f700e015f539a1262e058e281a8d9f.png" }, { @@ -15917,7 +16294,7 @@ { "id": 16001243, "username": "0xArkonomi", - "totalCosts": 131.3, + "totalCosts": 130.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16001243/medium/b75b58e1e84d60e633167eb068b1253e.jpg" } ] @@ -15928,19 +16305,19 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 896.88, + "totalCosts": 825.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" }, { "id": 15967119, "username": "timtey", - "totalCosts": 404, + "totalCosts": 384.81, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" }, { "id": 15967125, "username": "erfanej", - "totalCosts": 356.53, + "totalCosts": 304.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967125/medium/2223e574efc34243ef6e77236d77a6ba.png" }, { @@ -15986,13 +16363,13 @@ { "id": 15967119, "username": "timtey", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" }, { "id": 15955625, "username": "Coiniran", - "totalCosts": 655.49, + "totalCosts": 549.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" } ] @@ -16003,13 +16380,13 @@ { "id": 15967119, "username": "timtey", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" }, { "id": 15955625, "username": "Coiniran", - "totalCosts": 269.67, + "totalCosts": 234.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" } ] @@ -16065,13 +16442,13 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 3184.53, + "totalCosts": 2605.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" }, { "id": 15942179, "username": "erfan1366erfan", - "totalCosts": 1587.72, + "totalCosts": 1306.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15942179/medium/01f700e015f539a1262e058e281a8d9f.png" }, { @@ -16080,12 +16457,6 @@ "totalCosts": 37.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15950767/medium/1afbe600b69aa04f13e882f27b84ad6c.jpg" }, - { - "id": 15967119, - "username": "timtey", - "totalCosts": 18.18, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" - }, { "id": 15967353, "username": "sipbikardi", @@ -16097,6 +16468,12 @@ "username": "Mahdieh", "totalCosts": 8.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967245/medium/85cefe753c17bdff8c9a4598105e640b.jpg" + }, + { + "id": 15967119, + "username": "timtey", + "totalCosts": 7.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967119/medium/cdc0fbd1e4667f13ed75ac64b4e6c809.jpeg" } ] }, @@ -16106,7 +16483,7 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 2446.22, + "totalCosts": 2263.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" } ] @@ -16117,19 +16494,19 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 1123.12, + "totalCosts": 1106.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" }, { "id": 15953233, "username": "shakibashamloo72", - "totalCosts": 85.85, + "totalCosts": 69.69, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15953233/medium/b0e24acd4c4cbb051af9f719a6cb55c4.jpeg" }, { "id": 16271482, "username": "matinmirakhori", - "totalCosts": 56.56, + "totalCosts": 26.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16271482/medium/7585210123e73fb6091ce2dcb7f959b4_default.png" } ] @@ -16140,7 +16517,7 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 492.88, + "totalCosts": 379.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" } ] @@ -16151,13 +16528,13 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 1085.75, + "totalCosts": 737.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" }, { "id": 15967893, "username": "apacala", - "totalCosts": 591.86, + "totalCosts": 387.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967893/medium/6f427c7b8d63cf93f27c4df77f07a2b5_default.png" } ] @@ -16202,13 +16579,13 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 536.31, + "totalCosts": 435.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" }, { "id": 15971303, "username": "web3senior", - "totalCosts": 97.97, + "totalCosts": 80.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15971303/medium/6f6d7db906ee32c836d3daf71181b5da.png" } ] @@ -16230,13 +16607,13 @@ { "id": 15967239, "username": "MahdiRezaeian", - "totalCosts": 850.42, + "totalCosts": 519.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967239/medium/a3fdd1e460fca7c1a39ec8f00a4ad059_default.png" }, { "id": 15955625, "username": "Coiniran", - "totalCosts": 798.91, + "totalCosts": 467.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" } ] @@ -16293,7 +16670,7 @@ { "id": 15955625, "username": "Coiniran", - "totalCosts": 586.81, + "totalCosts": 472.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15955625/medium/cea2317824f592725aac52fcd2eedb26_default.png" } ] @@ -16414,7 +16791,7 @@ { "id": 15109017, "username": "mpoulin371", - "totalCosts": 337.34, + "totalCosts": 329.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15109017/medium/40931e6324a057568f57519eb7706fc9.png" }, { @@ -16526,7 +16903,7 @@ { "id": 12844463, "username": "MATsxm", - "totalCosts": 99.99, + "totalCosts": 83.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, { @@ -16555,13 +16932,13 @@ { "id": 13249257, "username": "SuperDelphi", - "totalCosts": 445.41, + "totalCosts": 399.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13249257/medium/f566e07e86e26f5911df1ddf5fae796d.png" }, { "id": 12844463, "username": "MATsxm", - "totalCosts": 124.23, + "totalCosts": 92.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, { @@ -16748,12 +17125,6 @@ "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" }, - { - "id": 12844463, - "username": "MATsxm", - "totalCosts": 42.42, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" - }, { "id": 17361, "username": "plamarque", @@ -16761,10 +17132,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" }, { - "id": 15415492, - "username": "sashasrs", - "totalCosts": 10.1, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15415492/medium/3fa311e4cb49b48849796356395333e8.jpg" + "id": 12844463, + "username": "MATsxm", + "totalCosts": 32.32, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, { "id": 15961437, @@ -16841,22 +17212,28 @@ { "fileId": "5559", "contributors": [ + { + "id": 14973471, + "username": "hugo_ham", + "totalCosts": 312.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14973471/medium/e29e9241f0a96e4067f303459381e1d5.png" + }, { "id": 12844463, "username": "MATsxm", - "totalCosts": 447.43, + "totalCosts": 115.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, { - "id": 14973471, - "username": "hugo_ham", - "totalCosts": 346.43, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14973471/medium/e29e9241f0a96e4067f303459381e1d5.png" + "id": 16315450, + "username": "distacrypto", + "totalCosts": 89.89, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16315450/medium/87332a06f6d4e86e990c7769dbdaf006.png" }, { "id": 15102413, "username": "NodeuS", - "totalCosts": 71.71, + "totalCosts": 52.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15102413/medium/1f507b1ec0a1a5e217f7d55ab800fc51_default.png" }, { @@ -16891,13 +17268,13 @@ { "id": 14862460, "username": "vdusart", - "totalCosts": 1217.05, + "totalCosts": 1011.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14862460/medium/106cb769254652c20ddeab107317fd43_default.png" }, { "id": 15302370, "username": "Manusxb", - "totalCosts": 509.04, + "totalCosts": 413.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15302370/medium/9f944ffeaa451f3c2ea156478533b41f_default.png" }, { @@ -16921,7 +17298,7 @@ { "id": 12844463, "username": "MATsxm", - "totalCosts": 45.45, + "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" } ] @@ -16932,7 +17309,7 @@ { "id": 14973471, "username": "hugo_ham", - "totalCosts": 679.73, + "totalCosts": 660.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14973471/medium/e29e9241f0a96e4067f303459381e1d5.png" }, { @@ -16944,7 +17321,7 @@ { "id": 17361, "username": "plamarque", - "totalCosts": 208.06, + "totalCosts": 187.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" }, { @@ -16991,13 +17368,13 @@ { "id": 15682041, "username": "Joker71293921", - "totalCosts": 1108.98, + "totalCosts": 792.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15682041/medium/e62239d0be9e3327d12dd221caf5bd97.jpg" }, { "id": 14823260, "username": "omahs", - "totalCosts": 407.03, + "totalCosts": 306.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, { @@ -17009,9 +17386,15 @@ { "id": 12844463, "username": "MATsxm", - "totalCosts": 55.55, + "totalCosts": 28.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, + { + "id": 15954931, + "username": "XofEE", + "totalCosts": 23.23, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" + }, { "id": 15442454, "username": "Im-SpiETH", @@ -17251,7 +17634,7 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 1175.64, + "totalCosts": 1158.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" }, { @@ -17575,7 +17958,7 @@ { "id": 12844463, "username": "MATsxm", - "totalCosts": 2291.69, + "totalCosts": 2252.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, { @@ -17715,7 +18098,7 @@ "id": 14896794, "username": "Paulchemouni", "totalCosts": 122.21, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14896794/medium/7c6117fe2c7fda4e2d5cc0c089d1d9e4.jpeg" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14896794/medium/738ce779e2bc28d196763fad01e87345_default.png" }, { "id": 15136089, @@ -18420,7 +18803,7 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 362.59, + "totalCosts": 361.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" }, { @@ -18453,12 +18836,6 @@ "totalCosts": 32.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16004187/medium/02d62ae36a32a5b72271a5f60ce1acfc.jpg" }, - { - "id": 15683863, - "username": "zeyadoun12", - "totalCosts": 21.21, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15683863/medium/1d6ed972d684360bf9f45bafbabe6c6f.jpeg" - }, { "id": 15426512, "username": "Recktosaurus", @@ -18471,6 +18848,12 @@ "totalCosts": 8.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14587890/medium/1d5b3a9de8a7b7f6082357f1fe99d654.jpeg" }, + { + "id": 15683863, + "username": "zeyadoun12", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15683863/medium/1d6ed972d684360bf9f45bafbabe6c6f.jpeg" + }, { "id": 14675712, "username": "LEMIBANDDEXARI", @@ -18574,7 +18957,7 @@ { "id": 15528915, "username": "J4yD3v", - "totalCosts": 115.14, + "totalCosts": 95.95, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15528915/medium/c334abf55946c66116d12971fd368f2d_default.png" }, { @@ -19178,18 +19561,18 @@ "totalCosts": 660.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15426512/medium/3d6568dc6e76931cee4766ecb4c3163a.jpg" }, - { - "id": 12844463, - "username": "MATsxm", - "totalCosts": 159.58, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" - }, { "id": 14823260, "username": "omahs", "totalCosts": 157.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, + { + "id": 12844463, + "username": "MATsxm", + "totalCosts": 142.41, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" + }, { "id": 16223056, "username": "amanoullah", @@ -19479,19 +19862,19 @@ { "id": 15136089, "username": "demaupeoucorentin", - "totalCosts": 2618.93, + "totalCosts": 2592.67, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15136089/medium/4ba75954f478f17b20559a3035f6adbd.png" }, { "id": 15528915, "username": "J4yD3v", - "totalCosts": 1587.72, + "totalCosts": 1553.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15528915/medium/c334abf55946c66116d12971fd368f2d_default.png" }, { "id": 14862460, "username": "vdusart", - "totalCosts": 613.07, + "totalCosts": 600.95, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14862460/medium/106cb769254652c20ddeab107317fd43_default.png" }, { @@ -19631,7 +20014,7 @@ { "id": 14673502, "username": "dartini123", - "totalCosts": 43.43, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14673502/medium/1589de50b3256afbd8193b1b4befc4ce.jpg" }, { @@ -20543,7 +20926,7 @@ "id": 14896794, "username": "Paulchemouni", "totalCosts": 106.05, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14896794/medium/7c6117fe2c7fda4e2d5cc0c089d1d9e4.jpeg" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14896794/medium/738ce779e2bc28d196763fad01e87345_default.png" }, { "id": 14784414, @@ -21267,12 +21650,6 @@ "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15961437/medium/d495096dfb14721b3d4848a1bc7cfdd5.jpeg" }, - { - "id": 17361, - "username": "plamarque", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" - }, { "id": 14675712, "username": "LEMIBANDDEXARI", @@ -21383,22 +21760,22 @@ "totalCosts": 541.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15185884/medium/0d349af8ba0364fdd96b55b46c40590c.jpg" }, - { - "id": 14823260, - "username": "omahs", - "totalCosts": 66.66, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" - }, { "id": 14737644, "username": "DylanCONIN", "totalCosts": 64.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14737644/medium/d981e7d9ae1b98b7e8a21245675fc0e0.jpg" }, + { + "id": 14823260, + "username": "omahs", + "totalCosts": 63.63, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" + }, { "id": 15954931, "username": "XofEE", - "totalCosts": 28.28, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" }, { @@ -21463,13 +21840,13 @@ { "id": 12844463, "username": "MATsxm", - "totalCosts": 355.52, + "totalCosts": 219.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, { "id": 14823260, "username": "omahs", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, { @@ -21652,7 +22029,7 @@ { "id": 13249257, "username": "SuperDelphi", - "totalCosts": 830.22, + "totalCosts": 675.69, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13249257/medium/f566e07e86e26f5911df1ddf5fae796d.png" }, { @@ -21679,12 +22056,6 @@ "totalCosts": 22.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, - { - "id": 17361, - "username": "plamarque", - "totalCosts": 22.22, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" - }, { "id": 15242140, "username": "C1troll", @@ -21741,7 +22112,7 @@ { "id": 14823260, "username": "omahs", - "totalCosts": 287.85, + "totalCosts": 234.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, { @@ -21782,26 +22153,20 @@ { "id": 15318490, "username": "arthursw", - "totalCosts": 1078.68, + "totalCosts": 528.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15318490/medium/673173431aeb53f29ca5516e9aa87bec_default.png" }, { "id": 12844463, "username": "MATsxm", - "totalCosts": 136.35, + "totalCosts": 62.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, { "id": 15689365, "username": "Vitanergie", - "totalCosts": 70.7, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15689365/medium/69a7b82eee2a901151a0414599bdf30f_default.png" - }, - { - "id": 15396412, - "username": "Ti0x-f", - "totalCosts": 51.51, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15396412/medium/e3ea869880271105d1c5b63e8a4f3040.jpeg" } ] }, @@ -22047,7 +22412,7 @@ { "id": 17361, "username": "plamarque", - "totalCosts": 491.87, + "totalCosts": 482.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" }, { @@ -22059,7 +22424,7 @@ { "id": 14862460, "username": "vdusart", - "totalCosts": 320.17, + "totalCosts": 301.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14862460/medium/106cb769254652c20ddeab107317fd43_default.png" }, { @@ -22068,23 +22433,11 @@ "totalCosts": 84.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" }, - { - "id": 15144292, - "username": "ytison", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15144292/medium/303a9c200ea05f3a6af7273b3e21c301_default.png" - }, { "id": 15233878, "username": "tayko", - "totalCosts": 10.1, + "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15233878/medium/6f888f1bafc5f19619e939644cc1ed8a.gif" - }, - { - "id": 15624833, - "username": "jeremymolla", - "totalCosts": 9.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15624833/medium/7f9388acb8a621b05e2b1854191d5a56.png" } ] }, @@ -22094,7 +22447,7 @@ { "id": 14075861, "username": "Kler", - "totalCosts": 12822.96, + "totalCosts": 12796.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14075861/medium/a3cf69cc209acc2c520607aab4d1c615.jpeg" }, { @@ -22165,55 +22518,55 @@ { "id": 15689365, "username": "Vitanergie", - "totalCosts": 1524.09, + "totalCosts": 1255.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15689365/medium/69a7b82eee2a901151a0414599bdf30f_default.png" }, { "id": 15780197, "username": "mane42120", - "totalCosts": 962.53, + "totalCosts": 765.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15780197/medium/7e35936906ac293f0ef43741cba99215.png" }, { "id": 15442454, "username": "Im-SpiETH", - "totalCosts": 903.95, + "totalCosts": 619.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15442454/medium/860696ab89262fe98a0b888882d2b2da_default.png" }, + { + "id": 15752987, + "username": "eleashadock", + "totalCosts": 393.9, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15752987/medium/4e31f79c3a4f97d4b7b2f45ae5c4b5ad.png" + }, { "id": 15732749, "username": "Meedew", - "totalCosts": 442.38, + "totalCosts": 312.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15732749/medium/d304869640e3e51803f3f3d72d285786.PNG" }, { "id": 17361, "username": "plamarque", - "totalCosts": 397.94, + "totalCosts": 196.95, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" }, { - "id": 15752987, - "username": "eleashadock", - "totalCosts": 393.9, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15752987/medium/4e31f79c3a4f97d4b7b2f45ae5c4b5ad.png" + "id": 15736713, + "username": "Cain115", + "totalCosts": 123.22, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15736713/medium/c97155475c8dbf50c9a112507a00ac9d.png" }, { "id": 13602852, "username": "cadetclifton", - "totalCosts": 131.3, + "totalCosts": 118.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13602852/medium/0ab1ff308494ae00c4c883c77c4809bc.png" }, - { - "id": 15736713, - "username": "Cain115", - "totalCosts": 123.22, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15736713/medium/c97155475c8dbf50c9a112507a00ac9d.png" - }, { "id": 14823260, "username": "omahs", - "totalCosts": 83.83, + "totalCosts": 71.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, { @@ -22248,19 +22601,19 @@ { "id": 14862460, "username": "vdusart", - "totalCosts": 1198.87, + "totalCosts": 990.81, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14862460/medium/106cb769254652c20ddeab107317fd43_default.png" }, { "id": 15137520, "username": "6ara6aka", - "totalCosts": 105.04, + "totalCosts": 90.9, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137520/medium/c5b3dcab758c35e39540519cea3cc80d.jpg" }, { "id": 15396412, "username": "Ti0x-f", - "totalCosts": 76.76, + "totalCosts": 52.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15396412/medium/e3ea869880271105d1c5b63e8a4f3040.jpeg" }, { @@ -22476,7 +22829,7 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 11.11, + "totalCosts": 8.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" }, { @@ -22808,7 +23161,7 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 123.22, + "totalCosts": 122.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" } ] @@ -22816,18 +23169,18 @@ { "fileId": "7525", "contributors": [ - { - "id": 14823260, - "username": "omahs", - "totalCosts": 296.94, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" - }, { "id": 15914449, "username": "CoinHoodie", "totalCosts": 286.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15914449/medium/8d2590e4c534ca5125f1d70b6d9c71cc.jpeg" }, + { + "id": 14823260, + "username": "omahs", + "totalCosts": 237.35, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" + }, { "id": 14499538, "username": "nodhaiby", @@ -22895,7 +23248,7 @@ { "id": 15795465, "username": "Alex-fr", - "totalCosts": 623.17, + "totalCosts": 517.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15795465/medium/10a5ef3ef5a492fd883eb55c239db5b3.jpeg" }, { @@ -22912,7 +23265,7 @@ { "id": 15795465, "username": "Alex-fr", - "totalCosts": 267.65, + "totalCosts": 232.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15795465/medium/10a5ef3ef5a492fd883eb55c239db5b3.jpeg" }, { @@ -23004,13 +23357,13 @@ { "id": 14823260, "username": "omahs", - "totalCosts": 882.74, + "totalCosts": 291.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, { "id": 17361, "username": "plamarque", - "totalCosts": 282.8, + "totalCosts": 262.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" }, { @@ -23125,7 +23478,7 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 668.62, + "totalCosts": 636.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" }, { @@ -23507,7 +23860,7 @@ { "id": 14823260, "username": "omahs", - "totalCosts": 1025.15, + "totalCosts": 1005.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, { @@ -23768,12 +24121,6 @@ { "fileId": "7713", "contributors": [ - { - "id": 15949345, - "username": "mehdibouzit", - "totalCosts": 717.1, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15949345/medium/2eb9da6ad8eb6399c9aff2b21957916d.png" - }, { "id": 15914449, "username": "CoinHoodie", @@ -23786,6 +24133,12 @@ "totalCosts": 631.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, + { + "id": 15949345, + "username": "mehdibouzit", + "totalCosts": 534.29, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15949345/medium/2eb9da6ad8eb6399c9aff2b21957916d.png" + }, { "id": 15806285, "username": "Douala", @@ -23801,7 +24154,7 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 35.35, + "totalCosts": 21.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" } ] @@ -23812,13 +24165,13 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 1112.01, + "totalCosts": 1095.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" }, { "id": 17361, "username": "plamarque", - "totalCosts": 396.93, + "totalCosts": 380.77, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" }, { @@ -23826,12 +24179,6 @@ "username": "jimmy-martin", "totalCosts": 21.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16278488/medium/f6b89a52a7c0f643d801f5fabe0a1689.jpeg" - }, - { - "id": 12844463, - "username": "MATsxm", - "totalCosts": 12.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12844463/medium/6fae27edb4b41f363587f737ea2f96de.jpg" } ] }, @@ -23841,7 +24188,7 @@ { "id": 15442454, "username": "Im-SpiETH", - "totalCosts": 492.88, + "totalCosts": 379.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15442454/medium/860696ab89262fe98a0b888882d2b2da_default.png" } ] @@ -23852,13 +24199,13 @@ { "id": 14823260, "username": "omahs", - "totalCosts": 723.16, + "totalCosts": 474.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" }, { "id": 17361, "username": "plamarque", - "totalCosts": 372.69, + "totalCosts": 250.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/17361/medium/fecfafa7716ac9d6838b43c31f48f6b9.png" }, { @@ -23903,7 +24250,7 @@ { "id": 15914449, "username": "CoinHoodie", - "totalCosts": 536.31, + "totalCosts": 435.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15914449/medium/8d2590e4c534ca5125f1d70b6d9c71cc.jpeg" } ] @@ -23934,17 +24281,17 @@ { "fileId": "7737", "contributors": [ - { - "id": 14823260, - "username": "omahs", - "totalCosts": 446.42, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" - }, { "id": 15954931, "username": "XofEE", - "totalCosts": 404, + "totalCosts": 303, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" + }, + { + "id": 14823260, + "username": "omahs", + "totalCosts": 216.14, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14823260/medium/2e90039ed53752ac5277c9cf4fce6fe7.jpeg" } ] }, @@ -23982,7 +24329,7 @@ { "id": 15954931, "username": "XofEE", - "totalCosts": 586.81, + "totalCosts": 472.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954931/medium/7254d648c451b822632980e5bfcb61fa.png" } ] @@ -24025,19 +24372,19 @@ { "id": 15363678, "username": "Dawyer", - "totalCosts": 108.07, + "totalCosts": 78.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363678/medium/50e493deacc1ae7d512f2b38aab07d00.png" }, { "id": 15950093, "username": "WholesomeBruh", - "totalCosts": 96.96, + "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15950093/medium/0ca7566575ffb3df8169a24c985fc2f8_default.png" }, { "id": 15956379, "username": "bhangbuddy", - "totalCosts": 41.41, + "totalCosts": 18.18, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956379/medium/435901b02d5b5f77c10fc06ff2c1c3e6.png" }, { @@ -24120,23 +24467,17 @@ { "fileId": "5559", "contributors": [ - { - "id": 15213342, - "username": "morusalba", - "totalCosts": 450.46, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15213342/medium/c045e810f7dcfbf8e7bdc7c5ee684b98.jpeg" - }, { "id": 15201298, "username": "kaushalnsapariya", - "totalCosts": 343.4, + "totalCosts": 309.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201298/medium/17cd6b73331135338dfaed96c991a4a9.png" }, { - "id": 15529791, - "username": "ritesh07raj", - "totalCosts": 23.23, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15529791/medium/bd08afe4a446de2367dc5b765dbc3794_default.png" + "id": 15213342, + "username": "morusalba", + "totalCosts": 114.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15213342/medium/c045e810f7dcfbf8e7bdc7c5ee684b98.jpeg" }, { "id": 15382832, @@ -24149,6 +24490,12 @@ "username": "arjun.shiroya132", "totalCosts": 4.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15070393/medium/776b395f707cbf3ccc0021d1faf5a907.jpeg" + }, + { + "id": 15529791, + "username": "ritesh07raj", + "totalCosts": 2.02, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15529791/medium/bd08afe4a446de2367dc5b765dbc3794_default.png" } ] }, @@ -24158,13 +24505,13 @@ { "id": 15363678, "username": "Dawyer", - "totalCosts": 1153.42, + "totalCosts": 957.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363678/medium/50e493deacc1ae7d512f2b38aab07d00.png" }, { "id": 15956379, "username": "bhangbuddy", - "totalCosts": 855.47, + "totalCosts": 696.9, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956379/medium/435901b02d5b5f77c10fc06ff2c1c3e6.png" }, { @@ -24181,13 +24528,13 @@ { "id": 15956379, "username": "bhangbuddy", - "totalCosts": 1479.65, + "totalCosts": 1381.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956379/medium/435901b02d5b5f77c10fc06ff2c1c3e6.png" }, { "id": 15967185, "username": "waseemnaik", - "totalCosts": 1080.7, + "totalCosts": 1060.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { @@ -24199,7 +24546,7 @@ { "id": 15950093, "username": "WholesomeBruh", - "totalCosts": 62.62, + "totalCosts": 60.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15950093/medium/0ca7566575ffb3df8169a24c985fc2f8_default.png" } ] @@ -24210,7 +24557,7 @@ { "id": 15967185, "username": "waseemnaik", - "totalCosts": 1191.8, + "totalCosts": 829.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { @@ -24222,7 +24569,7 @@ { "id": 15956379, "username": "bhangbuddy", - "totalCosts": 204.02, + "totalCosts": 128.27, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956379/medium/435901b02d5b5f77c10fc06ff2c1c3e6.png" }, { @@ -24239,7 +24586,7 @@ { "id": 15363678, "username": "Dawyer", - "totalCosts": 1120.09, + "totalCosts": 509.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363678/medium/50e493deacc1ae7d512f2b38aab07d00.png" }, { @@ -24256,7 +24603,7 @@ { "id": 15950093, "username": "WholesomeBruh", - "totalCosts": 699.93, + "totalCosts": 630.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15950093/medium/0ca7566575ffb3df8169a24c985fc2f8_default.png" } ] @@ -24267,13 +24614,13 @@ { "id": 15950093, "username": "WholesomeBruh", - "totalCosts": 1275.63, + "totalCosts": 599.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15950093/medium/0ca7566575ffb3df8169a24c985fc2f8_default.png" }, { "id": 15956379, "username": "bhangbuddy", - "totalCosts": 51.51, + "totalCosts": 22.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956379/medium/435901b02d5b5f77c10fc06ff2c1c3e6.png" }, { @@ -24290,13 +24637,13 @@ { "id": 15967369, "username": "Krishna2992", - "totalCosts": 1284.72, + "totalCosts": 1068.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967369/medium/c6c620bf9be7a72e246c55971f82fbac_default.png" }, { "id": 15452118, "username": "Kavyb", - "totalCosts": 40.4, + "totalCosts": 24.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15452118/medium/68a131f6275b18763fda253aff194d15.jpeg" } ] @@ -24365,7 +24712,7 @@ { "id": 15916347, "username": "puru-khedre", - "totalCosts": 897.89, + "totalCosts": 826.18, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15916347/medium/2310ee06d441291171855c0917fc542d.jpg" }, { @@ -24399,7 +24746,7 @@ { "id": 15363678, "username": "Dawyer", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363678/medium/50e493deacc1ae7d512f2b38aab07d00.png" } ] @@ -24443,19 +24790,19 @@ { "id": 15967369, "username": "Krishna2992", - "totalCosts": 1166.55, + "totalCosts": 1010, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967369/medium/c6c620bf9be7a72e246c55971f82fbac_default.png" }, { "id": 15950093, "username": "WholesomeBruh", - "totalCosts": 667.61, + "totalCosts": 648.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15950093/medium/0ca7566575ffb3df8169a24c985fc2f8_default.png" }, { "id": 15363678, "username": "Dawyer", - "totalCosts": 656.5, + "totalCosts": 621.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363678/medium/50e493deacc1ae7d512f2b38aab07d00.png" } ] @@ -24540,19 +24887,19 @@ { "id": 15967369, "username": "Krishna2992", - "totalCosts": 876.68, + "totalCosts": 861.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967369/medium/c6c620bf9be7a72e246c55971f82fbac_default.png" }, { "id": 15916347, "username": "puru-khedre", - "totalCosts": 477.73, + "totalCosts": 468.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15916347/medium/2310ee06d441291171855c0917fc542d.jpg" }, { "id": 15956379, "username": "bhangbuddy", - "totalCosts": 283.81, + "totalCosts": 244.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956379/medium/435901b02d5b5f77c10fc06ff2c1c3e6.png" }, { @@ -24569,19 +24916,19 @@ { "id": 15916347, "username": "puru-khedre", - "totalCosts": 1576.61, + "totalCosts": 1295.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15916347/medium/2310ee06d441291171855c0917fc542d.jpg" }, { "id": 15967185, "username": "waseemnaik", - "totalCosts": 1291.79, + "totalCosts": 1006.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { "id": 15363678, "username": "Dawyer", - "totalCosts": 314.11, + "totalCosts": 300.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363678/medium/50e493deacc1ae7d512f2b38aab07d00.png" }, { @@ -24598,7 +24945,7 @@ { "id": 15363678, "username": "Dawyer", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363678/medium/50e493deacc1ae7d512f2b38aab07d00.png" } ] @@ -24714,7 +25061,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 209.07, + "totalCosts": 217.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -24856,7 +25203,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 47.47, + "totalCosts": 59.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -24913,7 +25260,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 182.81, + "totalCosts": 188.87, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -24921,17 +25268,17 @@ { "fileId": "2856", "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 104.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, { "id": 14357794, "username": "robertdosa", "totalCosts": 103.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14357794/medium/a28b741096516a710523b87d9ee07223.png" - }, - { - "id": 15965461, - "username": "Satglow", - "totalCosts": 77.77, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] }, @@ -24941,7 +25288,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1598.83, + "totalCosts": 1594.79, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -24955,6 +25302,12 @@ "username": "robertdosa", "totalCosts": 54.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14357794/medium/a28b741096516a710523b87d9ee07223.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 4.04, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -25009,7 +25362,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 684.78, + "totalCosts": 681.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25026,7 +25379,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1787.7, + "totalCosts": 1778.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25035,6 +25388,12 @@ "totalCosts": 68.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14357794/medium/a28b741096516a710523b87d9ee07223.png" }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 10.1, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" + }, { "id": 14680410, "username": "Stanley15", @@ -25123,7 +25482,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 258.56, + "totalCosts": 271.69, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25208,7 +25567,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 227.25, + "totalCosts": 231.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -25225,7 +25584,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 163.62, + "totalCosts": 202, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -25349,13 +25708,13 @@ { "id": 14357794, "username": "robertdosa", - "totalCosts": 390.87, + "totalCosts": 388.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14357794/medium/a28b741096516a710523b87d9ee07223.png" }, { "id": 15965461, "username": "Satglow", - "totalCosts": 254.52, + "totalCosts": 264.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25412,7 +25771,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1040.3, + "totalCosts": 1080.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25474,7 +25833,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1446.32, + "totalCosts": 1400.87, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25491,7 +25850,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 280.78, + "totalCosts": 230.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25537,7 +25896,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 18.18, + "totalCosts": 4.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -25548,9 +25907,15 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 2096.76, + "totalCosts": 2071.51, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 277.75, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" + }, { "id": 14357794, "username": "robertdosa", @@ -25568,10 +25933,16 @@ { "fileId": "5565", "contributors": [ + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 425.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" + }, { "id": 15965461, "username": "Satglow", - "totalCosts": 615.09, + "totalCosts": 376.73, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25640,7 +26011,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 11587.73, + "totalCosts": 11586.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -25675,19 +26046,25 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1050.4, + "totalCosts": 421.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 274.72, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" + }, { "id": 15627487, "username": "mysteryalchemist", - "totalCosts": 234.32, + "totalCosts": 200.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15627487/medium/b04d798863055a6f17ac25dab1d5c60b_default.png" }, { "id": 15616701, "username": "Wegonar", - "totalCosts": 47.47, + "totalCosts": 31.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15616701/medium/107a9002aa59a9dab9854283b420a57b.jpeg" }, { @@ -25704,7 +26081,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1332.19, + "totalCosts": 1268.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -25748,8 +26125,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 735.28, + "totalCosts": 722.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 24.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -25770,8 +26153,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 575.7, + "totalCosts": 498.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 36.36, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -25781,13 +26170,13 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 2046.26, + "totalCosts": 1955.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { "id": 15967485, "username": "horvathbenedek92", - "totalCosts": 191.9, + "totalCosts": 171.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967485/medium/5f3e3c3d17bd4c1d3747d2e511da03df.png" }, { @@ -25804,7 +26193,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 3099.69, + "totalCosts": 3076.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -25815,7 +26204,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1664.48, + "totalCosts": 1612.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -25848,8 +26237,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 934.25, + "totalCosts": 862.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 69.69, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -25870,8 +26265,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 106.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -25881,8 +26282,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 298.96, + "totalCosts": 263.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 50.5, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -25925,8 +26332,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 2555.3, + "totalCosts": 2532.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 19.19, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -25947,7 +26360,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1333.2, + "totalCosts": 965.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -26008,8 +26421,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1668.52, + "totalCosts": 1582.67, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 55.55, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26019,8 +26438,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 3210.79, + "totalCosts": 2632.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 110.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26052,7 +26477,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1194.83, + "totalCosts": 743.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -26074,7 +26499,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 5717.61, + "totalCosts": 5789.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -26190,7 +26615,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1668.52, + "totalCosts": 1836.18, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -26223,7 +26648,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 453.49, + "totalCosts": 572.67, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -26240,8 +26665,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 129.28, + "totalCosts": 183.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 20.2, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26262,7 +26693,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 208.06, + "totalCosts": 249.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] @@ -26301,7 +26732,7 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 4893.45, + "totalCosts": 4952.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" }, { @@ -26318,8 +26749,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 2466.42, + "totalCosts": 2269.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 197.96, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26329,8 +26766,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1540.25, + "totalCosts": 1439.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 80.8, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26340,8 +26783,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 492.88, + "totalCosts": 379.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 113.12, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26351,8 +26800,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 1130.19, + "totalCosts": 901.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 218.16, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26384,8 +26839,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 631.25, + "totalCosts": 507.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 129.28, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26406,8 +26867,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 850.42, + "totalCosts": 519.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 258.56, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26439,8 +26906,14 @@ { "id": 15965461, "username": "Satglow", - "totalCosts": 586.81, + "totalCosts": 472.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 16211894, + "username": "lorincze", + "totalCosts": 114.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16211894/medium/7c5d58b22e6ffb1f49de6656f35ff162.png" } ] }, @@ -26542,6 +27015,122 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" } ] + }, + { + "fileId": "7453", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 1903.85, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "7479", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 1991.72, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "8015", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 580.75, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "5525", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 3726.9, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + }, + { + "id": 15362854, + "username": "geolang", + "totalCosts": 11.11, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15362854/medium/9d2df0f6cf90d0916ea8f162cc8cd480_default.png" + } + ] + }, + { + "fileId": "7473", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 4158.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "7757", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 2158.37, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "7801", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 1744.27, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "6171", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 709.02, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "6532", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 560.55, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] + }, + { + "fileId": "5521", + "contributors": [ + { + "id": 15965461, + "username": "Satglow", + "totalCosts": 226.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965461/medium/d0c82c3b7d4885069b13e4b4dc3f2963_default.png" + } + ] } ] }, @@ -26612,7 +27201,7 @@ { "id": 14866604, "username": "yeremiaryangunadi", - "totalCosts": 356.53, + "totalCosts": 348.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png" }, { @@ -26664,7 +27253,7 @@ { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 155.54, + "totalCosts": 139.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" } ] @@ -26675,13 +27264,13 @@ { "id": 14866604, "username": "yeremiaryangunadi", - "totalCosts": 449.45, + "totalCosts": 404, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png" }, { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 115.14, + "totalCosts": 92.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" } ] @@ -26723,18 +27312,18 @@ { "fileId": "5559", "contributors": [ - { - "id": 15591667, - "username": "Rohmen", - "totalCosts": 655.49, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15591667/medium/73757d8bd29406cc7984633838c7abdc_default.png" - }, { "id": 14866604, "username": "yeremiaryangunadi", - "totalCosts": 344.41, + "totalCosts": 310.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png" }, + { + "id": 15591667, + "username": "Rohmen", + "totalCosts": 138.37, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15591667/medium/73757d8bd29406cc7984633838c7abdc_default.png" + }, { "id": 14730796, "username": "mukhamadkurniarrokhman", @@ -26749,7 +27338,7 @@ { "id": 14866604, "username": "yeremiaryangunadi", - "totalCosts": 996.87, + "totalCosts": 977.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png" }, { @@ -26761,7 +27350,7 @@ { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 153.52, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" } ] @@ -26877,7 +27466,7 @@ { "id": 15927303, "username": "roifnaufal21", - "totalCosts": 1505.91, + "totalCosts": 1449.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" }, { @@ -26889,7 +27478,7 @@ { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 114.13, + "totalCosts": 95.95, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" }, { @@ -27254,7 +27843,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 330.27, + "totalCosts": 326.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" }, { @@ -27403,7 +27992,7 @@ { "id": 15927303, "username": "roifnaufal21", - "totalCosts": 972.63, + "totalCosts": 964.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" }, { @@ -27996,13 +28585,13 @@ { "id": 15927303, "username": "roifnaufal21", - "totalCosts": 2961.32, + "totalCosts": 2909.81, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" }, { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 1617.01, + "totalCosts": 1595.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" }, { @@ -28100,7 +28689,7 @@ { "id": 14866604, "username": "yeremiaryangunadi", - "totalCosts": 435.31, + "totalCosts": 433.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png" }, { @@ -29110,13 +29699,13 @@ { "id": 14866604, "username": "yeremiaryangunadi", - "totalCosts": 283.81, + "totalCosts": 253.51, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14866604/medium/285a89179a206f3621ba14bf04085b27.png" }, { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 37.37, + "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" } ] @@ -29249,19 +29838,19 @@ { "id": 15775647, "username": "utomo878", - "totalCosts": 305.02, + "totalCosts": 162.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15775647/medium/e6c4302f1613714c53e496f87b61ae01.jpg" }, { "id": 14708760, "username": "hypebeans", - "totalCosts": 235.33, + "totalCosts": 158.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/c99d5e08a676eaebe6f2a383a81222e1.jpg" }, { "id": 15711553, "username": "iamgorgasiagian", - "totalCosts": 95.95, + "totalCosts": 36.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15711553/medium/78d86636558fbd59511b5c714ae72f78.jpeg" }, { @@ -29390,25 +29979,25 @@ { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 723.16, + "totalCosts": 671.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" }, { "id": 15128863, "username": "samuel_noah", - "totalCosts": 469.65, + "totalCosts": 450.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15128863/medium/ef7bc05a7fc93f702826aa0642b376a3.jpeg" }, { "id": 15126147, "username": "anggunh", - "totalCosts": 336.33, + "totalCosts": 231.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15126147/medium/f2fb49285f22070ebdc4fc55b7e5f64d_default.png" }, { "id": 15148352, "username": "kelvinandriancom", - "totalCosts": 225.23, + "totalCosts": 206.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15148352/medium/39819e77427bb06eb4966d1500816b3a.jpeg" } ] @@ -29419,13 +30008,13 @@ { "id": 15588533, "username": "jundullah", - "totalCosts": 1932.13, + "totalCosts": 1653.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15588533/medium/18dbcb324d075828b211bb018e359ebc.jpg" }, { "id": 15402448, "username": "ekoyanu99", - "totalCosts": 157.56, + "totalCosts": 103.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15402448/medium/86f4ae5f9d291afe6a60cad2c80ab4df.jpeg" }, { @@ -29460,32 +30049,32 @@ { "id": 15775647, "username": "utomo878", - "totalCosts": 1546.31, + "totalCosts": 1139.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15775647/medium/e6c4302f1613714c53e496f87b61ae01.jpg" }, { "id": 14708760, "username": "hypebeans", - "totalCosts": 276.74, + "totalCosts": 121.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/c99d5e08a676eaebe6f2a383a81222e1.jpg" }, { "id": 15752359, "username": "feriywahyu", - "totalCosts": 139.38, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15752359/medium/93acc17e0d8f3debaa4916c1e6aef690.png" }, - { - "id": 14861756, - "username": "RahayuRafika_12", - "totalCosts": 28.28, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" - }, { "id": 15934037, "username": "fuji.anggara10", "totalCosts": 16.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" + }, + { + "id": 14861756, + "username": "RahayuRafika_12", + "totalCosts": 1.01, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" } ] }, @@ -29495,13 +30084,13 @@ { "id": 15775647, "username": "utomo878", - "totalCosts": 744.37, + "totalCosts": 338.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15775647/medium/e6c4302f1613714c53e496f87b61ae01.jpg" }, { "id": 15962457, "username": "danimeister", - "totalCosts": 393.9, + "totalCosts": 188.87, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962457/medium/97c701528b519a4a784b0d6b5f845fb8.jpg" }, { @@ -29524,7 +30113,7 @@ { "id": 15775647, "username": "utomo878", - "totalCosts": 322.19, + "totalCosts": 268.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15775647/medium/e6c4302f1613714c53e496f87b61ae01.jpg" }, { @@ -29547,19 +30136,19 @@ { "id": 15591667, "username": "Rohmen", - "totalCosts": 1160.49, + "totalCosts": 501.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15591667/medium/73757d8bd29406cc7984633838c7abdc_default.png" }, { "id": 15775647, "username": "utomo878", - "totalCosts": 449.45, + "totalCosts": 156.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15775647/medium/e6c4302f1613714c53e496f87b61ae01.jpg" }, { "id": 14861756, "username": "RahayuRafika_12", - "totalCosts": 137.36, + "totalCosts": 120.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" }, { @@ -29715,7 +30304,7 @@ { "id": 15662523, "username": "Jokowdd", - "totalCosts": 645.39, + "totalCosts": 585.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15662523/medium/a1bde18af96dc28c3fd1c1dd610e8896.JPG" }, { @@ -29749,7 +30338,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" } ] @@ -29760,7 +30349,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" } ] @@ -29810,7 +30399,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 2344.21, + "totalCosts": 2161.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" }, { @@ -29822,7 +30411,7 @@ { "id": 15962457, "username": "danimeister", - "totalCosts": 50.5, + "totalCosts": 31.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962457/medium/97c701528b519a4a784b0d6b5f845fb8.jpg" } ] @@ -29833,7 +30422,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 869.61, + "totalCosts": 853.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" }, { @@ -29850,7 +30439,7 @@ { "id": 15927303, "username": "roifnaufal21", - "totalCosts": 474.7, + "totalCosts": 361.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" }, { @@ -29867,7 +30456,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 1057.47, + "totalCosts": 709.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" }, { @@ -29936,7 +30525,7 @@ { "id": 15927303, "username": "roifnaufal21", - "totalCosts": 536.31, + "totalCosts": 435.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" } ] @@ -29964,7 +30553,7 @@ { "id": 14920051, "username": "regislanderge", - "totalCosts": 850.42, + "totalCosts": 519.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14920051/medium/9ba58eec03e143bcd1acbe5b2ecf8250.jpg" } ] @@ -30003,7 +30592,7 @@ { "id": 15927303, "username": "roifnaufal21", - "totalCosts": 586.81, + "totalCosts": 472.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" } ] @@ -30025,7 +30614,7 @@ { "id": 15927303, "username": "roifnaufal21", - "totalCosts": 8813.26, + "totalCosts": 8787, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" }, { @@ -30071,6 +30660,105 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15372440/medium/9697b1a150af88a282284a2ec67a53ad.png" } ] + }, + { + "fileId": "7320", + "contributors": [ + { + "id": 15775647, + "username": "utomo878", + "totalCosts": 567.62, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15775647/medium/e6c4302f1613714c53e496f87b61ae01.jpg" + }, + { + "id": 15927303, + "username": "roifnaufal21", + "totalCosts": 309.06, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" + }, + { + "id": 14861756, + "username": "RahayuRafika_12", + "totalCosts": 247.45, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" + }, + { + "id": 14708760, + "username": "hypebeans", + "totalCosts": 104.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/c99d5e08a676eaebe6f2a383a81222e1.jpg" + } + ] + }, + { + "fileId": "6428", + "contributors": [ + { + "id": 14708760, + "username": "hypebeans", + "totalCosts": 705.99, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/c99d5e08a676eaebe6f2a383a81222e1.jpg" + }, + { + "id": 15962457, + "username": "danimeister", + "totalCosts": 661.55, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962457/medium/97c701528b519a4a784b0d6b5f845fb8.jpg" + }, + { + "id": 15402448, + "username": "ekoyanu99", + "totalCosts": 103.02, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15402448/medium/86f4ae5f9d291afe6a60cad2c80ab4df.jpeg" + }, + { + "id": 15588533, + "username": "jundullah", + "totalCosts": 32.32, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15588533/medium/18dbcb324d075828b211bb018e359ebc.jpg" + }, + { + "id": 14754288, + "username": "Munyuk81", + "totalCosts": 11.11, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14754288/medium/ecd9c50699a3987100519bba6d6119dc_default.png" + } + ] + }, + { + "fileId": "7465", + "contributors": [ + { + "id": 15775647, + "username": "utomo878", + "totalCosts": 1274.62, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15775647/medium/e6c4302f1613714c53e496f87b61ae01.jpg" + }, + { + "id": 15662523, + "username": "Jokowdd", + "totalCosts": 990.81, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15662523/medium/a1bde18af96dc28c3fd1c1dd610e8896.JPG" + }, + { + "id": 14861756, + "username": "RahayuRafika_12", + "totalCosts": 336.33, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14861756/medium/68ce2b760b107d1cf2a5a1508aa8ee96.jpeg" + }, + { + "id": 15934037, + "username": "fuji.anggara10", + "totalCosts": 19.19, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" + }, + { + "id": 15927303, + "username": "roifnaufal21", + "totalCosts": 18.18, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15927303/medium/e39f725004e850246a765bb86dddf780_default.png" + } + ] } ] }, @@ -30089,7 +30777,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 79.79, + "totalCosts": 163.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30104,6 +30792,12 @@ "totalCosts": 38.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14745718/medium/062695516239cdaadf6d37ac6345ff3c_default.png" }, + { + "id": 16312240, + "username": "Alexei123", + "totalCosts": 26.26, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16312240/medium/2b0fd2b79e1398f29c56acb05211f43e.jpg" + }, { "id": 16171038, "username": "bianc8", @@ -30136,19 +30830,19 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1308.96, + "totalCosts": 1076.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { "id": 14665128, "username": "Pierlu_be", - "totalCosts": 1015.05, + "totalCosts": 847.39, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14665128/medium/5fdea361fcd2c73a52533056e2709694_default.png" }, { "id": 15137520, "username": "6ara6aka", - "totalCosts": 57.57, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137520/medium/c5b3dcab758c35e39540519cea3cc80d.jpg" } ] @@ -30165,7 +30859,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1.01, + "totalCosts": 8.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -30176,13 +30870,13 @@ { "id": 15103237, "username": "Nico-oh", - "totalCosts": 290.88, + "totalCosts": 282.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15103237/medium/d99e72d8e8f06f45d2b7c2067e8b2ba5_default.png" }, { "id": 13461670, "username": "Herbie_23", - "totalCosts": 115.14, + "totalCosts": 122.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30214,18 +30908,18 @@ "totalCosts": 90.9, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15058945/medium/f0522d6d1128923dee1be695b3095364.jpeg" }, + { + "id": 13461670, + "username": "Herbie_23", + "totalCosts": 49.49, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" + }, { "id": 14657804, "username": "jhonnyvianello", "totalCosts": 38.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14657804/medium/005d9fa70fdc5a4fcd818f63cf61e1a0.jpg" }, - { - "id": 13461670, - "username": "Herbie_23", - "totalCosts": 28.28, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" - }, { "id": 14665128, "username": "Pierlu_be", @@ -30292,27 +30986,21 @@ { "id": 14657804, "username": "jhonnyvianello", - "totalCosts": 362.59, + "totalCosts": 353.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14657804/medium/005d9fa70fdc5a4fcd818f63cf61e1a0.jpg" }, { "id": 13461670, "username": "Herbie_23", - "totalCosts": 117.16, + "totalCosts": 114.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { "id": 15101201, "username": "andreapiani.dev", - "totalCosts": 82.82, + "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15101201/medium/e83a56185107895cbc97cbd279ecf901.jpg" }, - { - "id": 16171038, - "username": "bianc8", - "totalCosts": 9.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16171038/medium/d0bf697b97124361ae9caa68aab37fa9.jpeg" - }, { "id": 15946127, "username": "hyperalchemy", @@ -30458,7 +31146,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 788.81, + "totalCosts": 801.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30481,7 +31169,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 467.63, + "totalCosts": 470.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30510,7 +31198,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1176.65, + "totalCosts": 1199.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30533,7 +31221,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 136.35, + "totalCosts": 160.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30562,7 +31250,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1405.92, + "totalCosts": 1460.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30609,25 +31297,25 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1236.24, + "totalCosts": 555.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { "id": 14963383, "username": "antoniobuttazzo23", - "totalCosts": 345.42, + "totalCosts": 311.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14963383/medium/0478800a5b79d2b1dbff376396d3758d.png" }, { "id": 15397446, "username": "BobbiStani", - "totalCosts": 112.11, + "totalCosts": 78.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15397446/medium/8f4361adb19660e5aa418d6605c2783b.jpg" }, { "id": 15350688, "username": "abstractumx", - "totalCosts": 90.9, + "totalCosts": 57.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15350688/medium/63b8fa09172bce0e7ff61d99ace67d2b.jpeg" }, { @@ -30644,7 +31332,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 2199.78, + "totalCosts": 1897.79, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30661,13 +31349,13 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 2854.26, + "totalCosts": 2756.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { "id": 15266690, "username": "Fuliggine", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266690/medium/beb929d96ab06718fce198051fdffaae.jpg" }, { @@ -30696,7 +31384,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1608.93, + "totalCosts": 1219.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30847,7 +31535,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 536.31, + "totalCosts": 542.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30940,7 +31628,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 753.46, + "totalCosts": 848.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -30980,7 +31668,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 2305.83, + "totalCosts": 2325.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31020,7 +31708,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 683.77, + "totalCosts": 697.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31060,7 +31748,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1335.22, + "totalCosts": 1352.39, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31141,7 +31829,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 455.51, + "totalCosts": 468.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31164,7 +31852,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1731.14, + "totalCosts": 1743.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31187,7 +31875,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 994.85, + "totalCosts": 1011.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31204,7 +31892,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 570.65, + "totalCosts": 576.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -31256,7 +31944,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1580.65, + "totalCosts": 1597.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31355,7 +32043,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1836.18, + "totalCosts": 2103.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31417,7 +32105,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 202, + "totalCosts": 264.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31545,7 +32233,7 @@ { "id": 15266690, "username": "Fuliggine", - "totalCosts": 36.36, + "totalCosts": 32.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266690/medium/beb929d96ab06718fce198051fdffaae.jpg" }, { @@ -31672,7 +32360,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1753.36, + "totalCosts": 1771.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31695,7 +32383,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 2216.95, + "totalCosts": 2230.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31723,7 +32411,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 370.67, + "totalCosts": 367.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31798,7 +32486,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1134.23, + "totalCosts": 1144.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31821,7 +32509,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 437.33, + "totalCosts": 443.39, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31847,12 +32535,6 @@ "username": "MARG8", "totalCosts": 6.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14672670/medium/fa06e51f67d5782307ef484c16c0bd7b_default.png" - }, - { - "id": 16061752, - "username": "bernardistefano73", - "totalCosts": 1.01, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16061752/medium/12da54ba24880878f712772863c6f820.png" } ] }, @@ -31862,7 +32544,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1490.76, + "totalCosts": 1471.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -31884,7 +32566,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 287.85, + "totalCosts": 316.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31919,7 +32601,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 560.55, + "totalCosts": 568.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31942,7 +32624,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1491.77, + "totalCosts": 1500.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32108,7 +32790,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 263.61, + "totalCosts": 282.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32142,7 +32824,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 35.35, + "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32212,7 +32894,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 4116.76, + "totalCosts": 4144.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32252,7 +32934,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 717.1, + "totalCosts": 743.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32309,7 +32991,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 3658.22, + "totalCosts": 3677.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32332,7 +33014,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1195.84, + "totalCosts": 1210.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32423,7 +33105,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 729.22, + "totalCosts": 737.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32475,7 +33157,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 3939, + "totalCosts": 3866.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32510,7 +33192,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 3269.37, + "totalCosts": 3283.51, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -32561,7 +33243,7 @@ { "id": 14633448, "username": "ilrado", - "totalCosts": 385.82, + "totalCosts": 383.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14633448/medium/00e36a91231d5f6980f4ea96c1f24ab9.jpg" }, { @@ -32578,7 +33260,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 738.31, + "totalCosts": 723.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32687,7 +33369,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 748.41, + "totalCosts": 761.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -32757,7 +33439,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 975.66, + "totalCosts": 1185.74, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -33365,7 +34047,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1015.05, + "totalCosts": 1043.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -33507,7 +34189,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 875.67, + "totalCosts": 888.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -33530,7 +34212,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 78.78, + "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -33541,7 +34223,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 497.93, + "totalCosts": 505, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -33648,6 +34330,12 @@ { "fileId": "2680", "contributors": [ + { + "id": 13461670, + "username": "Herbie_23", + "totalCosts": 1263.51, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" + }, { "id": 14633448, "username": "ilrado", @@ -33659,12 +34347,6 @@ "username": "jhonnyvianello", "totalCosts": 22.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14657804/medium/005d9fa70fdc5a4fcd818f63cf61e1a0.jpg" - }, - { - "id": 13461670, - "username": "Herbie_23", - "totalCosts": 8.08, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] }, @@ -33674,7 +34356,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 267.65, + "totalCosts": 220.18, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -33761,7 +34443,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 585.8, + "totalCosts": 608.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -33802,7 +34484,7 @@ { "id": 15266690, "username": "Fuliggine", - "totalCosts": 568.63, + "totalCosts": 509.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266690/medium/beb929d96ab06718fce198051fdffaae.jpg" }, { @@ -33843,14 +34525,8 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 645.39, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" - }, - { - "id": 15725045, - "username": "Sablc", - "totalCosts": 26.26, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15725045/medium/bcc9b7427643cd7f00ab1d854288b798_default.png" } ] }, @@ -33860,7 +34536,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 295.93, + "totalCosts": 263.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -33925,18 +34601,18 @@ { "fileId": "2672", "contributors": [ + { + "id": 13461670, + "username": "Herbie_23", + "totalCosts": 630.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" + }, { "id": 15185884, "username": "carmen1912", "totalCosts": 511.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15185884/medium/0d349af8ba0364fdd96b55b46c40590c.jpg" }, - { - "id": 13461670, - "username": "Herbie_23", - "totalCosts": 145.44, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" - }, { "id": 14600024, "username": "Klayer89", @@ -33969,21 +34645,15 @@ { "id": 16073436, "username": "g-flex", - "totalCosts": 365.62, + "totalCosts": 229.27, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16073436/medium/91dc8be3a27f3a7199bd8286cfb95eb6.jpeg" }, { "id": 13754187, "username": "Carla78", - "totalCosts": 143.42, + "totalCosts": 93.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13754187/medium/37de2106b564cdd5431a9c1f7e091087.png" }, - { - "id": 15266690, - "username": "Fuliggine", - "totalCosts": 91.91, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266690/medium/beb929d96ab06718fce198051fdffaae.jpg" - }, { "id": 13461670, "username": "Herbie_23", @@ -33996,6 +34666,12 @@ "totalCosts": 37.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15630617/medium/b03e6368819544b642a8371e0a875054.jpeg" }, + { + "id": 15266690, + "username": "Fuliggine", + "totalCosts": 34.34, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266690/medium/beb929d96ab06718fce198051fdffaae.jpg" + }, { "id": 16061752, "username": "bernardistefano73", @@ -34013,12 +34689,6 @@ "username": "muffin02", "totalCosts": 12.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15079543/medium/2e2ca02af45eb611ae7f5a9a1d31691d_default.png" - }, - { - "id": 15946127, - "username": "hyperalchemy", - "totalCosts": 7.07, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15946127/medium/fb8809671278895b42cf50c752fd7bf2.png" } ] }, @@ -34028,7 +34698,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 2466.42, + "totalCosts": 2269.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34039,7 +34709,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 348.45, + "totalCosts": 399.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -34104,7 +34774,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1112.01, + "totalCosts": 1409.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -34127,7 +34797,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 492.88, + "totalCosts": 379.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34138,13 +34808,13 @@ { "id": 15370640, "username": "radiofreekekistan", - "totalCosts": 699.93, + "totalCosts": 462.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15370640/medium/a078ae2d5a193a9bfeedbf92e849f9da.jpeg" }, { "id": 13461670, "username": "Herbie_23", - "totalCosts": 406.02, + "totalCosts": 319.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34155,7 +34825,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 2002.83, + "totalCosts": 2049.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -34192,6 +34862,12 @@ "username": "Herbie_23", "totalCosts": 1486.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" + }, + { + "id": 15363186, + "username": "naiba3434", + "totalCosts": 17.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363186/medium/d4f4865f0038539de56219781b308488.jpeg" } ] }, @@ -34201,7 +34877,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1034.24, + "totalCosts": 1055.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34212,7 +34888,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 536.31, + "totalCosts": 507.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34234,7 +34910,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 850.42, + "totalCosts": 519.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34245,7 +34921,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1712.96, + "totalCosts": 1733.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34267,7 +34943,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 569.64, + "totalCosts": 472.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34278,7 +34954,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1256.44, + "totalCosts": 1294.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34289,13 +34965,13 @@ { "id": 15101201, "username": "andreapiani.dev", - "totalCosts": 1169.58, + "totalCosts": 1060.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15101201/medium/e83a56185107895cbc97cbd279ecf901.jpg" }, { "id": 13461670, "username": "Herbie_23", - "totalCosts": 249.47, + "totalCosts": 315.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -34303,12 +34979,6 @@ "username": "Pierlu_be", "totalCosts": 107.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14665128/medium/5fdea361fcd2c73a52533056e2709694_default.png" - }, - { - "id": 14657804, - "username": "jhonnyvianello", - "totalCosts": 45.45, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14657804/medium/005d9fa70fdc5a4fcd818f63cf61e1a0.jpg" } ] }, @@ -34318,7 +34988,7 @@ { "id": 15266690, "username": "Fuliggine", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266690/medium/beb929d96ab06718fce198051fdffaae.jpg" }, { @@ -34341,7 +35011,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1334.21, + "totalCosts": 630.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34462,7 +35132,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1459.45, + "totalCosts": 1395.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34473,13 +35143,13 @@ { "id": 14665128, "username": "Pierlu_be", - "totalCosts": 6767, + "totalCosts": 6740.74, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14665128/medium/5fdea361fcd2c73a52533056e2709694_default.png" }, { "id": 13461670, "username": "Herbie_23", - "totalCosts": 2980.51, + "totalCosts": 2999.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -34526,19 +35196,19 @@ { "id": 15721133, "username": "LucaPennella", - "totalCosts": 1556.41, + "totalCosts": 1534.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15721133/medium/57413183f5da136c6e2546edbe8ff01d.png" }, { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1258.46, + "totalCosts": 765.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { "id": 15747281, "username": "Rc.Bell", - "totalCosts": 321.18, + "totalCosts": 295.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15747281/medium/cb37f93c60bd9c25699ee6aa672c922c.jpeg" }, { @@ -34587,6 +35257,12 @@ "username": "romelsantosgalvan404", "totalCosts": 9.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15625805/medium/be863e74be6e423cd6a6a382a8deb28d.png" + }, + { + "id": 13461670, + "username": "Herbie_23", + "totalCosts": 5.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] }, @@ -34596,7 +35272,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1596.81, + "totalCosts": 1608.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -34619,7 +35295,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 122.21, + "totalCosts": 121.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34675,19 +35351,19 @@ { "id": 13754187, "username": "Carla78", - "totalCosts": 832.24, + "totalCosts": 465.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13754187/medium/37de2106b564cdd5431a9c1f7e091087.png" }, { "id": 15266690, "username": "Fuliggine", - "totalCosts": 333.3, + "totalCosts": 88.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15266690/medium/beb929d96ab06718fce198051fdffaae.jpg" }, { "id": 15976521, "username": "TDzaa", - "totalCosts": 122.21, + "totalCosts": 80.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15976521/medium/8414ee27520d071a1f2d1a4b63f64f08.png" }, { @@ -34732,7 +35408,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 262.6, + "totalCosts": 437.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34765,7 +35441,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 668.62, + "totalCosts": 649.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" } ] @@ -34985,7 +35661,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 54.54, + "totalCosts": 107.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -35024,7 +35700,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 525.2, + "totalCosts": 625.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35077,13 +35753,13 @@ { "id": 15201594, "username": "akashi031", - "totalCosts": 1130.19, + "totalCosts": 934.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201594/medium/5e27758e217a387356f7c0502130479f_default.png" }, { "id": 15341508, "username": "hesoponyo", - "totalCosts": 78.78, + "totalCosts": 66.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15341508/medium/070055fd80d21a5f4b26e37dd49cd0d0.png" }, { @@ -35129,13 +35805,13 @@ { "id": 15135089, "username": "indwm", - "totalCosts": 367.64, + "totalCosts": 359.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15135089/medium/ad0dde7b6943eb1bdc2b8c64223dd070.png" }, { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 165.64, + "totalCosts": 173.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35161,17 +35837,17 @@ "totalCosts": 78.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14909599/medium/03cac5b173af4998e50555e67f617e56_default.png" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 67.67, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 15135089, "username": "indwm", "totalCosts": 40.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15135089/medium/ad0dde7b6943eb1bdc2b8c64223dd070.png" - }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 14.14, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] }, @@ -35181,7 +35857,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 209.07, + "totalCosts": 236.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35221,13 +35897,13 @@ { "id": 15169660, "username": "kurotaky", - "totalCosts": 441.37, + "totalCosts": 395.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15169660/medium/05e3e729e62f12747a7d06b8f27d3cf5.jpeg" }, { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 127.26, + "totalCosts": 132.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -35273,7 +35949,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 12.12, + "totalCosts": 31.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -35307,7 +35983,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 54.54, + "totalCosts": 64.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35321,6 +35997,12 @@ { "fileId": "6408", "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 161.6, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 14563438, "username": "KobayashiTakaki", @@ -35333,12 +36015,6 @@ "totalCosts": 37.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15263940/medium/79ad585145ba5474bca7d35c2719dc43.jpg" }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 30.3, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, { "id": 15275810, "username": "sakamotomasayuki7", @@ -35353,7 +36029,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 305.02, + "totalCosts": 424.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -35389,6 +36065,12 @@ "username": "ki-3", "totalCosts": 14.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15466100/medium/1b0592d23d47ff1700a1b5163323646c.png" + }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 13.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] }, @@ -35401,17 +36083,17 @@ "totalCosts": 402.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15169660/medium/05e3e729e62f12747a7d06b8f27d3cf5.jpeg" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 181.8, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 15275810, "username": "sakamotomasayuki7", "totalCosts": 15.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15275810/medium/3af3394e8787b462699f2e56425983a1.jpeg" - }, - { - "id": 15466100, - "username": "ki-3", - "totalCosts": 10.1, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15466100/medium/1b0592d23d47ff1700a1b5163323646c.png" } ] }, @@ -35468,7 +36150,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 123.22, + "totalCosts": 147.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35497,7 +36179,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 109.08, + "totalCosts": 168.67, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35511,17 +36193,17 @@ { "fileId": "5559", "contributors": [ - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 490.86, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, { "id": 14880458, "username": "sekisanchi", - "totalCosts": 350.47, + "totalCosts": 316.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" + }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 110.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] }, @@ -35531,19 +36213,19 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 2149.28, + "totalCosts": 1832.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { "id": 15389056, "username": "Koei", - "totalCosts": 332.29, + "totalCosts": 260.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15389056/medium/124c0cb2e15f16466dc7ff1ead583a07_default.png" }, { "id": 15310672, "username": "imacion", - "totalCosts": 199.98, + "totalCosts": 158.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15310672/medium/f5846b70445ecfa6c14c7ccc216c67d1_default.png" }, { @@ -35560,13 +36242,13 @@ { "id": 14880458, "username": "sekisanchi", - "totalCosts": 1123.12, + "totalCosts": 1103.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" }, { "id": 14103339, "username": "ryoji.imai", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14103339/medium/fc832d678cca1c9a43f019d8a819f41c.JPG" }, { @@ -35589,19 +36271,19 @@ { "id": 15680077, "username": "miyamo", - "totalCosts": 1462.48, + "totalCosts": 1066.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15680077/medium/a9db402339c4ac996a32133a844692ef_default.png" }, { "id": 15466100, "username": "ki-3", - "totalCosts": 85.85, + "totalCosts": 64.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15466100/medium/1b0592d23d47ff1700a1b5163323646c.png" }, { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 82.82, + "totalCosts": 55.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35707,7 +36389,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 184.83, + "totalCosts": 192.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -35783,7 +36465,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 2410.87, + "totalCosts": 2613.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36145,7 +36827,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1662.46, + "totalCosts": 1674.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36195,6 +36877,12 @@ "totalCosts": 213.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15468240/medium/4b9fcd0986c6b9732488ab90181beb8b_default.png" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 136.35, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 14931651, "username": "sinsinpurin", @@ -36206,12 +36894,6 @@ "username": "sekisanchi", "totalCosts": 88.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" - }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] }, @@ -36369,7 +37051,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 370.67, + "totalCosts": 376.73, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36428,7 +37110,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 137.36, + "totalCosts": 163.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36719,7 +37401,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 226.24, + "totalCosts": 223.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36771,7 +37453,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1098.88, + "totalCosts": 1099.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36835,7 +37517,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 752.45, + "totalCosts": 763.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36869,7 +37551,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 171.7, + "totalCosts": 213.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36944,7 +37626,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 104.03, + "totalCosts": 117.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -37081,18 +37763,18 @@ { "fileId": "2730", "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 95.95, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 14395884, "username": "Frodo821", "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14395884/medium/be6488d24fd9f5ff7ac7d461e6cd6758.jpeg" }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 84.84, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, { "id": 15427130, "username": "universay", @@ -37130,7 +37812,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 42.42, + "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -37270,7 +37952,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 762.55, + "totalCosts": 773.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -37310,7 +37992,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 2297.75, + "totalCosts": 2298.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -37391,7 +38073,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 111.1, + "totalCosts": 149.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -37600,7 +38282,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 5046.97, + "totalCosts": 5105.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -37698,13 +38380,13 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 238.36, + "totalCosts": 250.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { "id": 14771800, "username": "rtree", - "totalCosts": 79.79, + "totalCosts": 77.77, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14771800/medium/fcc638258ffaa6b7b7bb83e9f5d03d9e_default.png" }, { @@ -37837,7 +38519,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 458.54, + "totalCosts": 498.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -38462,7 +39144,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 193.92, + "totalCosts": 209.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -38945,7 +39627,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 196.95, + "totalCosts": 1393.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -38983,18 +39665,18 @@ { "fileId": "2684", "contributors": [ - { - "id": 14880458, - "username": "sekisanchi", - "totalCosts": 212.1, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" - }, { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 208.06, + "totalCosts": 226.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, + { + "id": 14880458, + "username": "sekisanchi", + "totalCosts": 181.8, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" + }, { "id": 14852734, "username": "0xEthDuzIt", @@ -39006,12 +39688,6 @@ "username": "nsugimoto", "totalCosts": 36.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242922/medium/80daa04f1516da24f438a0243036dd09_default.png" - }, - { - "id": 15405636, - "username": "Sy260", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15405636/medium/c2b1a26988c516da9e8e1e33f84ab427.jpeg" } ] }, @@ -39027,7 +39703,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 117.16, + "totalCosts": 133.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39053,18 +39729,18 @@ "totalCosts": 37.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14852734/medium/da1e9138c30b0fbcfd54f987a7e55328.jpg" }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 25.25, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, { "id": 14942697, "username": "cclefjp", "totalCosts": 12.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14942697/medium/f0b6f7427184742914c4e061e485ecf0.jpeg" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 11.11, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 14880458, "username": "sekisanchi", @@ -39108,7 +39784,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 108.07, + "totalCosts": 112.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39123,6 +39799,12 @@ "totalCosts": 38.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15135089/medium/ad0dde7b6943eb1bdc2b8c64223dd070.png" }, + { + "id": 16300540, + "username": "mariyuka777", + "totalCosts": 5.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16300540/medium/1c85cf834999c360b7c382ac1e65394f.jpeg" + }, { "id": 15190122, "username": "levelmiya", @@ -39137,15 +39819,21 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 380.77, + "totalCosts": 244.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { "id": 14103339, "username": "ryoji.imai", - "totalCosts": 236.34, + "totalCosts": 129.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14103339/medium/fc832d678cca1c9a43f019d8a819f41c.JPG" }, + { + "id": 16321818, + "username": "HayattiQ", + "totalCosts": 51.51, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16321818/medium/e3009e33cf1497fcb99f77970bb526b1.png" + }, { "id": 14708760, "username": "hypebeans", @@ -39236,7 +39924,7 @@ { "id": 14730036, "username": "shoyu", - "totalCosts": 1215.03, + "totalCosts": 1060.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14730036/medium/3f53daf0320c8412a99de867a0ca6d2c_default.png" }, { @@ -39265,7 +39953,7 @@ { "id": 14103339, "username": "ryoji.imai", - "totalCosts": 328.25, + "totalCosts": 274.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14103339/medium/fc832d678cca1c9a43f019d8a819f41c.JPG" }, { @@ -39288,21 +39976,15 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 887.79, + "totalCosts": 358.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { "id": 15365564, "username": "RYUKIYO", - "totalCosts": 153.52, + "totalCosts": 132.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15365564/medium/b13b00fd03f72f0205fdfb6c2a09115a.PNG" }, - { - "id": 15341508, - "username": "hesoponyo", - "totalCosts": 130.29, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15341508/medium/070055fd80d21a5f4b26e37dd49cd0d0.png" - }, { "id": 15378350, "username": "outlomaru", @@ -39310,10 +39992,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15378350/medium/f438c207621a284d4058cca58dba9e93.jpeg" }, { - "id": 15466100, - "username": "ki-3", - "totalCosts": 50.5, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15466100/medium/1b0592d23d47ff1700a1b5163323646c.png" + "id": 15341508, + "username": "hesoponyo", + "totalCosts": 56.56, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15341508/medium/070055fd80d21a5f4b26e37dd49cd0d0.png" }, { "id": 15372282, @@ -39321,6 +40003,12 @@ "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15372282/medium/9095b7d0b38ccc1928379b38afa0d479_default.png" }, + { + "id": 15466100, + "username": "ki-3", + "totalCosts": 21.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15466100/medium/1b0592d23d47ff1700a1b5163323646c.png" + }, { "id": 15680077, "username": "miyamo", @@ -39416,7 +40104,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1059.49, + "totalCosts": 1029.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39425,12 +40113,6 @@ "totalCosts": 86.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242922/medium/80daa04f1516da24f438a0243036dd09_default.png" }, - { - "id": 16274540, - "username": "Buyabuya", - "totalCosts": 22.22, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16274540/medium/fff14edb8869578304921016a436ab18.jpeg" - }, { "id": 15369914, "username": "Rt3mis10", @@ -39445,13 +40127,13 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 8678.93, + "totalCosts": 8677.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { "id": 15460936, "username": "tsukky", - "totalCosts": 8074.95, + "totalCosts": 8048.69, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" }, { @@ -39564,13 +40246,13 @@ { "id": 15680077, "username": "miyamo", - "totalCosts": 3186.55, + "totalCosts": 2607.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15680077/medium/a9db402339c4ac996a32133a844692ef_default.png" }, { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 24.24, + "totalCosts": 134.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -39642,7 +40324,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1416.02, + "totalCosts": 1433.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -39653,7 +40335,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1659.43, + "totalCosts": 1671.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39676,7 +40358,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 999.9, + "totalCosts": 1008.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39699,7 +40381,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 577.72, + "totalCosts": 583.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39716,7 +40398,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 2451.27, + "totalCosts": 2452.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -39738,7 +40420,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1130.19, + "totalCosts": 868.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -39777,13 +40459,13 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 538.33, + "totalCosts": 617.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { "id": 16274540, "username": "Buyabuya", - "totalCosts": 94.94, + "totalCosts": 71.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16274540/medium/fff14edb8869578304921016a436ab18.jpeg" } ] @@ -39805,7 +40487,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 852.44, + "totalCosts": 779.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -39816,7 +40498,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1712.96, + "totalCosts": 1733.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -39849,13 +40531,13 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1217.05, + "totalCosts": 1269.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { "id": 16274540, "username": "Buyabuya", - "totalCosts": 305.02, + "totalCosts": 232.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16274540/medium/fff14edb8869578304921016a436ab18.jpeg" } ] @@ -39900,7 +40582,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 9.09, + "totalCosts": 69.69, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -39955,7 +40637,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1490.76, + "totalCosts": 1489.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -40009,6 +40691,101 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] + }, + { + "fileId": "7995", + "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 1165.54, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + } + ] + }, + { + "fileId": "7627", + "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 1463.49, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + } + ] + }, + { + "fileId": "7999", + "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 5235.84, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, + { + "id": 14771800, + "username": "rtree", + "totalCosts": 90.9, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14771800/medium/fcc638258ffaa6b7b7bb83e9f5d03d9e_default.png" + } + ] + }, + { + "fileId": "3110", + "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 864.56, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + } + ] + }, + { + "fileId": "8035", + "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 536.31, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, + { + "id": 14103339, + "username": "ryoji.imai", + "totalCosts": 50.5, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14103339/medium/fc832d678cca1c9a43f019d8a819f41c.JPG" + } + ] + }, + { + "fileId": "7919", + "contributors": [ + { + "id": 14103339, + "username": "ryoji.imai", + "totalCosts": 1321.08, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14103339/medium/fc832d678cca1c9a43f019d8a819f41c.JPG" + } + ] + }, + { + "fileId": "7591", + "contributors": [ + { + "id": 15816407, + "username": "MaKOBA", + "totalCosts": 1798.81, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15816407/medium/2ff9249b122f6baedad4ebb9f1572c26_default.png" + }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 354.51, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + } + ] } ] }, @@ -40021,13 +40798,13 @@ { "id": 15430302, "username": "kwangtaekim", - "totalCosts": 1179.68, + "totalCosts": 1006.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15430302/medium/705b3a29a93430236982b318c9131fcf.png" }, { "id": 14261470, "username": "DHtheCreator", - "totalCosts": 276.74, + "totalCosts": 203.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14261470/medium/78d6d680bab6a88f1b8df92013bee804.jpg" }, { @@ -40047,23 +40824,17 @@ { "fileId": "5559", "contributors": [ - { - "id": 15530275, - "username": "emunwon", - "totalCosts": 407.03, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15530275/medium/116c0ade79ef3b6e615e1db568c016cf_default.png" - }, { "id": 15019927, "username": "Sewon", - "totalCosts": 346.43, + "totalCosts": 312.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15019927/medium/0ebf5c870c1c120a265fccba1a0d9d9a.png" }, { - "id": 14261470, - "username": "DHtheCreator", - "totalCosts": 13.13, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14261470/medium/78d6d680bab6a88f1b8df92013bee804.jpg" + "id": 15530275, + "username": "emunwon", + "totalCosts": 101, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15530275/medium/116c0ade79ef3b6e615e1db568c016cf_default.png" }, { "id": 15526929, @@ -40079,19 +40850,19 @@ { "id": 15430302, "username": "kwangtaekim", - "totalCosts": 1919, + "totalCosts": 1638.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15430302/medium/705b3a29a93430236982b318c9131fcf.png" }, { "id": 14261470, "username": "DHtheCreator", - "totalCosts": 1191.8, + "totalCosts": 1019.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14261470/medium/78d6d680bab6a88f1b8df92013bee804.jpg" }, { "id": 15105599, "username": "SaturnPiece", - "totalCosts": 603.98, + "totalCosts": 502.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15105599/medium/a3e031fc91bbbf728f3bb5dd384e8400_default.png" }, { @@ -40106,12 +40877,6 @@ "totalCosts": 16.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13471138/medium/2d75a021ff9aad863e9ea3435aa3c682_default.png" }, - { - "id": 13903009, - "username": "igntsh", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13903009/medium/04ae0d1fd930da54d2c40b2d5e37e31c.jpg" - }, { "id": 14362948, "username": "jcxmt125", @@ -40132,19 +40897,19 @@ { "id": 14984177, "username": "cokeeee", - "totalCosts": 2929, + "totalCosts": 2831.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14984177/medium/2a76634a36592a9de92fdc01dbbcc6de_default.png" }, { "id": 15105599, "username": "SaturnPiece", - "totalCosts": 2644.18, + "totalCosts": 2553.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15105599/medium/a3e031fc91bbbf728f3bb5dd384e8400_default.png" }, { "id": 13471138, "username": "linguist_won", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13471138/medium/2d75a021ff9aad863e9ea3435aa3c682_default.png" }, { @@ -40161,7 +40926,7 @@ { "id": 15442454, "username": "Im-SpiETH", - "totalCosts": 1580.65, + "totalCosts": 1163.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15442454/medium/860696ab89262fe98a0b888882d2b2da_default.png" }, { @@ -40265,19 +41030,19 @@ { "id": 13903009, "username": "igntsh", - "totalCosts": 399.96, + "totalCosts": 256.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13903009/medium/04ae0d1fd930da54d2c40b2d5e37e31c.jpg" }, { "id": 13471138, "username": "linguist_won", - "totalCosts": 239.37, + "totalCosts": 142.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13471138/medium/2d75a021ff9aad863e9ea3435aa3c682_default.png" }, { "id": 15732175, "username": "JunghooLee", - "totalCosts": 49.49, + "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15732175/medium/59654c2402b1a8304d9d760e74a57365_default.png" }, { @@ -40306,19 +41071,19 @@ { "id": 15430302, "username": "kwangtaekim", - "totalCosts": 988.79, + "totalCosts": 917.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15430302/medium/705b3a29a93430236982b318c9131fcf.png" }, { "id": 14261470, "username": "DHtheCreator", - "totalCosts": 293.91, + "totalCosts": 234.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14261470/medium/78d6d680bab6a88f1b8df92013bee804.jpg" }, { "id": 14362948, "username": "jcxmt125", - "totalCosts": 89.89, + "totalCosts": 66.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14362948/medium/2580e7c7dde93c784b42531a1b28a048.gif" } ] @@ -40329,7 +41094,7 @@ { "id": 13471138, "username": "linguist_won", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13471138/medium/2d75a021ff9aad863e9ea3435aa3c682_default.png" }, { @@ -40346,19 +41111,19 @@ { "id": 14261470, "username": "DHtheCreator", - "totalCosts": 647.41, + "totalCosts": 363.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14261470/medium/78d6d680bab6a88f1b8df92013bee804.jpg" }, { "id": 15430302, "username": "kwangtaekim", - "totalCosts": 371.68, + "totalCosts": 193.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15430302/medium/705b3a29a93430236982b318c9131fcf.png" }, { "id": 15234592, "username": "urunny", - "totalCosts": 355.52, + "totalCosts": 63.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15234592/medium/518f4895665a62a0fb8d864108f31dbe.png" } ] @@ -40480,7 +41245,7 @@ { "id": 15430302, "username": "kwangtaekim", - "totalCosts": 1314.01, + "totalCosts": 1265.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15430302/medium/705b3a29a93430236982b318c9131fcf.png" }, { @@ -40489,29 +41254,23 @@ "totalCosts": 225.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14261470/medium/78d6d680bab6a88f1b8df92013bee804.jpg" }, - { - "id": 15087917, - "username": "seoh", - "totalCosts": 202, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15087917/medium/436328b66c11b44622caf9b3de1c4ef0_default.png" - }, { "id": 15359410, "username": "solleedata", "totalCosts": 195.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15359410/medium/b897f779a55d906e95ccdfcf66e3763e.jpeg" }, + { + "id": 15087917, + "username": "seoh", + "totalCosts": 180.79, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15087917/medium/436328b66c11b44622caf9b3de1c4ef0_default.png" + }, { "id": 15422262, "username": "shinkimi0i8", "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15422262/medium/1b94741917b2d7b60be20b985ef0848d.png" - }, - { - "id": 13903009, - "username": "igntsh", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13903009/medium/04ae0d1fd930da54d2c40b2d5e37e31c.jpg" } ] }, @@ -40521,7 +41280,7 @@ { "id": 15430302, "username": "kwangtaekim", - "totalCosts": 13614.8, + "totalCosts": 13588.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15430302/medium/705b3a29a93430236982b318c9131fcf.png" }, { @@ -40574,7 +41333,7 @@ { "id": 13471138, "username": "linguist_won", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13471138/medium/2d75a021ff9aad863e9ea3435aa3c682_default.png" }, { @@ -40697,7 +41456,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 440.36, + "totalCosts": 432.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40725,7 +41484,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 355.52, + "totalCosts": 339.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40747,7 +41506,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 577.72, + "totalCosts": 510.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40758,7 +41517,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 817.09, + "totalCosts": 421.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40769,7 +41528,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 2165.44, + "totalCosts": 1863.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40780,7 +41539,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 3141.1, + "totalCosts": 3022.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40824,13 +41583,13 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 170.69, + "totalCosts": 124.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" }, { "id": 15958911, "username": "charlaiz", - "totalCosts": 124.23, + "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15958911/medium/8f11adb77af544d9fd33ec842e035832_default.png" }, { @@ -40905,7 +41664,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 1365.52, + "totalCosts": 1210.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40916,7 +41675,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 380.77, + "totalCosts": 327.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40927,7 +41686,7 @@ { "id": 15084373, "username": "tarcanhursit", - "totalCosts": 1332.19, + "totalCosts": 627.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15084373/medium/63831adb2cf079020b094666d47417fd.jpg" } ] @@ -40971,13 +41730,13 @@ { "id": 15750423, "username": "less_explorer", - "totalCosts": 949.4, + "totalCosts": 586.81, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15750423/medium/44085a2751d1f337f4e4aee5459b2ccf.jpg" }, { "id": 15958911, "username": "charlaiz", - "totalCosts": 425.21, + "totalCosts": 370.67, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15958911/medium/8f11adb77af544d9fd33ec842e035832_default.png" }, { @@ -40994,7 +41753,7 @@ { "id": 15958911, "username": "charlaiz", - "totalCosts": 1161.5, + "totalCosts": 550.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15958911/medium/8f11adb77af544d9fd33ec842e035832_default.png" }, { @@ -41042,24 +41801,24 @@ { "fileId": "5559", "contributors": [ - { - "id": 15771025, - "username": "Andrzej1072", - "totalCosts": 617.11, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15771025/medium/e70215b910c59f0fa39516bbbe11c35d.png" - }, { "id": 15654629, "username": "Arek14482307", - "totalCosts": 351.48, + "totalCosts": 209.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15654629/medium/c970a4e9c8e664fff4f5d188168d1eb3.jpg" }, { "id": 15567317, "username": "Aarona", - "totalCosts": 257.55, + "totalCosts": 206.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15567317/medium/4d6c3c25d6fff43f7e795643d2e0e632.jpg" }, + { + "id": 15771025, + "username": "Andrzej1072", + "totalCosts": 113.12, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15771025/medium/e70215b910c59f0fa39516bbbe11c35d.png" + }, { "id": 15293804, "username": "Morpheus1024", @@ -41080,19 +41839,19 @@ { "id": 15771025, "username": "Andrzej1072", - "totalCosts": 2064.44, + "totalCosts": 1782.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15771025/medium/e70215b910c59f0fa39516bbbe11c35d.png" }, { "id": 15894449, "username": "wosek_", - "totalCosts": 174.73, + "totalCosts": 124.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { "id": 15654629, "username": "Arek14482307", - "totalCosts": 78.78, + "totalCosts": 58.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15654629/medium/c970a4e9c8e664fff4f5d188168d1eb3.jpg" }, { @@ -41109,19 +41868,19 @@ { "id": 15362632, "username": "CryptoWildBtc", - "totalCosts": 2147.26, + "totalCosts": 2049.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15362632/medium/cbd351cf5cf5bbe87d3006c188391b01.png" }, { "id": 15771025, "username": "Andrzej1072", - "totalCosts": 822.14, + "totalCosts": 799.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15771025/medium/e70215b910c59f0fa39516bbbe11c35d.png" }, { "id": 15894449, "username": "wosek_", - "totalCosts": 154.53, + "totalCosts": 134.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -41138,13 +41897,13 @@ { "id": 15771025, "username": "Andrzej1072", - "totalCosts": 1575.6, + "totalCosts": 1158.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15771025/medium/e70215b910c59f0fa39516bbbe11c35d.png" }, { "id": 15894449, "username": "wosek_", - "totalCosts": 88.88, + "totalCosts": 61.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" } ] @@ -42018,7 +42777,7 @@ { "id": 14775946, "username": "Beas", - "totalCosts": 391.88, + "totalCosts": 389.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14775946/medium/22ad4db44fa2f657ec257775cddc899c.jpg" }, { @@ -42492,14 +43251,8 @@ { "id": 14775946, "username": "Beas", - "totalCosts": 284.82, + "totalCosts": 254.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14775946/medium/22ad4db44fa2f657ec257775cddc899c.jpg" - }, - { - "id": 15894449, - "username": "wosek_", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" } ] }, @@ -42537,13 +43290,13 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 1293.81, + "totalCosts": 1292.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { "id": 15284800, "username": "msliwinski123", - "totalCosts": 384.81, + "totalCosts": 383.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284800/medium/a5707bdd7287b30379bd9c3cb122ef9b.png" }, { @@ -42566,7 +43319,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 787.8, + "totalCosts": 475.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -42683,7 +43436,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 406.02, + "totalCosts": 336.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -42700,13 +43453,13 @@ { "id": 15381630, "username": "p_gwizdak", - "totalCosts": 1026.16, + "totalCosts": 441.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381630/medium/419ca8faf5b651c0ab7f7123a3a4fd95.jpeg" }, { "id": 15771025, "username": "Andrzej1072", - "totalCosts": 200.99, + "totalCosts": 78.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15771025/medium/e70215b910c59f0fa39516bbbe11c35d.png" } ] @@ -42746,13 +43499,13 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 1239.27, + "totalCosts": 1008.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { "id": 15364756, "username": "bellasob", - "totalCosts": 284.82, + "totalCosts": 211.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15364756/medium/7fcfefb61008e61669ea2fde377683cb_default.png" }, { @@ -42797,7 +43550,7 @@ { "id": 14933675, "username": "JuliannaMlynarska", - "totalCosts": 143.42, + "totalCosts": 135.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14933675/medium/0a154caf851ba66ad323ab1b30379663.jpg" }, { @@ -42837,7 +43590,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 734.27, + "totalCosts": 718.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -42882,19 +43635,19 @@ { "id": 15284800, "username": "msliwinski123", - "totalCosts": 564.59, + "totalCosts": 498.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15284800/medium/a5707bdd7287b30379bd9c3cb122ef9b.png" }, { "id": 15894449, "username": "wosek_", - "totalCosts": 226.24, + "totalCosts": 178.77, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { "id": 14113969, "username": "mbiesiad", - "totalCosts": 3.03, + "totalCosts": 1.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14113969/medium/71ce960729f39fa1a2a0f23b48b8d8fe.png" } ] @@ -42945,7 +43698,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 907.99, + "totalCosts": 848.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -42979,7 +43732,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" } ] @@ -43035,7 +43788,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 1194.83, + "totalCosts": 583.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" } ] @@ -43046,7 +43799,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 2348.25, + "totalCosts": 2146.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -43119,7 +43872,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 1611.96, + "totalCosts": 1548.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -43136,7 +43889,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 3186.55, + "totalCosts": 2607.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -43153,7 +43906,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" } ] @@ -43239,13 +43992,13 @@ { "id": 15363256, "username": "keyla88", - "totalCosts": 860.52, + "totalCosts": 708.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363256/medium/ec0ae3c1332b4c006ba843c9969716f5.png" }, { "id": 15226778, "username": "paulogio", - "totalCosts": 415.11, + "totalCosts": 335.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226778/medium/1bed9c865119e5246c9ac5cc55851dae_default.png" }, { @@ -43279,7 +44032,7 @@ { "id": 14702518, "username": "Byrde", - "totalCosts": 346.43, + "totalCosts": 338.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14702518/medium/cc9b682031319fe073d73822ee71f11a_default.png" }, { @@ -43361,7 +44114,7 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 69.69, + "totalCosts": 53.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { @@ -43407,19 +44160,19 @@ { "id": 15116197, "username": "marciob", - "totalCosts": 410.06, + "totalCosts": 367.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15116197/medium/defe31fc631358c105140f44b22e84f7.png" }, { "id": 13986387, "username": "rafarocha", - "totalCosts": 117.16, + "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { "id": 15114963, "username": "tiagoyonamine.eth", - "totalCosts": 35.35, + "totalCosts": 32.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15114963/medium/b9c830466fee03c6d68be46beacfdd16_default.png" }, { @@ -43612,7 +44365,7 @@ { "id": 15121067, "username": "DiegoCabral", - "totalCosts": 30.3, + "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15121067/medium/7622a32578aec0440b8e01743f23435f.png" }, { @@ -43788,18 +44541,18 @@ { "fileId": "5559", "contributors": [ - { - "id": 13986387, - "username": "rafarocha", - "totalCosts": 488.84, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" - }, { "id": 14957477, "username": "asdcBRA", - "totalCosts": 348.45, + "totalCosts": 314.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14957477/medium/4731034c4ad881ab8ce76389b7952162.jpeg" }, + { + "id": 13986387, + "username": "rafarocha", + "totalCosts": 108.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" + }, { "id": 15373000, "username": "Fradique", @@ -43814,26 +44567,26 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 2107.87, + "totalCosts": 1805.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { "id": 15454064, "username": "thormiranda", - "totalCosts": 520.15, + "totalCosts": 457.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15454064/medium/9a469555fbc3d3c781b12b438d7f0211_default.png" }, - { - "id": 15422032, - "username": "Fritzhoy", - "totalCosts": 71.71, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15422032/medium/a2df65c9d9309dec39402a0175f3a57f.png" - }, { "id": 15317682, "username": "junowoz", "totalCosts": 63.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15317682/medium/81940bf015f6f858cb88c0363d135cfa.jpeg" + }, + { + "id": 15422032, + "username": "Fritzhoy", + "totalCosts": 56.56, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15422032/medium/a2df65c9d9309dec39402a0175f3a57f.png" } ] }, @@ -43843,7 +44596,7 @@ { "id": 14957477, "username": "asdcBRA", - "totalCosts": 1105.95, + "totalCosts": 1086.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14957477/medium/4731034c4ad881ab8ce76389b7952162.jpeg" }, { @@ -43855,7 +44608,7 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { @@ -43878,13 +44631,13 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 1007.98, + "totalCosts": 835.27, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { "id": 15515516, "username": "MCreimer", - "totalCosts": 609.03, + "totalCosts": 334.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" } ] @@ -44245,7 +44998,7 @@ { "id": 15724803, "username": "Izabel_chaves", - "totalCosts": 588.83, + "totalCosts": 611.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15724803/medium/7f2b4419d308a52a62f3b8f9ca9b4adf.jpg" }, { @@ -44898,7 +45651,7 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 591.86, + "totalCosts": 587.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { @@ -45123,7 +45876,7 @@ { "id": 16099664, "username": "yanvictorsn", - "totalCosts": 13.13, + "totalCosts": 10.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16099664/medium/0be252ecf72e8e4d5021a63cd4ad3353.png" } ] @@ -45173,7 +45926,7 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 512.07, + "totalCosts": 493.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { @@ -45214,7 +45967,7 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 1490.76, + "totalCosts": 1471.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" } ] @@ -45283,7 +46036,7 @@ { "id": 15435992, "username": "italosantana", - "totalCosts": 148.47, + "totalCosts": 129.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15435992/medium/61afc2a3a2417f17a118fea970030cbf.jpeg" }, { @@ -45910,7 +46663,7 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 3989.5, + "totalCosts": 3943.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { @@ -45922,7 +46675,7 @@ { "id": 15435992, "username": "italosantana", - "totalCosts": 394.91, + "totalCosts": 368.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15435992/medium/61afc2a3a2417f17a118fea970030cbf.jpeg" }, { @@ -46625,12 +47378,6 @@ "username": "rafarocha", "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" - }, - { - "id": 15317682, - "username": "junowoz", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15317682/medium/81940bf015f6f858cb88c0363d135cfa.jpeg" } ] }, @@ -46715,7 +47462,7 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 483.79, + "totalCosts": 387.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { @@ -46723,6 +47470,12 @@ "username": "rafarocha", "totalCosts": 48.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" + }, + { + "id": 15822529, + "username": "joacirferrarezi", + "totalCosts": 11.11, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15822529/medium/2cfb3489e56881807de1d3ce9406cfa3.jpeg" } ] }, @@ -46732,7 +47485,7 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 230.28, + "totalCosts": 194.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { @@ -46877,21 +47630,21 @@ { "id": 15422032, "username": "Fritzhoy", - "totalCosts": 303, + "totalCosts": 222.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15422032/medium/a2df65c9d9309dec39402a0175f3a57f.png" }, - { - "id": 16099664, - "username": "yanvictorsn", - "totalCosts": 245.43, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16099664/medium/0be252ecf72e8e4d5021a63cd4ad3353.png" - }, { "id": 15515516, "username": "MCreimer", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, + { + "id": 16099664, + "username": "yanvictorsn", + "totalCosts": 109.08, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16099664/medium/0be252ecf72e8e4d5021a63cd4ad3353.png" + }, { "id": 14957477, "username": "asdcBRA", @@ -47077,21 +47830,21 @@ { "id": 13855929, "username": "gabriel.silva", - "totalCosts": 603.98, + "totalCosts": 506.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13855929/medium/51d997bd43d246da34052b5cab702f56.jpg" }, - { - "id": 15121067, - "username": "DiegoCabral", - "totalCosts": 223.21, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15121067/medium/7622a32578aec0440b8e01743f23435f.png" - }, { "id": 15114963, "username": "tiagoyonamine.eth", - "totalCosts": 222.2, + "totalCosts": 203.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15114963/medium/b9c830466fee03c6d68be46beacfdd16_default.png" }, + { + "id": 15121067, + "username": "DiegoCabral", + "totalCosts": 185.84, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15121067/medium/7622a32578aec0440b8e01743f23435f.png" + }, { "id": 15119565, "username": "leandroauzier", @@ -47136,7 +47889,7 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { @@ -47159,27 +47912,27 @@ { "id": 15226778, "username": "paulogio", - "totalCosts": 1086.76, + "totalCosts": 484.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226778/medium/1bed9c865119e5246c9ac5cc55851dae_default.png" }, { "id": 13986387, "username": "rafarocha", - "totalCosts": 136.35, + "totalCosts": 62.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, - { - "id": 15515516, - "username": "MCreimer", - "totalCosts": 70.7, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" - }, { "id": 14668114, "username": "ttinho", "totalCosts": 42.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14668114/medium/abb6c5088e9fedee0db9d42e5079b776.jpeg" }, + { + "id": 15515516, + "username": "MCreimer", + "totalCosts": 41.41, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" + }, { "id": 15370734, "username": "Vinegario", @@ -47358,13 +48111,13 @@ { "id": 15245586, "username": "s3ttings", - "totalCosts": 444.4, + "totalCosts": 432.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15245586/medium/255e604fc64ada6f55a802ea9de2204a_default.png" }, { "id": 13986387, "username": "rafarocha", - "totalCosts": 405.01, + "totalCosts": 371.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { @@ -47393,7 +48146,7 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 9191, + "totalCosts": 9164.74, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { @@ -47476,13 +48229,13 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 2238.16, + "totalCosts": 1684.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { "id": 13986387, "username": "rafarocha", - "totalCosts": 961.52, + "totalCosts": 936.27, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" } ] @@ -47538,7 +48291,7 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 590.85, + "totalCosts": 531.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { @@ -47578,7 +48331,7 @@ { "id": 15515516, "username": "MCreimer", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15515516/medium/cad56d6fa7c03af94b18ead23e791019.png" }, { @@ -47595,13 +48348,13 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 2207.86, + "totalCosts": 2095.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { "id": 15836847, "username": "k77", - "totalCosts": 208.06, + "totalCosts": 137.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15836847/medium/a83e58c4be6c8ef96bda97967d4703cd.png" }, { @@ -47624,7 +48377,7 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 353.5, + "totalCosts": 337.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { @@ -47641,7 +48394,7 @@ { "id": 15350616, "username": "Carlos_Silva", - "totalCosts": 493.89, + "totalCosts": 380.77, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15350616/medium/d1c4c996fc6985d2df9db6d157e17356.png" } ] @@ -47652,7 +48405,7 @@ { "id": 15350616, "username": "Carlos_Silva", - "totalCosts": 1087.77, + "totalCosts": 739.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15350616/medium/d1c4c996fc6985d2df9db6d157e17356.png" }, { @@ -47686,13 +48439,13 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 358.55, + "totalCosts": 274.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, { "id": 14573604, "username": "bceschini", - "totalCosts": 240.38, + "totalCosts": 223.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14573604/medium/e07f0a64aea775f906b999491ca671d9.jpeg" } ] @@ -47720,7 +48473,7 @@ { "id": 15350616, "username": "Carlos_Silva", - "totalCosts": 850.42, + "totalCosts": 519.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15350616/medium/d1c4c996fc6985d2df9db6d157e17356.png" } ] @@ -47765,7 +48518,7 @@ { "id": 15350616, "username": "Carlos_Silva", - "totalCosts": 517.12, + "totalCosts": 420.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15350616/medium/d1c4c996fc6985d2df9db6d157e17356.png" }, { @@ -47773,12 +48526,6 @@ "username": "gabekoin", "totalCosts": 52.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837087/medium/198e2d3ce88fd597d2f6a39fcc40964a.png" - }, - { - "id": 13986387, - "username": "rafarocha", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" } ] }, @@ -47851,7 +48598,7 @@ { "id": 13986387, "username": "rafarocha", - "totalCosts": 668.62, + "totalCosts": 636.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" } ] @@ -48864,7 +49611,7 @@ { "id": 14087195, "username": "nicklcanada", - "totalCosts": 343.4, + "totalCosts": 335.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14087195/medium/810aea3ef8ba145e88db17a73c95a4b8_default.png" } ] @@ -48903,7 +49650,7 @@ { "id": 14087195, "username": "nicklcanada", - "totalCosts": 445.41, + "totalCosts": 399.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14087195/medium/810aea3ef8ba145e88db17a73c95a4b8_default.png" } ] @@ -48914,13 +49661,13 @@ { "id": 12804952, "username": "imgelu", - "totalCosts": 348.45, + "totalCosts": 314.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12804952/medium/59d5d165d5b422c57908e7797d3b83ee.jpg" }, { "id": 14087195, "username": "nicklcanada", - "totalCosts": 142.41, + "totalCosts": 123.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14087195/medium/810aea3ef8ba145e88db17a73c95a4b8_default.png" } ] @@ -48931,7 +49678,7 @@ { "id": 14087195, "username": "nicklcanada", - "totalCosts": 1157.46, + "totalCosts": 1138.27, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14087195/medium/810aea3ef8ba145e88db17a73c95a4b8_default.png" }, { @@ -49700,7 +50447,7 @@ { "id": 14087195, "username": "nicklcanada", - "totalCosts": 456.52, + "totalCosts": 454.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14087195/medium/810aea3ef8ba145e88db17a73c95a4b8_default.png" } ] @@ -50294,7 +51041,7 @@ { "id": 14087195, "username": "nicklcanada", - "totalCosts": 268.66, + "totalCosts": 238.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14087195/medium/810aea3ef8ba145e88db17a73c95a4b8_default.png" } ] @@ -50355,7 +51102,7 @@ { "id": 16043932, "username": "Randometer888", - "totalCosts": 291.89, + "totalCosts": 160.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16043932/medium/4d5c371be41ad26794fd7fd0b8e27caa.jpg" }, { @@ -50400,7 +51147,7 @@ { "id": 14087195, "username": "nicklcanada", - "totalCosts": 1307.95, + "totalCosts": 1153.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14087195/medium/810aea3ef8ba145e88db17a73c95a4b8_default.png" } ] @@ -50441,6 +51188,12 @@ "username": "Web3Optimist", "totalCosts": 10.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15180476/medium/fa755545699706b04adffbbf93171d07_default.png" + }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] }, @@ -50456,7 +51209,7 @@ { "id": 14838604, "username": "lieolik", - "totalCosts": 101, + "totalCosts": 92.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14838604/medium/5efefdeaddfaef83a920a9d228b46686_default.png" }, { @@ -50535,6 +51288,12 @@ "username": "andrejklim480", "totalCosts": 6.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15214262/medium/5727db09ace3c2d258ba36991ad941ea.jpg" + }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 5.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] }, @@ -50544,7 +51303,7 @@ { "id": 14514124, "username": "ViktorOn", - "totalCosts": 386.83, + "totalCosts": 370.67, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, { @@ -50584,7 +51343,7 @@ { "id": 14514124, "username": "ViktorOn", - "totalCosts": 528.23, + "totalCosts": 460.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, { @@ -50599,47 +51358,41 @@ "fileId": "5559", "contributors": [ { - "id": 15521726, - "username": "ElinaAndreeva", - "totalCosts": 435.31, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15521726/medium/bfd305a9593e5b23d597076e33d40ba8_default.png" + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 293.91, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { "id": 14514124, "username": "ViktorOn", - "totalCosts": 233.31, + "totalCosts": 198.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, { "id": 14992815, "username": "Radiovolna86", - "totalCosts": 174.73, + "totalCosts": 155.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14992815/medium/20c87b586824be63314a44715a0dab58_default.png" }, + { + "id": 15521726, + "username": "ElinaAndreeva", + "totalCosts": 108.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15521726/medium/bfd305a9593e5b23d597076e33d40ba8_default.png" + }, { "id": 14964581, "username": "Pric", "totalCosts": 24.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14964581/medium/a04961d4b10cd4c038b867aa2e9cf5af_default.png" }, - { - "id": 15619839, - "username": "mediaquest", - "totalCosts": 18.18, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15619839/medium/99c14ce4e8161f6b077fa0849ac4c5b0.png" - }, { "id": 15548309, "username": "JarkynS", "totalCosts": 18.18, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15548309/medium/d157b175a84bf3a1701b50847b733a82.png" }, - { - "id": 15509510, - "username": "shikkiy", - "totalCosts": 12.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15509510/medium/04d6afce57425f67a3a25630fa08441c_default.png" - }, { "id": 15052049, "username": "Conti", @@ -50654,7 +51407,7 @@ { "id": 14514124, "username": "ViktorOn", - "totalCosts": 580.75, + "totalCosts": 561.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, { @@ -50672,9 +51425,15 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 123.22, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 14978593, "username": "Vuichka", @@ -51113,7 +51872,7 @@ { "id": 15966973, "username": "omsify", - "totalCosts": 123.22, + "totalCosts": 122.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966973/medium/8f0d37e232177100b09297d6f095fbfa_default.png" } ] @@ -51124,7 +51883,7 @@ { "id": 15947515, "username": "blockson", - "totalCosts": 860.52, + "totalCosts": 856.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947515/medium/52b0b3490fcf6940d9027ef2f32a424b.jpeg" }, { @@ -51133,18 +51892,18 @@ "totalCosts": 74.74, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, - { - "id": 15763855, - "username": "dovbyshbgd", - "totalCosts": 32.32, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" - }, { "id": 14744448, "username": "yani4ek", "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14744448/medium/487500a62601bab3eaaef4a7d2cc0b57.jpeg" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 28.28, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 14884558, "username": "Ethereum.org_Discord-Nuble", @@ -51264,7 +52023,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 176.75, + "totalCosts": 173.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -51631,27 +52390,33 @@ "fileId": "5565", "contributors": [ { - "id": 15966943, - "username": "yulkor", - "totalCosts": 230.28, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966943/medium/0d340104d53d3ff4df1c7c2412e8c86e_default.png" + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 444.4, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { "id": 16276134, "username": "Vorosha", - "totalCosts": 211.09, + "totalCosts": 144.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16276134/medium/35e076208e5ad5652df5e78fbfaaf364_default.png" }, + { + "id": 15966943, + "username": "yulkor", + "totalCosts": 114.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966943/medium/0d340104d53d3ff4df1c7c2412e8c86e_default.png" + }, { "id": 15720271, "username": "storming_heaven", - "totalCosts": 106.05, + "totalCosts": 72.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15720271/medium/8af1a5867d08e0a56b993cc13a0cd15f.png" }, { "id": 16090810, "username": "ShurikSl", - "totalCosts": 59.59, + "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16090810/medium/a6a5fe430bb0c6c3cfd998766d016a8a.jpg" }, { @@ -51678,12 +52443,6 @@ "totalCosts": 6.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15012463/medium/273b72d2d1ca27c9f8a7bc8cd0099501_default.png" }, - { - "id": 15763855, - "username": "dovbyshbgd", - "totalCosts": 4.04, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" - }, { "id": 15214262, "username": "andrejklim480", @@ -51695,6 +52454,12 @@ "username": "Pric", "totalCosts": 3.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14964581/medium/a04961d4b10cd4c038b867aa2e9cf5af_default.png" + }, + { + "id": 16191898, + "username": "orlovvladlen26", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16191898/medium/11b416e09078321ecd698a91bd9090b5.png" } ] }, @@ -51804,20 +52569,26 @@ { "id": 14514124, "username": "ViktorOn", - "totalCosts": 1154.43, + "totalCosts": 1045.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, + { + "id": 15967233, + "username": "jasminesprout", + "totalCosts": 147.46, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" + }, { "id": 15111557, "username": "m3dynx", - "totalCosts": 184.83, + "totalCosts": 139.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15111557/medium/70dc16e7cea9f20309a29b504cbfd89e.jpeg" }, { - "id": 15967233, - "username": "jasminesprout", - "totalCosts": 168.67, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 82.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { "id": 14843078, @@ -51833,7 +52604,7 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { @@ -51868,26 +52639,26 @@ { "id": 15206754, "username": "nixorn", - "totalCosts": 720.13, + "totalCosts": 708.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15206754/medium/1f6bb058858c9608582b83fe050bdf67.jpeg" }, { "id": 14514124, "username": "ViktorOn", - "totalCosts": 291.89, + "totalCosts": 282.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, { "id": 15199956, "username": "zhooookova", - "totalCosts": 281.79, + "totalCosts": 263.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15199956/medium/74aea56a748b12af52448b2ecf7ca2ac.png" }, { - "id": 15966973, - "username": "omsify", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966973/medium/8f0d37e232177100b09297d6f095fbfa_default.png" + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 34.34, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { "id": 15214436, @@ -51903,13 +52674,19 @@ { "id": 15619839, "username": "mediaquest", - "totalCosts": 1762.45, + "totalCosts": 1484.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15619839/medium/99c14ce4e8161f6b077fa0849ac4c5b0.png" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 262.6, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 13129936, "username": "ilya_artamonov", - "totalCosts": 176.75, + "totalCosts": 156.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13129936/medium/a467c1b30c243fefedf42570d1373b5e.jpeg" }, { @@ -51927,7 +52704,7 @@ { "id": 15469152, "username": "Prikolota_Michael", - "totalCosts": 17.17, + "totalCosts": 13.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15469152/medium/0e91415ae161c5baef1379edbe8252ed.jpeg" }, { @@ -51962,19 +52739,25 @@ { "id": 15566151, "username": "AlexanderSh", - "totalCosts": 1137.26, + "totalCosts": 942.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15566151/medium/2044a8dd6ae21fc4f7d8a8dad0190230_default.png" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 459.55, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 15619839, "username": "mediaquest", - "totalCosts": 249.47, + "totalCosts": 170.69, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15619839/medium/99c14ce4e8161f6b077fa0849ac4c5b0.png" }, { "id": 15826117, "username": "tamanecvl", - "totalCosts": 180.79, + "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15826117/medium/b4c4234e5560974ba82b07fd97b6ce02_default.png" }, { @@ -51988,12 +52771,6 @@ "username": "federallbot", "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15766779/medium/ded723a6c5df9af88e9b552850577ef4.jpeg" - }, - { - "id": 15763855, - "username": "dovbyshbgd", - "totalCosts": 2.02, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] }, @@ -52003,7 +52780,7 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 555.5, + "totalCosts": 495.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { @@ -52020,13 +52797,13 @@ { "id": 15766053, "username": "solomonton", - "totalCosts": 489.85, + "totalCosts": 393.9, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15766053/medium/0906a453f0998a2324711163ac2f587c.png" }, { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 85.85, + "totalCosts": 48.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52043,7 +52820,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 281.79, + "totalCosts": 263.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52111,7 +52888,7 @@ { "id": 15427134, "username": "vvladd", - "totalCosts": 917.08, + "totalCosts": 349.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15427134/medium/fb0663c86db786f43ab92df49583ad92.jpeg" }, { @@ -52120,12 +52897,6 @@ "totalCosts": 117.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14514124/medium/fa0297b182b72fbcf006daba457ef1a3.png" }, - { - "id": 15619839, - "username": "mediaquest", - "totalCosts": 61.61, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15619839/medium/99c14ce4e8161f6b077fa0849ac4c5b0.png" - }, { "id": 15654389, "username": "kilogram", @@ -52133,10 +52904,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15654389/medium/a9abecaef87909ad7189063772ce0648.png" }, { - "id": 13076915, - "username": "densmirnov", - "totalCosts": 26.26, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13076915/medium/9b9a89f8d259c922f29cd00540a7e055.jpeg" + "id": 15619839, + "username": "mediaquest", + "totalCosts": 24.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15619839/medium/99c14ce4e8161f6b077fa0849ac4c5b0.png" }, { "id": 15724073, @@ -52169,49 +52940,55 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" + }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 29.29, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] }, { "fileId": "7320", "contributors": [ - { - "id": 15619839, - "username": "mediaquest", - "totalCosts": 584.79, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15619839/medium/99c14ce4e8161f6b077fa0849ac4c5b0.png" - }, { "id": 15967233, "username": "jasminesprout", - "totalCosts": 570.65, + "totalCosts": 492.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, + { + "id": 15619839, + "username": "mediaquest", + "totalCosts": 474.7, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15619839/medium/99c14ce4e8161f6b077fa0849ac4c5b0.png" + }, { "id": 14492630, "username": "freonesuka", - "totalCosts": 141.4, + "totalCosts": 80.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14492630/medium/0feb2d78f45cfdcb6f92f5061ffc44e8.jpg" }, { "id": 15509510, "username": "shikkiy", - "totalCosts": 77.77, + "totalCosts": 61.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15509510/medium/04d6afce57425f67a3a25630fa08441c_default.png" }, - { - "id": 15966973, - "username": "omsify", - "totalCosts": 12.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966973/medium/8f0d37e232177100b09297d6f095fbfa_default.png" - }, { "id": 15912649, "username": "tnnnnnnnn2", "totalCosts": 10.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15912649/medium/6e4c7a7de3ed6449814e0c7de673dc30.png" + }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 7.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] }, @@ -52268,7 +53045,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 180.79, + "totalCosts": 208.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52403,7 +53180,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 58.58, + "totalCosts": 124.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52420,7 +53197,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 3178.47, + "totalCosts": 2629.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52471,27 +53248,27 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 1403.9, + "totalCosts": 1375.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { "id": 15937895, "username": "41rjordan", - "totalCosts": 985.76, + "totalCosts": 831.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15937895/medium/8143dc058a68dfcaae5de7dd8ba963bf.png" }, - { - "id": 15763855, - "username": "dovbyshbgd", - "totalCosts": 35.35, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" - }, { "id": 15966943, "username": "yulkor", "totalCosts": 29.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966943/medium/0d340104d53d3ff4df1c7c2412e8c86e_default.png" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 21.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 15880209, "username": "malovushka", @@ -52506,13 +53283,13 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 1061.51, + "totalCosts": 1045.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 925.16, + "totalCosts": 909, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52529,13 +53306,13 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 389.86, + "totalCosts": 292.9, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { "id": 15966943, "username": "yulkor", - "totalCosts": 103.02, + "totalCosts": 86.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966943/medium/0d340104d53d3ff4df1c7c2412e8c86e_default.png" } ] @@ -52546,19 +53323,19 @@ { "id": 15966943, "username": "yulkor", - "totalCosts": 530.25, + "totalCosts": 361.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966943/medium/0d340104d53d3ff4df1c7c2412e8c86e_default.png" }, { "id": 15947515, "username": "blockson", - "totalCosts": 348.45, + "totalCosts": 190.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947515/medium/52b0b3490fcf6940d9027ef2f32a424b.jpeg" }, { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 286.84, + "totalCosts": 187.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52609,7 +53386,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 539.34, + "totalCosts": 438.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] @@ -52637,21 +53414,21 @@ { "id": 15966973, "username": "omsify", - "totalCosts": 351.48, + "totalCosts": 308.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966973/medium/8f0d37e232177100b09297d6f095fbfa_default.png" }, - { - "id": 15967233, - "username": "jasminesprout", - "totalCosts": 270.68, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" - }, { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 238.36, + "totalCosts": 107.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, + { + "id": 15967233, + "username": "jasminesprout", + "totalCosts": 70.7, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" + }, { "id": 15947515, "username": "blockson", @@ -52700,13 +53477,13 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 518.13, + "totalCosts": 416.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { "id": 15966943, "username": "yulkor", - "totalCosts": 233.31, + "totalCosts": 193.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966943/medium/0d340104d53d3ff4df1c7c2412e8c86e_default.png" } ] @@ -52801,13 +53578,13 @@ { "id": 14977831, "username": "PeterKecman", - "totalCosts": 349.46, + "totalCosts": 315.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14977831/medium/e1e3f150ce524a6cb88fccb8b4f52422.png" }, { "id": 15967341, "username": "lukakovacica", - "totalCosts": 46.46, + "totalCosts": 25.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967341/medium/1f73cbf1251ef7926042a12fcf6e6827.png" } ] @@ -52818,7 +53595,7 @@ { "id": 14977831, "username": "PeterKecman", - "totalCosts": 1146.35, + "totalCosts": 1127.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14977831/medium/e1e3f150ce524a6cb88fccb8b4f52422.png" }, { @@ -52942,7 +53719,7 @@ { "id": 14977831, "username": "PeterKecman", - "totalCosts": 301.99, + "totalCosts": 299.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14977831/medium/e1e3f150ce524a6cb88fccb8b4f52422.png" } ] @@ -53008,7 +53785,7 @@ { "id": 15967341, "username": "lukakovacica", - "totalCosts": 215.13, + "totalCosts": 121.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967341/medium/1f73cbf1251ef7926042a12fcf6e6827.png" }, { @@ -53056,7 +53833,7 @@ { "id": 14957177, "username": "joeurassa", - "totalCosts": 414.1, + "totalCosts": 406.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14957177/medium/8323f79a3f73f2e723da72db082c0c22.jpg" } ] @@ -53099,7 +53876,7 @@ { "id": 14957177, "username": "joeurassa", - "totalCosts": 502.98, + "totalCosts": 457.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14957177/medium/8323f79a3f73f2e723da72db082c0c22.jpg" } ] @@ -53161,7 +53938,7 @@ { "id": 15961053, "username": "MK10", - "totalCosts": 212.1, + "totalCosts": 115.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15961053/medium/432a1dbe56da10837b16cb865303c70b_default.png" }, { @@ -53229,7 +54006,7 @@ { "id": 14996861, "username": "kaanmetu", - "totalCosts": 318.15, + "totalCosts": 310.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" }, { @@ -53305,7 +54082,7 @@ { "id": 14996861, "username": "kaanmetu", - "totalCosts": 231.29, + "totalCosts": 215.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" }, { @@ -53351,13 +54128,13 @@ { "id": 14996861, "username": "kaanmetu", - "totalCosts": 449.45, + "totalCosts": 404, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" }, { "id": 15532699, "username": "okurus", - "totalCosts": 57.57, + "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532699/medium/d28f6d5a89890907282d0a9ea5161174_default.png" }, { @@ -53369,7 +54146,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 27.27, + "totalCosts": 16.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" } ] @@ -53564,7 +54341,7 @@ { "id": 15966191, "username": "0xokan", - "totalCosts": 86.86, + "totalCosts": 76.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966191/medium/a5d1d36d7404974d591cbcf59f089df9.jpg" }, { @@ -53590,12 +54367,6 @@ "username": "sekoman01", "totalCosts": 15.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg" - }, - { - "id": 14131653, - "username": "Berke37", - "totalCosts": 10.1, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14131653/medium/ff295534ec23d3428ba06f99e0fd50bb.jpg" } ] }, @@ -53698,21 +54469,15 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 287.85, + "totalCosts": 253.51, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { "id": 15666051, "username": "mrtsc", - "totalCosts": 275.73, + "totalCosts": 67.67, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15666051/medium/43f758baf2083778e21e26b9776e700c.png" }, - { - "id": 15700677, - "username": "adneyc", - "totalCosts": 183.82, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15700677/medium/127589295370567bed6547b194ec4a6d_default.png" - }, { "id": 14849436, "username": "bbc_h", @@ -53720,10 +54485,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14849436/medium/2045f8509b3c7bbc802a65d42b81717c_default.png" }, { - "id": 15547847, - "username": "sue-a", - "totalCosts": 12.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15547847/medium/4df0260e4db384d42ff80a09e0a00d6e.jpeg" + "id": 15700677, + "username": "adneyc", + "totalCosts": 46.46, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15700677/medium/127589295370567bed6547b194ec4a6d_default.png" }, { "id": 15180740, @@ -53742,22 +54507,22 @@ { "fileId": "7316", "contributors": [ - { - "id": 14610740, - "username": "realdeep", - "totalCosts": 910.01, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14610740/medium/970ca23cc257e03e86efefca66979df2.png" - }, { "id": 15357538, "username": "yakupgurhangurcan", - "totalCosts": 898.9, + "totalCosts": 810.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15357538/medium/c1b4eeb66ab399014df370502e9d2c6e.jpeg" }, + { + "id": 14610740, + "username": "realdeep", + "totalCosts": 703.97, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14610740/medium/970ca23cc257e03e86efefca66979df2.png" + }, { "id": 15396134, "username": "FDNTL", - "totalCosts": 254.52, + "totalCosts": 247.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15396134/medium/12f9c36dce596d73529770adb87db81e.png" }, { @@ -53810,21 +54575,21 @@ { "id": 14966275, "username": "zer0knowledge", - "totalCosts": 1028.18, + "totalCosts": 1008.99, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14966275/medium/dead80d7c0e54990ad4fee448e0aacaa.jpeg" }, - { - "id": 15966007, - "username": "0xselimc", - "totalCosts": 110.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966007/medium/6008a158d741536a305a81bd295ab407.jpeg" - }, { "id": 15082707, "username": "selcuk45", "totalCosts": 98.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, + { + "id": 15966007, + "username": "0xselimc", + "totalCosts": 89.89, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966007/medium/6008a158d741536a305a81bd295ab407.jpeg" + }, { "id": 15966669, "username": "0xSahbaz", @@ -53962,7 +54727,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 256.54, + "totalCosts": 237.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { @@ -54402,7 +55167,7 @@ "id": 15648251, "username": "mergenether", "totalCosts": 94.94, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/66882a68a823033c944fee7391b3d8db.png" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/14b279816c10250627be590aa863a253.jpeg" } ] }, @@ -54435,7 +55200,7 @@ { "id": 15963921, "username": "bicebaris", - "totalCosts": 707, + "totalCosts": 702.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963921/medium/5ed57dad6d6d747e47d9378a8006ede1.jpg" }, { @@ -54668,7 +55433,7 @@ { "id": 16108182, "username": "onurureten", - "totalCosts": 11.11, + "totalCosts": 8.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16108182/medium/3d5629416b1216444844a95617af94f7.jpg" }, { @@ -54697,7 +55462,7 @@ { "id": 15963921, "username": "bicebaris", - "totalCosts": 640.34, + "totalCosts": 632.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963921/medium/5ed57dad6d6d747e47d9378a8006ede1.jpg" }, { @@ -54779,7 +55544,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 3063.33, + "totalCosts": 3033.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { @@ -55545,7 +56310,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 3567.32, + "totalCosts": 3520.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { @@ -55557,7 +56322,7 @@ { "id": 15908487, "username": "insidetrader", - "totalCosts": 552.47, + "totalCosts": 526.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15908487/medium/2dad4c49ee42d9df9633332d432e708e.jpg" }, { @@ -55685,7 +56450,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 204.02, + "totalCosts": 202, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { @@ -55697,7 +56462,7 @@ { "id": 14867044, "username": "Sercelik", - "totalCosts": 25.25, + "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14867044/medium/d25753e6bc7cb3b8ddbf025dac169b4f.png" }, { @@ -56667,6 +57432,12 @@ "username": "kaanmetu", "totalCosts": 442.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" + }, + { + "id": 16142874, + "username": "burakuenal28", + "totalCosts": 10.1, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16142874/medium/fbb60101cf81bd174bad44c54c66fb51.png" } ] }, @@ -56676,7 +57447,7 @@ { "id": 14996861, "username": "kaanmetu", - "totalCosts": 244.42, + "totalCosts": 214.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" }, { @@ -56774,7 +57545,7 @@ { "id": 16280946, "username": "Alpiren", - "totalCosts": 197.96, + "totalCosts": 167.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16280946/medium/03d579e1eebac2974a7eb25b8945a049_default.png" }, { @@ -56795,6 +57566,12 @@ "totalCosts": 58.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956829/medium/e7a64fde9e9413a2ae5add75cba88f09_default.png" }, + { + "id": 16296096, + "username": "Yahiaaaay", + "totalCosts": 56.56, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16296096/medium/18ed10fe1d0d99b288eeda8d50a4af7c.png" + }, { "id": 14664124, "username": "glpyldrm", @@ -56813,6 +57590,12 @@ "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966289/medium/4db7c2566069e455f22d0027dcd3bb06_default.png" }, + { + "id": 15363186, + "username": "naiba3434", + "totalCosts": 19.19, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15363186/medium/d4f4865f0038539de56219781b308488.jpeg" + }, { "id": 15964741, "username": "0xberil", @@ -56825,6 +57608,12 @@ "totalCosts": 6.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963921/medium/5ed57dad6d6d747e47d9378a8006ede1.jpg" }, + { + "id": 16142874, + "username": "burakuenal28", + "totalCosts": 5.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16142874/medium/fbb60101cf81bd174bad44c54c66fb51.png" + }, { "id": 15023705, "username": "UmuTR42", @@ -56839,19 +57628,19 @@ { "id": 16108182, "username": "onurureten", - "totalCosts": 376.73, + "totalCosts": 240.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16108182/medium/3d5629416b1216444844a95617af94f7.jpg" }, { "id": 15966669, "username": "0xSahbaz", - "totalCosts": 303, + "totalCosts": 152.51, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966669/medium/e56294c61e4c32a43c8735040ea67364_default.png" }, { "id": 15956829, "username": "isinasli", - "totalCosts": 176.75, + "totalCosts": 79.79, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956829/medium/e7a64fde9e9413a2ae5add75cba88f09_default.png" }, { @@ -57028,7 +57817,7 @@ { "id": 14996861, "username": "kaanmetu", - "totalCosts": 1048.38, + "totalCosts": 893.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" }, { @@ -57040,7 +57829,7 @@ { "id": 15076881, "username": "yavuzarslan.atakan", - "totalCosts": 112.11, + "totalCosts": 83.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15076881/medium/10e51ff77863c9559147fcb0546c119d.jpeg" }, { @@ -57063,7 +57852,7 @@ { "id": 15956471, "username": "nugen0x", - "totalCosts": 155.54, + "totalCosts": 102.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956471/medium/0af49a07f4f83e5a5180858a4760868e.jpeg" }, { @@ -57080,33 +57869,27 @@ { "id": 15357538, "username": "yakupgurhangurcan", - "totalCosts": 982.73, + "totalCosts": 462.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15357538/medium/c1b4eeb66ab399014df370502e9d2c6e.jpeg" }, - { - "id": 14690454, - "username": "sekoman01", - "totalCosts": 130.29, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg" - }, { "id": 14996861, "username": "kaanmetu", - "totalCosts": 95.95, + "totalCosts": 65.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" }, + { + "id": 14690454, + "username": "sekoman01", + "totalCosts": 56.56, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg" + }, { "id": 15082707, "username": "selcuk45", - "totalCosts": 70.7, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, - { - "id": 15396134, - "username": "FDNTL", - "totalCosts": 51.51, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15396134/medium/12f9c36dce596d73529770adb87db81e.png" - }, { "id": 15442858, "username": "Turkify", @@ -57140,7 +57923,7 @@ "id": 15648251, "username": "mergenether", "totalCosts": 94.94, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/66882a68a823033c944fee7391b3d8db.png" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/14b279816c10250627be590aa863a253.jpeg" }, { "id": 15082707, @@ -57244,20 +58027,14 @@ { "id": 15217546, "username": "sulaoglu", - "totalCosts": 733.26, + "totalCosts": 721.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15217546/medium/76c923f19832d5b0cb107704973363ae.jpeg" }, { "id": 14996861, "username": "kaanmetu", - "totalCosts": 514.09, + "totalCosts": 477.73, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14996861/medium/eb0c9870f3f6317e6bfdc4a838e4fd5f.jpg" - }, - { - "id": 15964741, - "username": "0xberil", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15964741/medium/f8fb148047395cf62c924755cb300f17_default.png" } ] }, @@ -57273,7 +58050,7 @@ { "id": 12465480, "username": "ondernuray", - "totalCosts": 4493.49, + "totalCosts": 4467.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/12465480/medium/d9db061b071f053abb5f77f11c14ea74.jpg" }, { @@ -57368,19 +58145,19 @@ { "id": 14610740, "username": "realdeep", - "totalCosts": 781.74, + "totalCosts": 627.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14610740/medium/970ca23cc257e03e86efefca66979df2.png" }, { "id": 15396134, "username": "FDNTL", - "totalCosts": 493.89, + "totalCosts": 416.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15396134/medium/12f9c36dce596d73529770adb87db81e.png" }, { "id": 15467576, "username": "augur", - "totalCosts": 438.34, + "totalCosts": 342.39, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15467576/medium/471f881427c816c83c952446739e01d8_default.png" }, { @@ -57393,7 +58170,7 @@ "id": 15648251, "username": "mergenether", "totalCosts": 9.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/66882a68a823033c944fee7391b3d8db.png" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/14b279816c10250627be590aa863a253.jpeg" }, { "id": 14996861, @@ -57447,47 +58224,41 @@ "fileId": "7461", "contributors": [ { - "id": 14690454, - "username": "sekoman01", - "totalCosts": 418.14, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg" + "id": 15901569, + "username": "ezraike", + "totalCosts": 183.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15901569/medium/6f25011ba2194f82c502e04e4da44f22.png" }, { "id": 13429141, "username": "Faedonn", - "totalCosts": 240.38, + "totalCosts": 181.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13429141/medium/47665044a49c8caae72a8e5d6c6c74fc.jpg" }, { "id": 15810797, "username": "truthdeal", - "totalCosts": 226.24, + "totalCosts": 172.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15810797/medium/fffa31f58ceab96c6db901b98fabf132.png" }, { - "id": 15901569, - "username": "ezraike", - "totalCosts": 183.82, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15901569/medium/6f25011ba2194f82c502e04e4da44f22.png" + "id": 14690454, + "username": "sekoman01", + "totalCosts": 167.66, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690454/medium/595a121d4a7427f7a21b75b32017c247.jpg" }, { "id": 15672817, "username": "thebuzagi", - "totalCosts": 142.41, + "totalCosts": 109.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15672817/medium/51945b15a89b4d9de324372227ac36de_default.png" }, { "id": 15709983, "username": "muggyw", - "totalCosts": 127.26, + "totalCosts": 97.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15709983/medium/e0909209fc16ef904edcd84c5ba39f62_default.png" }, - { - "id": 15956471, - "username": "nugen0x", - "totalCosts": 99.99, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956471/medium/0af49a07f4f83e5a5180858a4760868e.jpeg" - }, { "id": 15966961, "username": "nurkardelens", @@ -57500,6 +58271,12 @@ "totalCosts": 79.79, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966289/medium/4db7c2566069e455f22d0027dcd3bb06_default.png" }, + { + "id": 15956471, + "username": "nugen0x", + "totalCosts": 78.78, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956471/medium/0af49a07f4f83e5a5180858a4760868e.jpeg" + }, { "id": 15966263, "username": "palasevketp", @@ -57577,7 +58354,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 94.94, + "totalCosts": 93.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { @@ -57705,7 +58482,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 581.76, + "totalCosts": 522.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { @@ -57745,7 +58522,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" } ] @@ -57756,7 +58533,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" } ] @@ -57806,7 +58583,7 @@ { "id": 15082707, "username": "selcuk45", - "totalCosts": 954.45, + "totalCosts": 407.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, { @@ -57818,13 +58595,13 @@ { "id": 13429141, "username": "Faedonn", - "totalCosts": 78.78, + "totalCosts": 50.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13429141/medium/47665044a49c8caae72a8e5d6c6c74fc.jpg" }, { "id": 15966961, "username": "nurkardelens", - "totalCosts": 47.47, + "totalCosts": 12.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966961/medium/3ea2ecfa398148225a22a0795ab84a16.jpeg" } ] @@ -57835,7 +58612,7 @@ { "id": 15956481, "username": "motunbeg", - "totalCosts": 1813.96, + "totalCosts": 1631.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956481/medium/3b62b0094dce063a96ff151b94bd5f5c_default.png" }, { @@ -57852,7 +58629,7 @@ { "id": 15963921, "username": "bicebaris", - "totalCosts": 769.62, + "totalCosts": 753.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963921/medium/5ed57dad6d6d747e47d9378a8006ede1.jpg" }, { @@ -57869,13 +58646,13 @@ { "id": 15963921, "username": "bicebaris", - "totalCosts": 256.54, + "totalCosts": 193.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963921/medium/5ed57dad6d6d747e47d9378a8006ede1.jpg" }, { "id": 15966191, "username": "0xokan", - "totalCosts": 217.15, + "totalCosts": 166.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966191/medium/a5d1d36d7404974d591cbcf59f089df9.jpg" }, { @@ -57892,7 +58669,7 @@ { "id": 15908487, "username": "insidetrader", - "totalCosts": 1019.09, + "totalCosts": 670.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15908487/medium/2dad4c49ee42d9df9633332d432e708e.jpg" }, { @@ -57949,7 +58726,7 @@ { "id": 15964741, "username": "0xberil", - "totalCosts": 536.31, + "totalCosts": 435.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15964741/medium/f8fb148047395cf62c924755cb300f17_default.png" } ] @@ -57971,20 +58748,14 @@ { "id": 15963465, "username": "Ozje", - "totalCosts": 813.05, + "totalCosts": 500.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963465/medium/da85affc52fa58f2bf27e2e90cebb31e_default.png" }, { "id": 15963921, "username": "bicebaris", - "totalCosts": 37.37, + "totalCosts": 18.18, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963921/medium/5ed57dad6d6d747e47d9378a8006ede1.jpg" - }, - { - "id": 15672817, - "username": "thebuzagi", - "totalCosts": 9.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15672817/medium/51945b15a89b4d9de324372227ac36de_default.png" } ] }, @@ -58028,7 +58799,7 @@ { "id": 15908487, "username": "insidetrader", - "totalCosts": 518.13, + "totalCosts": 434.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15908487/medium/2dad4c49ee42d9df9633332d432e708e.jpg" }, { @@ -58036,12 +58807,6 @@ "username": "Bilalaliyev0", "totalCosts": 38.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15893383/medium/c103234aacc0f4ee3ed6b133147af318.jpg" - }, - { - "id": 15963921, - "username": "bicebaris", - "totalCosts": 30.3, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15963921/medium/5ed57dad6d6d747e47d9378a8006ede1.jpg" } ] }, @@ -58162,19 +58927,19 @@ { "id": 15672817, "username": "thebuzagi", - "totalCosts": 1639.23, + "totalCosts": 1580.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15672817/medium/51945b15a89b4d9de324372227ac36de_default.png" }, { "id": 15966289, "username": "cinaryasemin", - "totalCosts": 586.81, + "totalCosts": 358.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966289/medium/4db7c2566069e455f22d0027dcd3bb06_default.png" }, { "id": 15966191, "username": "0xokan", - "totalCosts": 479.75, + "totalCosts": 316.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966191/medium/a5d1d36d7404974d591cbcf59f089df9.jpg" }, { @@ -58183,12 +58948,6 @@ "totalCosts": 259.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" }, - { - "id": 15916327, - "username": "avalidurl", - "totalCosts": 170.69, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15916327/medium/89e2154a494b74da402f3b5c4ad73240.png" - }, { "id": 15963921, "username": "bicebaris", @@ -58200,6 +58959,12 @@ "username": "muggyw", "totalCosts": 45.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15709983/medium/e0909209fc16ef904edcd84c5ba39f62_default.png" + }, + { + "id": 15916327, + "username": "avalidurl", + "totalCosts": 42.42, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15916327/medium/89e2154a494b74da402f3b5c4ad73240.png" } ] }, @@ -58254,7 +59019,7 @@ { "id": 15964741, "username": "0xberil", - "totalCosts": 668.62, + "totalCosts": 636.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15964741/medium/f8fb148047395cf62c924755cb300f17_default.png" } ] @@ -58915,7 +59680,7 @@ { "id": 15966007, "username": "0xselimc", - "totalCosts": 723.16, + "totalCosts": 703.97, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966007/medium/6008a158d741536a305a81bd295ab407.jpeg" }, { @@ -59187,7 +59952,7 @@ "id": 15648251, "username": "mergenether", "totalCosts": 586.81, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/66882a68a823033c944fee7391b3d8db.png" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15648251/medium/14b279816c10250627be590aa863a253.jpeg" }, { "id": 15467576, @@ -59826,13 +60591,13 @@ { "id": 15138990, "username": "polinashorokhova", - "totalCosts": 382.79, + "totalCosts": 374.71, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15138990/medium/5f669759466df426ddbcbeade35e684c_default.png" }, { "id": 14686790, "username": "Horus267", - "totalCosts": 138.37, + "totalCosts": 130.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686790/medium/9695742f9165e3cf2585e31e74898270.png" }, { @@ -59896,7 +60661,7 @@ { "id": 14102529, "username": "Nezila", - "totalCosts": 99.99, + "totalCosts": 83.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14102529/medium/b68a69263d9c77b9078ffee899b05c02_default.png" }, { @@ -59930,19 +60695,19 @@ { "id": 15144404, "username": "addlemaddle096", - "totalCosts": 322.19, + "totalCosts": 278.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15144404/medium/27385dc54f5a7a5a602cb6ae4f9c409a.png" }, { "id": 15129995, "username": "alinabilyk", - "totalCosts": 130.29, + "totalCosts": 127.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15129995/medium/91175a3cc7e81c64ccdb5b22139074e3_default.png" }, { "id": 14102529, "username": "Nezila", - "totalCosts": 116.15, + "totalCosts": 91.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14102529/medium/b68a69263d9c77b9078ffee899b05c02_default.png" }, { @@ -59956,29 +60721,29 @@ { "fileId": "5559", "contributors": [ - { - "id": 15551683, - "username": "sashathefck", - "totalCosts": 471.67, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15551683/medium/89389ac4c9211911a107017bd6784870.jpeg" - }, { "id": 14949283, "username": "Vikaa.kr", - "totalCosts": 350.47, + "totalCosts": 316.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14949283/medium/dc057b9940eae0b83037b615771ef811_default.png" }, + { + "id": 15824933, + "username": "Daride", + "totalCosts": 293.91, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" + }, + { + "id": 15551683, + "username": "sashathefck", + "totalCosts": 101, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15551683/medium/89389ac4c9211911a107017bd6784870.jpeg" + }, { "id": 15585897, "username": "rich_man", - "totalCosts": 34.34, + "totalCosts": 31.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15585897/medium/fd7b02c0fe40afe5bb82dc812d16cf30_default.png" - }, - { - "id": 15541657, - "username": "kENNYxSEVEN", - "totalCosts": 12.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15541657/medium/f8a1dff0cca0019cb5d375424a9242ef.png" } ] }, @@ -59988,15 +60753,21 @@ { "id": 15473664, "username": "hotr1pak", - "totalCosts": 1521.06, + "totalCosts": 1222.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15473664/medium/3a3252bf9769d99be4ca6d1b94dbb91f.jpg" }, { "id": 15585897, "username": "rich_man", - "totalCosts": 699.93, + "totalCosts": 681.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15585897/medium/fd7b02c0fe40afe5bb82dc812d16cf30_default.png" }, + { + "id": 15824933, + "username": "Daride", + "totalCosts": 206.04, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" + }, { "id": 15869379, "username": "viktoriia.mykytiuk02", @@ -60008,6 +60779,12 @@ "username": "annakuv", "totalCosts": 3.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15734307/medium/7cb6e7afa5d729afd93012a1a1d67398_default.png" + }, + { + "id": 15370334, + "username": "elec7reify", + "totalCosts": 1.01, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15370334/medium/76e465cc7e7d20d661f6fcd995061cb7.jpg" } ] }, @@ -60017,13 +60794,13 @@ { "id": 14410848, "username": "vanohaa", - "totalCosts": 1123.12, + "totalCosts": 1103.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14410848/medium/a47d60cd3d729f73fdf3cc81c9fabcf9_default.png" }, { "id": 15967233, "username": "jasminesprout", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { @@ -60046,15 +60823,27 @@ { "id": 15804803, "username": "sun_dariia", - "totalCosts": 1575.6, + "totalCosts": 1158.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" }, + { + "id": 15824933, + "username": "Daride", + "totalCosts": 395.92, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" + }, { "id": 15473664, "username": "hotr1pak", - "totalCosts": 55.55, + "totalCosts": 28.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15473664/medium/3a3252bf9769d99be4ca6d1b94dbb91f.jpg" }, + { + "id": 16238420, + "username": "YuTu", + "totalCosts": 23.23, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16238420/medium/374374461ac40306c4bb73baf3ea07e4.png" + }, { "id": 15800361, "username": "nazarenkooleksij0", @@ -60212,16 +61001,22 @@ { "fileId": "5565", "contributors": [ + { + "id": 15824933, + "username": "Daride", + "totalCosts": 440.36, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" + }, { "id": 15473664, "username": "hotr1pak", - "totalCosts": 379.76, + "totalCosts": 243.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15473664/medium/3a3252bf9769d99be4ca6d1b94dbb91f.jpg" }, { "id": 15967233, "username": "jasminesprout", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { @@ -60318,6 +61113,12 @@ "totalCosts": 464.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15300418/medium/28c0af8820123db5d3a0cbf7bc72e713.jpeg" }, + { + "id": 16238420, + "username": "YuTu", + "totalCosts": 20.2, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16238420/medium/374374461ac40306c4bb73baf3ea07e4.png" + }, { "id": 15417652, "username": "Pavlo85", @@ -60350,19 +61151,25 @@ { "id": 15143910, "username": "vkulpinova6", - "totalCosts": 634.28, + "totalCosts": 569.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15143910/medium/c51e6458948ee8d9c7deb546cbb114a6_default.png" }, { "id": 15138988, "username": "zhenya_gidicheva_2000", - "totalCosts": 582.77, + "totalCosts": 492.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15138988/medium/4c6e8dff2e22e73eca01b7979759bc13_default.png" }, + { + "id": 15824933, + "username": "Daride", + "totalCosts": 280.78, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" + }, { "id": 15300418, "username": "globart", - "totalCosts": 136.35, + "totalCosts": 115.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15300418/medium/28c0af8820123db5d3a0cbf7bc72e713.jpeg" }, { @@ -60371,6 +61178,12 @@ "totalCosts": 78.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15113573/medium/5e1b0034eb90064f3b313ddc6a977464.png" }, + { + "id": 15370334, + "username": "elec7reify", + "totalCosts": 18.18, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15370334/medium/76e465cc7e7d20d661f6fcd995061cb7.jpg" + }, { "id": 14686790, "username": "Horus267", @@ -60391,7 +61204,7 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { @@ -60408,20 +61221,26 @@ { "id": 15585897, "username": "rich_man", - "totalCosts": 1261.49, + "totalCosts": 585.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15585897/medium/fd7b02c0fe40afe5bb82dc812d16cf30_default.png" }, { - "id": 15804803, - "username": "sun_dariia", - "totalCosts": 50.5, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" + "id": 15824933, + "username": "Daride", + "totalCosts": 337.34, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" }, { "id": 15734307, "username": "annakuv", "totalCosts": 28.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15734307/medium/7cb6e7afa5d729afd93012a1a1d67398_default.png" + }, + { + "id": 15804803, + "username": "sun_dariia", + "totalCosts": 21.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" } ] }, @@ -60431,14 +61250,8 @@ { "id": 14686790, "username": "Horus267", - "totalCosts": 1343.3, + "totalCosts": 1313, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686790/medium/9695742f9165e3cf2585e31e74898270.png" - }, - { - "id": 15300418, - "username": "globart", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15300418/medium/28c0af8820123db5d3a0cbf7bc72e713.jpeg" } ] }, @@ -60448,7 +61261,7 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 555.5, + "totalCosts": 495.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { @@ -60506,8 +61319,14 @@ { "id": 15869379, "username": "viktoriia.mykytiuk02", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15869379/medium/674749c0e8809c8963f1f2252ea54f75.png" + }, + { + "id": 15824933, + "username": "Daride", + "totalCosts": 106.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" } ] }, @@ -60523,8 +61342,14 @@ { "id": 15557697, "username": "viktoriia.cherniak", - "totalCosts": 97.97, + "totalCosts": 62.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15557697/medium/c05126e00043ef99135d9e733874172e.jpeg" + }, + { + "id": 15824933, + "username": "Daride", + "totalCosts": 35.35, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" } ] }, @@ -60597,9 +61422,15 @@ { "id": 15967233, "username": "jasminesprout", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, + { + "id": 15824933, + "username": "Daride", + "totalCosts": 159.58, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15824933/medium/9537e45abd1b689484969991849572a9_default.png" + }, { "id": 15473664, "username": "hotr1pak", @@ -60777,27 +61608,27 @@ { "id": 14686790, "username": "Horus267", - "totalCosts": 1145.34, + "totalCosts": 992.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14686790/medium/9695742f9165e3cf2585e31e74898270.png" }, { "id": 15137520, "username": "6ara6aka", - "totalCosts": 416.12, + "totalCosts": 262.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15137520/medium/c5b3dcab758c35e39540519cea3cc80d.jpg" }, - { - "id": 15300418, - "username": "globart", - "totalCosts": 88.88, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15300418/medium/28c0af8820123db5d3a0cbf7bc72e713.jpeg" - }, { "id": 15091543, "username": "3xp0rt", - "totalCosts": 68.68, + "totalCosts": 52.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15091543/medium/2405f39b043c94f5326ae7026d29d8a4.png" }, + { + "id": 15300418, + "username": "globart", + "totalCosts": 25.25, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15300418/medium/28c0af8820123db5d3a0cbf7bc72e713.jpeg" + }, { "id": 15824883, "username": "anastasiia.danchuk", @@ -60824,39 +61655,39 @@ { "id": 15804803, "username": "sun_dariia", - "totalCosts": 1335.22, + "totalCosts": 1088.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15804803/medium/e753b43a4cf480cd2a37c5795cdb83ba_default.png" }, { "id": 15822531, "username": "oleksandra.davydchuk", - "totalCosts": 838.3, + "totalCosts": 825.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15822531/medium/f88ef37f5adac630fce6e232dae67668_default.png" }, { "id": 15967233, "username": "jasminesprout", - "totalCosts": 673.67, + "totalCosts": 414.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, { "id": 15856843, "username": "mariia_pryshko", - "totalCosts": 224.22, + "totalCosts": 189.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15856843/medium/2c53a645673e90327155f24d7f1237f5_default.png" }, - { - "id": 15300418, - "username": "globart", - "totalCosts": 69.69, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15300418/medium/28c0af8820123db5d3a0cbf7bc72e713.jpeg" - }, { "id": 15860037, "username": "makc7", "totalCosts": 45.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15860037/medium/9c2048ac721bc2d7abd49d178bf2857e.png" }, + { + "id": 15300418, + "username": "globart", + "totalCosts": 44.44, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15300418/medium/28c0af8820123db5d3a0cbf7bc72e713.jpeg" + }, { "id": 15473664, "username": "hotr1pak", @@ -60879,6 +61710,66 @@ "totalCosts": 436.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15844527/medium/a4d5a8ae8c27d8cae9261676ee81bbeb_default.png" }, + { + "id": 16324336, + "username": "BTConBlockchain", + "totalCosts": 176.75, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16324336/medium/21f340ff5cc64085c21ce48d67ee1c9d.jpg" + }, + { + "id": 16317346, + "username": "baonhi1207", + "totalCosts": 106.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16317346/medium/50c63b1bded5a56c395752d0ce7ef343_default.png" + }, + { + "id": 16317232, + "username": "lethanhtung", + "totalCosts": 62.62, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16317232/medium/f081077da20f63484ac45eed21d9fab5.jpeg" + }, + { + "id": 16320402, + "username": "thinhote", + "totalCosts": 51.51, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320402/medium/bde75c24fe05ddbc9f5800c31cbaa3a8_default.png" + }, + { + "id": 16317214, + "username": "Tamming", + "totalCosts": 32.32, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16317214/medium/2805b9ae631686136a1c4a2086bfed65_default.png" + }, + { + "id": 16318644, + "username": "soicodoc2299", + "totalCosts": 32.32, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16318644/medium/b56a2ca1dad8e1457df718261ecb8c46.png" + }, + { + "id": 16320252, + "username": "duydong02012004", + "totalCosts": 31.31, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320252/medium/88e0517f3af4ecd72810dd0790b2e036.png" + }, + { + "id": 16320406, + "username": "Caquyn", + "totalCosts": 28.28, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320406/medium/07f11b6bb2becf64980b2f8d85525315_default.png" + }, + { + "id": 16320408, + "username": "conglam", + "totalCosts": 28.28, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320408/medium/dfb257951a014a65a1235ee7825accf0_default.png" + }, + { + "id": 14045960, + "username": "ngo461596", + "totalCosts": 26.26, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14045960/medium/01a57dd06ba1a0e6203aff54f82e00f3.jpeg" + }, { "id": 15660097, "username": "anhhuyis", @@ -60890,36 +61781,84 @@ { "fileId": "5565", "contributors": [ - { - "id": 16230594, - "username": "LIulyEmpty", - "totalCosts": 230.28, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16230594/medium/cd7250313adac6c32fcac7ef601c0343.jpg" - }, { "id": 15967193, "username": "minhkek", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967193/medium/9de1591866a92c526781acfb27509d87.png" }, + { + "id": 16230594, + "username": "LIulyEmpty", + "totalCosts": 93.93, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16230594/medium/cd7250313adac6c32fcac7ef601c0343.jpg" + }, { "id": 16004379, "username": "tropicaldog17", - "totalCosts": 49.49, + "totalCosts": 42.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16004379/medium/012ac515fe09fb0e6b08e4d06d299460.jpeg" }, + { + "id": 16320250, + "username": "buithinhh05", + "totalCosts": 26.26, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320250/medium/325b036ee04dea595f09d3efc7b74b13.png" + }, + { + "id": 16320484, + "username": "Cuogg", + "totalCosts": 25.25, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320484/medium/bb6974794b1073d1416c1349bf00db4b_default.png" + }, { "id": 14942589, "username": "Marcus_Aureliee", "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14942589/medium/b4c7f32eef26b3a02fb112cd161792fd.jpg" }, + { + "id": 16320262, + "username": "tuandz", + "totalCosts": 16.16, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320262/medium/3cebaa50d794c6ea75d496bee5ee87bd_default.png" + }, + { + "id": 16320240, + "username": "hieuskybaby", + "totalCosts": 7.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320240/medium/02b5097ad4a26fa3b268520caa66fbe2.jpeg" + }, + { + "id": 16320514, + "username": "anh_anh2811", + "totalCosts": 6.06, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320514/medium/c32cd2bcb841e4f677439ae52292c6b3_default.png" + }, + { + "id": 16320370, + "username": "_hchito25", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320370/medium/2e30233a92a09bd5ec4811aede68eec1_default.png" + }, { "id": 14943437, "username": "trungan1511", "totalCosts": 3.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14943437/medium/03d7b6c2f65c04c60b008a38a221cf5f.png" }, + { + "id": 16320310, + "username": "giangvq0212", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320310/medium/283d5714c8de1ebba197e4b0991e84fb.png" + }, + { + "id": 16317278, + "username": "datnguyenk300work", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16317278/medium/b89915dc6e4cf0d980dcc5edb13deec3.png" + }, { "id": 14921757, "username": "trungkien.nt92", @@ -60934,33 +61873,27 @@ { "id": 14942589, "username": "Marcus_Aureliee", - "totalCosts": 349.46, + "totalCosts": 315.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14942589/medium/b4c7f32eef26b3a02fb112cd161792fd.jpg" }, - { - "id": 15762823, - "username": "nhatquang", - "totalCosts": 214.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15762823/medium/e96ea155b0ff6da1ff9e381a341e0de7.png" - }, { "id": 15528623, "username": "oreo01", - "totalCosts": 203.01, + "totalCosts": 70.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15528623/medium/aadf81c86d5770a241c8a47df1b367bf_default.png" }, - { - "id": 15928039, - "username": "manchutsca", - "totalCosts": 60.6, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15928039/medium/7de6527da226c1e21513988bd61c51fa.jpg" - }, { "id": 15788035, "username": "jscaothe", "totalCosts": 29.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15788035/medium/d41e12c03d23663a215cb0ebef64d4d1.png" }, + { + "id": 15762823, + "username": "nhatquang", + "totalCosts": 11.11, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15762823/medium/e96ea155b0ff6da1ff9e381a341e0de7.png" + }, { "id": 15369062, "username": "datiq9999", @@ -60973,12 +61906,24 @@ "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14921757/medium/80e6fd8d3f0be1e5feab67dccc614d82.jpg" }, + { + "id": 15928039, + "username": "manchutsca", + "totalCosts": 5.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15928039/medium/7de6527da226c1e21513988bd61c51fa.jpg" + }, { "id": 15844527, "username": "huephuong", "totalCosts": 4.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15844527/medium/a4d5a8ae8c27d8cae9261676ee81bbeb_default.png" }, + { + "id": 16320478, + "username": "muoiucute2002", + "totalCosts": 4.04, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16320478/medium/3b8f78b5b12a309a87fd04c324aa495e_default.png" + }, { "id": 14943437, "username": "trungan1511", @@ -61069,13 +62014,13 @@ { "id": 15314206, "username": "cuijia", - "totalCosts": 1328.15, + "totalCosts": 1095.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" }, { "id": 15201846, "username": "boyinlee", - "totalCosts": 85.85, + "totalCosts": 42.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, { @@ -61100,6 +62045,12 @@ "username": "ShockYoungCHN", "totalCosts": 65.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15119867/medium/b0b5ec741bb62f24aa3bc8cd58a0e25b.png" + }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 3.03, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" } ] }, @@ -61109,7 +62060,7 @@ { "id": 14829178, "username": "EffectChen", - "totalCosts": 347.44, + "totalCosts": 339.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, { @@ -61189,6 +62140,12 @@ "totalCosts": 38.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15106817/medium/ae47903afb2ba9ad483722434d6f97f7.jpeg" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 21.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 16105472, "username": "Mindy00", @@ -61236,12 +62193,6 @@ "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15150490/medium/889adda1c2e9c3fc07ab00660ad474dd_default.png" }, - { - "id": 15242372, - "username": "billwang", - "totalCosts": 16.16, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242372/medium/23bf740e9d096ee0b3de7b9f5528c8c9.JPG" - }, { "id": 15276928, "username": "betterme", @@ -61303,13 +62254,13 @@ { "id": 14829178, "username": "EffectChen", - "totalCosts": 445.41, + "totalCosts": 399.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, { "id": 14870630, "username": "a8832021", - "totalCosts": 68.68, + "totalCosts": 46.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14870630/medium/b36889c699124e54c6b781e3ba477726.png" }, { @@ -61318,12 +62269,6 @@ "totalCosts": 45.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15193608/medium/c3b5342b0fef9f5f51eff5b0c2b93c70.jpg" }, - { - "id": 15073799, - "username": "GoForceX", - "totalCosts": 9.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" - }, { "id": 15314206, "username": "cuijia", @@ -61657,12 +62602,6 @@ "totalCosts": 12.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" }, - { - "id": 15314206, - "username": "cuijia", - "totalCosts": 10.1, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" - }, { "id": 16201976, "username": "Tjmin", @@ -61803,35 +62742,23 @@ { "fileId": "5559", "contributors": [ - { - "id": 15506758, - "username": "Z_Zircon", - "totalCosts": 382.79, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15506758/medium/12b5a3865ebef9bd988207c36d88c0a7.jpg" - }, { "id": 14950443, "username": "UX404", - "totalCosts": 348.45, + "totalCosts": 314.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14950443/medium/06561e4c02ad1005099caaf66d873fd2.jpeg" }, - { - "id": 15526971, - "username": "ethjiang", - "totalCosts": 121.2, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15526971/medium/30cf8cb031fd964824da8ec79dbf464e.jpg" - }, { "id": 15145320, "username": "Unili", - "totalCosts": 115.14, + "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15145320/medium/c0fc5adab930aa5467bcf04fcdcbf39f.jpg" }, { - "id": 15314206, - "username": "cuijia", - "totalCosts": 72.72, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" + "id": 15506758, + "username": "Z_Zircon", + "totalCosts": 68.68, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15506758/medium/12b5a3865ebef9bd988207c36d88c0a7.jpg" }, { "id": 15046541, @@ -61839,6 +62766,18 @@ "totalCosts": 59.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15046541/medium/7b498c379467d51039f357c411610a4f_default.png" }, + { + "id": 15526971, + "username": "ethjiang", + "totalCosts": 59.59, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15526971/medium/30cf8cb031fd964824da8ec79dbf464e.jpg" + }, + { + "id": 15314206, + "username": "cuijia", + "totalCosts": 29.29, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" + }, { "id": 15381970, "username": "tzbkk", @@ -61865,13 +62804,13 @@ { "id": 15314206, "username": "cuijia", - "totalCosts": 1694.78, + "totalCosts": 1455.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" }, { "id": 15350862, "username": "duling", - "totalCosts": 727.2, + "totalCosts": 589.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15350862/medium/1b276f211570491d54b0578678d35c83.png" }, { @@ -61897,12 +62836,6 @@ "username": "iPhantasmLavender", "totalCosts": 45.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15373768/medium/fb5b03de96ccb41bad412ed79ca8e690_default.png" - }, - { - "id": 15073799, - "username": "GoForceX", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" } ] }, @@ -61912,7 +62845,7 @@ { "id": 14553216, "username": "rielychen", - "totalCosts": 630.24, + "totalCosts": 611.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14553216/medium/ff7357a18e524ec40facc964cb2d15bc.jpeg" }, { @@ -61924,19 +62857,19 @@ { "id": 14991283, "username": "imexcalibur", - "totalCosts": 271.69, + "totalCosts": 252.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14991283/medium/a33df275dd490ce552d3e79590b7965c_default.png" }, { "id": 15156816, "username": "Fengfeng0157", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15156816/medium/8ce4621e9192a27e8a0ec7e37d9e316e_default.png" }, { "id": 15086703, "username": "xyz205", - "totalCosts": 90.9, + "totalCosts": 65.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15086703/medium/a0bd7699115a761c7c557736f5dd7bc0_default.png" }, { @@ -61959,32 +62892,26 @@ { "id": 15657887, "username": "DreamInMorning", - "totalCosts": 1268.56, + "totalCosts": 956.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15657887/medium/9212535a0a5fb7ec22a9f8a8329dac3b.jpg" }, { "id": 15633207, "username": "Jojojo999", - "totalCosts": 248.46, + "totalCosts": 218.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15633207/medium/41f81fc49a2b8d609f4d860e885e9748_default.png" }, { "id": 15681061, "username": "liangsss", - "totalCosts": 211.09, + "totalCosts": 101, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15681061/medium/4ec7ebefc4488e8d1ba46b15419fbe1d_default.png" }, { - "id": 15680993, - "username": "nzinmymind", - "totalCosts": 104.03, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15680993/medium/c48e18c9909ca14dd2c4796c916a6007.jpeg" - }, - { - "id": 15729281, - "username": "Junel", - "totalCosts": 59.59, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15729281/medium/0be4e0167eb236dea935c2ecf60ab99e_default.png" + "id": 15425018, + "username": "TTa77", + "totalCosts": 97.97, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15425018/medium/a0ec669dae445a589d6b020b2fd856c8.png" }, { "id": 15709191, @@ -61999,10 +62926,16 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15702813/medium/0c6e52658509977daf4badce7454b529_default.png" }, { - "id": 15722739, - "username": "Hu-Wentao", - "totalCosts": 39.39, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15722739/medium/316f09f87baa8a22fbb7fc449db7ed1e.png" + "id": 15680993, + "username": "nzinmymind", + "totalCosts": 44.44, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15680993/medium/c48e18c9909ca14dd2c4796c916a6007.jpeg" + }, + { + "id": 15729281, + "username": "Junel", + "totalCosts": 30.3, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15729281/medium/0be4e0167eb236dea935c2ecf60ab99e_default.png" }, { "id": 15073799, @@ -62011,10 +62944,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" }, { - "id": 16051140, - "username": "MichaelQubycn", - "totalCosts": 27.27, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16051140/medium/0edba76345410b615bac4fabf336d4ba.jpeg" + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 26.26, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" }, { "id": 14553216, @@ -62022,6 +62955,12 @@ "totalCosts": 15.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14553216/medium/ff7357a18e524ec40facc964cb2d15bc.jpeg" }, + { + "id": 15722739, + "username": "Hu-Wentao", + "totalCosts": 10.1, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15722739/medium/316f09f87baa8a22fbb7fc449db7ed1e.png" + }, { "id": 15684231, "username": "Jimmy666", @@ -62395,6 +63334,12 @@ "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15633207/medium/41f81fc49a2b8d609f4d860e885e9748_default.png" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 6.06, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 15067991, "username": "Aperturous", @@ -63540,7 +64485,7 @@ { "id": 15386722, "username": "Fred-Porlock", - "totalCosts": 593.88, + "totalCosts": 589.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15386722/medium/d45a14868eeb521fcff121613eaeee3c.png" }, { @@ -64063,7 +65008,7 @@ { "id": 15314206, "username": "cuijia", - "totalCosts": 380.77, + "totalCosts": 362.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" }, { @@ -64126,18 +65071,6 @@ "totalCosts": 14.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" }, - { - "id": 15236832, - "username": "Andypsl8", - "totalCosts": 1.01, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15236832/medium/59227a901011469470b992963cd20855.jpg" - }, - { - "id": 16072688, - "username": "lz895779981", - "totalCosts": 1.01, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16072688/medium/b6d67449825fad3ef2cc4b861e83e94e.png" - }, { "id": 15524545, "username": "sheepskin1", @@ -64265,7 +65198,7 @@ { "id": 15314206, "username": "cuijia", - "totalCosts": 396.93, + "totalCosts": 377.74, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" }, { @@ -64905,17 +65838,23 @@ "totalCosts": 88.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" }, + { + "id": 15531743, + "username": "Meriky", + "totalCosts": 25.25, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15531743/medium/06edb2b0a7a9cbb46f2c00669e0103ab.gif" + }, { "id": 15073799, "username": "GoForceX", - "totalCosts": 40.4, + "totalCosts": 23.23, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" }, { - "id": 15531743, - "username": "Meriky", - "totalCosts": 25.25, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15531743/medium/06edb2b0a7a9cbb46f2c00669e0103ab.gif" + "id": 16302070, + "username": "zhangshichun", + "totalCosts": 23.23, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16302070/medium/71d16e89c1be6c482759c19c804f5aca.png" }, { "id": 16166796, @@ -65235,7 +66174,7 @@ { "id": 15526451, "username": "rubyfarrall", - "totalCosts": 1595.8, + "totalCosts": 1549.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15526451/medium/410ea52fed3b86bcf25bf9f7c16d552c_default.png" }, { @@ -65247,7 +66186,7 @@ { "id": 15381970, "username": "tzbkk", - "totalCosts": 506.01, + "totalCosts": 479.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" }, { @@ -65453,7 +66392,7 @@ { "id": 14690748, "username": "penglaishan.cn", - "totalCosts": 387.84, + "totalCosts": 385.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14690748/medium/dd3be098cca6b66915e02147fd6407e7.jpg" }, { @@ -65494,7 +66433,7 @@ { "id": 15314206, "username": "cuijia", - "totalCosts": 684.78, + "totalCosts": 669.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" }, { @@ -67754,7 +68693,7 @@ { "id": 14792200, "username": "liuxiaotong15", - "totalCosts": 244.42, + "totalCosts": 214.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14792200/medium/651095028597144eac73720a0c320b3d.jpeg" }, { @@ -67769,12 +68708,6 @@ "totalCosts": 20.2, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, - { - "id": 15314206, - "username": "cuijia", - "totalCosts": 17.17, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" - }, { "id": 12523167, "username": "jackson21182", @@ -67912,7 +68845,7 @@ { "id": 15729281, "username": "Junel", - "totalCosts": 500.96, + "totalCosts": 405.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15729281/medium/0be4e0167eb236dea935c2ecf60ab99e_default.png" }, { @@ -67935,7 +68868,7 @@ { "id": 15729281, "username": "Junel", - "totalCosts": 226.24, + "totalCosts": 190.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15729281/medium/0be4e0167eb236dea935c2ecf60ab99e_default.png" }, { @@ -68096,18 +69029,18 @@ "totalCosts": 43.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14814538/medium/a758db833b50a769463ef35c5d5b99f1.gif" }, - { - "id": 16105472, - "username": "Mindy00", - "totalCosts": 38.38, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16105472/medium/e3c4ba4f35bd3c3e5bc13053976cd282.png" - }, { "id": 15381970, "username": "tzbkk", "totalCosts": 36.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" }, + { + "id": 16105472, + "username": "Mindy00", + "totalCosts": 34.34, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16105472/medium/e3c4ba4f35bd3c3e5bc13053976cd282.png" + }, { "id": 15065551, "username": "wuweibuzhiwang", @@ -68188,19 +69121,19 @@ { "id": 15236832, "username": "Andypsl8", - "totalCosts": 344.41, + "totalCosts": 208.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15236832/medium/59227a901011469470b992963cd20855.jpg" }, { "id": 14829178, "username": "EffectChen", - "totalCosts": 105.04, + "totalCosts": 75.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, { "id": 15156816, "username": "Fengfeng0157", - "totalCosts": 102.01, + "totalCosts": 34.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15156816/medium/8ce4621e9192a27e8a0ec7e37d9e316e_default.png" }, { @@ -68216,16 +69149,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14953253/medium/8c44470b0c9c27bcbf8395dee10b20ff.png" }, { - "id": 15992561, - "username": "Hongyan_Lin", - "totalCosts": 7.07, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15992561/medium/b10820bf840fc1f866510c5e1cb474ba_default.png" - }, - { - "id": 14392078, - "username": "205x.tech", + "id": 16290062, + "username": "saddiamond2003", "totalCosts": 7.07, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14392078/medium/65dff61bdce5bba27d89e7957fd8e8dc.png" + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" }, { "id": 14553216, @@ -68286,6 +69213,12 @@ "totalCosts": 16.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 15.15, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 14553216, "username": "rielychen", @@ -68526,9 +69459,15 @@ { "id": 14829178, "username": "EffectChen", - "totalCosts": 1306.94, + "totalCosts": 1152.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 82.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 14723580, "username": "jasonren0403", @@ -68579,7 +69518,7 @@ { "id": 15156816, "username": "Fengfeng0157", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15156816/medium/8ce4621e9192a27e8a0ec7e37d9e316e_default.png" }, { @@ -68608,19 +69547,19 @@ { "id": 15314206, "username": "cuijia", - "totalCosts": 1167.56, + "totalCosts": 502.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" }, { "id": 15351002, "username": "charlee2025", - "totalCosts": 86.86, + "totalCosts": 75.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15351002/medium/dedc5c1b19186cd080555883009ec248.png" }, { "id": 15558917, "username": "imalittlemole", - "totalCosts": 70.7, + "totalCosts": 41.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15558917/medium/3140ea0253adc0e3f3c81b050f3b30b3.png" }, { @@ -68915,25 +69854,25 @@ { "id": 15193608, "username": "yuping", - "totalCosts": 707, + "totalCosts": 694.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15193608/medium/c3b5342b0fef9f5f51eff5b0c2b93c70.jpg" }, { "id": 15254466, "username": "web3driver", - "totalCosts": 624.18, + "totalCosts": 615.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15254466/medium/adde580dfcc331b56eb1c3823aaa9f0d.png" }, { "id": 15301458, "username": "cc01cc", - "totalCosts": 418.14, + "totalCosts": 399.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15301458/medium/5a10cf07a324052509316293f84fe69d.png" }, { "id": 15314274, "username": "0xcjl", - "totalCosts": 274.72, + "totalCosts": 256.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314274/medium/b720446f9ed9f8bea19f63ae35a3804c.PNG" }, { @@ -68960,12 +69899,6 @@ "totalCosts": 22.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15276928/medium/a8242d6cce5245250d61f5710094740f_default.png" }, - { - "id": 15314206, - "username": "cuijia", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15314206/medium/97a1d7142aa4eba6ed8a0212ddada4a8.jpeg" - }, { "id": 15230654, "username": "jay52121y", @@ -69010,7 +69943,7 @@ { "id": 14958061, "username": "Dearry", - "totalCosts": 1582.67, + "totalCosts": 1556.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14958061/medium/120296ee25b4bfc07225bfbc8a6d5666_default.png" }, { @@ -69159,13 +70092,13 @@ { "id": 15657887, "username": "DreamInMorning", - "totalCosts": 2946.17, + "totalCosts": 2479.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15657887/medium/9212535a0a5fb7ec22a9f8a8329dac3b.jpg" }, { "id": 15680993, "username": "nzinmymind", - "totalCosts": 527.22, + "totalCosts": 166.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15680993/medium/c48e18c9909ca14dd2c4796c916a6007.jpeg" }, { @@ -69255,17 +70188,17 @@ "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" }, - { - "id": 15911295, - "username": "Xin_Cheng", - "totalCosts": 2.02, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" - }, { "id": 15895151, "username": "ChaosGod", "totalCosts": 1.01, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15895151/medium/036c2782ecab9a148c4e15869251276c.png" + }, + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 1.01, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" } ] }, @@ -69310,7 +70243,7 @@ { "id": 15156816, "username": "Fengfeng0157", - "totalCosts": 581.76, + "totalCosts": 510.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15156816/medium/8ce4621e9192a27e8a0ec7e37d9e316e_default.png" }, { @@ -69325,6 +70258,12 @@ "totalCosts": 72.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15830189/medium/b84dabb43baa1b6f60b16a9ae4b91ca3.jpeg" }, + { + "id": 15425018, + "username": "TTa77", + "totalCosts": 69.69, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15425018/medium/a0ec669dae445a589d6b020b2fd856c8.png" + }, { "id": 15145320, "username": "Unili", @@ -69467,13 +70406,13 @@ { "id": 15835891, "username": "louislucrypto", - "totalCosts": 816.08, + "totalCosts": 732.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15835891/medium/00d4bc2556097b390600a1bc57d06aaa_default.png" }, { "id": 14829178, "username": "EffectChen", - "totalCosts": 719.12, + "totalCosts": 620.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, { @@ -69505,10 +70444,16 @@ "totalCosts": 359.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15924353/medium/24be33af9672c1afbe79146c7acda3a0_default.png" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 314.11, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 15623859, "username": "w33d", - "totalCosts": 315.12, + "totalCosts": 298.96, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15623859/medium/1b48569cd42fdf8a9e5af38841b58d4f.jpeg" }, { @@ -69520,7 +70465,7 @@ { "id": 15381970, "username": "tzbkk", - "totalCosts": 121.2, + "totalCosts": 105.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" }, { @@ -69535,12 +70480,6 @@ "totalCosts": 85.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15889307/medium/d4da3df063e63fa135a05da6d555e5a0.png" }, - { - "id": 13358093, - "username": "ChesleyCN", - "totalCosts": 67.67, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13358093/medium/63b334419836be7ef7af1c645b084fc9.png" - }, { "id": 15900245, "username": "kairlv", @@ -69548,10 +70487,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15900245/medium/e4ed4348b743118b599d6864cb79f64f_default.png" }, { - "id": 15073799, - "username": "GoForceX", - "totalCosts": 12.12, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" + "id": 13358093, + "username": "ChesleyCN", + "totalCosts": 51.51, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13358093/medium/63b334419836be7ef7af1c645b084fc9.png" }, { "id": 15156816, @@ -69573,14 +70512,8 @@ { "id": 15269034, "username": "Aiden_Lee", - "totalCosts": 492.88, + "totalCosts": 379.76, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15269034/medium/98d984d00012bd37cbb5f3f343bd367e_default.png" - }, - { - "id": 15386722, - "username": "Fred-Porlock", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15386722/medium/d45a14868eeb521fcff121613eaeee3c.png" } ] }, @@ -69590,15 +70523,21 @@ { "id": 14712154, "username": "fivenicerice", - "totalCosts": 711.04, + "totalCosts": 462.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14712154/medium/3730e404a7ef0a2e5f76426f84376d53.jpg" }, { "id": 15911295, "username": "Xin_Cheng", - "totalCosts": 406.02, + "totalCosts": 283.81, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 24.24, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 15893819, "username": "Xiran", @@ -69634,6 +70573,12 @@ "totalCosts": 62.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15926489/medium/caffa96ac9313e6fda270bfe4f5ca952.jpg" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 21.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 15381970, "username": "tzbkk", @@ -69648,19 +70593,19 @@ { "id": 15381970, "username": "tzbkk", - "totalCosts": 493.89, + "totalCosts": 392.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" }, { "id": 15856841, "username": "weiyuzhi2022", - "totalCosts": 160.59, + "totalCosts": 143.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15856841/medium/604c48d6d4f0f60a4495f8586908076c.png" }, { "id": 15904577, "username": "JinzhouWu", - "totalCosts": 109.08, + "totalCosts": 88.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15904577/medium/4fccebc93bdec714e2c04041112058f8.png" }, { @@ -69669,10 +70614,16 @@ "totalCosts": 58.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 37.37, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 16266862, "username": "HarryJing", - "totalCosts": 57.57, + "totalCosts": 34.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16266862/medium/6cac8bffcdc418bbf91be6c574556862.jpeg" } ] @@ -69697,40 +70648,40 @@ { "fileId": "7737", "contributors": [ - { - "id": 15871701, - "username": "maxwellcotto", - "totalCosts": 715.08, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15871701/medium/211aaa985795803b88e9fa89069ed517.png" - }, { "id": 15917907, "username": "Serein5", - "totalCosts": 520.15, + "totalCosts": 408.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15917907/medium/f06e750eace178a6fde1f936a0d717b8_default.png" }, + { + "id": 15871701, + "username": "maxwellcotto", + "totalCosts": 406.02, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15871701/medium/211aaa985795803b88e9fa89069ed517.png" + }, { "id": 15893819, "username": "Xiran", - "totalCosts": 230.28, + "totalCosts": 64.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15893819/medium/e579822f448602f334180dc7ced2e68d_default.png" }, { "id": 15636829, "username": "bdwms", - "totalCosts": 59.59, + "totalCosts": 26.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15636829/medium/434d40bf423f53879e795cc158b1b892.jpeg" }, { "id": 15896939, "username": "iNatas", - "totalCosts": 24.24, + "totalCosts": 15.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15896939/medium/81ad856f439fd2161c40c78913c17005_default.png" }, { "id": 15906651, "username": "ying.ying09", - "totalCosts": 16.16, + "totalCosts": 5.05, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" } ] @@ -69762,6 +70713,12 @@ "totalCosts": 141.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15892315/medium/d8936a27aafe87892d14a9579ef5deaa.jpeg" }, + { + "id": 16290062, + "username": "saddiamond2003", + "totalCosts": 20.2, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16290062/medium/0805624823601e88f8322df677b7270b_default.png" + }, { "id": 15381970, "username": "tzbkk", @@ -69817,19 +70774,19 @@ { "id": 15381970, "username": "tzbkk", - "totalCosts": 455.51, + "totalCosts": 371.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" }, { "id": 15843735, "username": "VanFlow", - "totalCosts": 156.55, + "totalCosts": 112.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15843735/medium/1ac8ece550c160417a8fbfc16ec62c82_default.png" }, { "id": 15906651, "username": "ying.ying09", - "totalCosts": 58.58, + "totalCosts": 33.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" } ] @@ -69974,7 +70931,7 @@ { "id": 15871701, "username": "maxwellcotto", - "totalCosts": 1301.89, + "totalCosts": 1282.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15871701/medium/211aaa985795803b88e9fa89069ed517.png" }, { @@ -69983,18 +70940,18 @@ "totalCosts": 1045.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15917907/medium/f06e750eace178a6fde1f936a0d717b8_default.png" }, - { - "id": 15381970, - "username": "tzbkk", - "totalCosts": 163.62, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" - }, { "id": 14829178, "username": "EffectChen", "totalCosts": 154.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, + { + "id": 15381970, + "username": "tzbkk", + "totalCosts": 144.43, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" + }, { "id": 15927645, "username": "HHHH123435", @@ -70048,22 +71005,22 @@ "fileId": "8035", "contributors": [ { - "id": 15984133, - "username": "weiyuabc", - "totalCosts": 641.35, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15984133/medium/2a5267dbac29dc0063600e4c5013a732_default.png" + "id": 15906651, + "username": "ying.ying09", + "totalCosts": 146.45, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" }, { "id": 14829178, "username": "EffectChen", - "totalCosts": 213.11, + "totalCosts": 141.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" }, { - "id": 15906651, - "username": "ying.ying09", - "totalCosts": 166.65, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" + "id": 15984133, + "username": "weiyuabc", + "totalCosts": 122.21, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15984133/medium/2a5267dbac29dc0063600e4c5013a732_default.png" }, { "id": 16040800, @@ -70074,7 +71031,7 @@ { "id": 15911391, "username": "Aleczzz", - "totalCosts": 78.78, + "totalCosts": 50.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911391/medium/b8497df2da3374cd5f0cb8183169e4db_default.png" }, { @@ -70183,6 +71140,225 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16158452/medium/8544f339158effd95f9bda0987cb93aa_default.png" } ] + }, + { + "fileId": "7569", + "contributors": [ + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 217.15, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" + }, + { + "id": 16201976, + "username": "Tjmin", + "totalCosts": 25.25, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16201976/medium/e4c92be84c0c0b1f08c76ad801087656_default.png" + }, + { + "id": 15906651, + "username": "ying.ying09", + "totalCosts": 20.2, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" + } + ] + }, + { + "fileId": "7565", + "contributors": [ + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 548.43, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" + }, + { + "id": 15871701, + "username": "maxwellcotto", + "totalCosts": 413.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15871701/medium/211aaa985795803b88e9fa89069ed517.png" + }, + { + "id": 14829178, + "username": "EffectChen", + "totalCosts": 60.6, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14829178/medium/39ff70d1cbcdbad8e9056cb4aa4ee789.jpg" + }, + { + "id": 15806537, + "username": "Tyou", + "totalCosts": 36.36, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15806537/medium/bcd829ea4cae49b3ec63925ecd75c126.jpeg" + } + ] + }, + { + "fileId": "7939", + "contributors": [ + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 389.86, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" + } + ] + }, + { + "fileId": "7935", + "contributors": [ + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 623.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" + }, + { + "id": 15381970, + "username": "tzbkk", + "totalCosts": 14.14, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" + }, + { + "id": 15073799, + "username": "GoForceX", + "totalCosts": 13.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" + }, + { + "id": 15906651, + "username": "ying.ying09", + "totalCosts": 13.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" + } + ] + }, + { + "fileId": "8007", + "contributors": [ + { + "id": 15636829, + "username": "bdwms", + "totalCosts": 349.46, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15636829/medium/434d40bf423f53879e795cc158b1b892.jpeg" + } + ] + }, + { + "fileId": "7585", + "contributors": [ + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 83.83, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" + }, + { + "id": 15906651, + "username": "ying.ying09", + "totalCosts": 77.77, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" + }, + { + "id": 15884671, + "username": "zhaozhenming", + "totalCosts": 12.12, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15884671/medium/60884f4a653164bb3d315f947cbecd83_default.png" + }, + { + "id": 15073799, + "username": "GoForceX", + "totalCosts": 4.04, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" + } + ] + }, + { + "fileId": "7581", + "contributors": [ + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 7.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" + } + ] + }, + { + "fileId": "7589", + "contributors": [ + { + "id": 15914021, + "username": "Ddoulia", + "totalCosts": 64.64, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15914021/medium/13855b7697a0cde0c03d933febee047d_default.png" + }, + { + "id": 15871701, + "username": "maxwellcotto", + "totalCosts": 50.5, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15871701/medium/211aaa985795803b88e9fa89069ed517.png" + }, + { + "id": 15911295, + "username": "Xin_Cheng", + "totalCosts": 13.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" + } + ] + }, + { + "fileId": "8015", + "contributors": [ + { + "id": 15073799, + "username": "GoForceX", + "totalCosts": 220.18, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" + }, + { + "id": 15209850, + "username": "iamlyl913", + "totalCosts": 136.35, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15209850/medium/ffa13023a66cff49a460ae85f3dc1c53.jpeg" + }, + { + "id": 16028252, + "username": "milkfeng666", + "totalCosts": 61.61, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16028252/medium/df1172a80c8f0c52a390d9f69b452f4a.png" + }, + { + "id": 16208002, + "username": "Kinchie", + "totalCosts": 57.57, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16208002/medium/5bd76cd59d9f7715d3adb1d2d34af26b.png" + }, + { + "id": 15924353, + "username": "Li_Rui", + "totalCosts": 53.53, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15924353/medium/24be33af9672c1afbe79146c7acda3a0_default.png" + }, + { + "id": 16105472, + "username": "Mindy00", + "totalCosts": 39.39, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16105472/medium/e3c4ba4f35bd3c3e5bc13053976cd282.png" + }, + { + "id": 16158452, + "username": "sang_shi", + "totalCosts": 8.08, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16158452/medium/8544f339158effd95f9bda0987cb93aa_default.png" + }, + { + "id": 15906651, + "username": "ying.ying09", + "totalCosts": 2.02, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15906651/medium/7fbb552cabdbfcd79477e56fc90a2670.png" + } + ] } ] }, @@ -70192,24 +71368,30 @@ { "fileId": "5559", "contributors": [ - { - "id": 15532451, - "username": "hmsc", - "totalCosts": 428.24, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532451/medium/1558c22671c8674e0f77412238047eb8_default.png" - }, { "id": 14779158, "username": "K0ue1", - "totalCosts": 349.46, + "totalCosts": 315.12, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14779158/medium/a0145bfd442c7c2b368c5aeae336f176.png" }, + { + "id": 15399006, + "username": "Xeift", + "totalCosts": 242.4, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" + }, { "id": 15201846, "username": "boyinlee", - "totalCosts": 202, + "totalCosts": 163.62, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, + { + "id": 15532451, + "username": "hmsc", + "totalCosts": 108.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532451/medium/1558c22671c8674e0f77412238047eb8_default.png" + }, { "id": 13436337, "username": "billy3321", @@ -70219,13 +71401,13 @@ { "id": 15427012, "username": "jinglin", - "totalCosts": 38.38, + "totalCosts": 17.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15427012/medium/7b10232b01ac5f78f85f3503538bcc63.jpeg" }, { "id": 15550507, "username": "Jimbo_L", - "totalCosts": 38.38, + "totalCosts": 17.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15550507/medium/2aaa6dc51fbb57d36b6b8106d06c85fe.jpeg" } ] @@ -70236,7 +71418,7 @@ { "id": 15201846, "username": "boyinlee", - "totalCosts": 2136.15, + "totalCosts": 1834.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, { @@ -70248,7 +71430,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 46.46, + "totalCosts": 31.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] @@ -70259,13 +71441,13 @@ { "id": 14779158, "username": "K0ue1", - "totalCosts": 1123.12, + "totalCosts": 1103.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14779158/medium/a0145bfd442c7c2b368c5aeae336f176.png" }, { "id": 15399006, "username": "Xeift", - "totalCosts": 151.5, + "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { @@ -70279,36 +71461,36 @@ { "fileId": "7461", "contributors": [ - { - "id": 15783149, - "username": "xy710.eth", - "totalCosts": 826.18, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15783149/medium/f395b4c1a1b358bcc9e01ef741887e40.jpeg" - }, { "id": 15399006, "username": "Xeift", - "totalCosts": 595.9, + "totalCosts": 538.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, + { + "id": 15783149, + "username": "xy710.eth", + "totalCosts": 473.69, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15783149/medium/f395b4c1a1b358bcc9e01ef741887e40.jpeg" + }, { "id": 15024805, "username": "laneser.kuo", - "totalCosts": 101, + "totalCosts": 63.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15024805/medium/397e610d238f3db6882905462dcecac0.jpeg" }, - { - "id": 15438498, - "username": "marshmallowc.eth", - "totalCosts": 48.48, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15438498/medium/220c25b0ab4e895458d180d3a3141731.png" - }, { "id": 15854915, "username": "sean7115", "totalCosts": 32.32, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15854915/medium/a947beba65ada83c48f0c0fe11300893.jpeg" }, + { + "id": 15438498, + "username": "marshmallowc.eth", + "totalCosts": 19.19, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15438498/medium/220c25b0ab4e895458d180d3a3141731.png" + }, { "id": 15816617, "username": "floaty", @@ -70343,29 +71525,17 @@ { "fileId": "5565", "contributors": [ - { - "id": 15783149, - "username": "xy710.eth", - "totalCosts": 213.11, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15783149/medium/f395b4c1a1b358bcc9e01ef741887e40.jpeg" - }, - { - "id": 15055487, - "username": "xaviershen1", - "totalCosts": 139.38, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055487/medium/10522705934133754c3c30644a91e987.png" - }, { "id": 15399006, "username": "Xeift", - "totalCosts": 134.33, + "totalCosts": 519.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { - "id": 16111822, - "username": "Volcano05", - "totalCosts": 74.74, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16111822/medium/fe2f14e85b4751cc55a9e308291e1951.png" + "id": 15783149, + "username": "xy710.eth", + "totalCosts": 153.52, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15783149/medium/f395b4c1a1b358bcc9e01ef741887e40.jpeg" }, { "id": 15947735, @@ -70373,10 +71543,16 @@ "totalCosts": 65.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947735/medium/4023f995a7c5a29531aba4ba3d6f4c73.jpg" }, + { + "id": 15055487, + "username": "xaviershen1", + "totalCosts": 65.65, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055487/medium/10522705934133754c3c30644a91e987.png" + }, { "id": 16007311, "username": "Swiftevo", - "totalCosts": 47.47, + "totalCosts": 40.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16007311/medium/47584f21b0a63d55da89c106d20825e9.png" }, { @@ -70385,6 +71561,12 @@ "totalCosts": 24.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14779158/medium/a0145bfd442c7c2b368c5aeae336f176.png" }, + { + "id": 16111822, + "username": "Volcano05", + "totalCosts": 23.23, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16111822/medium/fe2f14e85b4751cc55a9e308291e1951.png" + }, { "id": 15224386, "username": "telebee", @@ -70399,7 +71581,7 @@ { "id": 15055487, "username": "xaviershen1", - "totalCosts": 298.96, + "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055487/medium/10522705934133754c3c30644a91e987.png" }, { @@ -70422,32 +71604,20 @@ { "id": 15201846, "username": "boyinlee", - "totalCosts": 1076.66, + "totalCosts": 526.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, - { - "id": 15399006, - "username": "Xeift", - "totalCosts": 128.27, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" - }, { "id": 15454738, "username": "Nephia888", - "totalCosts": 92.92, + "totalCosts": 56.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15454738/medium/b46f804087652192a258e3807e2beeb3.jpeg" }, { - "id": 15242372, - "username": "billwang", - "totalCosts": 37.37, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242372/medium/23bf740e9d096ee0b3de7b9f5528c8c9.JPG" - }, - { - "id": 15871701, - "username": "maxwellcotto", - "totalCosts": 15.15, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15871701/medium/211aaa985795803b88e9fa89069ed517.png" + "id": 15399006, + "username": "Xeift", + "totalCosts": 47.47, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { "id": 15425666, @@ -70708,7 +71878,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 123.22, + "totalCosts": 122.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] @@ -70719,7 +71889,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 749.42, + "totalCosts": 745.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { @@ -70862,15 +72032,9 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 1010, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, - { - "id": 15532451, - "username": "hmsc", - "totalCosts": 155.54, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532451/medium/1558c22671c8674e0f77412238047eb8_default.png" - }, { "id": 15783149, "username": "xy710.eth", @@ -70925,19 +72089,19 @@ { "id": 15201846, "username": "boyinlee", - "totalCosts": 1248.36, + "totalCosts": 1016.06, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, { "id": 15550507, "username": "Jimbo_L", - "totalCosts": 719.12, + "totalCosts": 631.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15550507/medium/2aaa6dc51fbb57d36b6b8106d06c85fe.jpeg" }, { "id": 15871701, "username": "maxwellcotto", - "totalCosts": 142.41, + "totalCosts": 114.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15871701/medium/211aaa985795803b88e9fa89069ed517.png" }, { @@ -70986,17 +72150,17 @@ "totalCosts": 151.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15841839/medium/0a25585c566bb1f7be4cba84b02e8561_default.png" }, + { + "id": 15399006, + "username": "Xeift", + "totalCosts": 33.33, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" + }, { "id": 15247752, "username": "18349693112mingdong", "totalCosts": 30.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247752/medium/6040b92390942af3589d4671ae199975.png" - }, - { - "id": 15399006, - "username": "Xeift", - "totalCosts": 30.3, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] }, @@ -71012,7 +72176,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 161.6, + "totalCosts": 153.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { @@ -71033,18 +72197,18 @@ "totalCosts": 115.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14298362/medium/faa58e5522ded9b4f4fe7628c5352a59.png" }, - { - "id": 15247752, - "username": "18349693112mingdong", - "totalCosts": 93.93, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247752/medium/6040b92390942af3589d4671ae199975.png" - }, { "id": 15841839, "username": "ekc9399", "totalCosts": 91.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15841839/medium/0a25585c566bb1f7be4cba84b02e8561_default.png" }, + { + "id": 15247752, + "username": "18349693112mingdong", + "totalCosts": 85.85, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15247752/medium/6040b92390942af3589d4671ae199975.png" + }, { "id": 15342090, "username": "tofus7.45", @@ -71077,7 +72241,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 12.12, + "totalCosts": 33.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] @@ -71094,7 +72258,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 98.98, + "totalCosts": 82.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { @@ -71145,13 +72309,13 @@ { "id": 15222542, "username": "Jcys", - "totalCosts": 495.91, + "totalCosts": 450.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15222542/medium/c4b538278714558f9a5430c0cef783de.JPG" }, { "id": 15399006, "username": "Xeift", - "totalCosts": 80.8, + "totalCosts": 49.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] @@ -71309,7 +72473,7 @@ { "id": 15055487, "username": "xaviershen1", - "totalCosts": 509.04, + "totalCosts": 489.85, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055487/medium/10522705934133754c3c30644a91e987.png" }, { @@ -71321,7 +72485,7 @@ { "id": 15532451, "username": "hmsc", - "totalCosts": 141.4, + "totalCosts": 101, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532451/medium/1558c22671c8674e0f77412238047eb8_default.png" }, { @@ -71361,13 +72525,13 @@ { "id": 15806537, "username": "Tyou", - "totalCosts": 611.05, + "totalCosts": 531.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15806537/medium/bcd829ea4cae49b3ec63925ecd75c126.jpeg" }, { "id": 15399006, "username": "Xeift", - "totalCosts": 60.6, + "totalCosts": 34.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] @@ -71378,7 +72542,7 @@ { "id": 15806537, "username": "Tyou", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15806537/medium/bcd829ea4cae49b3ec63925ecd75c126.jpeg" }, { @@ -71452,13 +72616,13 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 1546.31, + "totalCosts": 1472.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { "id": 15952201, "username": "Eniale", - "totalCosts": 865.57, + "totalCosts": 742.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15952201/medium/70ddfc80063bd4b296bc3997bd5fd808_default.png" }, { @@ -71467,17 +72631,17 @@ "totalCosts": 54.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954241/medium/a436b3580fe56bf2b5ccab541ae29695.png" }, - { - "id": 14661950, - "username": "kenforever", - "totalCosts": 45.45, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" - }, { "id": 15965405, "username": "LaraWeb3", "totalCosts": 36.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965405/medium/8eeddd3c27c380aeaca8bf3c9ce55c5f_default.png" + }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 26.26, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" } ] }, @@ -71487,7 +72651,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 478.74, + "totalCosts": 493.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { @@ -71552,13 +72716,13 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 978.69, + "totalCosts": 1280.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { "id": 13132928, "username": "ntiunn", - "totalCosts": 156.55, + "totalCosts": 140.39, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13132928/medium/7279036c1c0338ff05bbdb649b9b6c56_default.png" } ] @@ -71569,13 +72733,13 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 256.54, + "totalCosts": 193.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { "id": 15957819, "username": "ming30650", - "totalCosts": 236.34, + "totalCosts": 185.84, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15957819/medium/2baae61ca579f0a04efd89cd210f2c6a_default.png" } ] @@ -71586,13 +72750,13 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 848.4, + "totalCosts": 560.55, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { "id": 15957819, "username": "ming30650", - "totalCosts": 257.55, + "totalCosts": 221.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15957819/medium/2baae61ca579f0a04efd89cd210f2c6a_default.png" } ] @@ -71661,7 +72825,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 1034.24, + "totalCosts": 1055.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] @@ -71672,8 +72836,14 @@ { "id": 15956019, "username": "cc03668", - "totalCosts": 536.31, + "totalCosts": 435.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956019/medium/2db4e1795f6076358b4fc078852af802.png" + }, + { + "id": 15399006, + "username": "Xeift", + "totalCosts": 71.71, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] }, @@ -71706,13 +72876,13 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 672.66, + "totalCosts": 415.11, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { "id": 15055487, "username": "xaviershen1", - "totalCosts": 130.29, + "totalCosts": 56.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055487/medium/10522705934133754c3c30644a91e987.png" }, { @@ -71729,7 +72899,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 1653.37, + "totalCosts": 1673.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { @@ -71757,13 +72927,13 @@ { "id": 15532451, "username": "hmsc", - "totalCosts": 483.79, + "totalCosts": 383.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532451/medium/1558c22671c8674e0f77412238047eb8_default.png" }, { "id": 15952273, "username": "Soplayerone", - "totalCosts": 133.32, + "totalCosts": 88.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15952273/medium/6e9e5b686eb18071b84f2eaf7273db6e_default.png" }, { @@ -71797,25 +72967,25 @@ { "id": 15242372, "username": "billwang", - "totalCosts": 588.83, + "totalCosts": 571.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15242372/medium/23bf740e9d096ee0b3de7b9f5528c8c9.JPG" }, - { - "id": 15174096, - "username": "13u22", - "totalCosts": 401.98, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15174096/medium/2c7598abbcf6dc776b41f9443584bf8f.jpeg" - }, { "id": 15066445, "username": "tanyeun", - "totalCosts": 341.38, + "totalCosts": 322.19, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15066445/medium/20bd201d087c38f8a96c927fea208225.jpeg" }, + { + "id": 15174096, + "username": "13u22", + "totalCosts": 283.81, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15174096/medium/2c7598abbcf6dc776b41f9443584bf8f.jpeg" + }, { "id": 15224386, "username": "telebee", - "totalCosts": 243.41, + "totalCosts": 224.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15224386/medium/52b2ec0ff1b2d2f6893458a3a632a2eb_default.png" }, { @@ -71838,19 +73008,19 @@ { "id": 15251854, "username": "hippoho328", - "totalCosts": 734.27, + "totalCosts": 722.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15251854/medium/39e556aa8b3d0ae336aff10f90cb6b49.jpg" }, { "id": 15399006, "username": "Xeift", - "totalCosts": 503.99, + "totalCosts": 457.53, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { "id": 15201846, "username": "boyinlee", - "totalCosts": 147.46, + "totalCosts": 129.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, { @@ -71867,25 +73037,25 @@ { "id": 15730443, "username": "shinnku", - "totalCosts": 2223.01, + "totalCosts": 2027.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15730443/medium/66ac38b84d1d3ef0166033202f82e355.png" }, { "id": 15957819, "username": "ming30650", - "totalCosts": 635.29, + "totalCosts": 350.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15957819/medium/2baae61ca579f0a04efd89cd210f2c6a_default.png" }, { "id": 14778478, "username": "ricky321u", - "totalCosts": 227.25, + "totalCosts": 166.65, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14778478/medium/4172614fb3568f84106c89c102f7fb5b_default.png" }, { "id": 15508914, "username": "0xycl", - "totalCosts": 125.24, + "totalCosts": 87.87, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15508914/medium/98fd4c1396bf4b16bcf44f291ee28fcc.png" }, { @@ -71998,7 +73168,7 @@ { "id": 13132928, "username": "ntiunn", - "totalCosts": 4892.44, + "totalCosts": 4819.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13132928/medium/7279036c1c0338ff05bbdb649b9b6c56_default.png" }, { @@ -72030,7 +73200,7 @@ { "id": 15226202, "username": "pilvijo", - "totalCosts": 822.14, + "totalCosts": 440.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15226202/medium/15d4243c7a2591719761b363c316d12b.png" }, { @@ -72060,17 +73230,17 @@ { "fileId": "5565", "contributors": [ - { - "id": 15956433, - "username": "0xkal", - "totalCosts": 230.28, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956433/medium/b911054c60a1c43f6c2c3526df9f632c_default.png" - }, { "id": 15954079, "username": "_Manax_", - "totalCosts": 121.2, + "totalCosts": 114.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15954079/medium/a1d18eea9ff3663836816373ecaf90e7.jpeg" + }, + { + "id": 15956433, + "username": "0xkal", + "totalCosts": 73.73, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15956433/medium/b911054c60a1c43f6c2c3526df9f632c_default.png" } ] } @@ -72085,7 +73255,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 1342.29, + "totalCosts": 644.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" }, { @@ -72107,14 +73277,14 @@ "contributors": [ { "id": 16275116, - "username": "efereum", - "totalCosts": 361.58, + "username": "Kuu_", + "totalCosts": 243.41, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16275116/medium/514d93e943fe6c7ac6a122f588df32f8_default.png" }, { "id": 15837955, "username": "Magdalena_", - "totalCosts": 207.05, + "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" }, { @@ -72149,13 +73319,13 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 1638.22, + "totalCosts": 1451.37, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" }, { "id": 15468038, "username": "JohnAcc", - "totalCosts": 531.26, + "totalCosts": 412.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15468038/medium/bda4b214be5c98f685c5e1d4d752aa6f.png" } ] @@ -72166,7 +73336,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 3100.7, + "totalCosts": 2980.51, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" }, { @@ -72183,7 +73353,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 1582.67, + "totalCosts": 1165.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72194,7 +73364,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72205,7 +73375,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 699.93, + "totalCosts": 630.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72216,7 +73386,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 1333.2, + "totalCosts": 628.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72282,7 +73452,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 1323.1, + "totalCosts": 1090.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72298,7 +73468,7 @@ }, { "id": 16275116, - "username": "efereum", + "username": "Kuu_", "totalCosts": 7.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16275116/medium/514d93e943fe6c7ac6a122f588df32f8_default.png" } @@ -72321,7 +73491,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 927.18, + "totalCosts": 855.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72349,7 +73519,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72360,7 +73530,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72393,7 +73563,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 2464.4, + "totalCosts": 2262.4, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72404,7 +73574,7 @@ { "id": 15710553, "username": "StarIsland", - "totalCosts": 1658.42, + "totalCosts": 1609.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15710553/medium/0ac5008c20552404c3f6826699f42375.jpg" } ] @@ -72415,7 +73585,7 @@ { "id": 15837955, "username": "Magdalena_", - "totalCosts": 3186.55, + "totalCosts": 2607.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15837955/medium/8c0a833a266fd86e17f6e6ce9592278d.jpg" } ] @@ -72442,7 +73612,7 @@ { "id": 15952609, "username": "mk_1023", - "totalCosts": 351.48, + "totalCosts": 187.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15952609/medium/2cefc34ddb056ff1a484e60803e24088_default.png" }, { @@ -72464,7 +73634,7 @@ { "id": 15952403, "username": "Ezejoe36", - "totalCosts": 1346.33, + "totalCosts": 648.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15952403/medium/70fcdec4d0f8ee875339e30b96862a26.jpeg" } ] @@ -72475,7 +73645,7 @@ { "id": 15948377, "username": "Isaachavertz", - "totalCosts": 927.18, + "totalCosts": 855.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15948377/medium/b55b9374fd682ba0148fe93427edeb2a.jpg" } ] @@ -72497,7 +73667,7 @@ { "id": 15948377, "username": "Isaachavertz", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15948377/medium/b55b9374fd682ba0148fe93427edeb2a.jpg" } ] @@ -72508,7 +73678,7 @@ { "id": 15948377, "username": "Isaachavertz", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15948377/medium/b55b9374fd682ba0148fe93427edeb2a.jpg" } ] @@ -72552,7 +73722,7 @@ { "id": 15948377, "username": "Isaachavertz", - "totalCosts": 348.45, + "totalCosts": 184.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15948377/medium/b55b9374fd682ba0148fe93427edeb2a.jpg" }, { @@ -72574,7 +73744,7 @@ { "id": 15880343, "username": "hangleang", - "totalCosts": 280.78, + "totalCosts": 173.72, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15880343/medium/4b6df183916557610b51230915a5f9eb_default.png" } ] @@ -72590,7 +73760,7 @@ { "id": 15967847, "username": "luniacllama", - "totalCosts": 1270.58, + "totalCosts": 575.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967847/medium/76cc99da9c9731bac54edf64508ac14f.jpeg" } ] @@ -72601,7 +73771,7 @@ { "id": 15967185, "username": "waseemnaik", - "totalCosts": 321.18, + "totalCosts": 157.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { @@ -72618,13 +73788,13 @@ { "id": 15967185, "username": "waseemnaik", - "totalCosts": 2001.82, + "totalCosts": 1720.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { "id": 15967847, "username": "luniacllama", - "totalCosts": 166.65, + "totalCosts": 146.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967847/medium/76cc99da9c9731bac54edf64508ac14f.jpeg" } ] @@ -72635,7 +73805,7 @@ { "id": 15967185, "username": "waseemnaik", - "totalCosts": 3106.76, + "totalCosts": 2986.57, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" } ] @@ -72646,13 +73816,13 @@ { "id": 15967847, "username": "luniacllama", - "totalCosts": 1096.86, + "totalCosts": 798.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967847/medium/76cc99da9c9731bac54edf64508ac14f.jpeg" }, { "id": 15967185, "username": "waseemnaik", - "totalCosts": 485.81, + "totalCosts": 366.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" } ] @@ -72663,13 +73833,13 @@ { "id": 15967185, "username": "waseemnaik", - "totalCosts": 592.87, + "totalCosts": 307.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { "id": 15967847, "username": "luniacllama", - "totalCosts": 572.67, + "totalCosts": 247.45, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967847/medium/76cc99da9c9731bac54edf64508ac14f.jpeg" } ] @@ -72680,13 +73850,13 @@ { "id": 15967185, "username": "waseemnaik", - "totalCosts": 451.47, + "totalCosts": 435.31, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { "id": 15967847, "username": "luniacllama", - "totalCosts": 248.46, + "totalCosts": 194.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967847/medium/76cc99da9c9731bac54edf64508ac14f.jpeg" } ] @@ -72697,13 +73867,13 @@ { "id": 15967185, "username": "waseemnaik", - "totalCosts": 902.94, + "totalCosts": 458.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967185/medium/8544c16b7d24e687e63334d42c70d6dd.png" }, { "id": 15967847, "username": "luniacllama", - "totalCosts": 430.26, + "totalCosts": 169.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967847/medium/76cc99da9c9731bac54edf64508ac14f.jpeg" } ] @@ -72719,7 +73889,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 1346.33, + "totalCosts": 648.42, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72730,7 +73900,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 2168.47, + "totalCosts": 1866.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72741,7 +73911,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 3093.63, + "totalCosts": 2973.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72752,7 +73922,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 1582.67, + "totalCosts": 1165.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72763,7 +73933,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 351.48, + "totalCosts": 187.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72774,7 +73944,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72785,7 +73955,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 699.93, + "totalCosts": 630.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72796,7 +73966,7 @@ { "id": 15962007, "username": "omkarkamale001", - "totalCosts": 1333.2, + "totalCosts": 628.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15962007/medium/9019d6a347ebffa6f6464e00132355aa.jpeg" } ] @@ -72812,7 +73982,7 @@ { "id": 15966817, "username": "afiqz", - "totalCosts": 299.97, + "totalCosts": 165.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15966817/medium/c84993de3bc9bf0b9eb7882012279118_default.png" }, { @@ -72835,7 +74005,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 1337.24, + "totalCosts": 639.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" }, { @@ -72852,7 +74022,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 927.18, + "totalCosts": 855.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" } ] @@ -72874,7 +74044,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 671.65, + "totalCosts": 565.6, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" } ] @@ -72918,7 +74088,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 13683.48, + "totalCosts": 13657.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" }, { @@ -72935,7 +74105,7 @@ { "id": 15934037, "username": "fuji.anggara10", - "totalCosts": 281.79, + "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15934037/medium/e913f10d6d3550452e0b7c072e15aa40.jpeg" } ] @@ -72951,13 +74121,13 @@ { "id": 15769467, "username": "seunbayo", - "totalCosts": 1006.97, + "totalCosts": 342.39, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15769467/medium/8532abcb64313bbe86bddfbe926187ea_default.png" }, { "id": 15813587, "username": "Melasin", - "totalCosts": 339.36, + "totalCosts": 306.03, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15813587/medium/07b0aaedbd8922799e42b1707269a374.jpg" } ] @@ -72965,18 +74135,18 @@ { "fileId": "5565", "contributors": [ - { - "id": 15949885, - "username": "ikpongetimfon", - "totalCosts": 174.73, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15949885/medium/2bd51be5552240f36b7fc65871d64446.png" - }, { "id": 15921661, "username": "Bohjypellar", - "totalCosts": 111.1, + "totalCosts": 94.94, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15921661/medium/46083a608a938f869b4855d0113b3930.jpg" }, + { + "id": 15949885, + "username": "ikpongetimfon", + "totalCosts": 80.8, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15949885/medium/2bd51be5552240f36b7fc65871d64446.png" + }, { "id": 16111424, "username": "BETTER14", @@ -72996,13 +74166,13 @@ { "id": 15885247, "username": "ct1aic.eth", - "totalCosts": 1305.93, + "totalCosts": 608.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15885247/medium/cf22113f9226047f8f9868e4774bc4c3.png" }, { "id": 15448076, "username": "sarasanches", - "totalCosts": 115.14, + "totalCosts": 103.02, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15448076/medium/1da781dbffa2f686d99932a0bdf29859_default.png" } ] @@ -73013,7 +74183,7 @@ { "id": 15885247, "username": "ct1aic.eth", - "totalCosts": 213.11, + "totalCosts": 116.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15885247/medium/cf22113f9226047f8f9868e4774bc4c3.png" }, { @@ -73036,13 +74206,13 @@ { "id": 15885247, "username": "ct1aic.eth", - "totalCosts": 2117.97, + "totalCosts": 1815.98, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15885247/medium/cf22113f9226047f8f9868e4774bc4c3.png" }, { "id": 15449494, "username": "joaoamaral66", - "totalCosts": 101, + "totalCosts": 80.8, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15449494/medium/c1e5779761bc1daebe30bf868e6664f6_default.png" }, { @@ -73059,13 +74229,13 @@ { "id": 15885247, "username": "ct1aic.eth", - "totalCosts": 2482.58, + "totalCosts": 2382.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15885247/medium/cf22113f9226047f8f9868e4774bc4c3.png" }, { "id": 15912919, "username": "KARINE.DAROS", - "totalCosts": 512.07, + "totalCosts": 491.87, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15912919/medium/cfb356818ffad4c59d4aea11c3c64c28.png" }, { @@ -73082,7 +74252,7 @@ { "id": 15885247, "username": "ct1aic.eth", - "totalCosts": 1582.67, + "totalCosts": 1165.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15885247/medium/cf22113f9226047f8f9868e4774bc4c3.png" } ] @@ -73093,13 +74263,13 @@ { "id": 15885247, "username": "ct1aic.eth", - "totalCosts": 760.53, + "totalCosts": 413.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15885247/medium/cf22113f9226047f8f9868e4774bc4c3.png" }, { "id": 15938189, "username": "altinocoelho", - "totalCosts": 408.04, + "totalCosts": 144.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15938189/medium/a94b70c2f9891e65834e1864392d4912.png" } ] @@ -73110,7 +74280,7 @@ { "id": 15938189, "username": "altinocoelho", - "totalCosts": 301.99, + "totalCosts": 248.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15938189/medium/a94b70c2f9891e65834e1864392d4912.png" }, { @@ -73127,7 +74297,7 @@ { "id": 15885247, "username": "ct1aic.eth", - "totalCosts": 1333.2, + "totalCosts": 628.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15885247/medium/cf22113f9226047f8f9868e4774bc4c3.png" } ] @@ -73143,7 +74313,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 1337.24, + "totalCosts": 639.33, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" } ] @@ -73154,7 +74324,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 343.4, + "totalCosts": 179.78, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" }, { @@ -73171,7 +74341,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 2168.47, + "totalCosts": 1866.48, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" } ] @@ -73182,7 +74352,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 3099.69, + "totalCosts": 2979.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" } ] @@ -73193,7 +74363,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 1582.67, + "totalCosts": 1165.54, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" } ] @@ -73204,7 +74374,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 1165.54, + "totalCosts": 554.49, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" } ] @@ -73215,7 +74385,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 699.93, + "totalCosts": 630.24, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" } ] @@ -73226,7 +74396,7 @@ { "id": 15967793, "username": "TanjaPale", - "totalCosts": 1333.2, + "totalCosts": 628.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967793/medium/7a23945a1b7ec0fd21d81d4820ba115f_default.png" } ] diff --git a/src/data/crowdin/translation-buckets-dirs.json b/src/data/crowdin/translation-buckets-dirs.json index d8a003ebaa7..e81dbe5b8f5 100644 --- a/src/data/crowdin/translation-buckets-dirs.json +++ b/src/data/crowdin/translation-buckets-dirs.json @@ -77,7 +77,7 @@ }, { "id": 7517, - "name": "08) Learn Hub & Guides" + "name": "08) Learn Hub and Guides" }, { "id": 7819, @@ -110,5 +110,9 @@ { "id": 7833, "name": "28) Developer Tutorials IV" + }, + { + "id": 11098, + "name": "Test directory" } ] \ No newline at end of file From 8380b60356227645651a09b3d424ee03ed7f512e Mon Sep 17 00:00:00 2001 From: Darigov Research <30328618+darigovresearch@users.noreply.github.com> Date: Sun, 14 Apr 2024 20:56:56 +0100 Subject: [PATCH 057/219] feat: Adds Security policy Would resolve https://github.com/ethereum/ethereum-org-website/issues/12552 if merged --- SECURITY.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..6f73fe5a709 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,9 @@ +# Security Policy + +## Supported Versions + +Generally only the latest version of this software is in production, and risks are more related to the potential for users to be directed to scams. + +## Reporting a Vulnerability + +It is recommended that any potential critical vulnerabilities be reported through the security@ethereum.org email address using the PGP outlined in https://ethereum.org/.well-known/security.txt From b8ba4a9bbb9690e8aead9394c32e4317feecae96 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Mon, 15 Apr 2024 14:43:31 +0100 Subject: [PATCH 058/219] Update src/data/crowdin/translation-buckets-dirs.json --- src/data/crowdin/translation-buckets-dirs.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/data/crowdin/translation-buckets-dirs.json b/src/data/crowdin/translation-buckets-dirs.json index e81dbe5b8f5..40947f5af95 100644 --- a/src/data/crowdin/translation-buckets-dirs.json +++ b/src/data/crowdin/translation-buckets-dirs.json @@ -110,9 +110,5 @@ { "id": 7833, "name": "28) Developer Tutorials IV" - }, - { - "id": 11098, - "name": "Test directory" } ] \ No newline at end of file From dbd84111bae8b6a9ac7fd86e5132aceb13910ead Mon Sep 17 00:00:00 2001 From: Dharmik79 Date: Tue, 16 Apr 2024 00:46:11 -0600 Subject: [PATCH 059/219] added the useEffect to allow the reorder for the wallets based on locale --- src/hooks/useWalletTable.tsx | 10 +++++++++- src/pages/wallets/find-wallet.tsx | 6 +++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/hooks/useWalletTable.tsx b/src/hooks/useWalletTable.tsx index 0251b7391dc..4a173dd8a37 100644 --- a/src/hooks/useWalletTable.tsx +++ b/src/hooks/useWalletTable.tsx @@ -1,4 +1,4 @@ -import { useContext, useState } from "react" +import { useContext, useEffect, useState } from "react" import { DropdownOption } from "@/lib/types" @@ -126,6 +126,14 @@ export const useWalletTable = ({ }) ) + useEffect(() => { + setWalletData( + walletData.map((wallet) => { + return { ...wallet, moreInfo: false, key: wallet.name } + }) + ) + }, [walletData]) + // Context API for language filter const { supportedLanguage } = useContext(WalletSupportedLanguageContext) diff --git a/src/pages/wallets/find-wallet.tsx b/src/pages/wallets/find-wallet.tsx index c2fcf86f0d9..5c3f394e602 100644 --- a/src/pages/wallets/find-wallet.tsx +++ b/src/pages/wallets/find-wallet.tsx @@ -95,11 +95,15 @@ const FindWalletPage = () => { // If any wallet supports user's locale, show them (shuffled) at the top and then the remaining ones useEffect(() => { + const supportedLocaleWallets = getSupportedLocaleWallets(locale!) + + const noSupportedLocaleWallets = getNonSupportedLocaleWallets(locale!) + setRandomizedWalletData( supportedLocaleWallets.concat(noSupportedLocaleWallets) ) // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) + }, [locale]) const updateFilterOption = (key) => { const updatedFilters = { ...filters } From 8e2ff2d16338ba846c5f397c9c812ec5a305e090 Mon Sep 17 00:00:00 2001 From: JeffreyJoel Date: Tue, 16 Apr 2024 13:16:37 +0100 Subject: [PATCH 060/219] feat: Remove Gitcoin bounties from get involved page --- public/content/community/get-involved/index.md | 1 - public/content/translations/ca/community/get-involved/index.md | 1 - public/content/translations/de/community/get-involved/index.md | 1 - public/content/translations/el/community/get-involved/index.md | 1 - public/content/translations/es/community/get-involved/index.md | 1 - public/content/translations/fa/community/get-involved/index.md | 1 - public/content/translations/fr/community/get-involved/index.md | 1 - public/content/translations/hu/community/get-involved/index.md | 1 - public/content/translations/id/community/get-involved/index.md | 2 +- public/content/translations/it/community/get-involved/index.md | 3 +-- public/content/translations/ja/community/get-involved/index.md | 1 - public/content/translations/nl/community/get-involved/index.md | 1 - public/content/translations/pl/community/get-involved/index.md | 1 - .../content/translations/pt-br/community/get-involved/index.md | 1 - public/content/translations/ro/community/get-involved/index.md | 1 - public/content/translations/ru/community/get-involved/index.md | 1 - public/content/translations/sw/community/get-involved/index.md | 1 - public/content/translations/tr/community/get-involved/index.md | 1 - public/content/translations/uk/community/get-involved/index.md | 1 - .../content/translations/zh-tw/community/get-involved/index.md | 1 - public/content/translations/zh/community/get-involved/index.md | 1 - 21 files changed, 2 insertions(+), 22 deletions(-) diff --git a/public/content/community/get-involved/index.md b/public/content/community/get-involved/index.md index 28bd6fbd953..b99e42b581e 100644 --- a/public/content/community/get-involved/index.md +++ b/public/content/community/get-involved/index.md @@ -13,7 +13,6 @@ Start by reading about the ethereum.org mission and values in our [code of condu ## Developers ‍ {#developers} - Learn about and try Ethereum at [ethereum.org/developers/](/developers/) -- [Find a bounty on Gitcoin](https://gitcoin.co/), work on a small or large technical issue, earn crypto! - Attend an [ETHGlobal](http://ethglobal.co/) hackathon near you! - Check out [projects related to your area of expertise or programming language of choice](/developers/docs/programming-languages/) - Watch or participate in the [Core Dev calls](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/ca/community/get-involved/index.md b/public/content/translations/ca/community/get-involved/index.md index 2b7d0b44352..e3022f67ba3 100644 --- a/public/content/translations/ca/community/get-involved/index.md +++ b/public/content/translations/ca/community/get-involved/index.md @@ -11,7 +11,6 @@ La comunitat Ethereum inclou gent de diferents àmbits i amb diferents habilitat ## Desenvolupadors {#developers} - Descobriu i proveu Ethereum en [ethereum.org/developers/](/developers/) -- [Trobeu una recompensa en Gitcoin](https://gitcoin.co/), treballeu en un problema tècnic gran o petit, guanyeu criptoactius! - Assistiu a una convenció de programadors [ETHGlobal](http://ethglobal.co/) al vostre voltant! - Doneu una ullada a [projectes relacionats amb la vostra àrea de coneixements o de llenguatge de programació de la vostra elecció](/developers/docs/programming-languages/) - Mireu o participeu en les [trucades de desenvolupament bàsic](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/de/community/get-involved/index.md b/public/content/translations/de/community/get-involved/index.md index 34de01549ba..f2eeabf0aae 100644 --- a/public/content/translations/de/community/get-involved/index.md +++ b/public/content/translations/de/community/get-involved/index.md @@ -13,7 +13,6 @@ Machen Sie sich zunächst mit der Mission und den Grundsätze von ethereum.org i ## Entwickler {#developers} - Erfahren Sie mehr über Ethereum auf [ethereum.org/developers/](/developers/) -- [Finden Sie ein Bounty auf Gitcoin](https://gitcoin.co/), arbeiten Sie an kleinen und großen technischen Problemen und verdienen Sie Kryptowährung. - Besuchen Sie ein [ETHGlobal](http://ethglobal.co/)-Hakathon in Ihrer Nähe. - Schauen Sie sich an, welche [Projekte im Zusammenhang mit Ihrem Fachgebiet oder der Programmiersprache Ihrer Wahl](/developers/docs/programming-languages/) es gibt - Nehmen Sie teil an den [Core DEV-Calls](https://www.youtube.com/@EthereumProtocol) oder sehen Sie sie sich an diff --git a/public/content/translations/el/community/get-involved/index.md b/public/content/translations/el/community/get-involved/index.md index c1c127a5347..723eee6f53b 100644 --- a/public/content/translations/el/community/get-involved/index.md +++ b/public/content/translations/el/community/get-involved/index.md @@ -13,7 +13,6 @@ lang: el ## Προγραμματιστές {#developers} - Μάθετε σχετικά και δοκιμάστε το Ethereum στο [ethereum.org/developers/](/developers/). -- [Εντοπίστε ένα σφάλμα στο Gitcoin](https://gitcoin.co/), εργαστείτε σε ένα μικρό ή μεγάλο τεχνικό ζήτημα και κερδίστε κρυπτονομίσματα! - Παρακολουθήστε ένα [ETHGlobal](http://ethglobal.co/) hackathon κοντά σας! - Δείτε τα [έργα που σχετίζονται με τον τομέα που γνωρίζετε καλύτερα ή τη γλώσσα προγραμματισμού της επιλογής σας](/developers/docs/programming-languages/). - Παρακολουθήστε ή συμμετέχετε στις [Συγκεντρώσεις των βασικών προγραμματιστών](https://www.youtube.com/@EthereumProtocol). diff --git a/public/content/translations/es/community/get-involved/index.md b/public/content/translations/es/community/get-involved/index.md index b89b9fb6b54..dd0f1a0f397 100644 --- a/public/content/translations/es/community/get-involved/index.md +++ b/public/content/translations/es/community/get-involved/index.md @@ -13,7 +13,6 @@ Le sugerimos que comience enterándose de la misión y los valores de ethereum.o ## Desarrolladores {#developers} - Aprenda y pruebe Ethereum en [ethereum.org/developers/](/developers/) -- [Encuentre una recompensa en Gitcoin](https://gitcoin.co/), ¡solucione problemas técnicos sencillos o complejos y gane criptomonedas! - ¡Participe en un hackaton (o encuentro de programadores) [ETHGlobal](http://ethglobal.co/) cerca de donde viveo - Consulte [los proyectos relacionados con su área especialidad o el lenguaje de programación de su elección](/developers/docs/programming-languages/). - Mire o participe en las [reuniones Core Dev](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/fa/community/get-involved/index.md b/public/content/translations/fa/community/get-involved/index.md index 639acc22457..92b5a57f19c 100644 --- a/public/content/translations/fa/community/get-involved/index.md +++ b/public/content/translations/fa/community/get-involved/index.md @@ -13,7 +13,6 @@ lang: fa ## توسعه‌دهندگان {#developers} - در [ethereum.org/developers/](/developers/) درباره اتریوم یاد بگیرید و آن را امتحان کنید -- [یک جایزه در Gitcoin پیدا کنید](https://gitcoin.co/)، روی یک مشکل فنی کوچک یا بزرگ کار کنید، ارز دیجیتال کسب کنید! - در یک هکاتون [ETHGlobal](http://ethglobal.co/) در نزدیکی خود شرکت کنید! - [پروژه‌های مرتبط با حوزه‌ی تخصصی یا زبان برنامه‌نویسی انتخابی خود را بررسی کنید](/developers/docs/programming-languages/) - [تماس‌های Core Dev](https://www.youtube.com/@EthereumProtocol) را تماشا کنید و یا در آن شرکت کنید diff --git a/public/content/translations/fr/community/get-involved/index.md b/public/content/translations/fr/community/get-involved/index.md index a7c986d71a3..e52ee7c5dfd 100644 --- a/public/content/translations/fr/community/get-involved/index.md +++ b/public/content/translations/fr/community/get-involved/index.md @@ -13,7 +13,6 @@ Commencez à lire la mission et les valeurs d'ethereum.org dans notre [code de c ## Développeurs {#developers} - Découvrez et essayez Ethereum sur [ethereum.org/developers/](/developers/) -- [Trouvez une prime sur Gitcoin](https://gitcoin.co/), travaillez sur un petit ou gros problème technique, gagnez de la crypto ! - Participez à un hackathon [ETHGlobal](http://ethglobal.co/) près de chez vous ! - Consultez les [projets liés à votre domaine d'expertise ou au langage de programmation de votre choix](/developers/docs/programming-languages/) - Regardez ou participez aux [appels Core Dev](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/hu/community/get-involved/index.md b/public/content/translations/hu/community/get-involved/index.md index 2fd2ee7f48b..7bb4ca395bb 100644 --- a/public/content/translations/hu/community/get-involved/index.md +++ b/public/content/translations/hu/community/get-involved/index.md @@ -13,7 +13,6 @@ Kezdje azzal, hogy elolvassa az ethereum.org misszióját és értékeit a [maga ## Fejlesztők {#developers} - Tanuljon az Ethereumról és próbálja ki az [ethereum.org/developers/](/developers/) oldalon -- [Nyerjen jutalmat a Gitcoin-on](https://gitcoin.co/) azáltal, hogy kisebb-nagyobb technikai problémákon dolgozik, és kapjon érte kriptót! - Vegyen részt egy Önhöz közel eső [ETHGlobal](http://ethglobal.co/) hackathonon! - Nézze meg azokat a [projekteket, melyek a szakterületéhez vagy a választott programnyelvéhez kapcsolódnak](/developers/docs/programming-languages/) - Vegyen részt a [protokollfejlesztők megbeszélésein (Core Dev calls)](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/id/community/get-involved/index.md b/public/content/translations/id/community/get-involved/index.md index 955a8947de2..0ef6dca05e9 100644 --- a/public/content/translations/id/community/get-involved/index.md +++ b/public/content/translations/id/community/get-involved/index.md @@ -11,7 +11,7 @@ Komunitas Ethereum meliputi orang-orang dari beragam latar belakang dan kemampua ## Pengembang ‍ {#developers} - Pelajari tentang dan cobalah Ethereum di [ethereum.org/developers/](/developers/) -- [Temukan hadiah bounty di Gitcoin](https://gitcoin.co/), selesaikan masalah teknis kecil atau besar, dapatkan kripto! + - Datanglah ke hackathon [ETHGlobal](http://ethglobal.co/) di dekat Anda! - Lihat [proyek yang terkait dengan bidang keahlian atau bahasa pemrograman pilihan Anda](/developers/docs/programming-languages/) - Tonton atau berpartisipasilah dalam [Panggilan Dev Core](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/it/community/get-involved/index.md b/public/content/translations/it/community/get-involved/index.md index ed744bb70e7..0b4fe1bdcdc 100644 --- a/public/content/translations/it/community/get-involved/index.md +++ b/public/content/translations/it/community/get-involved/index.md @@ -13,8 +13,7 @@ Inizia leggendo la missione e i valori di ethereum.org nel nostro [codice di con ## Sviluppatori ‍ {#developers} - Scopri e prova Ethereum su [ethereum.org/developers/](/developers/) -- [Trova una ricompensa su Gitcoin](https://gitcoin.co/), lavora su una segnalazione tecnica di piccola o grande entità, guadagna in crypto! -- Partecipa ad un Hackathon vicino a te! +- Partecipa ad un [ETHGlobal](http://ethglobal.co/) Hackathon vicino a te! - Dai un'occhiata a [progetti relativi alla tua area di competenza o a linguaggi di programmazione di tua scelta](/developers/docs/programming-languages/) - Segui o partecipa alle [riunioni dei Core Dev](https://www.youtube.com/@EthereumProtocol) - [Lista del programma di supporto degli ecosistemi](https://esp.ethereum.foundation/wishlist/) - strumenti, documentazione, e infrastrutture dove il programma di supporto per l'ecosistema Ethereum è attivamente alla ricerca di domande di sovvenzione diff --git a/public/content/translations/ja/community/get-involved/index.md b/public/content/translations/ja/community/get-involved/index.md index badf6723341..909d99d5d1d 100644 --- a/public/content/translations/ja/community/get-involved/index.md +++ b/public/content/translations/ja/community/get-involved/index.md @@ -11,7 +11,6 @@ lang: ja ## デベロッパー {#developers} - [ethereum.org/developers/](/developers/) - イーサリアムについての学習 -- [Gitcoin](https://gitcoin.co/) - 大小規模の技術問題に取り組み、暗号通貨の報酬を獲得 - [ETHGlobal](http://ethglobal.co/) - お近くの ETHGlobal ハッカソンへの参加 - [自分の専門分野や好きなプログラミング言語に関連するプロジェクト](/developers/docs/programming-languages/)の確認 - [Core Dev calls](https://www.youtube.com/@EthereumProtocol) - 動画の視聴および参加 diff --git a/public/content/translations/nl/community/get-involved/index.md b/public/content/translations/nl/community/get-involved/index.md index 656ee67c31f..d0d6362ba04 100644 --- a/public/content/translations/nl/community/get-involved/index.md +++ b/public/content/translations/nl/community/get-involved/index.md @@ -11,7 +11,6 @@ De Ethereum-gemeenschap omvat mensen met verschillende achtergronden en vaardigh ## Ontwikkelaars → {#developers} - Leer meer over en probeer Ethereum op [ethereum.org/developers/](/developers/) -- [Vind een premie op Gitcoin](https://gitcoin.co/), werk aan een klein of groot technisch probleem, verdien crypto! - Doe mee aan een [ETHGlobal](http://ethglobal.co/) hackathon bij u in de buurt! - Bekijk [projecten gerelateerd aan uw gebied van expertise of programmeertaal van keuze](/developers/docs/programming-languages/) - Bekijk of neem deel aan [Core Dev calls](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/pl/community/get-involved/index.md b/public/content/translations/pl/community/get-involved/index.md index 68672400880..eeebb60662b 100644 --- a/public/content/translations/pl/community/get-involved/index.md +++ b/public/content/translations/pl/community/get-involved/index.md @@ -13,7 +13,6 @@ Zacznij od zapoznania się z misją i wartościami ethereum.org w naszym [kodeks ## Deweloperzy {#developers} - Ucz się i wypróbuj Ethereum na stronie [ethereum.org/developers/](/developers/) -- [Szukaj ofert nagród za wyszukiwanie błędów (bounties) na platformie Gitcoin](https://gitcoin.co/), pracuj nad małym lub poważniejszym błędem technicznym i zarabiaj kryptowaluty! - Weź udział w hakatonie [ETHGlobal](http://ethglobal.co/) w pobliżu Twojego miejsca zamieszkania! - Sprawdź [projekty związane z Twoją dziedziną lub wybranym językiem programowania](/developers/docs/programming-languages/) - Oglądaj lub bierz udział w spotkaniach [Core Dev calls](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/pt-br/community/get-involved/index.md b/public/content/translations/pt-br/community/get-involved/index.md index 792058ce5d3..3bba4c05005 100644 --- a/public/content/translations/pt-br/community/get-involved/index.md +++ b/public/content/translations/pt-br/community/get-involved/index.md @@ -13,7 +13,6 @@ Comece lendo sobre a missão e os valores da ethereum.org no nosso [código de c ## Desenvolvedores {#developers} - Conheça e experimente o Ethereum em [ethereum.org/developers/](/developers/) -- [ Seja recompensado no Gitcoin](https://gitcoin.co/), resolva problemas técnicos pequenos ou grandes, ganhe criptomoedas! - Participe de uma hackathon [ETHGlobal](http://ethglobal.co/) perto de você! - Dê uma olhada nos [projetos relacionados à sua área de conhecimento ou linguagem de programação favorito](/developers/docs/programming-languages/) - Assista ou participe das [reuniões do núcleo de desenvolvedores](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/ro/community/get-involved/index.md b/public/content/translations/ro/community/get-involved/index.md index f5999191e17..0aba5b431ef 100644 --- a/public/content/translations/ro/community/get-involved/index.md +++ b/public/content/translations/ro/community/get-involved/index.md @@ -11,7 +11,6 @@ Comunitatea Ethereum include persoane din medii și cu competențe diferite. Fie ## Dezvoltatori {#developers} - Aflați despre Ethereum și testați-l la adresa [ethereum.org/developers/](/developers/) -- [Găsiți o recompensă pe Gitcoin](https://gitcoin.co/), lucrați la o problemă tehnică mică sau mare, câștigați cripto! - Participați la „hackathon-ul” [ETHGlobal](http://ethglobal.co/) din apropiere! - Consultați [proiectele legate de domeniul dvs. de experiență sau de limbajul de programare preferat](/developers/docs/programming-languages/) - Vizionați sau participați la [apeluri Core Dev](https://www.youtube.com/@EthereumProtocol) pe YouTube diff --git a/public/content/translations/ru/community/get-involved/index.md b/public/content/translations/ru/community/get-involved/index.md index cd75d5bb379..3bec5091eb8 100644 --- a/public/content/translations/ru/community/get-involved/index.md +++ b/public/content/translations/ru/community/get-involved/index.md @@ -13,7 +13,6 @@ lang: ru ## Разработчики {#developers} - Узнайте подробнее об Ethereum на [ethereum.org/developers/](/developers/) и попробуйте использовать -- [Получите награду на Gitcoin](https://gitcoin.co/), поработайте над незначительной или серьезной технической проблемой, заработайте криптовалюту! - Посетите ближайший к вам хакатон [ETHGlobal](http://ethglobal.co/)! - Ознакомьтесь с [проектами в вашей компетенции или на языке программирования по вашему выбору](/developers/docs/programming-languages/) - [Онлайн-встречи Core Dev](https://www.youtube.com/@EthereumProtocol): смотрите или поучаствуйте сами diff --git a/public/content/translations/sw/community/get-involved/index.md b/public/content/translations/sw/community/get-involved/index.md index 5adb1dbe984..55acf875144 100644 --- a/public/content/translations/sw/community/get-involved/index.md +++ b/public/content/translations/sw/community/get-involved/index.md @@ -11,7 +11,6 @@ Jumuiya ya Ethereum inahusisha watu wa asili tofauti na wenye ujuzi wa kila aina ## Wasimbuaji {#developers} - Jifunze kuhusu Ethereum na ijaribishe kwenye [etehereum.org/developers/](/developers/) -- [Tafuta fadhila kwenye Gitcoin](https://gitcoin.co/), fanyia kazi itilafu ndogo ama kubwa na ujipatie kripto! - Shiriki kwenye[ETHGlobal](http://ethglobal.co/)hackathon iliyokaribu nawe! - Vinjari juu ya [miradi inayohusiana na taaluma yako au lugha ya usimbuajiutakayochagua.](/developers/docs/programming-languages/) - Tazama au shiriki kwenye [mikutano ya wasimbuaji wa ndani](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/tr/community/get-involved/index.md b/public/content/translations/tr/community/get-involved/index.md index 526e0d044d5..8fd07258835 100644 --- a/public/content/translations/tr/community/get-involved/index.md +++ b/public/content/translations/tr/community/get-involved/index.md @@ -13,7 +13,6 @@ Ethereum topluluğu, birçok farklı geçmişe ve beceriye sahip insanları içe ## Geliştiriciler ‍ {#developers} - [ethereum.org/developers/](/developers/) adresinden Ethereum hakkında bilgi edinin ve Ethereum'u deneyin -- [Gitcoin'de bir ödül bulun](https://gitcoin.co/), küçük veya büyük bir teknik sorun üzerinde çalışın ve kripto kazanın! - Yakınınızdaki bir [ETHGlobal](http://ethglobal.co/) hackathon'una katılın! - Uzmanlık alanınızla veya seçtiğiniz programlama diliyle ilgili [projeleri inceleyin](/developers/docs/programming-languages/) - [Core Dev çağrılarını](https://www.youtube.com/@EthereumProtocol) izleyin veya bunlara katılın diff --git a/public/content/translations/uk/community/get-involved/index.md b/public/content/translations/uk/community/get-involved/index.md index 00f7d33b844..e777aee68d4 100644 --- a/public/content/translations/uk/community/get-involved/index.md +++ b/public/content/translations/uk/community/get-involved/index.md @@ -11,7 +11,6 @@ lang: uk ## Розробники {#developers} - Дізнайтеся докладніше про Ethereum на [ethereum.org/developers/](/developers/) і спробуйте використовувати -- [Знайдіть винагороду на Gitcoin](https://gitcoin.co/), попрацюйте з незначною або серйозною технічною проблемою, заробіть криптовалюту! - Відвідайте хакатон [ETHGlobal](http://ethglobal.co/) поруч із вами! - Ознайомтеся з [проєктами, що стосуються вашої галузі знань або вибраної мови програмування](/developers/docs/programming-languages/) - Дивіться [онлайн-зустрічі розробників](https://www.youtube.com/@EthereumProtocol) або беріть у них участь diff --git a/public/content/translations/zh-tw/community/get-involved/index.md b/public/content/translations/zh-tw/community/get-involved/index.md index 35d8280da18..d6074f892b9 100644 --- a/public/content/translations/zh-tw/community/get-involved/index.md +++ b/public/content/translations/zh-tw/community/get-involved/index.md @@ -13,7 +13,6 @@ lang: zh-tw ## 程式開發人員 {#developers} - 造訪 [ethereum.org/developers/](/developers/),瞭解和嘗試使用以太坊 -- [從 Gitcoin 獲得賞金](https://gitcoin.co/),透過解決大小技術問題來賺取加密貨幣! - 參加你附近的 [ETHGlobal](http://ethglobal.co/) 駭客松活動。 - 留意[與你的專業領域或偏好的編程語言有關的專案](/developers/docs/programming-languages/) - 觀看或參與[核心開發者會議](https://www.youtube.com/@EthereumProtocol) diff --git a/public/content/translations/zh/community/get-involved/index.md b/public/content/translations/zh/community/get-involved/index.md index 466f4ec76ae..d8b67c792fd 100644 --- a/public/content/translations/zh/community/get-involved/index.md +++ b/public/content/translations/zh/community/get-involved/index.md @@ -13,7 +13,6 @@ lang: zh ## 开发人员 {#developers} - 访问 [ethereum.org/developers/](/developers/),了解和尝试使用以太坊 -- [在 Gitcoin 上查找悬赏](https://gitcoin.co/),解决一个或大或小的技术问题,赚取加密货币! - 参加你附近的一个 [ETHGlobal](http://ethglobal.co/) 黑客马拉松活动! - 查看[与你的专业领域或所选编程语言相关的项目](/developers/docs/programming-languages/) - 观看或参与[核心开发人员电话会议](https://www.youtube.com/@EthereumProtocol) From 85feeb1fac5e4d25b7fd7ce817f6ef9397f8df6a Mon Sep 17 00:00:00 2001 From: JeffreyJoel Date: Tue, 16 Apr 2024 13:27:20 +0100 Subject: [PATCH 061/219] feat: Remove Gitcoin bounties from get involved page --- public/content/translations/id/community/get-involved/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/public/content/translations/id/community/get-involved/index.md b/public/content/translations/id/community/get-involved/index.md index 0ef6dca05e9..643ddcce4b6 100644 --- a/public/content/translations/id/community/get-involved/index.md +++ b/public/content/translations/id/community/get-involved/index.md @@ -11,7 +11,6 @@ Komunitas Ethereum meliputi orang-orang dari beragam latar belakang dan kemampua ## Pengembang ‍ {#developers} - Pelajari tentang dan cobalah Ethereum di [ethereum.org/developers/](/developers/) - - Datanglah ke hackathon [ETHGlobal](http://ethglobal.co/) di dekat Anda! - Lihat [proyek yang terkait dengan bidang keahlian atau bahasa pemrograman pilihan Anda](/developers/docs/programming-languages/) - Tonton atau berpartisipasilah dalam [Panggilan Dev Core](https://www.youtube.com/@EthereumProtocol) From 1ba2646bf99db4446b9fded07b7d96bcd1f3654a Mon Sep 17 00:00:00 2001 From: Jakub <100724231+konopkja@users.noreply.github.com> Date: Tue, 16 Apr 2024 19:35:24 +0500 Subject: [PATCH 062/219] Updating wallet listing criteria Updating wallet listing criteria --- public/content/contributing/adding-wallets/index.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/public/content/contributing/adding-wallets/index.md b/public/content/contributing/adding-wallets/index.md index 0986eb01290..1f87852aae7 100644 --- a/public/content/contributing/adding-wallets/index.md +++ b/public/content/contributing/adding-wallets/index.md @@ -13,7 +13,6 @@ Anyone is free to suggest adding a wallet on ethereum.org. If there's a wallet t Anyone is free to suggest a new wallet. Wallets are currently listed on: - [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) -- [ethereum.org/wallets/](/wallets/) Wallets are rapidly changing in Ethereum. We've tried to create a fair framework for consideration on ethereum.org but the listing criteria will change and evolve over time. @@ -26,6 +25,11 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **Worked on by an active team** - this helps to ensure quality and that a user will get support for their queries. - **Honest and accurate listing information** - it is expected that any suggested listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. - **Point of contact** - A point of contact for the wallet will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. +- **EIP-1559 (type 2) transactions** - your wallet supports EIP-1559 (type 2) transactions. + +### Product removals: {#tproduct-removals} + +- **Updated information** - Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relavance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org reserves the right to remove the project from the page. ### Other criteria: the nice-to-haves {#the-nice-to-haves} @@ -45,7 +49,6 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **Customize gas fees** - your wallet allows users to customize their transaction gas fees (base fee, priority fee, max fee). - **ENS support** - your wallet allows users to send transactions to ENS names. - **ERC-20 support** - your wallet allows users to import ERC-20 token contracts, or automatically queries and displays ERC-20 tokens. -- **EIP-1559 (type 2) transactions** - your wallet supports EIP-1559 (type 2) transactions. - **Buy crypto** - your wallet supports users directly purchasing and onboarding to crypto. - **Sell for fiat** - your wallet supports users selling and withdrawing to fiat directly to card or a bank account. - **Multisig** - your wallet supports multiple signatures to sign a transaction. From e2fa7eeb0a63b74d50c9c2183abed2cd4657796b Mon Sep 17 00:00:00 2001 From: Jakub <100724231+konopkja@users.noreply.github.com> Date: Tue, 16 Apr 2024 20:30:39 +0500 Subject: [PATCH 063/219] Update index.md --- public/content/contributing/adding-wallets/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/contributing/adding-wallets/index.md b/public/content/contributing/adding-wallets/index.md index 1f87852aae7..670c42943fd 100644 --- a/public/content/contributing/adding-wallets/index.md +++ b/public/content/contributing/adding-wallets/index.md @@ -25,7 +25,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **Worked on by an active team** - this helps to ensure quality and that a user will get support for their queries. - **Honest and accurate listing information** - it is expected that any suggested listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. - **Point of contact** - A point of contact for the wallet will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. -- **EIP-1559 (type 2) transactions** - your wallet supports EIP-1559 (type 2) transactions. +- **EIP-1559 (type 2) transactions** - your wallet must support EIP-1559 (type 2) transactions. ### Product removals: {#tproduct-removals} From 43ac89fdf23560c6f725cbe7a6090c6b19e602f0 Mon Sep 17 00:00:00 2001 From: Jakub <100724231+konopkja@users.noreply.github.com> Date: Tue, 16 Apr 2024 20:44:53 +0500 Subject: [PATCH 064/219] Update index.md --- public/content/contributing/adding-wallets/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/content/contributing/adding-wallets/index.md b/public/content/contributing/adding-wallets/index.md index 670c42943fd..4d3ce49136c 100644 --- a/public/content/contributing/adding-wallets/index.md +++ b/public/content/contributing/adding-wallets/index.md @@ -26,8 +26,9 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **Honest and accurate listing information** - it is expected that any suggested listings from projects come with honest and accurate information. Products that falsify listing information, such as declaring your product is “open source” when it is not, will be removed. - **Point of contact** - A point of contact for the wallet will greatly help us get accurate information when changes are made. This will keep updating ethereum.org manageable when gathering future information. - **EIP-1559 (type 2) transactions** - your wallet must support EIP-1559 (type 2) transactions. +- **Good user experience** - While UX is subjective, if several core team members test the product and find it difficult to use, we reserve the right to reject the wallet and will instead provide useful suggestions to improve. This is done to protect our user base that is mostly comprised of beginners. -### Product removals: {#tproduct-removals} +### Product removals: {#product-removals} - **Updated information** - Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relavance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org reserves the right to remove the project from the page. From fff19f8c38654d07ac1e42b2c0bef12fe6b82406 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 16 Apr 2024 10:42:31 -0700 Subject: [PATCH 065/219] fix: spec detail --- .../developers/docs/consensus-mechanisms/pos/faqs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/developers/docs/consensus-mechanisms/pos/faqs/index.md b/public/content/developers/docs/consensus-mechanisms/pos/faqs/index.md index 1e34bb713d6..bb4b0c48da5 100644 --- a/public/content/developers/docs/consensus-mechanisms/pos/faqs/index.md +++ b/public/content/developers/docs/consensus-mechanisms/pos/faqs/index.md @@ -74,7 +74,7 @@ Validators have to stake ETH so that they have something to lose if they misbeha ## How are validators selected? {#how-are-validators-selected} -A single validator is pseudo-randomly chosen to propose a block in each slot using an algorithm called RANDAO that mixes a hash from the block proposer with a seed that gets updated every block. This value is used to select a specific validator from the total validator set. The validator selection is fixed four epochs in advance. +A single validator is pseudo-randomly chosen to propose a block in each slot using an algorithm called RANDAO that mixes a hash from the block proposer with a seed that gets updated every block. This value is used to select a specific validator from the total validator set. The validator selection is fixed two epochs in advance. [More on validator selection](/developers/docs/consensus-mechanisms/pos/block-proposal) From 5f483b4e88312a31a1be3fbe75e69fa82d5eed9c Mon Sep 17 00:00:00 2001 From: Viktor Baranov Date: Tue, 16 Apr 2024 21:11:39 +0300 Subject: [PATCH 066/219] Move Blockscout away from faucets section --- public/content/developers/docs/networks/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/content/developers/docs/networks/index.md b/public/content/developers/docs/networks/index.md index 1aaaa00eab7..5564f487538 100644 --- a/public/content/developers/docs/networks/index.md +++ b/public/content/developers/docs/networks/index.md @@ -51,6 +51,7 @@ The Sepolia network uses a permissioned validator set. It's fairly new, meaning - [GitHub](https://github.com/eth-clients/sepolia) - [Otterscan](https://sepolia.otterscan.io/) - [Etherscan](https://sepolia.etherscan.io) +- [Blockscout](https://eth-sepolia.blockscout.com/) ##### Faucets @@ -61,7 +62,6 @@ The Sepolia network uses a permissioned validator set. It's fairly new, meaning - [Alchemy Sepolia faucet](https://sepoliafaucet.com/) - [Infura Sepolia faucet](https://www.infura.io/faucet) - [Chainstack Sepolia faucet](https://faucet.chainstack.com/sepolia-faucet) -- [Blockscout](https://eth-sepolia.blockscout.com/) #### Goerli _(long-term support)_ {#goerli} @@ -78,6 +78,7 @@ Goerli is a testnet for testing validating and staking. The Goerli network is op - [Website](https://goerli.net/) - [GitHub](https://github.com/eth-clients/goerli) - [Etherscan](https://goerli.etherscan.io) +- [Blockscout](https://eth-goerli.blockscout.com/) ##### Faucets @@ -89,7 +90,6 @@ Goerli is a testnet for testing validating and staking. The Goerli network is op - [All That Node Goerli Faucet](https://www.allthatnode.com/faucet/ethereum.dsrv) - [Coinbase Wallet Faucet | Goerli](https://coinbase.com/faucets/ethereum-goerli-faucet) - [Chainstack Goerli faucet](https://faucet.chainstack.com/goerli-faucet) -- [Blockscout](https://eth-goerli.blockscout.com/) To launch a Validator on Goerli testnet, use ethstaker's ["cheap goerli validator" launchpad](https://goerli.launchpad.ethstaker.cc/en/). From 866244cbc8eecd5cade60dec4619e311e8de2947 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:24:23 -0700 Subject: [PATCH 067/219] chore: list Everstake Institutional for saas --- src/data/staking-products.json | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/data/staking-products.json b/src/data/staking-products.json index e49b503d584..273fb09192e 100644 --- a/src/data/staking-products.json +++ b/src/data/staking-products.json @@ -748,6 +748,43 @@ "eventAction": "Clicked", "eventName": "Clicked RockX go to link" } + }, + { + "name": "Everstake Institutional", + "imageName": "Everstake", + "hue": 43, + "launchDate": "2023-03-31", + "url": "https://eth.everstake.one/", + "audits": [ + { + "name": "Blaize", + "url": "https://blaize.tech/clients/smart-contract-security-audit-for-everstake/" + } + ], + "minEth": 32, + "additionalStake": null, + "additionalStakeUnit": null, + "monthlyFee": 10, + "monthlyFeeUnit": "% rewards", + "isFoss": false, + "hasBugBounty": false, + "isTrustless": true, + "isPermissionless": false, + "pctMajorityExecutionClient": 100, + "pctMajorityConsensusClient": 100, + "isSelfCustody": true, + "platforms": ["Browser"], + "ui": ["GUI"], + "socials": { + "discord": "https://discord.gg/PqrbhKNpA5", + "twitter": "https://twitter.com/everstake_pool", + "medium": "https://medium.com/everstake" + }, + "matomo": { + "eventCategory": "StakingProductCard", + "eventAction": "Clicked", + "eventName": "Clicked Everstake Institution go to link" + } } ], "pools": [ From 4a63e04f5e048079d05815eda8de617a46c10085 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 16 Apr 2024 14:20:53 -0600 Subject: [PATCH 068/219] Changes to suggest wallet template --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 119 +++++++++++++++--- .../contributing/adding-wallets/index.md | 2 +- 2 files changed, 102 insertions(+), 19 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index d61b957ffc1..3abe1491b02 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Before suggesting a wallet, make sure you've read [our listing policy](https://www.ethereum.org/en/contributing/adding-wallets/). Only continue with the issue if the 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-wallets/). Only continue with the issue if the wallet meets the criteria listed there. For any required questions, please answer N/A for any questions not applicable to your wallet. - type: markdown id: project_info attributes: @@ -18,6 +18,16 @@ body: description: Please provide the official name of the wallet. validations: required: true + - type: dropdown + id: wallet_hardware_support + attributes: + label: What type of wallet? + options: + - "EOA" + - "Account Abstraction" + - "Smart contract" + validations: + required: true - type: textarea id: wallet_description attributes: @@ -69,11 +79,13 @@ body: description: Please list any KYC requirements or geographic limitations of the wallet, if any exist. validations: required: true - - type: input + - type: textarea id: wallet_languages attributes: label: Is the wallet available in multiple languages? description: Please list languages that the wallet actively supports. + validation: + required: true - type: textarea id: wallet_socials attributes: @@ -90,35 +102,50 @@ body: 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. + validations: + required: true - 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. + validations: + required: true - 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. + validations: + required: true - 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)? + validations: + required: true - type: markdown id: security attributes: value: "## Security" - - type: input + - type: dropdown 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. + label: What is the availability of your source code? + options: + - "Open source" + - "Source available" + - "Closed source" + validations: + required: true - 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. + validations: + required: true - type: textarea id: wallet_custodial attributes: @@ -133,43 +160,51 @@ body: 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. + validations: + required: true - type: input id: wallet_smart_contract_audit attributes: label: Has the wallet's smart contract code or security modules been audited? description: If yes, provide a link to any audits. + validations: + required: true - type: input id: wallet_security_team attributes: label: Does the wallet have an internal security team? description: If yes, please provide details. + validations: + required: true - type: textarea id: wallet_security_testing attributes: label: Any other security testing that should be noted? description: Please note any other security precautions taken. + validations: + required: true - type: textarea id: wallet_scam_protection attributes: label: Scam protection? description: Does the wallet employ any practices to warn users against potential scams (e.g. when interacting with suspicious accounts/contracts)? + validations: + required: true - type: markdown id: features attributes: value: "## Features" - - type: dropdown - id: wallet_hardware_support + - type: input + id: wallet_dapp_support attributes: - label: Does the wallet support connecting to a hardware wallet? - options: - - "Yes" - - "No" + label: Does the wallet support connecting to Ethereum applications? + description: Please provide documentation for how users connect to applications. List examples (ie. WalletConnect, connect wallet to dapp directly, in wallet browser, etc.) validations: required: true - type: dropdown - id: wallet_walletconnect + id: wallet_hardware_support attributes: - label: Does the wallet support WalletConnect? + label: Does the wallet support connecting to a hardware wallet? options: - "Yes" - "No" @@ -180,6 +215,8 @@ body: 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. + validations: + required: true - type: dropdown id: wallet_nft_viewing attributes: @@ -189,51 +226,76 @@ body: - "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. + validations: + required: true - type: input id: wallet_swaps attributes: label: Does the wallet support swaps directly? description: Please provide documentation on swaps. + validations: + required: true + - type: input + id: wallet_bridging + attributes: + label: Does the wallet support bridging directly? + description: Please provide documentation on bridging. + validations: + required: true - 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. + validations: + required: true - type: input id: wallet_l2_support attributes: label: Does the wallet support Ethereum layer 2 networks? description: Please provide documentation on Ethereum layer 2 networks this wallet supports. + validations: + required: true - 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. + validations: + required: true - type: input id: wallet_ens_support attributes: label: Does the wallet support sending transactions to ENS addresses? description: Please provide information on ENS support. + validations: + required: true - 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. + validations: + required: true - type: input id: wallet_eip_1559_support attributes: label: Does the wallet support EIP-1559 (type 2) transactions? description: Please provide information on the type of transactions this wallet supports. + validations: + required: true + - type: textarea + id: wallet_recovery_options + attributes: + label: Does the wallet have any recovery options? + description: Please provide any information on any recovery options for your wallet + validations: + required: true - type: markdown id: finance attributes: @@ -243,11 +305,15 @@ body: 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. + validations: + required: true - 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. + validations: + required: true - type: markdown id: smart_contract attributes: @@ -262,6 +328,13 @@ 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: input + id: wallet_bundled_transactions + attributes: + label: Does the wallet support bundled transactions? + description: Please provide any documentation on bundled transactions + validations: + required: true - type: markdown id: support attributes: @@ -273,6 +346,8 @@ body: 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. + validations: + required: true - type: textarea id: wallet_support_team attributes: @@ -280,11 +355,15 @@ body: description: | Where should we send users that are having issues? How fast is the support? + validations: + required: true - 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. + validations: + required: true - type: markdown id: extra attributes: @@ -305,3 +384,7 @@ body: required: false validations: required: true + - type: markdown + id: removal + attributes: + value: "### A note on product removal \n Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relavance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org reserves the right to remove the project from the page." diff --git a/public/content/contributing/adding-wallets/index.md b/public/content/contributing/adding-wallets/index.md index 4d3ce49136c..9a670325b1e 100644 --- a/public/content/contributing/adding-wallets/index.md +++ b/public/content/contributing/adding-wallets/index.md @@ -30,7 +30,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework ### Product removals: {#product-removals} -- **Updated information** - Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relavance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org reserves the right to remove the project from the page. +- **Updated information** - Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relevance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org reserves the right to remove the project from the page. ### Other criteria: the nice-to-haves {#the-nice-to-haves} From 88bd9ad7edb120c0bd2a1e22aacd71a678225b85 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 16 Apr 2024 14:23:50 -0600 Subject: [PATCH 069/219] fix dupliate id --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 3abe1491b02..2f439b53ba4 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -19,7 +19,7 @@ body: validations: required: true - type: dropdown - id: wallet_hardware_support + id: wallet_type attributes: label: What type of wallet? options: From b91c877cb70198551f71614e83d6a937db003474 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 16 Apr 2024 14:24:33 -0600 Subject: [PATCH 070/219] spelling --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 2f439b53ba4..fafa9a2d09d 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -84,7 +84,7 @@ body: attributes: label: Is the wallet available in multiple languages? description: Please list languages that the wallet actively supports. - validation: + validations: required: true - type: textarea id: wallet_socials From 3ef7a036f97cedc9775fccdcb842fa2444951c22 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Tue, 16 Apr 2024 14:50:07 -0600 Subject: [PATCH 071/219] fix indent --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index fafa9a2d09d..7886663558d 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -245,8 +245,8 @@ body: attributes: label: Does the wallet support bridging directly? description: Please provide documentation on bridging. - validations: - required: true + validations: + required: true - type: input id: wallet_multi_chain_support attributes: From 0402af1179e903833c4b6468bc1730613a91f4ce Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:26:26 -0700 Subject: [PATCH 072/219] chore: move comment --- src/components/FindWallet/WalletTable/index.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/FindWallet/WalletTable/index.tsx b/src/components/FindWallet/WalletTable/index.tsx index bcad91c9739..2d1a49b2723 100644 --- a/src/components/FindWallet/WalletTable/index.tsx +++ b/src/components/FindWallet/WalletTable/index.tsx @@ -310,8 +310,6 @@ const WalletTable = ({ ) const showMoreInfo = (wallet) => { - // Prevent expanding the wallet more info section when clicking on the "Visit website" button - updateMoreInfo(wallet.key) // Log "more info" event only on expanding wallet.moreInfo && @@ -333,6 +331,7 @@ const WalletTable = ({ if (e.key === "Enter") showMoreInfo(wallet) }} onClick={(e) => { + // Prevent expanding the wallet more info section when clicking on the "Visit website" button if ( (e.target as HTMLElement).matches("a, a svg") ) From 2a8411dc9bbd9986d77b279d15a61543bf2f1eff Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:31:50 +0000 Subject: [PATCH 073/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0b2d9b511ad..ab8759c4a4a 100644 --- a/README.md +++ b/README.md @@ -1807,6 +1807,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Croath Liu
Croath Liu

📖 💻
Hayatti
Hayatti

🖋 🐛
Jeffrey Owoloko
Jeffrey Owoloko

🚧
From 33364e41e270d7348172dfe1728166c0d6ffaf4c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:31:51 +0000 Subject: [PATCH 074/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 68039ff87b1..29b0080031d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11774,6 +11774,15 @@ "content", "bug" ] + }, + { + "login": "JeffreyJoel", + "name": "Jeffrey Owoloko", + "avatar_url": "https://avatars.githubusercontent.com/u/72028836?v=4", + "profile": "https://github.com/JeffreyJoel", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, From 060469fcea6d2c9e7ac3b2aeea214e64d2499690 Mon Sep 17 00:00:00 2001 From: Garen Woo <126687110+GarenWoo@users.noreply.github.com> Date: Wed, 17 Apr 2024 20:23:08 +0800 Subject: [PATCH 075/219] Update index.md The notes for LOG2~LOG4 are using unmatched opcodes. This commit has fixed this problem. --- public/content/developers/docs/evm/opcodes/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/content/developers/docs/evm/opcodes/index.md b/public/content/developers/docs/evm/opcodes/index.md index 37c9ed326a3..851c7dc03e7 100644 --- a/public/content/developers/docs/evm/opcodes/index.md +++ b/public/content/developers/docs/evm/opcodes/index.md @@ -159,9 +159,9 @@ For operations with dynamic gas costs, see [gas.md](https://github.com/wolflo/ev | 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | | A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len-1]) | | A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len-1], topic0) | -| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG1(memory[ost:ost+len-1], topic0, topic1) | -| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG1(memory[ost:ost+len-1], topic0, topic1, topic2) | -| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG1(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | +| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG2(memory[ost:ost+len-1], topic0, topic1) | +| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | +| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | | A5-EF | _invalid_ | | F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | | F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen-1] := returndata | From 0891bb2f6dc1d42696f5992ea3cf1188dc224c72 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Wed, 17 Apr 2024 16:00:18 +0200 Subject: [PATCH 076/219] revert hidden search as the api key is working fine again --- src/components/Nav/Mobile/MenuFooter.tsx | 5 ++--- src/components/Nav/index.tsx | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/Nav/Mobile/MenuFooter.tsx b/src/components/Nav/Mobile/MenuFooter.tsx index 94c8e4fa538..53be18ddade 100644 --- a/src/components/Nav/Mobile/MenuFooter.tsx +++ b/src/components/Nav/Mobile/MenuFooter.tsx @@ -42,8 +42,7 @@ const MenuFooter = ({ mt="auto" > - {/* Temporarily hide search for now until we resolve issues with the API key */} - {/* { // Workaround to ensure the input for the search modal can have focus @@ -52,7 +51,7 @@ const MenuFooter = ({ }} > {t("search")} - */} + {t(themeLabelKey)} diff --git a/src/components/Nav/index.tsx b/src/components/Nav/index.tsx index bf9886e9f57..2f88c1d8609 100644 --- a/src/components/Nav/index.tsx +++ b/src/components/Nav/index.tsx @@ -97,9 +97,8 @@ const Nav = () => { > - {/* Temporarily hide search for now until we resolve issues with the API key */} - {/* */} - + + {/* Desktop */} Date: Wed, 17 Apr 2024 15:02:54 -0300 Subject: [PATCH 077/219] remove pre-merge comment & add airgapped option --- .../developers/tutorials/run-node-raspberry-pi/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/content/developers/tutorials/run-node-raspberry-pi/index.md b/public/content/developers/tutorials/run-node-raspberry-pi/index.md index 29891868d02..0237af62260 100644 --- a/public/content/developers/tutorials/run-node-raspberry-pi/index.md +++ b/public/content/developers/tutorials/run-node-raspberry-pi/index.md @@ -125,7 +125,7 @@ Geth is preconfigured to report metrics to a Grafana dashboard which can be view ## Validators {#validators} -A validator can also be optionally added to the consensus client. The validator software allows your node to participate actively in consensus and provides the network with cryptoeconomic security. You get rewarded for this work in ETH. To run a validator, you must first have 32 ETH, which must be deposited into the deposit contract. **This is a long-term commitment - it is not yet possible to withdraw this ETH!**. The deposit can be made by following the step-by-step guide on the [Launchpad](https://launchpad.ethereum.org/). Do this on a desktop/laptop, but do not generate keys — this can be done directly on the Raspberry Pi. +A validator can also be optionally added to the consensus client. The validator software allows your node to participate actively in consensus and provides the network with cryptoeconomic security. You get rewarded for this work in ETH. To run a validator, you must first have 32 ETH, which must be deposited into the deposit contract. The deposit can be made by following the step-by-step guide on the [Launchpad](https://launchpad.ethereum.org/). Do this on a desktop/laptop, but do not generate keys — this can be done directly on the Raspberry Pi. Open a terminal on the Raspberry Pi and run the following command to generate the deposit keys: @@ -135,6 +135,8 @@ sudo apt-get install staking-deposit-cli cd && deposit new-mnemonic --num_validators 1 ``` +(Or download the [staking-deposit-cli](https://github.com/ethereum/staking-deposit-cli) to run on an airgapped machine, and run the `deposit new-mnemnonic` command) + Keep the mnemonic phrase safe! The command above generated two files in the node's keystore: the validator keys and a deposit data file. The deposit data needs to be uploaded into the launchpad, so it must be copied from the Raspberry Pi to the desktop/laptop. This can be done using an ssh connection or any other copy/paste method. Once the deposit data file is available on the computer running the launchpad, it can be dragged and dropped onto the `+` on the launchpad screen. Follow the instructions on the screen to send a transaction to the deposit contract. From 82c3046360183540255689c6cab0c4d96c9ee80a Mon Sep 17 00:00:00 2001 From: shravanandoria <36509067+shravanandoria@users.noreply.github.com> Date: Thu, 18 Apr 2024 00:09:15 +0530 Subject: [PATCH 078/219] Added 2023 next to event dates under page https://ethereum.org/en/contributing/translation-program/translatathon/ --- .../translation-program/translatathon/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/content/contributing/translation-program/translatathon/index.md b/public/content/contributing/translation-program/translatathon/index.md index 94b42ca629f..0c42556584b 100644 --- a/public/content/contributing/translation-program/translatathon/index.md +++ b/public/content/contributing/translation-program/translatathon/index.md @@ -18,10 +18,10 @@ We invite you to join us in breaking down language barriers and making ethereum. ### When {#when} -- Application period: August 1st - August 15th -- Translation period: August 16th - August 23rd -- Evaluation & QA period: August 23rd - August 30th -- Results announcement: August 31st +- Application period: August 1st - August 15th, 2023 +- Translation period: August 16th - August 23rd, 2023 +- Evaluation & QA period: August 23rd - August 30th, 2023 +- Results announcement: August 31st, 2023 ### Where {#where} From 27af3c4aea98bdec9896e3a84ee3da507f65254f Mon Sep 17 00:00:00 2001 From: Seyon Elankumaran Date: Wed, 17 Apr 2024 17:23:25 -0400 Subject: [PATCH 079/219] Deprecated PostMergeBanner [Fixes #12637] --- public/content/governance/index.md | 1 - .../translations/cs/governance/index.md | 1 - .../translations/de/governance/index.md | 1 - .../translations/es/governance/index.md | 1 - .../translations/fa/governance/index.md | 1 - .../translations/fil/governance/index.md | 1 - .../translations/fr/governance/index.md | 1 - .../translations/hi/governance/index.md | 1 - .../translations/hu/governance/index.md | 1 - .../translations/id/governance/index.md | 1 - .../translations/it/governance/index.md | 1 - .../translations/ja/governance/index.md | 1 - .../translations/pl/governance/index.md | 1 - .../translations/pt-br/governance/index.md | 1 - .../translations/ru/governance/index.md | 1 - .../translations/tr/governance/index.md | 1 - .../translations/uk/governance/index.md | 1 - .../translations/zh-tw/governance/index.md | 1 - .../tutorials/run-node-raspberry-pi/index.md | 1 - .../translations/zh/governance/index.md | 1 - .../BannerNotification.stories.tsx | 34 ------------------- src/components/Banners/PostMergeBanner.tsx | 30 ---------------- src/intl/ar/page-about.json | 3 +- src/intl/ar/page-upgrades.json | 1 - src/intl/bg/page-about.json | 3 +- src/intl/bg/page-upgrades.json | 1 - src/intl/de/page-upgrades.json | 1 - src/intl/en/page-about.json | 1 - src/intl/en/page-upgrades.json | 1 - src/intl/es/page-about.json | 1 - src/intl/es/page-upgrades.json | 1 - src/intl/fa/page-upgrades.json | 1 - src/intl/fr/page-about.json | 1 - src/intl/fr/page-upgrades.json | 1 - src/intl/hi/page-about.json | 3 +- src/intl/hi/page-upgrades.json | 1 - src/intl/hr/page-about.json | 3 +- src/intl/hr/page-upgrades.json | 1 - src/intl/hu/page-about.json | 1 - src/intl/hu/page-upgrades.json | 1 - src/intl/id/page-upgrades.json | 1 - src/intl/it/page-about.json | 1 - src/intl/it/page-upgrades.json | 1 - src/intl/ja/page-about.json | 1 - src/intl/ja/page-upgrades.json | 1 - src/intl/ml/page-about.json | 1 - src/intl/ml/page-upgrades.json | 1 - src/intl/pl/page-about.json | 1 - src/intl/pl/page-upgrades.json | 1 - src/intl/pt-br/page-about.json | 1 - src/intl/pt-br/page-upgrades.json | 1 - src/intl/ro/page-about.json | 1 - src/intl/ro/page-upgrades.json | 1 - src/intl/ru/page-upgrades.json | 1 - src/intl/sl/page-about.json | 3 +- src/intl/sl/page-upgrades.json | 1 - src/intl/tr/page-about.json | 1 - src/intl/tr/page-upgrades.json | 1 - src/intl/uk/page-about.json | 3 +- src/intl/uk/page-upgrades.json | 1 - src/intl/zh-tw/page-upgrades.json | 1 - src/intl/zh/page-about.json | 1 - src/intl/zh/page-upgrades.json | 1 - src/layouts/Tutorial.tsx | 8 ----- src/lib/interfaces.ts | 3 -- 65 files changed, 6 insertions(+), 142 deletions(-) delete mode 100644 src/components/BannerNotification/BannerNotification.stories.tsx delete mode 100644 src/components/Banners/PostMergeBanner.tsx diff --git a/public/content/governance/index.md b/public/content/governance/index.md index f2e36aa7e02..96aca242099 100644 --- a/public/content/governance/index.md +++ b/public/content/governance/index.md @@ -2,7 +2,6 @@ title: Ethereum Governance description: An introduction to how decisions about Ethereum are made. lang: en -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Introduction to Ethereum governance {#introduction} diff --git a/public/content/translations/cs/governance/index.md b/public/content/translations/cs/governance/index.md index 08c39e48c2e..15ed83b0c87 100644 --- a/public/content/translations/cs/governance/index.md +++ b/public/content/translations/cs/governance/index.md @@ -2,7 +2,6 @@ title: Kdo řídí Ethereum description: Úvod do rozhodování o Ethereu. lang: cs -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Úvod do správy Etherea {#introduction} diff --git a/public/content/translations/de/governance/index.md b/public/content/translations/de/governance/index.md index 1b3f932823b..d30579a0aef 100644 --- a/public/content/translations/de/governance/index.md +++ b/public/content/translations/de/governance/index.md @@ -2,7 +2,6 @@ title: Ethereum-Governance description: Eine Einführung in die Entscheidungsfindung bei Ethereum lang: de -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Governance bei Ethereum – eine Einführung {#introduction} diff --git a/public/content/translations/es/governance/index.md b/public/content/translations/es/governance/index.md index 6790ecef275..4ef8da010da 100644 --- a/public/content/translations/es/governance/index.md +++ b/public/content/translations/es/governance/index.md @@ -2,7 +2,6 @@ title: Gobernanza de Ethereum description: Introducción sobre cómo se toman las decisiones relativas a Ethereum lang: es -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Introducción a la gobernanza de Ethereum {#introduction} diff --git a/public/content/translations/fa/governance/index.md b/public/content/translations/fa/governance/index.md index 0e3c9480a01..231ca480fac 100644 --- a/public/content/translations/fa/governance/index.md +++ b/public/content/translations/fa/governance/index.md @@ -2,7 +2,6 @@ title: حاکمیت اتریوم description: مقدمه‌ای بر چگونگی تصمیم‌گیری برای اتریوم. lang: fa -postMergeBannerTranslation: صفحه-ارتقای-بعد-ادغام-بنر-حکومت-وود --- # مقدمه‌ای بر حاکمیت اتریوم {#introduction} diff --git a/public/content/translations/fil/governance/index.md b/public/content/translations/fil/governance/index.md index 06e3dc002f6..2c726c7c5d9 100644 --- a/public/content/translations/fil/governance/index.md +++ b/public/content/translations/fil/governance/index.md @@ -2,7 +2,6 @@ title: Pamamahala ng Ethereum description: Isang panimula sa kung paano nagpapasya tungkol sa Ethereum. lang: fil -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Panimula sa pamamahala ng Ethereum {#introduction} diff --git a/public/content/translations/fr/governance/index.md b/public/content/translations/fr/governance/index.md index 2bcc4b880e1..79e6be5a175 100644 --- a/public/content/translations/fr/governance/index.md +++ b/public/content/translations/fr/governance/index.md @@ -2,7 +2,6 @@ title: Gouvernance d'Ethereum description: Une introduction à la façon dont les décisions concernant Ethereum sont prises. lang: fr -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Introduction à la gouvernance d'Ethereum {#introduction} diff --git a/public/content/translations/hi/governance/index.md b/public/content/translations/hi/governance/index.md index 185c4bee151..dee3ac4e95b 100644 --- a/public/content/translations/hi/governance/index.md +++ b/public/content/translations/hi/governance/index.md @@ -2,7 +2,6 @@ title: इथेरियम शासन description: इथेरियम से संबंधित निर्णय कैसे किए जाते हैं। lang: hi -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # इथेरियम शासन का परिचय {#introduction} diff --git a/public/content/translations/hu/governance/index.md b/public/content/translations/hu/governance/index.md index 6cc93f75b3b..15ee2101166 100644 --- a/public/content/translations/hu/governance/index.md +++ b/public/content/translations/hu/governance/index.md @@ -2,7 +2,6 @@ title: Az Ethereum irányítása description: Annak bemutatása, hogy az Ethereummal kapcsolatos döntések hogyan születnek meg. lang: hu -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Bevezetés az Ethereum irányításába {#introduction} diff --git a/public/content/translations/id/governance/index.md b/public/content/translations/id/governance/index.md index 65946efb7ef..7461fffc257 100644 --- a/public/content/translations/id/governance/index.md +++ b/public/content/translations/id/governance/index.md @@ -2,7 +2,6 @@ title: Tata Kelola Ethereum description: Pengantar cara mengambil keputusan tentang Ethereum. lang: id -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Pengantar tentang tata kelola Ethereum {#introduction} diff --git a/public/content/translations/it/governance/index.md b/public/content/translations/it/governance/index.md index 0627d9b7611..b01d64bd147 100644 --- a/public/content/translations/it/governance/index.md +++ b/public/content/translations/it/governance/index.md @@ -2,7 +2,6 @@ title: La governance di Ethereum description: Un'introduzione a come vengono prese le decisioni su Ethereum. lang: it -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Introduzione alla governance di Ethereum {#introduction} diff --git a/public/content/translations/ja/governance/index.md b/public/content/translations/ja/governance/index.md index 73c686e4c8b..04e05cbf692 100644 --- a/public/content/translations/ja/governance/index.md +++ b/public/content/translations/ja/governance/index.md @@ -2,7 +2,6 @@ title: イーサリアムのガバナンス description: イーサリアムに関する決定がどのように行われるかについてのご紹介 lang: ja -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # イーサリアムのガバナンスの概要 {#introduction} diff --git a/public/content/translations/pl/governance/index.md b/public/content/translations/pl/governance/index.md index 137033f2a7f..be000f6a624 100644 --- a/public/content/translations/pl/governance/index.md +++ b/public/content/translations/pl/governance/index.md @@ -2,7 +2,6 @@ title: Zarządzanie Ethereum description: Wprowadzenie do sposobu podejmowania decyzji w sprawie Ethereum. lang: pl -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Wprowadzenie do zarządzania Ethereum {#introduction} diff --git a/public/content/translations/pt-br/governance/index.md b/public/content/translations/pt-br/governance/index.md index c233a4f2245..95b5c3d579b 100644 --- a/public/content/translations/pt-br/governance/index.md +++ b/public/content/translations/pt-br/governance/index.md @@ -2,7 +2,6 @@ title: Governança Ethereum description: Uma introdução à forma como as decisões sobre a Ethereum são tomadas. lang: pt-br -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Introdução à governança Ethereum {#introduction} diff --git a/public/content/translations/ru/governance/index.md b/public/content/translations/ru/governance/index.md index d8c5e2e6636..92be42c8d00 100644 --- a/public/content/translations/ru/governance/index.md +++ b/public/content/translations/ru/governance/index.md @@ -2,7 +2,6 @@ title: Управление Ethereum description: О том, как принимаются решения по Ethereum. lang: ru -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Введение в систему управления Ethereum {#introduction} diff --git a/public/content/translations/tr/governance/index.md b/public/content/translations/tr/governance/index.md index fd695e5d6c4..d6daddfa554 100644 --- a/public/content/translations/tr/governance/index.md +++ b/public/content/translations/tr/governance/index.md @@ -2,7 +2,6 @@ title: Ethereum Yönetişimi description: Ethereum ile ilgili kararların nasıl alındığına giriş. lang: tr -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Ethereum yönetişimine giriş {#introduction} diff --git a/public/content/translations/uk/governance/index.md b/public/content/translations/uk/governance/index.md index b85ade9498c..f419e9c9c3a 100644 --- a/public/content/translations/uk/governance/index.md +++ b/public/content/translations/uk/governance/index.md @@ -2,7 +2,6 @@ title: Управління Ethereum description: Коротко про те, як приймаються рішення щодо Ethereum. lang: uk -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # Вступ до керування Ethereum {#introduction} diff --git a/public/content/translations/zh-tw/governance/index.md b/public/content/translations/zh-tw/governance/index.md index 5118183203e..c18da7f067b 100644 --- a/public/content/translations/zh-tw/governance/index.md +++ b/public/content/translations/zh-tw/governance/index.md @@ -2,7 +2,6 @@ title: 以太坊管理體系 description: 以太坊決策方式的簡介。 lang: zh-tw -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # 以太坊管理體系的簡介 {#introduction} diff --git a/public/content/translations/zh/developers/tutorials/run-node-raspberry-pi/index.md b/public/content/translations/zh/developers/tutorials/run-node-raspberry-pi/index.md index c9096ae2df7..0635812add3 100644 --- a/public/content/translations/zh/developers/tutorials/run-node-raspberry-pi/index.md +++ b/public/content/translations/zh/developers/tutorials/run-node-raspberry-pi/index.md @@ -12,7 +12,6 @@ skill: advanced published: 2022-06-10 source: Ethereum on ARM sourceUrl: https://ethereum-on-arm-documentation.readthedocs.io/en/latest/kiln/kiln-testnet.html -postMergeBannerTranslation: page-upgrades-post-merge-banner-tutorial-ood --- **Ethereum on Arm 是一个定制 Linux 映像,它可以将树莓派转变成以太坊节点。** diff --git a/public/content/translations/zh/governance/index.md b/public/content/translations/zh/governance/index.md index a6cc3c704ae..79fc97c8999 100644 --- a/public/content/translations/zh/governance/index.md +++ b/public/content/translations/zh/governance/index.md @@ -2,7 +2,6 @@ title: 以太坊治理 description: 简介:如何做出关于以太坊的决策。 lang: zh -postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # 以太坊治理简介 {#introduction} diff --git a/src/components/BannerNotification/BannerNotification.stories.tsx b/src/components/BannerNotification/BannerNotification.stories.tsx deleted file mode 100644 index a55ca610e02..00000000000 --- a/src/components/BannerNotification/BannerNotification.stories.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from "react" -import { useTranslation } from "next-i18next" -import { Text } from "@chakra-ui/react" -import { Meta, StoryObj } from "@storybook/react" - -import BannerNotification from "." - -const meta = { - title: "PostMergeBanner", - component: BannerNotification, -} satisfies Meta - -export default meta - -/** - * Story taken from PostMergeBanner component - * and content from `../../content/developers/tutorials/hello-world-smart-contract-fullstack/index.md` - */ - -export const PostMergeBanner: StoryObj = { - args: { - shouldShow: true, - }, - render: (args) => { - // eslint-disable-next-line react-hooks/rules-of-hooks - const { t } = useTranslation("page-upgrades") - - return ( - - {t("page-upgrades-post-merge-banner-tutorial-ood")} - - ) - }, -} diff --git a/src/components/Banners/PostMergeBanner.tsx b/src/components/Banners/PostMergeBanner.tsx deleted file mode 100644 index 3184c52e3f5..00000000000 --- a/src/components/Banners/PostMergeBanner.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from "react" -import { Text } from "@chakra-ui/react" - -import type { TranslationKey } from "@/lib/types" - -import BannerNotification from "../BannerNotification" -import Translation from "../Translation" - -export type PostMergeBannerProps = { - translationString: TranslationKey -} - -const PostMergeBanner = ({ translationString }: PostMergeBannerProps) => ( - - - - - -) - -export default PostMergeBanner diff --git a/src/intl/ar/page-about.json b/src/intl/ar/page-about.json index fd59fdf6d9a..41749689107 100644 --- a/src/intl/ar/page-about.json +++ b/src/intl/ar/page-about.json @@ -1,4 +1,3 @@ { - "page-what-is-ethereum-energy-consumption-chart-legend": "الاستهلاك السنوي للطاقة مقدّرًا بتيراواط/بالسنة", - "page-upgrades-post-merge-banner-governance-ood": "بعض محتويات هذه الصفحة قديمة بعد الدمج. يُرجى تقديم طلب سحب إذا كنت ترغب في المساهمة." + "page-what-is-ethereum-energy-consumption-chart-legend": "الاستهلاك السنوي للطاقة مقدّرًا بتيراواط/بالسنة" } diff --git a/src/intl/ar/page-upgrades.json b/src/intl/ar/page-upgrades.json index 1d9f13e7253..309af2c45e6 100644 --- a/src/intl/ar/page-upgrades.json +++ b/src/intl/ar/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "سبتمبر 2022", "page-upgrades-shards-date": "~2023", "page-upgrades-post-merge-banner-tutorial-ood": "تعليمات الاستخدام هذه قديمة بعد الدمج وقد لا تفيد. يُرجى تقديم طلب سحب إذا كنت ترغب في المساهمة.", - "page-upgrades-post-merge-banner-governance-ood": "بعض محتويات هذه الصفحة قديمة بعد الدمج. يُرجى تقديم طلب سحب إذا كنت ترغب في المساهمة.", "page-upgrades-upgrades-guide": "دليل ترقيات إثيريوم", "page-upgrades-upgrades-docking": "الدمج", "page-upgrades-shard-title": "التقسيم", diff --git a/src/intl/bg/page-about.json b/src/intl/bg/page-about.json index a70f4d14887..7874367d793 100644 --- a/src/intl/bg/page-about.json +++ b/src/intl/bg/page-about.json @@ -21,6 +21,5 @@ "page-about-p-5": "Задачите, които решаваме.", "page-about-p-6": "Задачи, които изчакваме да бъдат решени след това.", "page-about-p-7": "Наскоро приключени задачи.", - "page-about-p-8": "Имате ли представа как може да подобрим ethereum.org? Бихме се радвали да работим с вас!", - "page-upgrades-post-merge-banner-governance-ood": "Част от съдържанието на тази страница не е актуално след Сливането. Направете лична заявка, ако искате да допринесете." + "page-about-p-8": "Имате ли представа как може да подобрим ethereum.org? Бихме се радвали да работим с вас!" } diff --git a/src/intl/bg/page-upgrades.json b/src/intl/bg/page-upgrades.json index 2d8009efd38..d830153096d 100644 --- a/src/intl/bg/page-upgrades.json +++ b/src/intl/bg/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "Септември 2022 г.", "page-upgrades-shards-date": "~2023 г..", "page-upgrades-post-merge-banner-tutorial-ood": "Този урок не е актуален след Сливането и може да не работи. Направете лична заявка, ако искате да допринесете.", - "page-upgrades-post-merge-banner-governance-ood": "Част от съдържанието на тази страница не е актуално след Сливането. Направете лична заявка, ако искате да допринесете.", "page-upgrades-upgrades-guide": "Указател към актуализациите на Етереум", "page-upgrades-upgrades-docking": "Сливането", "page-upgrades-shard-title": "Фрагментиране", diff --git a/src/intl/de/page-upgrades.json b/src/intl/de/page-upgrades.json index 9c5782826c9..ef684be33e3 100644 --- a/src/intl/de/page-upgrades.json +++ b/src/intl/de/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "etwa 2023", "page-upgrades-pbs": "Nicht unmittelbar - erwarte 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "Dieses Tutorial ist nach der Zusammenführung veraltet und könnte nicht mehr funktionieren. Bitte stellen Sie einen PR, wenn Sie etwas beitragen möchten.", - "page-upgrades-post-merge-banner-governance-ood": "Nach der Zusammenführung sind einige Inhalte dieser Seite veraltet. Bitte erstellen Sie einen PR wenn Sie einen Beitragen möchten.", "page-upgrades-upgrades-guide": "Anleitung zu den Ethereum-Upgrades", "page-upgrades-upgrades-docking": "Die Zusammenführung", "page-upgrades-shard-title": "Sharding", diff --git a/src/intl/en/page-about.json b/src/intl/en/page-about.json index 35549580ec5..f19415c3acb 100644 --- a/src/intl/en/page-about.json +++ b/src/intl/en/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "Recently completed tasks.", "page-about-p-8": "Do you have an idea for how to improve ethereum.org? We'd love to collaborate with you!", "page-what-is-ethereum-energy-consumption-chart-legend": "Annual Energy Consumption in TWh/yr", - "page-upgrades-post-merge-banner-governance-ood": "Some content on this page is out-of-date after the merge. Please raise a PR if you would like to contribute.", "energy-consumption-chart-global-data-centers-label": "Global data centers", "energy-consumption-chart-airbnb-label": "AirBnB", "energy-consumption-gold-mining-cbeci-label": "Gold mining", diff --git a/src/intl/en/page-upgrades.json b/src/intl/en/page-upgrades.json index d529817ae47..2b3ffd4e12b 100644 --- a/src/intl/en/page-upgrades.json +++ b/src/intl/en/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "Not imminent - expect 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "This tutorial is out of date after the merge and may not work. Please raise a PR if you would like to contribute.", - "page-upgrades-post-merge-banner-governance-ood": "Some content on this page is out-of-date after the merge. Please raise a PR if you would like to contribute.", "page-upgrades-upgrades-guide": "Guide to Ethereum upgrades", "page-upgrades-upgrades-docking": "The Merge", "page-upgrades-shard-title": "Sharding", diff --git a/src/intl/es/page-about.json b/src/intl/es/page-about.json index b36ba7a4654..24f320a6558 100644 --- a/src/intl/es/page-about.json +++ b/src/intl/es/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "Tareas completadas recientemente.", "page-about-p-8": "¿Tiene una idea de cómo mejorar ethereum.org? ¡Nos encantaría colaborar con usted!", "page-what-is-ethereum-energy-consumption-chart-legend": "Consumo energético anual en TW/año", - "page-upgrades-post-merge-banner-governance-ood": "Parte del contenido de esta página estará obsoleto después de la fusión. Por favor cree una PR si quiere contribuir.", "energy-consumption-chart-global-data-centers-label": "Centros de datos globales", "energy-consumption-chart-airbnb-label": "AirBnB", "energy-consumption-gold-mining-cbeci-label": "Minería de oro", diff --git a/src/intl/es/page-upgrades.json b/src/intl/es/page-upgrades.json index 1b9e5ecfb66..431a94a5035 100644 --- a/src/intl/es/page-upgrades.json +++ b/src/intl/es/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "aproximadamente en 2023", "page-upgrades-pbs": "No inminente: se espera para 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "Este tutorial estará obsoleto después de la fusión y puede que no funcione. Por favor, cree una PR si desea contribuir.", - "page-upgrades-post-merge-banner-governance-ood": "Parte del contenido de esta página estará obsoleto después de la fusión. Por favor cree una PR si quiere contribuir.", "page-upgrades-upgrades-guide": "Guía de actualizaciones de Ethereum", "page-upgrades-upgrades-docking": "La Fusión", "page-upgrades-shard-title": "Fragmentación", diff --git a/src/intl/fa/page-upgrades.json b/src/intl/fa/page-upgrades.json index d5d824a373d..0d7a9a53b36 100644 --- a/src/intl/fa/page-upgrades.json +++ b/src/intl/fa/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "حوالی 2023", "page-upgrades-pbs": "به زودی اتفاق نمی‌افتد - برای سال 2024/25 انتظار می‌رود", "page-upgrades-post-merge-banner-tutorial-ood": "این آموزش قدیمی است و بعد از رویداد ادغام ممکن است کار نکند. اگر می‌خواهید مشارکت کنید، درخواست PR ثبت کنید.", - "page-upgrades-post-merge-banner-governance-ood": "برخی از مطالب این صفحه بعد از رویداد ادغام منسوخ شده‌اند. اگر می‌خواهید مشارکت کنید، درخواست PR ثبت کنید.", "page-upgrades-upgrades-guide": "راهنمای ارتقاهای اتریوم", "page-upgrades-upgrades-docking": "The Merge (ادغام)", "page-upgrades-shard-title": "زنجیره ای سازی", diff --git a/src/intl/fr/page-about.json b/src/intl/fr/page-about.json index 52d087632f7..a52f108bd4b 100644 --- a/src/intl/fr/page-about.json +++ b/src/intl/fr/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "Les tâches récemment terminées.", "page-about-p-8": "Vous avez des idées pour améliorer ethereum.org ? Nous adorerions collaborer avec vous !", "page-what-is-ethereum-energy-consumption-chart-legend": "Consommation d'énergie annuelle en TWh/an", - "page-upgrades-post-merge-banner-governance-ood": "Certains contenus sur cette page sont périmés depuis la fusion. Veuillez éditer un PR sur GitHub si vous souhaitez contribuer.", "energy-consumption-chart-global-data-centers-label": "Centres de données globaux", "energy-consumption-chart-airbnb-label": "Airbnb", "energy-consumption-gold-mining-cbeci-label": "Extraction d'or", diff --git a/src/intl/fr/page-upgrades.json b/src/intl/fr/page-upgrades.json index 7d645891ce8..014c2ae1d4f 100644 --- a/src/intl/fr/page-upgrades.json +++ b/src/intl/fr/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "Pas imminent - attendez 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "Ce tutoriel est obsolète depuis la fusion et peut ne pas fonctionner. Veuillez éditer un PR sur GitHub si vous souhaitez contribuer.", - "page-upgrades-post-merge-banner-governance-ood": "Certains contenus sur cette page sont périmés depuis la fusion. Veuillez éditer un PR sur GitHub si vous souhaitez contribuer.", "page-upgrades-upgrades-guide": "Guide des mises à niveau d'Ethereum", "page-upgrades-upgrades-docking": "La Fusion", "page-upgrades-shard-title": "Fragmentation", diff --git a/src/intl/hi/page-about.json b/src/intl/hi/page-about.json index c1725639895..948756e1b84 100644 --- a/src/intl/hi/page-about.json +++ b/src/intl/hi/page-about.json @@ -1,4 +1,3 @@ { - "page-what-is-ethereum-energy-consumption-chart-legend": "टेरावॉट/वर्ष में वार्षिक उर्जा खपत", - "page-upgrades-post-merge-banner-governance-ood": "मर्ज के बाद इस पेज का कुछ कंटेंट पुराना है। अगर आप योगदान देना चाहते हैं, तो कृपया PR बढ़ाएँ।" + "page-what-is-ethereum-energy-consumption-chart-legend": "टेरावॉट/वर्ष में वार्षिक उर्जा खपत" } diff --git a/src/intl/hi/page-upgrades.json b/src/intl/hi/page-upgrades.json index 344a15c92cb..903bb2e2720 100644 --- a/src/intl/hi/page-upgrades.json +++ b/src/intl/hi/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "Not imminent - expect 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "मर्ज के बाद यह ट्यूटोरियल पुराना हो गया है और शायद काम न करे। अगर आप योगदान देना चाहते हैं, तो कृपया PR बढ़ाएँ।", - "page-upgrades-post-merge-banner-governance-ood": "मर्ज के बाद इस पेज का कुछ कंटेंट पुराना है। अगर आप योगदान देना चाहते हैं, तो कृपया PR बढ़ाएँ।", "page-upgrades-upgrades-guide": "एथेरियम अपग्रेड के लिए मार्गदर्शिका", "page-upgrades-upgrades-docking": "मर्ज", "page-upgrades-shard-title": "शार्डिंग", diff --git a/src/intl/hr/page-about.json b/src/intl/hr/page-about.json index a3ee0d13eb7..a485ae20998 100644 --- a/src/intl/hr/page-about.json +++ b/src/intl/hr/page-about.json @@ -21,6 +21,5 @@ "page-about-p-5": "Zadaci koje implementiramo.", "page-about-p-6": "Zadaci koje smo stavili u red za implementiranje.", "page-about-p-7": "Nedavno dovršeni zadaci.", - "page-about-p-8": "Imate li ideju kako poboljšati ethereum.org? Voljeli bismo surađivati s vama!", - "page-upgrades-post-merge-banner-governance-ood": "Nakon spajanja neki je sadržaj ove stranice zastario. Pošaljite PR ako želite dati svoj doprinos." + "page-about-p-8": "Imate li ideju kako poboljšati ethereum.org? Voljeli bismo surađivati s vama!" } diff --git a/src/intl/hr/page-upgrades.json b/src/intl/hr/page-upgrades.json index b15ac3b9198..3a8936bf715 100644 --- a/src/intl/hr/page-upgrades.json +++ b/src/intl/hr/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "Rujan 2022.", "page-upgrades-shards-date": "~2023.", "page-upgrades-post-merge-banner-tutorial-ood": "Nakon spajanja ovaj je vodič zastarjeo i možda neće biti koristan. Pošaljite PR ako želite dati svoj doprinos.", - "page-upgrades-post-merge-banner-governance-ood": "Nakon spajanja neki je sadržaj ove stranice zastario. Pošaljite PR ako želite dati svoj doprinos.", "page-upgrades-upgrades-guide": "Vodič za nadogradnje Ethereuma", "page-upgrades-upgrades-docking": "Spajanje", "page-upgrades-shard-title": "Dijeljenje", diff --git a/src/intl/hu/page-about.json b/src/intl/hu/page-about.json index 1a93297472c..a70f8a88851 100644 --- a/src/intl/hu/page-about.json +++ b/src/intl/hu/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "Befejezett feladatok.", "page-about-p-8": "Fejlesztési javaslatod van az ethereum.org-al kapcsolatban? Szívesen együttműködnénk!", "page-what-is-ethereum-energy-consumption-chart-legend": "Éves energiafogyasztás TWh/évben", - "page-upgrades-post-merge-banner-governance-ood": "Az oldalon található tartalmak egy része a beolvadás után már nem naprakész. Ha szeretne segíteni, kérjük, küldjön egy bejelentést (PR-t).", "energy-consumption-chart-global-data-centers-label": "Globális adatközpontok", "energy-consumption-chart-airbnb-label": "AirBnB", "energy-consumption-gold-mining-cbeci-label": "Aranybányászat", diff --git a/src/intl/hu/page-upgrades.json b/src/intl/hu/page-upgrades.json index 93ba45f48f7..c182183ceca 100644 --- a/src/intl/hu/page-upgrades.json +++ b/src/intl/hu/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "Nem azonnali – 2024/25-ben várható", "page-upgrades-post-merge-banner-tutorial-ood": "Ez az útmutató a beolvadás után már nem naprakész, és előfordulhat, hogy nem működik. Ha szeretne segíteni, kérjük, küldjön egy bejelentést (PR-t).", - "page-upgrades-post-merge-banner-governance-ood": "Az oldalon található tartalmak egy része a beolvadás után már nem naprakész. Ha szeretne segíteni, kérjük, küldjön egy bejelentést (PR-t).", "page-upgrades-upgrades-guide": "Útmutató az Ethereum-frissítésekhez", "page-upgrades-upgrades-docking": "A beolvadás", "page-upgrades-shard-title": "Sharding", diff --git a/src/intl/id/page-upgrades.json b/src/intl/id/page-upgrades.json index b194cc6007b..ed0773accaf 100644 --- a/src/intl/id/page-upgrades.json +++ b/src/intl/id/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "Tidak dalam waktu dekat - diperkirakan tahun 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "Tutorial ini sudah kedaluwarsa setelah penggabungan dan mungkin tidak berfungsi. Silakan ajukan PR jika Anda ingin berkontribusi.", - "page-upgrades-post-merge-banner-governance-ood": "Beberapa konten di halaman ini sudah kedaluwarsa setelah penggabungan. Silakan ajukan PR jika Anda ingin berkontribusi.", "page-upgrades-upgrades-guide": "Panduan peningkatan Ethereum", "page-upgrades-upgrades-docking": "Penggabungan", "page-upgrades-shard-title": "Sharding", diff --git a/src/intl/it/page-about.json b/src/intl/it/page-about.json index 54bc1af2357..9feb6de3aaf 100644 --- a/src/intl/it/page-about.json +++ b/src/intl/it/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "Attività completate di recente.", "page-about-p-8": "Hai un'idea su come migliorare ethereum.org? Ci piacerebbe collaborare con te!", "page-what-is-ethereum-energy-consumption-chart-legend": "Consumo di energia annuale in TWh/anno", - "page-upgrades-post-merge-banner-governance-ood": "Alcuni contenuti su questa pagina sono obsoleti dopo La Fusione. Sei pregato di effettuare una PR, se vorresti contribuire.", "energy-consumption-chart-global-data-centers-label": "Centri elaborazione dati globali", "energy-consumption-chart-airbnb-label": "AirBnB", "energy-consumption-gold-mining-cbeci-label": "Estrazione dell'oro", diff --git a/src/intl/it/page-upgrades.json b/src/intl/it/page-upgrades.json index fc2d7257fd0..b34b7d70e66 100644 --- a/src/intl/it/page-upgrades.json +++ b/src/intl/it/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "Non imminente, previsto 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "Questo tutorial è deprecato dopo La Fusione e potrebbe non funzionare. Sei pregato di effettuare una PR se vorresti contribuire.", - "page-upgrades-post-merge-banner-governance-ood": "Alcuni contenuti su questa pagina sono obsoleti dopo La Fusione. Sei pregato di effettuare una PR, se vorresti contribuire.", "page-upgrades-upgrades-guide": "Guida agli aggiornamenti di Ethereum", "page-upgrades-upgrades-docking": "La fusione", "page-upgrades-shard-title": "Sharding", diff --git a/src/intl/ja/page-about.json b/src/intl/ja/page-about.json index e595e556454..23aaa8fd8b4 100644 --- a/src/intl/ja/page-about.json +++ b/src/intl/ja/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "最近完了したタスク。", "page-about-p-8": "ethereum.org を改善するためのアイデアがありますか? ぜひコラボレーションしていきたいです!", "page-what-is-ethereum-energy-consumption-chart-legend": "年間エネルギー消費量(TWh)", - "page-upgrades-post-merge-banner-governance-ood": "マージ後、本ページの一部のコンテンツの情報が古くなっています。ご貢献いただける場合はPRを上げてください。", "energy-consumption-chart-youtube-label": "YouTube", "energy-consumption-chart-gold-mining-galaxy-label": "金の採掘(Galaxy Digital)", "energy-consumption-chart-global-data-centers-label": "世界中のデータセンター", diff --git a/src/intl/ja/page-upgrades.json b/src/intl/ja/page-upgrades.json index 080a172f3b7..cbf2c785a8c 100644 --- a/src/intl/ja/page-upgrades.json +++ b/src/intl/ja/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023年", "page-upgrades-pbs": "急を要しないもの - 2024年または2025年に予定", "page-upgrades-post-merge-banner-tutorial-ood": "マージ後、本チュートリアルの情報は古くなったため、動作しない可能性があります。ご貢献いただける場合はPRを上げてください。", - "page-upgrades-post-merge-banner-governance-ood": "マージ後、本ページの一部のコンテンツの情報が古くなっています。ご貢献いただける場合はPRを上げてください。", "page-upgrades-upgrades-guide": "イーサリアムのアップグレードのガイド", "page-upgrades-upgrades-docking": "マージ", "page-upgrades-shard-title": "シャーディング", diff --git a/src/intl/ml/page-about.json b/src/intl/ml/page-about.json index 33d0f2662c0..81623e634b2 100644 --- a/src/intl/ml/page-about.json +++ b/src/intl/ml/page-about.json @@ -22,5 +22,4 @@ "page-about-p-6": "അടുത്തത് നടപ്പിലാക്കാൻ ഞങ്ങൾ ക്യൂവിലാണ്.", "page-about-p-7": "അടുത്തിടെ പൂർത്തിയാക്കിയ ജോലികൾ.", "page-about-p-8": "Ethereum.org എങ്ങനെ മെച്ചപ്പെടുത്താം എന്നതിനെക്കുറിച്ച് നിങ്ങൾക്ക് ഒരു ആശയമുണ്ടോ? നിങ്ങളുമായി സഹകരിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു!", - "page-upgrades-post-merge-banner-governance-ood": "ലയന ശേഷം ഈ പേജിലെ ചില ഉള്ളടക്കങ്ങൾ കാലഹരണപ്പെട്ടതാണ്. സംഭാവന ചെയ്യാൻ നിങ്ങൾ താൽപ്പര്യപ്പെടുന്നെങ്കിൽ ദയവായി ഒരു PR ഉന്നയിക്കുക." } diff --git a/src/intl/ml/page-upgrades.json b/src/intl/ml/page-upgrades.json index 8754cb902f0..23847ecec99 100644 --- a/src/intl/ml/page-upgrades.json +++ b/src/intl/ml/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "സെപ്റ്റംബർ 2022", "page-upgrades-shards-date": "~2023", "page-upgrades-post-merge-banner-tutorial-ood": "ലയന ശേഷം ഈ ട്യൂട്ടോറിയൽ കാലഹരണപ്പെട്ടതാണ്, പ്രവർത്തിച്ചേക്കില്ല. സംഭാവന ചെയ്യാൻ നിങ്ങൾ താൽപ്പര്യപ്പെടുന്നെങ്കിൽ ദയവായി ഒരു PR ഉന്നയിക്കുക.", - "page-upgrades-post-merge-banner-governance-ood": "ലയന ശേഷം ഈ പേജിലെ ചില ഉള്ളടക്കങ്ങൾ കാലഹരണപ്പെട്ടതാണ്. സംഭാവന ചെയ്യാൻ നിങ്ങൾ താൽപ്പര്യപ്പെടുന്നെങ്കിൽ ദയവായി ഒരു PR ഉന്നയിക്കുക.", "page-upgrades-upgrades-guide": "Ethereum അപ്‌ഗ്രേഡുകളിലേക്കുള്ള വഴികാട്ടി", "page-upgrades-upgrades-docking": "ലയനം", "page-upgrades-shard-title": "ഷാർഡിംഗ്", diff --git a/src/intl/pl/page-about.json b/src/intl/pl/page-about.json index d1ae4c37a1f..f622b087ac5 100644 --- a/src/intl/pl/page-about.json +++ b/src/intl/pl/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "Ostatnio ukończone zadania.", "page-about-p-8": "Masz pomysł, jak ulepszyć ethereum.org? Chcielibyśmy z Tobą współpracować!", "page-what-is-ethereum-energy-consumption-chart-legend": "Roczne zużycie energii w TW/r", - "page-upgrades-post-merge-banner-governance-ood": "Niektóre treści na tej stronie są nieaktualne po Połączeniu. Jeśli chcesz wnieść swój wkład, zgłoś PR.", "energy-consumption-chart-youtube-label": "YouTube", "energy-consumption-chart-gold-mining-galaxy-label": "Wydobycie złota (Galaxy Digital)", "energy-consumption-chart-global-data-centers-label": "Global data centers", diff --git a/src/intl/pl/page-upgrades.json b/src/intl/pl/page-upgrades.json index fe55014dea2..eeeaa3f63e8 100644 --- a/src/intl/pl/page-upgrades.json +++ b/src/intl/pl/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "Wrzesień 2022 r.", "page-upgrades-shards-date": "~2023", "page-upgrades-post-merge-banner-tutorial-ood": "Ten samouczek jest nieaktualny po Połączeniu i może nie działać. Jeśli chcesz wnieść wkład, zgłoś PR.", - "page-upgrades-post-merge-banner-governance-ood": "Niektóre treści na tej stronie są nieaktualne po Połączeniu. Jeśli chcesz wnieść swój wkład, zgłoś PR.", "page-upgrades-upgrades-guide": "Przewodnik po uaktualnieniach Ethereum", "page-upgrades-upgrades-docking": "Połączenie", "page-upgrades-shard-title": "Sharding", diff --git a/src/intl/pt-br/page-about.json b/src/intl/pt-br/page-about.json index 011b31dff25..be31f7673a8 100644 --- a/src/intl/pt-br/page-about.json +++ b/src/intl/pt-br/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "Tarefas recentemente concluídas.", "page-about-p-8": "Você tem alguma ideia de como podemos melhorar a ethereum.org? Nós adoraríamos colaborar com você!", "page-what-is-ethereum-energy-consumption-chart-legend": "Consumo anual de energia em TWH/ano", - "page-upgrades-post-merge-banner-governance-ood": "Alguns conteúdos nesta página estão desatualizados após a fusão. Por favor, faça um PR se você deseja contribuir.", "energy-consumption-chart-global-data-centers-label": "Centros de dados globais", "energy-consumption-chart-airbnb-label": "AirBnB", "energy-consumption-gold-mining-cbeci-label": "Mineração de ouro", diff --git a/src/intl/pt-br/page-upgrades.json b/src/intl/pt-br/page-upgrades.json index 390c87096aa..c8d9735bf52 100644 --- a/src/intl/pt-br/page-upgrades.json +++ b/src/intl/pt-br/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "Cerca de 2023", "page-upgrades-pbs": "Não iminente — previsão 2024/25", "page-upgrades-post-merge-banner-tutorial-ood": "Este tutorial está desatualizado após a fusão e pode não funcionar. Por favor, faça um PR se você quiser contribuir.", - "page-upgrades-post-merge-banner-governance-ood": "Alguns conteúdos nesta página estão desatualizados após a fusão. Por favor, faça um PR se você deseja contribuir.", "page-upgrades-upgrades-guide": "Guia para as melhorias no Ethereum", "page-upgrades-upgrades-docking": "A integração", "page-upgrades-shard-title": "Fragmentação", diff --git a/src/intl/ro/page-about.json b/src/intl/ro/page-about.json index a214aba3466..27f9b327283 100644 --- a/src/intl/ro/page-about.json +++ b/src/intl/ro/page-about.json @@ -22,5 +22,4 @@ "page-about-p-6": "Sarcini puse în coadă pentru a le implementa în continuare.", "page-about-p-7": "Sarcini finalizate recent.", "page-about-p-8": "Ai o idee despre cum să îmbunătățești ethereum.org? Ne-ar plăcea să colaborăm cu tine!", - "page-upgrades-post-merge-banner-governance-ood": "O parte din conținutul acestei pagini nu este actualizat după fuziune. Creează un PR dacă dorești să contribui." } diff --git a/src/intl/ro/page-upgrades.json b/src/intl/ro/page-upgrades.json index ca77106d7b2..b57a28fcbca 100644 --- a/src/intl/ro/page-upgrades.json +++ b/src/intl/ro/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "Septembrie 2022", "page-upgrades-shards-date": "~2023", "page-upgrades-post-merge-banner-tutorial-ood": "Acest tutorial nu este actualizat după fuziune și este posibil să nu funcționeze. Creează un PR dacă dorești să contribui.", - "page-upgrades-post-merge-banner-governance-ood": "O parte din conținutul acestei pagini nu este actualizat după fuziune. Creează un PR dacă dorești să contribui.", "page-upgrades-upgrades-guide": "Ghid pentru actualizările Ethereum", "page-upgrades-upgrades-docking": "Fuziunea", "page-upgrades-shard-title": "Fragmentarea", diff --git a/src/intl/ru/page-upgrades.json b/src/intl/ru/page-upgrades.json index c5329f06c34..3b8cdf0fc56 100644 --- a/src/intl/ru/page-upgrades.json +++ b/src/intl/ru/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "Примерно 2023 г.", "page-upgrades-pbs": "Нескоро — ожидайте в 2024–2025 гг.", "page-upgrades-post-merge-banner-tutorial-ood": "Это руководство устарело после слияния, и информация может быть некорректной. Создайте запрос PR, если хотите внести вклад в обновление.", - "page-upgrades-post-merge-banner-governance-ood": "Некоторые материалы на этой странице устарели после слияния. Создайте запрос PR, если хотите внести вклад в обновление.", "page-upgrades-upgrades-guide": "Руководство по обновлениям Ethereum", "page-upgrades-upgrades-docking": "Слияние", "page-upgrades-shard-title": "Шардинг", diff --git a/src/intl/sl/page-about.json b/src/intl/sl/page-about.json index 8aa427677d1..0d2bb6e9fb1 100644 --- a/src/intl/sl/page-about.json +++ b/src/intl/sl/page-about.json @@ -21,6 +21,5 @@ "page-about-p-5": "Opravila, ki jih izvajamo.", "page-about-p-6": "Opravila, ki smo jih postavili v čakalno vrsto in bodo naslednja na vrsti za izvedbo.", "page-about-p-7": "Nedavno končana opravila.", - "page-about-p-8": "Imate zasmisel, kako izboljšati ethereum.org? Želimo sodelovati z vami.", - "page-upgrades-post-merge-banner-governance-ood": "Del vsebine na tej strani po spojitvi ni več aktualen. Če želite prispevati, ustvarite PR." + "page-about-p-8": "Imate zasmisel, kako izboljšati ethereum.org? Želimo sodelovati z vami." } diff --git a/src/intl/sl/page-upgrades.json b/src/intl/sl/page-upgrades.json index 4b384b87645..81cb6c00053 100644 --- a/src/intl/sl/page-upgrades.json +++ b/src/intl/sl/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "September 2022", "page-upgrades-shards-date": "~2023", "page-upgrades-post-merge-banner-tutorial-ood": "Ta vadnica po spojitvi ni več aktualna in postopek, opisan v njej, morda ne bo deloval. Če želite prispevati, ustvarite PR.", - "page-upgrades-post-merge-banner-governance-ood": "Del vsebine na tej strani po spojitvi ni več aktualen. Če želite prispevati, ustvarite PR.", "page-upgrades-upgrades-guide": "Vodnik po nadgradnjah Ethereuma", "page-upgrades-upgrades-docking": "Spojitev", "page-upgrades-shard-title": "Razdrobitev", diff --git a/src/intl/tr/page-about.json b/src/intl/tr/page-about.json index 7f9d8d825fe..e49917b5bf3 100644 --- a/src/intl/tr/page-about.json +++ b/src/intl/tr/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "En son tamamlanan görevler.", "page-about-p-8": "Ethereum.org'un nasıl geliştirilebileceği konusunda fikirleriniz mi var? Sizinle işbirliği yapmaktan mutluluk duyarız!", "page-what-is-ethereum-energy-consumption-chart-legend": "TWh/yıl cinsinden Yıllık Enerji Tüketimi", - "page-upgrades-post-merge-banner-governance-ood": "Bu sayfadaki bazı içerikler birleşim sonrası güncelliğini kaybetti. Katkıda bulunmak isterseniz lütfen bir PR talebinde bulunun.", "energy-consumption-chart-global-data-centers-label": "Küresel veri merkezleri", "energy-consumption-chart-airbnb-label": "AirBnB", "energy-consumption-gold-mining-cbeci-label": "Altın madenciliği", diff --git a/src/intl/tr/page-upgrades.json b/src/intl/tr/page-upgrades.json index 4514255c32d..d0c1d3e3e21 100644 --- a/src/intl/tr/page-upgrades.json +++ b/src/intl/tr/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "Yakında olmayacak-2024/25'i bekleyin", "page-upgrades-post-merge-banner-tutorial-ood": "Bu öğretici, birleşimden sonra güncelliğini kaybetti ve çalışmayabilir. Eğer katkı sağlamak isterseniz lütfen bir PR talebinde bulunun.", - "page-upgrades-post-merge-banner-governance-ood": "Bu sayfadaki bazı içerikler birleşim sonrası güncelliğini kaybetti. Katkıda bulunmak isterseniz lütfen bir PR talebinde bulunun.", "page-upgrades-upgrades-guide": "Ethereum yükseltme kılavuzu", "page-upgrades-upgrades-docking": "Birleştirme", "page-upgrades-shard-title": "Parçalama", diff --git a/src/intl/uk/page-about.json b/src/intl/uk/page-about.json index 68171b75c9f..7ec2c745a45 100644 --- a/src/intl/uk/page-about.json +++ b/src/intl/uk/page-about.json @@ -22,6 +22,5 @@ "page-about-p-6": "Завдання на черзі.", "page-about-p-7": "Нещодавно завершені завдання.", "page-about-p-8": "Маєте ідею, як покращити ethereum.org? Ми залюбки з вами співпрацюватимемо!", - "page-what-is-ethereum-energy-consumption-chart-legend": "Щорічне споживання енергії в ТВт/рік", - "page-upgrades-post-merge-banner-governance-ood": "Деякий вміст на цій сторінці став застарілим після об’єднання. Подайте запит (PR), якщо хочете допомогти нам." + "page-what-is-ethereum-energy-consumption-chart-legend": "Щорічне споживання енергії в ТВт/рік" } diff --git a/src/intl/uk/page-upgrades.json b/src/intl/uk/page-upgrades.json index 26597bcf84a..ae2192cd0fb 100644 --- a/src/intl/uk/page-upgrades.json +++ b/src/intl/uk/page-upgrades.json @@ -5,7 +5,6 @@ "page-upgrades-merge-date": "Вересень 2022 р.", "page-upgrades-shards-date": "Приблизно 2023 р.", "page-upgrades-post-merge-banner-tutorial-ood": "Ці інструкції стали застарілими після об’єднання й можуть не працювати. Подайте запит (PR), якщо хочете допомогти нам.", - "page-upgrades-post-merge-banner-governance-ood": "Деякий вміст на цій сторінці став застарілим після об’єднання. Подайте запит (PR), якщо хочете допомогти нам.", "page-upgrades-upgrades-guide": "Посібник з оновлень Ethereum", "page-upgrades-upgrades-docking": "The Merge", "page-upgrades-shard-title": "Сегментування", diff --git a/src/intl/zh-tw/page-upgrades.json b/src/intl/zh-tw/page-upgrades.json index 8da9195b3cd..21c92608856 100644 --- a/src/intl/zh-tw/page-upgrades.json +++ b/src/intl/zh-tw/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023 年", "page-upgrades-pbs": "不在近期 - 預計在 2024/25 年", "page-upgrades-post-merge-banner-tutorial-ood": "合併後,此使用教學將不再適用,可能無法使用。若想繼續做出貢獻,請先在 github 上提交提取要求。", - "page-upgrades-post-merge-banner-governance-ood": "合併後,此頁面上的有些內容將不再適用。若想繼續做出貢獻,請先在 github 上提交提取要求。", "page-upgrades-upgrades-guide": "以太坊升級指南", "page-upgrades-upgrades-docking": "合併", "page-upgrades-shard-title": "分片", diff --git a/src/intl/zh/page-about.json b/src/intl/zh/page-about.json index c24ddb112c4..206030f49ea 100644 --- a/src/intl/zh/page-about.json +++ b/src/intl/zh/page-about.json @@ -23,7 +23,6 @@ "page-about-p-7": "最近完成的任务。", "page-about-p-8": "你对如何改进ethereum.org有想法吗?我们很乐意与你合作!", "page-what-is-ethereum-energy-consumption-chart-legend": "年能源消耗量,单位为亿千瓦时/年", - "page-upgrades-post-merge-banner-governance-ood": "在合并后本页面上的部分内容已经过时。如果你想做出贡献,请提出一个拉取请求。", "energy-consumption-chart-global-data-centers-label": "全球数据中心", "energy-consumption-chart-airbnb-label": "AirBnB", "energy-consumption-gold-mining-cbeci-label": "开采金矿", diff --git a/src/intl/zh/page-upgrades.json b/src/intl/zh/page-upgrades.json index b3787cd131a..27f18be3d77 100644 --- a/src/intl/zh/page-upgrades.json +++ b/src/intl/zh/page-upgrades.json @@ -6,7 +6,6 @@ "page-upgrades-shards-date": "~2023", "page-upgrades-pbs": "不是即将发生 - 预计 2024/25 年", "page-upgrades-post-merge-banner-tutorial-ood": "在合并后此教程已经过时且可能不再有效。如果你想做出贡献,请提出一个拉取请求。", - "page-upgrades-post-merge-banner-governance-ood": "在合并后本页面上的部分内容已经过时。如果你想做出贡献,请提出一个拉取请求。", "page-upgrades-upgrades-guide": "以太坊升级指引", "page-upgrades-upgrades-docking": "合并", "page-upgrades-shard-title": "分片", diff --git a/src/layouts/Tutorial.tsx b/src/layouts/Tutorial.tsx index 8c2cfdc92ac..3e5241e3063 100644 --- a/src/layouts/Tutorial.tsx +++ b/src/layouts/Tutorial.tsx @@ -16,7 +16,6 @@ import { import type { ChildOnlyProp, TranslationKey } from "@/lib/types" import type { MdPageContent, TutorialFrontmatter } from "@/lib/interfaces" -import PostMergeBanner from "@/components/Banners/PostMergeBanner" import { ButtonLink } from "@/components/Buttons" import CallToContribute from "@/components/CallToContribute" import Card from "@/components/Card" @@ -188,8 +187,6 @@ export const TutorialLayout = ({ const absoluteEditPath = getEditPath(relativePath) const borderColor = useToken("colors", "border") - const postMergeBannerTranslationString = - frontmatter.postMergeBannerTranslation as TranslationKey | null const gitHubLastEdit = useClientSideGitHubLastEdit(relativePath) const intlLastEdit = "data" in gitHubLastEdit ? gitHubLastEdit.data! : lastUpdatedDate @@ -198,11 +195,6 @@ export const TutorialLayout = ({ return ( <> - {!!frontmatter.showPostMergeBanner && ( - - )} Date: Thu, 18 Apr 2024 14:30:15 +0800 Subject: [PATCH 080/219] chore: fix some typos in comments Signed-off-by: writegr --- public/content/enterprise/index.md | 4 ++-- public/content/privacy-policy/index.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/content/enterprise/index.md b/public/content/enterprise/index.md index a882758342b..89d0b3b9d56 100644 --- a/public/content/enterprise/index.md +++ b/public/content/enterprise/index.md @@ -125,7 +125,7 @@ Here are some of the enterprise applications that have been built on top of the - [Fabrica](https://www.fabrica.land/) _a platform for digitizing real estate assets, enabling DeFi borrowing and property trading - [Fasset](https://www.fasset.com/) _a platform for supporting sustainable infrastructure_ - [Nori](https://nori.com/) _open source market infrastructure to allow for carbon removal projects to measure and monetize their activity_ -- [Propy](https://propy.com/) _a platform to to automate residential real estate transactions with smart contracts_ +- [Propy](https://propy.com/) _a platform to automate residential real estate transactions with smart contracts_ - [RealT](https://realt.co/) _investors around the globe can buy into the US real estate market through fully-compliant, fractional, tokenized ownership_ - [Rubey](https://www.rubey.be/) _a platform that tokenizes high-end art to make it accessible to retail investors_ - [Swarm](https://swarm.com/) _a platform focused on the digitization and trading of real-world assets in a regulatory compliant manner_ @@ -171,7 +171,7 @@ Here are some of the enterprise applications that have been built on top of the ### Entertainment, NFTs, and Loyalty -- [Adidas Virtual Gear](https://www.adidas.com/metaverse) _a virtal gear NFT collection_ +- [Adidas Virtual Gear](https://www.adidas.com/metaverse) _a virtual gear NFT collection_ - [The British Museum's Sandbox](https://decrypt.co/150405/british-museum-enter-metaverse-via-sandbox) _an NFT collection_ - [Fruitlab](https://fruitlab.com/) _a platform for gamers to earn from watching, sharing and playing online games_ - [Nike Swoosh](https://www.swoosh.nike/) _an NFT platform_ diff --git a/public/content/privacy-policy/index.md b/public/content/privacy-policy/index.md index f7cb1f40121..900fa30f2cf 100644 --- a/public/content/privacy-policy/index.md +++ b/public/content/privacy-policy/index.md @@ -109,7 +109,7 @@ We may use this information as well as other information you voluntarily provide We may process the data by name in order to record your reservation as you have requested, to contact you in case of a question or problem and to ensure correct payment. -The legal basis for the data processing for this purpose lies in the fulfilment of an agreement in accordance with Art. 6 Par. 1 lit. b GDPR. +The legal basis for the data processing for this purpose lies in the fulfillment of an agreement in accordance with Art. 6 Par. 1 lit. b GDPR. **4. Other parties who have access to information we collect** @@ -117,7 +117,7 @@ With the exception of the provider(s) of our Websites, we do not make your perso Personal data collected via the Websites may be passed on to and/or accessed by the Website service provider(s). The Websites may be hosted on servers in the US. The transfer of data is for the purpose of providing and maintaining the functionality of our Websites. This is our legitimate interest in the sense of Art. 6 Par. 1 lit f GDPR. -If you pay by credit card through the Websites, we may forward your credit card information to the credit card issuer and the credit card acquirer. If you choose to pay by credit card, you may be asked to provide all the necessary information. The legal basis for passing on the data lies in the fulfilment of an agreement in the sense of Art. 6 Par. Lit. b GDPR. +If you pay by credit card through the Websites, we may forward your credit card information to the credit card issuer and the credit card acquirer. If you choose to pay by credit card, you may be asked to provide all the necessary information. The legal basis for passing on the data lies in the fulfillment of an agreement in the sense of Art. 6 Par. Lit. b GDPR. **5. International transfer of personal data** From b836d1ba239a696510257d7a8a2ffa64f6348fb2 Mon Sep 17 00:00:00 2001 From: Hiroyuki Naito Date: Thu, 18 Apr 2024 16:37:40 +0900 Subject: [PATCH 081/219] Change unprecise date --- public/content/social-networks/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/social-networks/index.md b/public/content/social-networks/index.md index b8c1c5940e8..13f66eb3996 100644 --- a/public/content/social-networks/index.md +++ b/public/content/social-networks/index.md @@ -25,7 +25,7 @@ Many decentralized social networks exist as alternatives to established social m Decentralized social networks are a class of [decentralized applications (dapps)](/dapps/)—applications powered by [smart contracts](/glossary/#smart-contract) deployed on the blockchain. The contract code serves as the backend for these apps and defines their business logic. -Traditional social media platforms rely on databases to store user information, program code, and other forms of data. But this creates single points-of-failure and introduces significant risk. For instance, Facebook's servers infamously [went offline for hours](https://www.npr.org/2021/10/05/1043211171/facebook-instagram-whatsapp-outage-business-impact) last year, cutting off users from the platform. +Traditional social media platforms rely on databases to store user information, program code, and other forms of data. But this creates single points-of-failure and introduces significant risk. For instance, Facebook's servers infamously [went offline for hours](https://www.npr.org/2021/10/05/1043211171/facebook-instagram-whatsapp-outage-business-impact) in October 5th, 2021, cutting off users from the platform. Decentralized social networks exist on a [peer-to-peer network](/glossary/#peer-to-peer-network) comprising thousands of nodes around the globe. Even if some nodes fail, the network will run uninterrupted, making applications resistant to failures and outages. From 479def6903de5745bc7208f1bd12e7ffc0a42c5a Mon Sep 17 00:00:00 2001 From: Hiroyuki Naito Date: Thu, 18 Apr 2024 16:43:33 +0900 Subject: [PATCH 082/219] Delete the date --- public/content/social-networks/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/social-networks/index.md b/public/content/social-networks/index.md index 13f66eb3996..6ab5600d2ae 100644 --- a/public/content/social-networks/index.md +++ b/public/content/social-networks/index.md @@ -25,7 +25,7 @@ Many decentralized social networks exist as alternatives to established social m Decentralized social networks are a class of [decentralized applications (dapps)](/dapps/)—applications powered by [smart contracts](/glossary/#smart-contract) deployed on the blockchain. The contract code serves as the backend for these apps and defines their business logic. -Traditional social media platforms rely on databases to store user information, program code, and other forms of data. But this creates single points-of-failure and introduces significant risk. For instance, Facebook's servers infamously [went offline for hours](https://www.npr.org/2021/10/05/1043211171/facebook-instagram-whatsapp-outage-business-impact) in October 5th, 2021, cutting off users from the platform. +Traditional social media platforms rely on databases to store user information, program code, and other forms of data. But this creates single points-of-failure and introduces significant risk. For instance, Facebook's servers infamously [went offline for hours](https://www.npr.org/2021/10/05/1043211171/facebook-instagram-whatsapp-outage-business-impact) in October 2021, cutting off users from the platform. Decentralized social networks exist on a [peer-to-peer network](/glossary/#peer-to-peer-network) comprising thousands of nodes around the globe. Even if some nodes fail, the network will run uninterrupted, making applications resistant to failures and outages. From b36c3f040ba89fe19bc65721481cac70dd9dda98 Mon Sep 17 00:00:00 2001 From: Richard Gregory Date: Thu, 18 Apr 2024 14:23:45 +0100 Subject: [PATCH 083/219] Remove Apex Wallet data from walletsData list --- src/data/wallets/wallet-data.ts | 44 --------------------------------- 1 file changed, 44 deletions(-) diff --git a/src/data/wallets/wallet-data.ts b/src/data/wallets/wallet-data.ts index 5f2774e96ce..6b972349bc9 100644 --- a/src/data/wallets/wallet-data.ts +++ b/src/data/wallets/wallet-data.ts @@ -3,7 +3,6 @@ import { WalletData } from "@/lib/types" import OneInchWalletImage from "@/public/wallets/1inch.png" import AlphaWalletImage from "@/public/wallets/alpha.png" import AmbireImage from "@/public/wallets/ambire.png" -import ApexImage from "@/public/wallets/apex.png" import ArgentImage from "@/public/wallets/argent.png" import AuroxImage from "@/public/wallets/aurox.png" import BitkeepImage from "@/public/wallets/bitkeep.png" @@ -1567,49 +1566,6 @@ export const walletsData: WalletData[] = [ documentation: "https://developer.onekey.so/guide/introduction", new_to_crypto: true, }, - { - last_updated: "2023-01-25", - name: "Apex", - image: ApexImage, - brand_color: "CF9500", - url: "https://apexwallet.xyz/", - active_development_team: true, - languages_supported: ["en"], - twitter: "https://twitter.com/ApexWallet", - discord: "", - reddit: "", - telegram: "", - ios: false, - android: false, - linux: false, - windows: false, - macOS: false, - firefox: false, - chromium: true, - hardware: false, - open_source: false, - repo_url: "", - non_custodial: true, - security_audit: ["audited by Bishop Fox"], - scam_protection: false, - hardware_support: false, - rpc_importing: true, - nft_support: true, - connect_to_dapps: true, - staking: false, - swaps: false, - multichain: true, - layer_2: true, - gas_fee_customization: false, - ens_support: true, - erc_20_support: true, - buy_crypto: false, - withdraw_crypto: false, - multisig: false, - social_recovery: false, - onboard_documentation: "https://docs.apexwallet.xyz/docs/getting-started", - documentation: "https://docs.apexwallet.xyz/docs/getting-started", - }, { last_updated: "2023-04-21", name: "Taho", From cb85b6f43d38879b108874cbcff013118a961d25 Mon Sep 17 00:00:00 2001 From: Richard Gregory Date: Thu, 18 Apr 2024 14:24:38 +0100 Subject: [PATCH 084/219] Delete Apex Wallet logo from repo [Fixes #12741] --- public/wallets/apex.png | Bin 3053 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 public/wallets/apex.png diff --git a/public/wallets/apex.png b/public/wallets/apex.png deleted file mode 100644 index 217cca7612e8c34492b2e78cec73cae731d4bc5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3053 zcmV5*APIUzsTGXEyRczgpy4DL0pUxSm@?A+Ns$h4N;_# zWYPs+27w~;@bAbIii^>nPBi=}JxMktCdvFqTxeSsM-awpSI!#%8h!is$Xz2=WTIld zhq6A=2mk?*&F-&o$9?HD1rw>#r}h+&1-`Za3y(c*S(Cgfac)hhu|Q!G!}eS6IUYhA z#r2uGWbyNf=H3Fn#{h?~MDCh4P@tQ@y5nk7mOcz>*BHO*$=$=Xg@#(+fcEub0cUM~(JW6(ucc zkOYX(9DnYhD+4Y-9xso_Wy)kgYL;feK7;*jgjL5mtve_ZYGTU6^YM5*p6_fHwP*)Q zHYFbUWvv^JI{x|Kb1|rn7$Em3@bS2esTkD(Qu1198UWj+QTKC$s=v%ecnIx8JTz)6 z+Pnb)zl8gQ*KrveyDFRUtV||Ovk=TZ(=Lz8wa;Wg5JCVTb@J+v5$2xStT+qL2Ipf$ zB9B2H8da=U14>u2(gYBixk1<5b1mfaKs-cVE|(#TLl$D9ZY&@4Z)(5UF5R;-rCqoE z740d!%Qe+8URpA^{5Bs1Dy&%3U=#wA^q{mUlbXb$5>Z&Az9xy2Dl~kKDa3j2K?wQ% z^tj9ALBYrzAp=tAGrgNnH6N0;jznv7ddMRSEXi*=|>x;c8gJIeI1ee z@rlH_+ptmDoJsplyU;~t(#Tk*ZQ+Ssb%_!N;t}yOO_fpAMX_mDvN}sV0b<&(4D?HT z%21d4>-EYKpO-Pks|!Z*8)0Bm`#LubX49ob%W7VU#GIa2M3TgJ&Tl7ibezQR)}_v- zDWadAWD#F^%wpXFc_17Ervx-=c)!sG#cTL;>BpF`6Zea$h0$!V2MGOmRpMjpb4oaq zGUBzj9t1;~n`%ag>986UDHn406}xOCAn7WoiV z-t{r6)zGLEA`eXB$^sW6=DK3nc%-?7>%P?>#10c6BKg^n^80DL%V=>>yQ#$n-`Z_X zEv!XhwQ>=U5g-qNWK^EMaV8kds9@1ya7(r)^qJa8tMT1(OyP|^`vCr-;a?i&8`ny5 zbMuV^``H4`!oCVc;1J{{BQ8BD4?220o|nn8D=;6)N+9 zxN!mKHM*b}yO$|^XN-!ByVyd(6=NqjjL z+YGW+Sd|bs<|pJK@WmbjVW2ymDa=FHb@%R$3hz}CU&@3ePNU1+S^mbae2#QVJ@@p(V;5X@o0(dR}&(buN&#y}*#d9}g{Z?D@;fMitEh;97n zr}W)?9BT2`8+5n{@cMd9vN}TGjT)OYr95?oIIJ1f78{Kg4=scHdQ9%=$t-b1d*V1c zbR-WOKO9nz5}9|u*GarGYf1?8z2{3ap@r#;JR)|Ov~fjCKyGJMLw=(Yr&$+P*N55K z*OrAy%x~ne#BL%S&Ti1m3bcof1$cKes#+tYwAb>CD=1h?BLhidPookk6x!`}erIjo zsN-7f%i`^{+0lq^aqrShO9mC>K%){Zs|UJ$zMaqKp?_=h5~qbko$IIFViINJZ~MNT z)ucD90qMYvz%w`TC(d-mZSG~#SQFFsXwyX7V4|GX;$ruFz9|tGNLsHL@HYNkX&556 z&Kq^n%KE8tQA{pq)MWyy_Hns7o zEl(Z$)^=RjO_vJK=QDR;SFAeu5*P!6R%v&x`fPQYURt8Mf^9C%qlz@nfnEKw zEHM05j6dHYZn_GrYL=h_QK`^~KwqIfE$a&9@I%qYFBQ-#&SlLBC`j+)(w;s9a~YNB zv$su%wX#>XJ*z(CiMCZMeWA;ipjz_ZRyFU_Oxnu%04?6nOe#BSGQk3ea|>;Jo$XxI z>(Y9~ra{3v^Slqa-fIh_REe}&`)nJ*6*H=0_k3nd6_f(h+AO=xRu55N~ zPP{ZUH(eOh+;mo5Vvm8-1akf`X3Lu_{y6M7%MwM79jOT zzB*Dc>c<^!PsCG!#aFrEE@9bDsL*Cr@3Nsd%ny#6xT@42PR%)}9&d4)!w>Z_vC87B zhs(-?)w~unputN2!B3A2Ez0i8I=FKi^(Fs9?PokXgcVnJhN>}Zc0fauPta5!!%q)k zQ9MeKQBPW~_nxC!-v#lc?@sT{57Mpo;#^$G4-mgS5_vqd#jI@5#g&C1JoY?}SC$naOkJ@r6qHL)q%V3pH&wc)Q1 zv|`)ifEC?|sMXY3COr{P3IE%{WIS<==WxOAwU?}3=H>zTQ1WT>ukCceldW_RTIy9! zrCrgn>+LV#2)U;-^Renjo^-UPjSjPKeybh%FuSZZ{5f5^(b6&Y-#)ItW1(_l-euL; v9De;D2Pl;O`9sre>C}GQZV%u8^N0Tcm$ictCG#3v00000NkvXXu0mjf4Rg Date: Thu, 18 Apr 2024 18:06:17 +0000 Subject: [PATCH 085/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ab8759c4a4a..3350ed4f752 100644 --- a/README.md +++ b/README.md @@ -1808,6 +1808,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Croath Liu
Croath Liu

📖 💻
Hayatti
Hayatti

🖋 🐛
Jeffrey Owoloko
Jeffrey Owoloko

🚧
Colin McKerracher
Colin McKerracher

🚧
From d59da01bad4492d3ae70332387a4eb6f781ab08d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 18:06:18 +0000 Subject: [PATCH 086/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 29b0080031d..f2505dee952 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11783,6 +11783,15 @@ "contributions": [ "maintenance" ] + }, + { + "login": "colmck", + "name": "Colin McKerracher", + "avatar_url": "https://avatars.githubusercontent.com/u/73862596?v=4", + "profile": "https://github.com/colmck", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, From f6cb2186787c92747ead076a63b262a4f062fc32 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:44:51 -0700 Subject: [PATCH 087/219] chore: remove redundant copy --- public/content/contributing/adding-wallets/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/contributing/adding-wallets/index.md b/public/content/contributing/adding-wallets/index.md index 0986eb01290..6c0a512a32d 100644 --- a/public/content/contributing/adding-wallets/index.md +++ b/public/content/contributing/adding-wallets/index.md @@ -10,7 +10,7 @@ We want to make sure we show a variety of wallets covering the feature-rich land Anyone is free to suggest adding a wallet on ethereum.org. If there's a wallet that we have missed, please suggest it! -Anyone is free to suggest a new wallet. Wallets are currently listed on: +Wallets are currently listed on: - [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) - [ethereum.org/wallets/](/wallets/) From 273011294a5b418a31b317f1d582d05b065009bc Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 18:52:34 +0000 Subject: [PATCH 088/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3350ed4f752..2b45c495183 100644 --- a/README.md +++ b/README.md @@ -1809,6 +1809,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Hayatti
Hayatti

🖋 🐛 Jeffrey Owoloko
Jeffrey Owoloko

🚧 Colin McKerracher
Colin McKerracher

🚧 + writegr
writegr

🐛 From ac99c00656e9475538715490697d400c82c2934e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 18:52:35 +0000 Subject: [PATCH 089/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index f2505dee952..f6ab880db13 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11792,6 +11792,15 @@ "contributions": [ "maintenance" ] + }, + { + "login": "writegr", + "name": "writegr", + "avatar_url": "https://avatars.githubusercontent.com/u/167099595?v=4", + "profile": "https://github.com/writegr", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, From 75f231182f2a7db86d96c077fef342ab3ebfb931 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 18:54:21 +0000 Subject: [PATCH 090/219] 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 2b45c495183..9fce135c0ef 100644 --- a/README.md +++ b/README.md @@ -1306,7 +1306,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Artem Vorotnikov
Artem Vorotnikov

🖋 📆 💬 Liam Arzola
Liam Arzola

🐛 shao
shao

📖 🌍 - Hiroyuki Naito
Hiroyuki Naito

📖 + Hiroyuki Naito
Hiroyuki Naito

📖 🚧 AlehN
AlehN

📖 From 6738ca6d70ea401229ce77070172c659887becfe Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 18:54:22 +0000 Subject: [PATCH 091/219] 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 f6ab880db13..00345e5c1bf 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -8224,7 +8224,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/32320988?v=4", "profile": "https://crowdin.com/profile/hiroyukinaito", "contributions": [ - "doc" + "doc", + "maintenance" ] }, { From bb3e6e96216af98da35623d1f569d36fbf1da98b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 19:00:22 +0000 Subject: [PATCH 092/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9fce135c0ef..c929a70fe17 100644 --- a/README.md +++ b/README.md @@ -1810,6 +1810,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Jeffrey Owoloko
Jeffrey Owoloko

🚧 Colin McKerracher
Colin McKerracher

🚧 writegr
writegr

🐛 + Cardo
Cardo

🚧 From eacb81456b9aab26a9822f40ab7d7d6716118b84 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 19:00:23 +0000 Subject: [PATCH 093/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 00345e5c1bf..029af56dbfd 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11802,6 +11802,15 @@ "contributions": [ "bug" ] + }, + { + "login": "richardgreg", + "name": "Cardo", + "avatar_url": "https://avatars.githubusercontent.com/u/35255909?v=4", + "profile": "https://github.com/richardgreg", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, From b8a0449c97a7acb396f11b63aeb87fa7e851b09b Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 18 Apr 2024 12:05:15 -0700 Subject: [PATCH 094/219] chore: add year to application period --- .../contributing/translation-program/translatathon/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/contributing/translation-program/translatathon/index.md b/public/content/contributing/translation-program/translatathon/index.md index 0c42556584b..0c770a50192 100644 --- a/public/content/contributing/translation-program/translatathon/index.md +++ b/public/content/contributing/translation-program/translatathon/index.md @@ -35,7 +35,7 @@ Office hours, workshops, team formation and FAQ sessions will be hosted on the [ #### Application period {#applications} -The application period will be open from **August 1st** to **August 15th** +The application period will be open from **August 1st** to **August 15th** 2023. All participants in the Translatathon are required to apply in order to participate and compete for prizes. From 7b87f64ce86eb620bab73de493279a21178f245f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 19:06:39 +0000 Subject: [PATCH 095/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c929a70fe17..d5dac180207 100644 --- a/README.md +++ b/README.md @@ -1811,6 +1811,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Colin McKerracher
Colin McKerracher

🚧 writegr
writegr

🐛 Cardo
Cardo

🚧 + shravanandoria
shravanandoria

🚧 From 83ade9b2d602f38d1e6f017b1443275ec623c184 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 19:06:40 +0000 Subject: [PATCH 096/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 029af56dbfd..ed3373215d6 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11811,6 +11811,15 @@ "contributions": [ "maintenance" ] + }, + { + "login": "shravanandoria", + "name": "shravanandoria", + "avatar_url": "https://avatars.githubusercontent.com/u/36509067?v=4", + "profile": "https://www.linkedin.com/in/shravan-andoria/", + "contributions": [ + "maintenance" + ] } ], "contributorsPerLine": 7, From ae8f0165dcdfdde013a751838d426e011fd1d556 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Thu, 18 Apr 2024 14:52:26 -0700 Subject: [PATCH 097/219] chore: update FigmentGlyphIcon --- src/components/icons/staking/FigmentGlyphIcon.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/icons/staking/FigmentGlyphIcon.tsx b/src/components/icons/staking/FigmentGlyphIcon.tsx index e596fbb78ab..371daf6424e 100644 --- a/src/components/icons/staking/FigmentGlyphIcon.tsx +++ b/src/components/icons/staking/FigmentGlyphIcon.tsx @@ -1,4 +1,4 @@ -import React from "react" +/* eslint-disable react/jsx-key */ import { createIcon } from "@chakra-ui/react" export const FigmentGlyphIcon = createIcon({ From 1d161df2586244df2f311fa658ccac836b1af764 Mon Sep 17 00:00:00 2001 From: tomasgrusz Date: Fri, 19 Apr 2024 10:02:55 +0200 Subject: [PATCH 098/219] feat: add year and banner to translathathon page --- .../translation-program/translatathon/index.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/public/content/contributing/translation-program/translatathon/index.md b/public/content/contributing/translation-program/translatathon/index.md index 94b42ca629f..37753ef3efe 100644 --- a/public/content/contributing/translation-program/translatathon/index.md +++ b/public/content/contributing/translation-program/translatathon/index.md @@ -16,12 +16,17 @@ We invite you to join us in breaking down language barriers and making ethereum. ## Overview {#overview} + + This event has passed. Stay tuned for the next events{" "} + here. + + ### When {#when} -- Application period: August 1st - August 15th -- Translation period: August 16th - August 23rd -- Evaluation & QA period: August 23rd - August 30th -- Results announcement: August 31st +- Application period: August 1st - August 15th, 2023 +- Translation period: August 16th - August 23rd, 2023 +- Evaluation & QA period: August 23rd - August 30th, 2023 +- Results announcement: August 31st, 2023 ### Where {#where} @@ -35,7 +40,7 @@ Office hours, workshops, team formation and FAQ sessions will be hosted on the [ #### Application period {#applications} -The application period will be open from **August 1st** to **August 15th** +The application period will be open from **August 1st** to **August 15th**, 2023 All participants in the Translatathon are required to apply in order to participate and compete for prizes. From f267cbb533c236e5f1b6de5fd777e2f3f3d60a9a Mon Sep 17 00:00:00 2001 From: tomasgrusz Date: Fri, 19 Apr 2024 10:14:56 +0200 Subject: [PATCH 099/219] fix: put back dot --- .../contributing/translation-program/translatathon/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/contributing/translation-program/translatathon/index.md b/public/content/contributing/translation-program/translatathon/index.md index 37753ef3efe..84f3612b320 100644 --- a/public/content/contributing/translation-program/translatathon/index.md +++ b/public/content/contributing/translation-program/translatathon/index.md @@ -40,7 +40,7 @@ Office hours, workshops, team formation and FAQ sessions will be hosted on the [ #### Application period {#applications} -The application period will be open from **August 1st** to **August 15th**, 2023 +The application period will be open from **August 1st** to **August 15th**, 2023. All participants in the Translatathon are required to apply in order to participate and compete for prizes. From 9b83495123d09795563b2066e6a9edbd1b860f9d Mon Sep 17 00:00:00 2001 From: Banwo Olorunsogo Date: Fri, 19 Apr 2024 10:02:37 +0100 Subject: [PATCH 100/219] fix: Link [execution-diversity.info] change to supermajority.info --- public/content/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../translations/de/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../translations/es/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../translations/fr/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../translations/hu/developers/docs/data-and-analytics/index.md | 2 +- .../translations/it/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../translations/ja/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../pt-br/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../translations/tr/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- .../translations/zh/developers/docs/data-and-analytics/index.md | 2 +- .../developers/docs/nodes-and-clients/client-diversity/index.md | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/public/content/developers/docs/data-and-analytics/index.md b/public/content/developers/docs/data-and-analytics/index.md index b1d93d5412d..c71fa70458f 100644 --- a/public/content/developers/docs/data-and-analytics/index.md +++ b/public/content/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ Using [GraphQL](https://graphql.org/), developers can query any of the curated o ## Client diversity -[Client diversity](/developers/docs/nodes-and-clients/client-diversity/) is important for the overall health of the Ethereum network because it provides resilience to bugs and exploits. There are now several client diversity dashboards including [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [execution-diversity.info](https://execution-diversity.info/) and [Ethernodes](https://ethernodes.org/). +[Client diversity](/developers/docs/nodes-and-clients/client-diversity/) is important for the overall health of the Ethereum network because it provides resilience to bugs and exploits. There are now several client diversity dashboards including [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) and [Ethernodes](https://ethernodes.org/). ## Dune Analytics {#dune-analytics} diff --git a/public/content/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/developers/docs/nodes-and-clients/client-diversity/index.md index 6a0971d7ebe..73b18723d3a 100644 --- a/public/content/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/developers/docs/nodes-and-clients/client-diversity/index.md @@ -92,7 +92,7 @@ Several dashboards give real-time client diversity statistics for the execution - [clientdiversity.org](https://clientdiversity.org/) **Execution layer:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## Further reading {#further-reading} diff --git a/public/content/translations/de/developers/docs/data-and-analytics/index.md b/public/content/translations/de/developers/docs/data-and-analytics/index.md index 4db1f5a312f..90d7e54b682 100644 --- a/public/content/translations/de/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/de/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ Mit [GraphQL](https://graphql.org/) können Entwickler jede der kuratierten offe ## Client-Diversität -Die [Client-Vielfalt](/developers/docs/nodes-and-clients/client-diversity/) ist wichtig für die allgemeine Sicherheit des Ethereum-Netzwerks, da sie die Widerstandsfähigkeit gegen Fehler und Schwachstellen gewährleistet. Es gibt inzwischen mehrere Dashboards zur Client-Vielfalt, darunter [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://rated.network), [execution-diversity.info](https://execution-diversity.info/) und [Ethernodes](https://ethernodes.org/). +Die [Client-Vielfalt](/developers/docs/nodes-and-clients/client-diversity/) ist wichtig für die allgemeine Sicherheit des Ethereum-Netzwerks, da sie die Widerstandsfähigkeit gegen Fehler und Schwachstellen gewährleistet. Es gibt inzwischen mehrere Dashboards zur Client-Vielfalt, darunter [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://rated.network), [supermajority.info](https://supermajority.info//) und [Ethernodes](https://ethernodes.org/). ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md index 9dd6b3ba85b..97efb3c9801 100644 --- a/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/de/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ Verschiedene Dashboards geben Echtzeit-Statistiken zur Client-Vielfalt für die - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **Ausführungsebene:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## Weiterführende Informationen {#further-reading} diff --git a/public/content/translations/es/developers/docs/data-and-analytics/index.md b/public/content/translations/es/developers/docs/data-and-analytics/index.md index 854447d686f..b346ae677fa 100644 --- a/public/content/translations/es/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/es/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ Usando [GraphQL](https://graphql.org/), los desarrolladores pueden consultar cua ## Diversidad de clientes -La [diversidad de clientes](/developers/docs/nodes-and-clients/client-diversity/) es importante para la salud general de la red de Ethereum porque esta provee resistencia a errores y exploits. Ahora hay varios paneles de diversidad de clientes, incluidos [clientdiversity.org](https://clientdiversity.org/), [ated.network](https://www.rated.network), [execution-diversity.info](https://execution-diversity.info/) y [Ethernodes](https://ethernodes.org/). +La [diversidad de clientes](/developers/docs/nodes-and-clients/client-diversity/) es importante para la salud general de la red de Ethereum porque esta provee resistencia a errores y exploits. Ahora hay varios paneles de diversidad de clientes, incluidos [clientdiversity.org](https://clientdiversity.org/), [ated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) y [Ethernodes](https://ethernodes.org/). ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md index 88854c8eada..2517785e938 100644 --- a/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/es/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ Hay varios paneles que ofrecen estadísticas en tiempo real sobre la diversidad - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **/Capa de ejecución:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## Más información {#further-reading} diff --git a/public/content/translations/fr/developers/docs/data-and-analytics/index.md b/public/content/translations/fr/developers/docs/data-and-analytics/index.md index 1f8ea1da072..6b0a945cf2e 100644 --- a/public/content/translations/fr/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/fr/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ En utilisant [GraphQL](https://graphql.org/), les développeurs peuvent interrog ## Diversité des clients -[La diversité du client](/developers/docs/nodes-and-clients/client-diversity/) est importante pour la santé globale du réseau Ethereum, car elle fournit de la résilience aux bogues et aux exploitations. Il y a maintenant plusieurs tableaux de bord de la diversité de clients dont [clientdiversity.org](https://clientdiversity.org/), [rated.etwork](https://www.rated.network), [execution-diversity.info](https://execution-diversity.info/), [et Ethernodes](https://ethernodes.org/). +[La diversité du client](/developers/docs/nodes-and-clients/client-diversity/) est importante pour la santé globale du réseau Ethereum, car elle fournit de la résilience aux bogues et aux exploitations. Il y a maintenant plusieurs tableaux de bord de la diversité de clients dont [clientdiversity.org](https://clientdiversity.org/), [rated.etwork](https://www.rated.network), [supermajority.info](https://supermajority.info//), [et Ethernodes](https://ethernodes.org/). ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md index 405c353f8dd..31a1d5ebc81 100644 --- a/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/fr/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ Plusieurs tableaux de bord donnent des statistiques en temps réel de la diversi - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **Couche d'exécution :** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## Complément d'information {#further-reading} diff --git a/public/content/translations/hu/developers/docs/data-and-analytics/index.md b/public/content/translations/hu/developers/docs/data-and-analytics/index.md index 5620c2063fc..fb3f881ed9a 100644 --- a/public/content/translations/hu/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/hu/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ A [GraphQL](https://graphql.org/) lekérdezési nyelv használatával a fejleszt ## Kliensdiverzitás -A [kliensdiverzitás](/developers/docs/nodes-and-clients/client-diversity/) rendkívül fontos az egész Ethereum-hálózat átfogó egészsége szempontjából, mivel védelmet biztosít a hibák és támadások ellen. Számos kliensdiverzitásról szóló kimutatás elérhető, mint a [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [execution-diversity.info](https://execution-diversity.info/) és az [Ethernodes](https://ethernodes.org/). +A [kliensdiverzitás](/developers/docs/nodes-and-clients/client-diversity/) rendkívül fontos az egész Ethereum-hálózat átfogó egészsége szempontjából, mivel védelmet biztosít a hibák és támadások ellen. Számos kliensdiverzitásról szóló kimutatás elérhető, mint a [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) és az [Ethernodes](https://ethernodes.org/). ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/it/developers/docs/data-and-analytics/index.md b/public/content/translations/it/developers/docs/data-and-analytics/index.md index 4b139fc467a..a8cabf1ebe1 100644 --- a/public/content/translations/it/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/it/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ Usando [GraphQL](https://graphql.org/), gli sviluppatori possono interrogare una ## Diversità dei client -La [diversità dei client](/developers/docs/nodes-and-clients/client-diversity/) è importante per la salute complessiva della rete di Ethereum, poiché fornisce resilienza a bug ed exploit. Attualmente esistono vari pannelli di controllo della diversità del client, tra cui [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [execution-diversity.info](https://execution-diversity.info/) ed [Ethernodes](https://ethernodes.org/). +La [diversità dei client](/developers/docs/nodes-and-clients/client-diversity/) è importante per la salute complessiva della rete di Ethereum, poiché fornisce resilienza a bug ed exploit. Attualmente esistono vari pannelli di controllo della diversità del client, tra cui [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) ed [Ethernodes](https://ethernodes.org/). ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md index 306010bea7d..c810a74e140 100644 --- a/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/it/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ Diversi pannelli di controllo forniscono statistiche sulla diversità dei client - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **Livello di esecuzione:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## Letture consigliate {#further-reading} diff --git a/public/content/translations/ja/developers/docs/data-and-analytics/index.md b/public/content/translations/ja/developers/docs/data-and-analytics/index.md index fefffc40ae2..7d698a0876d 100644 --- a/public/content/translations/ja/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/ja/developers/docs/data-and-analytics/index.md @@ -31,7 +31,7 @@ lang: ja ## クライアントの多様性 [クライアントの多様性](/developers/docs/nodes-and-clients/client-diversity/)は、バグや脆弱性に対する回復力を提供します。そのため、イーサリアムネットワーク全体の健全性にとって重要です。 現在、 -clientdiversity.org[rated.network](https://www.rated.network)、[execution-diversity.info](https://execution-diversity.info/)、[Ethernodes](https://ethernodes.org/)など、いくつかのクライアント多様性ダッシュボードが存在します。 +clientdiversity.org[rated.network](https://www.rated.network)、[supermajority.info](https://supermajority.info//)、[Ethernodes](https://ethernodes.org/)など、いくつかのクライアント多様性ダッシュボードが存在します。 diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md index 870acd7fc04..e81e3b0de6b 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ sidebarDepth: 2 - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **実行レイヤー:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## 参考文献 {#further-reading} diff --git a/public/content/translations/pt-br/developers/docs/data-and-analytics/index.md b/public/content/translations/pt-br/developers/docs/data-and-analytics/index.md index 2c3e7d8406d..ce64a1726be 100644 --- a/public/content/translations/pt-br/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/pt-br/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ Usando o [GraphQL](https://graphql.org/), os desenvolvedores podem consultar qua ## Diversidade dos clientes -A [diversidade do cliente](/developers/docs/nodes-and-clients/client-diversity/) é importante para a saúde geral da rede Ethereum porque fornece resiliência a bugs e explorações. Agora existem vários painéis de diversidade do cliente, incluindo [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://rated.network/), [execution-diversity.info](https://execution-diversity.info/) e [Ethernodes](https://ethernodes.org/). +A [diversidade do cliente](/developers/docs/nodes-and-clients/client-diversity/) é importante para a saúde geral da rede Ethereum porque fornece resiliência a bugs e explorações. Agora existem vários painéis de diversidade do cliente, incluindo [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://rated.network/), [supermajority.info](https://supermajority.info//) e [Ethernodes](https://ethernodes.org/). ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md index f5061c43027..39a62fdd027 100644 --- a/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/pt-br/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ Vários painéis fornecem estatísticas de diversidade de cliente em tempo real - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **Camada de execução:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## Leitura adicional {#further-reading} diff --git a/public/content/translations/tr/developers/docs/data-and-analytics/index.md b/public/content/translations/tr/developers/docs/data-and-analytics/index.md index ba535092ad1..53b71ae9496 100644 --- a/public/content/translations/tr/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/tr/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ Geliştiriciler, [GraphQL](https://graphql.org/)'u kullanarak, alt grafikler ola ## İstemci çeşitliliği -[İstemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity/), Ethereum ağı için genel sağlık açısından önemlidir çünkü hatalara veya açıklardan kaynaklanabilecek istismar ve sorunlara karşı esneklik veya direnç sağlar. Şu anda [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://rated.network/), [execution-diversity.info](https://execution-diversity.info/) ve [Ethernodes](https://ethernodes.org/) dahil olmak üzere çeşitli istemci çeşitliliği gösterge panelleri bulunmaktadır. +[İstemci çeşitliliği](/developers/docs/nodes-and-clients/client-diversity/), Ethereum ağı için genel sağlık açısından önemlidir çünkü hatalara veya açıklardan kaynaklanabilecek istismar ve sorunlara karşı esneklik veya direnç sağlar. Şu anda [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://rated.network/), [supermajority.info](https://supermajority.info//) ve [Ethernodes](https://ethernodes.org/) dahil olmak üzere çeşitli istemci çeşitliliği gösterge panelleri bulunmaktadır. ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md index 39d5ada060c..61bdaa9e02c 100644 --- a/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/tr/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ Birden fazla gösterge paneli yürütüm ve fikir birliği katmanları için ger - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **Yürütüm katmanı:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## Daha fazla okuma {#further-reading} diff --git a/public/content/translations/zh/developers/docs/data-and-analytics/index.md b/public/content/translations/zh/developers/docs/data-and-analytics/index.md index 66eae7a2b59..8dff78d7998 100644 --- a/public/content/translations/zh/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/zh/developers/docs/data-and-analytics/index.md @@ -30,7 +30,7 @@ lang: zh ## 客户端多样性 -[客户端多样性](/developers/docs/nodes-and-clients/client-diversity/)对于以太坊网络的整体健康很重要,因为它提供了对错误和漏洞利用的弹性。 目前,出现了一些客户端多样性仪表板,包括 [clientdiversity.org](https://clientdiversity.org/)、[rated.network](https://www.rated.network)、[execution-diversity.info](https://execution-diversity.info/) 和 [Ethernodes](https://ethernodes.org/)。 +[客户端多样性](/developers/docs/nodes-and-clients/client-diversity/)对于以太坊网络的整体健康很重要,因为它提供了对错误和漏洞利用的弹性。 目前,出现了一些客户端多样性仪表板,包括 [clientdiversity.org](https://clientdiversity.org/)、[rated.network](https://www.rated.network)、[supermajority.info](https://supermajority.info//) 和 [Ethernodes](https://ethernodes.org/)。 ## Dune Analytics {#dune-analytics} diff --git a/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md index 5dcccb76c18..69f9f4fec56 100644 --- a/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/zh/developers/docs/nodes-and-clients/client-diversity/index.md @@ -90,7 +90,7 @@ sidebarDepth: 2 - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **执行层:** -- [execution-diversity.info](https://execution-diversity.info/) +- [supermajority.info](https://supermajority.info//) - [Ethernodes](https://ethernodes.org/) ## 延伸阅读 {#further-reading} From 91821b0bebe0a78e5a0131c29a0a7725e844748b Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 19 Apr 2024 11:53:03 +0100 Subject: [PATCH 101/219] Update public/content/contributing/adding-wallets/index.md --- public/content/contributing/adding-wallets/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/contributing/adding-wallets/index.md b/public/content/contributing/adding-wallets/index.md index 9a670325b1e..1d544a52c5c 100644 --- a/public/content/contributing/adding-wallets/index.md +++ b/public/content/contributing/adding-wallets/index.md @@ -28,7 +28,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework - **EIP-1559 (type 2) transactions** - your wallet must support EIP-1559 (type 2) transactions. - **Good user experience** - While UX is subjective, if several core team members test the product and find it difficult to use, we reserve the right to reject the wallet and will instead provide useful suggestions to improve. This is done to protect our user base that is mostly comprised of beginners. -### Product removals: {#product-removals} +### Product removals {#product-removals} - **Updated information** - Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relevance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org reserves the right to remove the project from the page. From 5a0268ee4639b436e6c9fbc1373f9af0d3dd2e23 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 19 Apr 2024 11:53:26 +0100 Subject: [PATCH 102/219] Update public/content/contributing/adding-wallets/index.md --- public/content/contributing/adding-wallets/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/contributing/adding-wallets/index.md b/public/content/contributing/adding-wallets/index.md index 1d544a52c5c..96a19470b2c 100644 --- a/public/content/contributing/adding-wallets/index.md +++ b/public/content/contributing/adding-wallets/index.md @@ -30,7 +30,7 @@ Wallets are rapidly changing in Ethereum. We've tried to create a fair framework ### Product removals {#product-removals} -- **Updated information** - Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relevance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org reserves the right to remove the project from the page. +- **Updated information** - Wallet providers are responsible for resubmitting their wallet information every 6 months to ensure validity and relevance of provided information (even if there are no changes to their product). If the product team fails to do so, ethereum.org may remove the project from the page. ### Other criteria: the nice-to-haves {#the-nice-to-haves} From 57bc75091a090b90efd4cd560b4cd92fc96972a4 Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Fri, 19 Apr 2024 15:05:35 +0200 Subject: [PATCH 103/219] fix bad syntax in json files --- src/intl/ml/page-about.json | 2 +- src/intl/ro/page-about.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/intl/ml/page-about.json b/src/intl/ml/page-about.json index 81623e634b2..9eb4d2d4741 100644 --- a/src/intl/ml/page-about.json +++ b/src/intl/ml/page-about.json @@ -21,5 +21,5 @@ "page-about-p-5": "ഞങ്ങൾ നടപ്പിലാക്കുന്ന ചുമതലകൾ.", "page-about-p-6": "അടുത്തത് നടപ്പിലാക്കാൻ ഞങ്ങൾ ക്യൂവിലാണ്.", "page-about-p-7": "അടുത്തിടെ പൂർത്തിയാക്കിയ ജോലികൾ.", - "page-about-p-8": "Ethereum.org എങ്ങനെ മെച്ചപ്പെടുത്താം എന്നതിനെക്കുറിച്ച് നിങ്ങൾക്ക് ഒരു ആശയമുണ്ടോ? നിങ്ങളുമായി സഹകരിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു!", + "page-about-p-8": "Ethereum.org എങ്ങനെ മെച്ചപ്പെടുത്താം എന്നതിനെക്കുറിച്ച് നിങ്ങൾക്ക് ഒരു ആശയമുണ്ടോ? നിങ്ങളുമായി സഹകരിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു!" } diff --git a/src/intl/ro/page-about.json b/src/intl/ro/page-about.json index 27f9b327283..e55e184e4b2 100644 --- a/src/intl/ro/page-about.json +++ b/src/intl/ro/page-about.json @@ -21,5 +21,5 @@ "page-about-p-5": "Sarcini pe care le implementăm.", "page-about-p-6": "Sarcini puse în coadă pentru a le implementa în continuare.", "page-about-p-7": "Sarcini finalizate recent.", - "page-about-p-8": "Ai o idee despre cum să îmbunătățești ethereum.org? Ne-ar plăcea să colaborăm cu tine!", + "page-about-p-8": "Ai o idee despre cum să îmbunătățești ethereum.org? Ne-ar plăcea să colaborăm cu tine!" } From 17ed743b400b00a80d46badb92fa786f24b8afb3 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 19 Apr 2024 16:27:29 +0000 Subject: [PATCH 104/219] Update Crowdin translation progress --- src/data/translationProgress.json | 206 +++++++++++++++--------------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/src/data/translationProgress.json b/src/data/translationProgress.json index e75d6bd2098..ce8e26c210b 100644 --- a/src/data/translationProgress.json +++ b/src/data/translationProgress.json @@ -3,637 +3,637 @@ "languageId": "af", "words": { "approved": 2328, - "total": 340420 + "total": 340424 } }, { "languageId": "am", "words": { "approved": 9552, - "total": 340420 + "total": 340424 } }, { "languageId": "ar", "words": { "approved": 36140, - "total": 340420 + "total": 340424 } }, { "languageId": "az", "words": { "approved": 24630, - "total": 340420 + "total": 340424 } }, { "languageId": "be", "words": { "approved": 6043, - "total": 340420 + "total": 340424 } }, { "languageId": "bg", "words": { "approved": 14592, - "total": 340420 + "total": 340424 } }, { "languageId": "bi", "words": { "approved": 0, - "total": 340420 + "total": 340424 } }, { "languageId": "bn", "words": { "approved": 32111, - "total": 340420 + "total": 340424 } }, { "languageId": "br-FR", "words": { "approved": 119, - "total": 340420 + "total": 340424 } }, { "languageId": "bs", "words": { "approved": 6131, - "total": 340420 + "total": 340424 } }, { "languageId": "ca", "words": { - "approved": 19699, - "total": 340420 + "approved": 20726, + "total": 340424 } }, { "languageId": "cs", "words": { - "approved": 45844, - "total": 340420 + "approved": 46923, + "total": 340424 } }, { "languageId": "da", "words": { "approved": 2348, - "total": 340420 + "total": 340424 } }, { "languageId": "de", "words": { "approved": 153565, - "total": 340420 + "total": 340424 } }, { "languageId": "el", "words": { - "approved": 104060, - "total": 340420 + "approved": 105151, + "total": 340424 } }, { "languageId": "eo", "words": { "approved": 216, - "total": 340420 + "total": 340424 } }, { "languageId": "es-EM", "words": { - "approved": 316340, - "total": 340420 + "approved": 317139, + "total": 340424 } }, { "languageId": "et", "words": { "approved": 91, - "total": 340420 + "total": 340424 } }, { "languageId": "eu", "words": { "approved": 43, - "total": 340420 + "total": 340424 } }, { "languageId": "fa", "words": { "approved": 91130, - "total": 340420 + "total": 340424 } }, { "languageId": "fa-AF", "words": { "approved": 189, - "total": 340420 + "total": 340424 } }, { "languageId": "fi", "words": { "approved": 21299, - "total": 340420 + "total": 340424 } }, { "languageId": "fil", "words": { "approved": 49215, - "total": 340420 + "total": 340424 } }, { "languageId": "fr", "words": { - "approved": 320577, - "total": 340420 + "approved": 320579, + "total": 340424 } }, { "languageId": "gi", "words": { "approved": 0, - "total": 340420 + "total": 340424 } }, { "languageId": "gl", "words": { "approved": 2206, - "total": 340420 + "total": 340424 } }, { "languageId": "gu-IN", "words": { "approved": 2445, - "total": 340420 + "total": 340424 } }, { "languageId": "ha", "words": { "approved": 4, - "total": 340420 + "total": 340424 } }, { "languageId": "he", "words": { "approved": 2185, - "total": 340420 + "total": 340424 } }, { "languageId": "hi", "words": { "approved": 52146, - "total": 340420 + "total": 340424 } }, { "languageId": "hr", "words": { - "approved": 13380, - "total": 340420 + "approved": 13376, + "total": 340424 } }, { "languageId": "hu", "words": { - "approved": 234604, - "total": 340420 + "approved": 234606, + "total": 340424 } }, { "languageId": "hy-AM", "words": { "approved": 9557, - "total": 340420 + "total": 340424 } }, { "languageId": "id", "words": { "approved": 150790, - "total": 340420 + "total": 340424 } }, { "languageId": "ig", "words": { "approved": 21959, - "total": 340420 + "total": 340424 } }, { "languageId": "it", "words": { - "approved": 326369, - "total": 340420 + "approved": 326371, + "total": 340424 } }, { "languageId": "ja", "words": { "approved": 311729, - "total": 340420 + "total": 340424 } }, { "languageId": "ka", "words": { "approved": 2324, - "total": 340420 + "total": 340424 } }, { "languageId": "kk", "words": { "approved": 2383, - "total": 340420 + "total": 340424 } }, { "languageId": "km", "words": { "approved": 13709, - "total": 340420 + "total": 340424 } }, { "languageId": "kn", "words": { "approved": 23394, - "total": 340420 + "total": 340424 } }, { "languageId": "ko", "words": { "approved": 47870, - "total": 340420 + "total": 340424 } }, { "languageId": "ku", "words": { "approved": 0, - "total": 340420 + "total": 340424 } }, { "languageId": "ky", "words": { "approved": 11, - "total": 340420 + "total": 340424 } }, { "languageId": "lb", "words": { "approved": 0, - "total": 340420 + "total": 340424 } }, { "languageId": "lt", "words": { "approved": 2725, - "total": 340420 + "total": 340424 } }, { "languageId": "mai", "words": { "approved": 0, - "total": 340420 + "total": 340424 } }, { "languageId": "mk", "words": { "approved": 142, - "total": 340420 + "total": 340424 } }, { "languageId": "ml-IN", "words": { "approved": 12048, - "total": 340420 + "total": 340424 } }, { "languageId": "mn", "words": { "approved": 99, - "total": 340420 + "total": 340424 } }, { "languageId": "mr", "words": { "approved": 22222, - "total": 340420 + "total": 340424 } }, { "languageId": "ms", "words": { "approved": 39448, - "total": 340420 + "total": 340424 } }, { "languageId": "my", "words": { "approved": 768, - "total": 340420 + "total": 340424 } }, { "languageId": "ne-NP", "words": { "approved": 2289, - "total": 340420 + "total": 340424 } }, { "languageId": "nl", "words": { "approved": 34336, - "total": 340420 + "total": 340424 } }, { "languageId": "no", "words": { "approved": 2722, - "total": 340420 + "total": 340424 } }, { "languageId": "or", "words": { "approved": 1, - "total": 340420 + "total": 340424 } }, { "languageId": "pa-IN", "words": { "approved": 6, - "total": 340420 + "total": 340424 } }, { "languageId": "pcm", "words": { - "approved": 15469, - "total": 340420 + "approved": 15470, + "total": 340424 } }, { "languageId": "pl", "words": { "approved": 87142, - "total": 340420 + "total": 340424 } }, { "languageId": "pt-BR", "words": { - "approved": 306673, - "total": 340420 + "approved": 306674, + "total": 340424 } }, { "languageId": "pt-PT", "words": { "approved": 22295, - "total": 340420 + "total": 340424 } }, { "languageId": "ro", "words": { "approved": 77446, - "total": 340420 + "total": 340424 } }, { "languageId": "ru", "words": { "approved": 88384, - "total": 340420 + "total": 340424 } }, { "languageId": "sat", "words": { "approved": 57, - "total": 340420 + "total": 340424 } }, { "languageId": "si-LK", "words": { "approved": 774, - "total": 340420 + "total": 340424 } }, { "languageId": "sk", "words": { "approved": 6564, - "total": 340420 + "total": 340424 } }, { "languageId": "sl", "words": { "approved": 26676, - "total": 340420 + "total": 340424 } }, { "languageId": "sn", "words": { "approved": 516, - "total": 340420 + "total": 340424 } }, { "languageId": "so", "words": { "approved": 547, - "total": 340420 + "total": 340424 } }, { "languageId": "sq", "words": { "approved": 761, - "total": 340420 + "total": 340424 } }, { "languageId": "sr-CS", "words": { "approved": 22434, - "total": 340420 + "total": 340424 } }, { "languageId": "sv-SE", "words": { "approved": 10146, - "total": 340420 + "total": 340424 } }, { "languageId": "sw", "words": { "approved": 15790, - "total": 340420 + "total": 340424 } }, { "languageId": "ta", "words": { "approved": 2328, - "total": 340420 + "total": 340424 } }, { "languageId": "te", "words": { "approved": 7240, - "total": 340420 + "total": 340424 } }, { "languageId": "tg", "words": { "approved": 0, - "total": 340420 + "total": 340424 } }, { "languageId": "th", "words": { "approved": 6234, - "total": 340420 + "total": 340424 } }, { "languageId": "ti", "words": { "approved": 0, - "total": 340420 + "total": 340424 } }, { "languageId": "tk", "words": { "approved": 6088, - "total": 340420 + "total": 340424 } }, { "languageId": "tl", "words": { "approved": 124, - "total": 340420 + "total": 340424 } }, { "languageId": "tr", "words": { - "approved": 307930, - "total": 340420 + "approved": 307927, + "total": 340424 } }, { "languageId": "uk", "words": { "approved": 61196, - "total": 340420 + "total": 340424 } }, { "languageId": "ur-IN", "words": { "approved": 2325, - "total": 340420 + "total": 340424 } }, { "languageId": "ur-PK", "words": { "approved": 793, - "total": 340420 + "total": 340424 } }, { "languageId": "uz", "words": { "approved": 2918, - "total": 340420 + "total": 340424 } }, { "languageId": "vi", "words": { "approved": 20884, - "total": 340420 + "total": 340424 } }, { "languageId": "yo", "words": { "approved": 748, - "total": 340420 + "total": 340424 } }, { "languageId": "zh-CN", "words": { - "approved": 309660, - "total": 340420 + "approved": 309946, + "total": 340424 } }, { "languageId": "zh-TW", "words": { "approved": 115214, - "total": 340420 + "total": 340424 } }, { "languageId": "zu", "words": { "approved": 146, - "total": 340420 + "total": 340424 } } ] \ No newline at end of file From d4e8a3651bc9f6d77898c432dcd9eca4eeffcf34 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 21 Apr 2024 01:41:49 +0000 Subject: [PATCH 105/219] Update Crowdin contributors --- src/data/crowdin/combined-translators.json | 380 ++++++++++++------ .../crowdin/translation-buckets-dirs.json | 4 + 2 files changed, 251 insertions(+), 133 deletions(-) diff --git a/src/data/crowdin/combined-translators.json b/src/data/crowdin/combined-translators.json index c6d19856c85..25db008a3dc 100644 --- a/src/data/crowdin/combined-translators.json +++ b/src/data/crowdin/combined-translators.json @@ -923,6 +923,12 @@ "totalCosts": 303, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg" }, + { + "id": 16325622, + "username": "pautapia99", + "totalCosts": 273.71, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16325622/medium/42c9988a8bccc80645910f4fcc8d0001.jpg" + }, { "id": 15344526, "username": "Joanmacat", @@ -985,6 +991,12 @@ "username": "egelizo", "totalCosts": 13.13, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14643068/medium/f6f25b4f0e429a11e235ade8d866b314.jpeg" + }, + { + "id": 16325622, + "username": "pautapia99", + "totalCosts": 2.02, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16325622/medium/42c9988a8bccc80645910f4fcc8d0001.jpg" } ] }, @@ -1014,6 +1026,12 @@ { "fileId": "5565", "contributors": [ + { + "id": 16325622, + "username": "pautapia99", + "totalCosts": 688.82, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16325622/medium/42c9988a8bccc80645910f4fcc8d0001.jpg" + }, { "id": 15344526, "username": "Joanmacat", @@ -6485,6 +6503,12 @@ "totalCosts": 86.86, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15511756/medium/513599bdff63b6d935fa6d4fc6cca119_default.png" }, + { + "id": 15714091, + "username": "Karym_GG", + "totalCosts": 68.68, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15714091/medium/69afa2fb791e1be17640c54018cb4e2e_default.png" + }, { "id": 15515640, "username": ".ViCkYs.", @@ -9881,6 +9905,12 @@ "totalCosts": 249.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15864595/medium/9901e0dba4ead65619b8b1b9a591caf7_default.png" }, + { + "id": 16327348, + "username": "AlanisVale21", + "totalCosts": 74.74, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16327348/medium/883808a0391fbf6c316ce145f482a7fe_default.png" + }, { "id": 14691832, "username": "imrulo.eth", @@ -15004,7 +15034,7 @@ { "id": 15967353, "username": "sipbikardi", - "totalCosts": 117.16, + "totalCosts": 206.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967353/medium/bdbc4e456ff62160eead47d69c036137.jpg" }, { @@ -15724,6 +15754,12 @@ { "fileId": "5565", "contributors": [ + { + "id": 15967353, + "username": "sipbikardi", + "totalCosts": 452.48, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967353/medium/bdbc4e456ff62160eead47d69c036137.jpg" + }, { "id": 16279808, "username": "alien_max", @@ -31297,7 +31333,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 555.5, + "totalCosts": 598.93, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -31306,6 +31342,12 @@ "totalCosts": 311.08, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14963383/medium/0478800a5b79d2b1dbff376396d3758d.png" }, + { + "id": 16301748, + "username": "jaja_in_web3", + "totalCosts": 280.78, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16301748/medium/b292dee2eb05d315fbc1664d08906a31_default.png" + }, { "id": 15397446, "username": "BobbiStani", @@ -31332,7 +31374,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 1897.79, + "totalCosts": 2103.83, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -34642,6 +34684,12 @@ { "fileId": "5565", "contributors": [ + { + "id": 16301748, + "username": "jaja_in_web3", + "totalCosts": 421.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16301748/medium/b292dee2eb05d315fbc1664d08906a31_default.png" + }, { "id": 16073436, "username": "g-flex", @@ -34657,7 +34705,7 @@ { "id": 13461670, "username": "Herbie_23", - "totalCosts": 39.39, + "totalCosts": 68.68, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13461670/medium/c9291075edb8582a7efe26fe983237e1.jpg" }, { @@ -35756,17 +35804,17 @@ "totalCosts": 934.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201594/medium/5e27758e217a387356f7c0502130479f_default.png" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 225.23, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 15341508, "username": "hesoponyo", "totalCosts": 66.66, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15341508/medium/070055fd80d21a5f4b26e37dd49cd0d0.png" - }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 56.56, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] }, @@ -36193,6 +36241,12 @@ { "fileId": "5559", "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 335.32, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 14880458, "username": "sekisanchi", @@ -36200,10 +36254,10 @@ "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" }, { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 110.09, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + "id": 14972661, + "username": "shigetaichi", + "totalCosts": 68.68, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14972661/medium/63e8470a66ada0a7237a8e5626f0e7b3.jpeg" } ] }, @@ -36213,7 +36267,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1832.14, + "totalCosts": 2058.38, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -36251,17 +36305,17 @@ "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14103339/medium/fc832d678cca1c9a43f019d8a819f41c.JPG" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 98.98, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 14730036, "username": "shoyu", "totalCosts": 17.17, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14730036/medium/3f53daf0320c8412a99de867a0ca6d2c_default.png" - }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 2.02, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] }, @@ -36274,18 +36328,18 @@ "totalCosts": 1066.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15680077/medium/a9db402339c4ac996a32133a844692ef_default.png" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 448.44, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 15466100, "username": "ki-3", "totalCosts": 64.64, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15466100/medium/1b0592d23d47ff1700a1b5163323646c.png" }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 55.55, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, { "id": 15645601, "username": "hanahiroAze", @@ -36468,12 +36522,6 @@ "totalCosts": 2613.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 738.31, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" - }, { "id": 14880458, "username": "sekisanchi", @@ -37335,12 +37383,6 @@ "totalCosts": 741.34, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 460.56, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" - }, { "id": 14395884, "username": "Frodo821", @@ -37468,12 +37510,6 @@ "totalCosts": 59.59, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15384904/medium/c2c00eb3c10ba62f1b8fee328e145fa6_default.png" }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 37.37, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" - }, { "id": 14880458, "username": "sekisanchi", @@ -37519,12 +37555,6 @@ "username": "HiroyukiNaito", "totalCosts": 763.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 91.91, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" } ] }, @@ -37873,12 +37903,6 @@ "totalCosts": 4170.29, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 624.18, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" - }, { "id": 15405636, "username": "Sy260", @@ -38739,12 +38763,6 @@ "totalCosts": 548.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 541.36, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" - }, { "id": 15341508, "username": "hesoponyo", @@ -38980,24 +38998,12 @@ "username": "HiroyukiNaito", "totalCosts": 587.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 523.18, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" } ] }, { "fileId": "3164", "contributors": [ - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 1636.2, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" - }, { "id": 15208868, "username": "HiroyukiNaito", @@ -39775,18 +39781,18 @@ { "fileId": "2672", "contributors": [ + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 450.46, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 14880458, "username": "sekisanchi", "totalCosts": 116.15, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14880458/medium/6b71180a926d6213e33b21e50df8e409_default.png" }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 112.11, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" - }, { "id": 15275810, "username": "sakamotomasayuki7", @@ -39819,7 +39825,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 244.42, + "totalCosts": 616.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39840,6 +39846,12 @@ "totalCosts": 22.22, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14708760/medium/c99d5e08a676eaebe6f2a383a81222e1.jpg" }, + { + "id": 14972661, + "username": "shigetaichi", + "totalCosts": 17.17, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14972661/medium/63e8470a66ada0a7237a8e5626f0e7b3.jpeg" + }, { "id": 15553263, "username": "alajaponaise", @@ -39927,6 +39939,12 @@ "totalCosts": 1060.5, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14730036/medium/3f53daf0320c8412a99de867a0ca6d2c_default.png" }, + { + "id": 15208868, + "username": "HiroyukiNaito", + "totalCosts": 244.42, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" + }, { "id": 15135089, "username": "indwm", @@ -39938,12 +39956,6 @@ "username": "Buyabuya", "totalCosts": 82.82, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16274540/medium/fff14edb8869578304921016a436ab18.jpeg" - }, - { - "id": 15208868, - "username": "HiroyukiNaito", - "totalCosts": 25.25, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] }, @@ -39959,7 +39971,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 75.75, + "totalCosts": 145.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -39976,7 +39988,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 358.55, + "totalCosts": 695.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -40104,7 +40116,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 1029.19, + "totalCosts": 1084.74, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -40130,12 +40142,6 @@ "totalCosts": 8677.92, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 8048.69, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" - }, { "id": 15488702, "username": "nonno", @@ -40343,12 +40349,6 @@ "username": "_Sakura_", "totalCosts": 378.75, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15384904/medium/c2c00eb3c10ba62f1b8fee328e145fa6_default.png" - }, - { - "id": 15460936, - "username": "tsukky", - "totalCosts": 22.22, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15460936/medium/99ed6b4051dfcad3d1fa3e4cfaa17073.JPG" } ] }, @@ -40420,7 +40420,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 868.6, + "totalCosts": 1120.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" } ] @@ -40748,7 +40748,7 @@ { "id": 15208868, "username": "HiroyukiNaito", - "totalCosts": 536.31, + "totalCosts": 695.89, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15208868/medium/4ed4a0a0659f1c63e52f395079aeb3c4.jpg" }, { @@ -43319,7 +43319,7 @@ { "id": 15894449, "username": "wosek_", - "totalCosts": 475.71, + "totalCosts": 509.04, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15894449/medium/a1d92e3a822252a09f842a8a5451c403.jpg" }, { @@ -44553,6 +44553,12 @@ "totalCosts": 108.07, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/13986387/medium/72bb87143f2a8d013cddac84c4e2afac.jpg" }, + { + "id": 16331412, + "username": "tamercuba", + "totalCosts": 71.71, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16331412/medium/6fe4bb0dda0b042991551a01f12c6647.jpeg" + }, { "id": 15373000, "username": "Fradique", @@ -47627,6 +47633,12 @@ { "fileId": "5565", "contributors": [ + { + "id": 16331412, + "username": "tamercuba", + "totalCosts": 692.86, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16331412/medium/6fe4bb0dda0b042991551a01f12c6647.jpeg" + }, { "id": 15422032, "username": "Fritzhoy", @@ -52607,6 +52619,12 @@ "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 69.69, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 15214436, "username": "cheremmmisin", @@ -52745,7 +52763,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 459.55, + "totalCosts": 467.63, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" }, { @@ -52891,6 +52909,12 @@ "totalCosts": 349.46, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15427134/medium/fb0663c86db786f43ab92df49583ad92.jpeg" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 337.34, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 14514124, "username": "ViktorOn", @@ -52946,7 +52970,7 @@ { "id": 15763855, "username": "dovbyshbgd", - "totalCosts": 29.29, + "totalCosts": 188.87, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] @@ -52978,17 +53002,17 @@ "totalCosts": 61.61, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15509510/medium/04d6afce57425f67a3a25630fa08441c_default.png" }, + { + "id": 15763855, + "username": "dovbyshbgd", + "totalCosts": 19.19, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" + }, { "id": 15912649, "username": "tnnnnnnnn2", "totalCosts": 10.1, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15912649/medium/6e4c7a7de3ed6449814e0c7de673dc30.png" - }, - { - "id": 15763855, - "username": "dovbyshbgd", - "totalCosts": 7.07, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15763855/medium/5b59dc54e26664f82eab09a76961eaf7.png" } ] }, @@ -60491,6 +60515,12 @@ "username": "selcuk45", "totalCosts": 272.7, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15082707/medium/1422c6237f35e4d0e31e08554a233472.jpeg" + }, + { + "id": 16321330, + "username": "plebbitor", + "totalCosts": 16.16, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16321330/medium/e21cb77bff156bea5e29c3a9f94c01c1.png" } ] }, @@ -60520,6 +60550,12 @@ "username": "asyazturk", "totalCosts": 44.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15051735/medium/4bd459a5c499e116d120de53625eed93.png" + }, + { + "id": 16321330, + "username": "plebbitor", + "totalCosts": 7.07, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16321330/medium/e21cb77bff156bea5e29c3a9f94c01c1.png" } ] }, @@ -61019,6 +61055,12 @@ "totalCosts": 110.09, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15967233/medium/b3515c2cf957fd413921b8fc9ccd6960.jpg" }, + { + "id": 16329284, + "username": "sh3ifu", + "totalCosts": 36.36, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16329284/medium/94aff1679dd6e774e7744ad61b60b080.jpg" + }, { "id": 14951291, "username": "lutsakolha", @@ -61676,6 +61718,12 @@ "totalCosts": 189.88, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15856843/medium/2c53a645673e90327155f24d7f1237f5_default.png" }, + { + "id": 16325182, + "username": "N1k", + "totalCosts": 110.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16325182/medium/fe6dbf868fc1818b6bc64e2b0cf4367a_default.png" + }, { "id": 15860037, "username": "makc7", @@ -65071,6 +65119,12 @@ "totalCosts": 14.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15073799/medium/a33ad8c1e01cf31890babace80908193.png" }, + { + "id": 15381970, + "username": "tzbkk", + "totalCosts": 10.1, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15381970/medium/b43b331e365346453668db293656f269.jpeg" + }, { "id": 15524545, "username": "sheepskin1", @@ -69011,6 +69065,12 @@ "totalCosts": 361.58, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15911295/medium/8aae130b64f46cd1ea960d085950a560_default.png" }, + { + "id": 16324840, + "username": "Nineeeee", + "totalCosts": 165.64, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16324840/medium/3307a2ac7aec88f18ee0532661813556_default.png" + }, { "id": 15314206, "username": "cuijia", @@ -71377,7 +71437,7 @@ { "id": 15399006, "username": "Xeift", - "totalCosts": 242.4, + "totalCosts": 293.91, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, { @@ -71421,17 +71481,17 @@ "totalCosts": 1834.16, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, + { + "id": 15399006, + "username": "Xeift", + "totalCosts": 91.91, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" + }, { "id": 15783149, "username": "xy710.eth", "totalCosts": 56.56, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15783149/medium/f395b4c1a1b358bcc9e01ef741887e40.jpeg" - }, - { - "id": 15399006, - "username": "Xeift", - "totalCosts": 31.31, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" } ] }, @@ -71450,6 +71510,12 @@ "totalCosts": 131.3, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 96.96, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" + }, { "id": 14817838, "username": "Tadashi1024", @@ -71531,18 +71597,18 @@ "totalCosts": 519.14, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" }, + { + "id": 15947735, + "username": "cychung", + "totalCosts": 163.62, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947735/medium/4023f995a7c5a29531aba4ba3d6f4c73.jpg" + }, { "id": 15783149, "username": "xy710.eth", "totalCosts": 153.52, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15783149/medium/f395b4c1a1b358bcc9e01ef741887e40.jpeg" }, - { - "id": 15947735, - "username": "cychung", - "totalCosts": 65.65, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15947735/medium/4023f995a7c5a29531aba4ba3d6f4c73.jpg" - }, { "id": 15055487, "username": "xaviershen1", @@ -71584,6 +71650,12 @@ "totalCosts": 245.43, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15055487/medium/10522705934133754c3c30644a91e987.png" }, + { + "id": 15399006, + "username": "Xeift", + "totalCosts": 75.75, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" + }, { "id": 14765612, "username": "mintleaf", @@ -71880,6 +71952,12 @@ "username": "Xeift", "totalCosts": 122.21, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15399006/medium/4b4638642287027a89529ecb11074e44.png" + }, + { + "id": 16328010, + "username": "CathyDing", + "totalCosts": 13.13, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16328010/medium/5b56e5d831cf8d6f4e7b66f68eccaaee.jpeg" } ] }, @@ -72098,6 +72176,12 @@ "totalCosts": 631.25, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15550507/medium/2aaa6dc51fbb57d36b6b8106d06c85fe.jpeg" }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 156.55, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" + }, { "id": 15871701, "username": "maxwellcotto", @@ -72488,6 +72572,12 @@ "totalCosts": 101, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15532451/medium/1558c22671c8674e0f77412238047eb8_default.png" }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 69.69, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" + }, { "id": 15399006, "username": "Xeift", @@ -72528,6 +72618,12 @@ "totalCosts": 531.26, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15806537/medium/bcd829ea4cae49b3ec63925ecd75c126.jpeg" }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 106.05, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" + }, { "id": 15399006, "username": "Xeift", @@ -72545,6 +72641,12 @@ "totalCosts": 246.44, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15806537/medium/bcd829ea4cae49b3ec63925ecd75c126.jpeg" }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 50.5, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" + }, { "id": 15399006, "username": "Xeift", @@ -72625,6 +72727,12 @@ "totalCosts": 742.35, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15952201/medium/70ddfc80063bd4b296bc3997bd5fd808_default.png" }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 224.22, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" + }, { "id": 15954241, "username": "FoodChain1028", @@ -72636,12 +72744,6 @@ "username": "LaraWeb3", "totalCosts": 36.36, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15965405/medium/8eeddd3c27c380aeaca8bf3c9ce55c5f_default.png" - }, - { - "id": 14661950, - "username": "kenforever", - "totalCosts": 26.26, - "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" } ] }, @@ -72890,6 +72992,12 @@ "username": "ckykenken", "totalCosts": 47.47, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14090051/medium/7f731194f98d3e1d19de2ef09f179542_default.png" + }, + { + "id": 16328010, + "username": "CathyDing", + "totalCosts": 9.09, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/16328010/medium/5b56e5d831cf8d6f4e7b66f68eccaaee.jpeg" } ] }, @@ -73023,6 +73131,12 @@ "totalCosts": 129.28, "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/15201846/medium/3d9d29022427094faeb700ddbd5c078a.jpeg" }, + { + "id": 14661950, + "username": "kenforever", + "totalCosts": 55.55, + "avatarUrl": "https://crowdin-static.downloads.crowdin.com/avatar/14661950/medium/d12c67f954a833d343013ee215f59335.jpg" + }, { "id": 15590369, "username": "antmap", diff --git a/src/data/crowdin/translation-buckets-dirs.json b/src/data/crowdin/translation-buckets-dirs.json index 40947f5af95..e81dbe5b8f5 100644 --- a/src/data/crowdin/translation-buckets-dirs.json +++ b/src/data/crowdin/translation-buckets-dirs.json @@ -110,5 +110,9 @@ { "id": 7833, "name": "28) Developer Tutorials IV" + }, + { + "id": 11098, + "name": "Test directory" } ] \ No newline at end of file From a27a3fbbc7fa24e4c6775154c990e09740fe51b8 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Sun, 21 Apr 2024 16:41:41 -0400 Subject: [PATCH 106/219] fix(storybook): expose `Inter` local fonts to storybook --- .storybook/preview-head.html | 7 +++++++ .storybook/preview.ts | 2 ++ 2 files changed, 9 insertions(+) create mode 100644 .storybook/preview-head.html diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html new file mode 100644 index 00000000000..e70d700d43a --- /dev/null +++ b/.storybook/preview-head.html @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 1dbef52ee1a..7e39ab1aae1 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -5,6 +5,8 @@ import theme from "../src/@chakra-ui/theme" import i18n, { baseLocales } from "./i18next" +import "../src/styles/global.css" + const extendedTheme = extendBaseTheme(theme) const chakraBreakpointArray = Object.entries(extendedTheme.breakpoints) From f78afe38f97f7e6bcd4a2617387dc9edf8659c80 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Sun, 21 Apr 2024 21:27:27 -0400 Subject: [PATCH 107/219] refactor(.storybook): preload `Inter` font in preview --- .storybook/preview-head.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html index e70d700d43a..49dbfaf3bdd 100644 --- a/.storybook/preview-head.html +++ b/.storybook/preview-head.html @@ -4,4 +4,6 @@ --font-inter: 'Inter', sans-serif; } - \ No newline at end of file + + + \ No newline at end of file From 1fdf5cb2a66ad95036a8719aac9aa762d95e8a05 Mon Sep 17 00:00:00 2001 From: Abi Prescott Date: Mon, 22 Apr 2024 09:46:42 -0300 Subject: [PATCH 108/219] Update index.md Oracles are not data feeds themselves. Rather, they produce data feeds. --- public/content/developers/docs/oracles/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/developers/docs/oracles/index.md b/public/content/developers/docs/oracles/index.md index 685daf21a04..fa4940fa32c 100644 --- a/public/content/developers/docs/oracles/index.md +++ b/public/content/developers/docs/oracles/index.md @@ -4,7 +4,7 @@ description: Oracles provide Ethereum smart contracts with access to real-world lang: en --- -Oracles are data feeds that make off-chain data sources available to the blockchain for smart contracts. This is necessary because Ethereum-based smart contracts cannot, by default, access information stored outside the blockchain network. +Oracles are applications that produce data feeds that make off-chain data sources available to the blockchain for smart contracts. This is necessary because Ethereum-based smart contracts cannot, by default, access information stored outside the blockchain network. Giving smart contracts the ability to execute using off-chain data extends the utility and value of decentralized applications. For instance, on-chain prediction markets rely on oracles to provide information about outcomes that they use to validate user predictions. Suppose Alice bets 20 ETH on who will become the next U.S. President. In that case, the prediction-market dapp needs an oracle to confirm election results and determine if Alice is eligible for a payout. From e8a60e4c622e13a093e1979560307b727b9b89de Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 22 Apr 2024 10:02:51 -0600 Subject: [PATCH 109/219] Add question on user fees --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index 7886663558d..d37ca96e459 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -65,6 +65,11 @@ body: description: Please provide a date when the wallet was usable by the public validations: required: true + - type: textarea + id: wallet_user_fees + attributes: + label: When are the fees users may be paying for using your wallet product? + description: eg) 1% service fee for swapping, bridging functionality, flat fee for all transactions - type: input id: wallet_active_development_team attributes: From 772c41ab04824c0f2c43b82e5b9820619bd7a383 Mon Sep 17 00:00:00 2001 From: Corwin Smith Date: Mon, 22 Apr 2024 10:34:30 -0600 Subject: [PATCH 110/219] fix spelling and make required --- .github/ISSUE_TEMPLATE/suggest_wallet.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml index d37ca96e459..94d8ab6faa7 100644 --- a/.github/ISSUE_TEMPLATE/suggest_wallet.yaml +++ b/.github/ISSUE_TEMPLATE/suggest_wallet.yaml @@ -68,8 +68,10 @@ body: - type: textarea id: wallet_user_fees attributes: - label: When are the fees users may be paying for using your wallet product? + label: What are the fees users may be paying for using your wallet product? description: eg) 1% service fee for swapping, bridging functionality, flat fee for all transactions + validations: + required: true - type: input id: wallet_active_development_team attributes: From 4ac9e7f63f6859eb01630d515a923c5a0e3b0169 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 22 Apr 2024 11:26:36 -0700 Subject: [PATCH 111/219] revert: adjustments --- src/content/bridges/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/bridges/index.md b/src/content/bridges/index.md index 9073a4adac5..521b84ceb02 100644 --- a/src/content/bridges/index.md +++ b/src/content/bridges/index.md @@ -16,7 +16,7 @@ Blockchain bridges work just like the bridges we know in the physical world. Jus Let's consider an example: -You're from the USA and are planning a trip to Europe, where only EUR is accepted. You can use a currency exchange for a small fee to exchange your USD for EUR. +You're from the USA and are planning a trip to Europe. You have USD, but you need EUR to spend. To exchange your USD for EUR you can use a currency exchange for a small fee. But, what do you do if you want to make a similar exchange to use a different blockchain? Let's say you want to exchange ETH on Ethereum Mainnet for ETH on [Arbitrum](https://arbitrum.io/). Like the currency exchange we made for EUR, we need a mechanism to move our ETH from Ethereum to Arbitrum. Bridges make such a transaction possible. In this case, [Arbitrum has a native bridge](https://bridge.arbitrum.io/) that can transfer ETH from Mainnet onto Arbitrum. @@ -57,7 +57,7 @@ If you have ETH on Ethereum Mainnet and you want to explore an alt L1 to try out ### Own native crypto assets {#own-native} -Let’s say you want to own native Bitcoin (BTC), but you only have funds on Ethereum Mainnet. To gain exposure to BTC on Ethereum, you can buy Wrapped Bitcoin (WBTC). However, WBTC is an ERC-20 token native to the Ethereum network, which means it’s an Ethereum version of Bitcoin and not the original asset on the Bitcoin blockchain. To own a native BTC, you would have to bridge your assets from Ethereum to Bitcoin using a bridge. This will bridge your WBTC and convert it into a native BTC. Alternatively, you might own BTC and want to use it in Ethereum DeFi protocols. This would require bridging the other way, from BTC to WBTC which can then be used as an asset on Ethereum. +Let’s say you want to own native Bitcoin (BTC), but you only have funds on Ethereum Mainnet. To gain exposure to BTC on Ethereum, you can buy Wrapped Bitcoin (WBTC). However, WBTC is an ERC-20 token native to the Ethereum network, which means it’s an Ethereum version of Bitcoin and not the original asset on the Bitcoin blockchain. To own native BTC, you would have to bridge your assets from Ethereum to Bitcoin using a bridge. This will bridge your WBTC and convert it into a native BTC. Alternatively, you might own BTC and want to use it in Ethereum DeFi protocols. This would require bridging the other way, from BTC to WBTC which can then be used as an asset on Ethereum. You can also do all of the above using a centralized exchange. However, unless your funds are already on an exchange, it would involve multiple steps, and you’d likely be better off using a bridge. From 66bd0539c0b4c67d378dcac6955db605d89382d3 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:33:22 +0000 Subject: [PATCH 112/219] docs: update README.md [skip ci] --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d5dac180207..a098c8eaeb3 100644 --- a/README.md +++ b/README.md @@ -1813,6 +1813,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Cardo
Cardo

🚧 shravanandoria
shravanandoria

🚧 + + Rashid Ma
Rashid Ma

🐛 + From ebfdd00de2423f5ecf98367253543c38d69fe5ce Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:33:23 +0000 Subject: [PATCH 113/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index ed3373215d6..50f2d94b46b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11820,6 +11820,15 @@ "contributions": [ "maintenance" ] + }, + { + "login": "mcmoodoo", + "name": "Rashid Ma", + "avatar_url": "https://avatars.githubusercontent.com/u/8257719?v=4", + "profile": "http://rashidma.com", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, From c3c92df3ff5bccd751988253854b175a23c629a4 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:51:03 +0000 Subject: [PATCH 114/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a098c8eaeb3..1824387a250 100644 --- a/README.md +++ b/README.md @@ -1815,6 +1815,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Rashid Ma
Rashid Ma

🐛 + James Prestwich
James Prestwich

🖋 From e6edc5cc8521fe3ccf685be8da7abd9d73837d7a Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:51:03 +0000 Subject: [PATCH 115/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 50f2d94b46b..021f4939d69 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11829,6 +11829,15 @@ "contributions": [ "bug" ] + }, + { + "login": "prestwich", + "name": "James Prestwich", + "avatar_url": "https://avatars.githubusercontent.com/u/10149425?v=4", + "profile": "https://prestwi.ch", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 7, From 970060d04538242088478dc842d0b7d5b3ef8ced Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:58:22 +0000 Subject: [PATCH 116/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1824387a250..fa25969d027 100644 --- a/README.md +++ b/README.md @@ -1816,6 +1816,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Rashid Ma
Rashid Ma

🐛 James Prestwich
James Prestwich

🖋 + Dai Wentao
Dai Wentao

🐛 From effc3b8ac01dfd3ba9bc6ffeb911ef6367f0f8a8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:58:23 +0000 Subject: [PATCH 117/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 021f4939d69..24dc016eef9 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11838,6 +11838,15 @@ "contributions": [ "content" ] + }, + { + "login": "daiwt", + "name": "Dai Wentao", + "avatar_url": "https://avatars.githubusercontent.com/u/26290219?v=4", + "profile": "https://github.com/daiwt", + "contributions": [ + "bug" + ] } ], "contributorsPerLine": 7, From 38ba68be0b2bf28a527807e45d857f83da09b040 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:08:03 +0000 Subject: [PATCH 118/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fa25969d027..cb16d0987aa 100644 --- a/README.md +++ b/README.md @@ -1817,6 +1817,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Rashid Ma
Rashid Ma

🐛 James Prestwich
James Prestwich

🖋 Dai Wentao
Dai Wentao

🐛 + kuhant
kuhant

🔧 From 41fda004592398336783db5d77acb18b16d40343 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:08:04 +0000 Subject: [PATCH 119/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 24dc016eef9..8f6bb1e76ba 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11847,6 +11847,15 @@ "contributions": [ "bug" ] + }, + { + "login": "beetrootkid", + "name": "kuhant", + "avatar_url": "https://avatars.githubusercontent.com/u/34025634?v=4", + "profile": "https://github.com/beetrootkid", + "contributions": [ + "tool" + ] } ], "contributorsPerLine": 7, From c66de3c723b5c9c50ffbf8fee3db3069cbd07297 Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:53:11 -0500 Subject: [PATCH 120/219] Update index.md to remove multiple references to Crossmint --- src/content/enterprise/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/content/enterprise/index.md b/src/content/enterprise/index.md index 8216eb8781a..ee581a3c1f9 100644 --- a/src/content/enterprise/index.md +++ b/src/content/enterprise/index.md @@ -73,7 +73,6 @@ Some collaborative efforts to make Ethereum enterprise friendly have been made b ### Tooling and libraries {#tooling-and-libraries} - [Alethio](https://explorer.aleth.io/) _Ethereum Data Analytics Platform_ -- [Crossmint](http://crossmint.com/?utm_source=backlinks) _Enterprise-grade APIs to create, distribute, sell, store, and edit NFTs_ - [Sirato](https://www.web3labs.com/sirato) _a data and analytics platform for public and private Ethereum compatible networks by Web3 Labs_ - [Ernst & Young's ‘Nightfall'](https://github.com/EYBlockchain/nightfall) _a toolkit for private transactions_ - [EthSigner](https://github.com/ConsenSys/ethsigner) _a transaction signing application to be used with a web3 provider_ @@ -93,7 +92,6 @@ Here are some of the enterprise applications that have been built on top of the ### Payments {#payments} - [Brave Browser](https://basicattentiontoken.org/) _pays users for their attention to advertisements and users can pay publishers to support them, via the Basic Attention Token_ -- [Crossmint](http://crossmint.com/?utm_source=backlinks) _Enable credit card and cross-chain payments for your NFT Collections._ - [hCaptcha](https://www.hcaptcha.com/) _Bot prevention CAPTCHA system which pays web site operators for the work done by users to label data for machine learning. Now deployed by Cloudflare_ - [EthereumAds](https://ethereumads.com/) _lets web site operators sell advertising space and get paid via Ethereum_ From 73d0899e0cb6ab3f14c531de84451e773839cfac Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:55:06 -0500 Subject: [PATCH 121/219] Update index.md to remove utm_source --- src/content/developers/docs/dapps/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/dapps/index.md b/src/content/developers/docs/dapps/index.md index bee2afbf0ec..7e991f92210 100644 --- a/src/content/developers/docs/dapps/index.md +++ b/src/content/developers/docs/dapps/index.md @@ -76,9 +76,9 @@ A smart contract is code that lives on the Ethereum blockchain and runs exactly **Crossmint _- Enterprise-grade web3 development platform to deploy smart contracts, enable credit-card and cross chain payments, and use APIs to create, distribute, sell, store, and edit NFTs._** -- [crossmint.com](https://www.crossmint.com/?utm_source=backlinks) -- [Documentation](https://docs.crossmint.com/?utm_source=backlinks) -- [Discord](https://discord.com/invite/crossmint/?utm_source=backlinks) +- [crossmint.com](https://www.crossmint.com) +- [Documentation](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) ## Further reading {#further-reading} From d6837743077c5187d86d39c043695e40599c6841 Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:55:38 -0500 Subject: [PATCH 122/219] Update index.md to remove utm_source --- src/content/enterprise/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/enterprise/index.md b/src/content/enterprise/index.md index ee581a3c1f9..033ca48a928 100644 --- a/src/content/enterprise/index.md +++ b/src/content/enterprise/index.md @@ -56,7 +56,7 @@ Some collaborative efforts to make Ethereum enterprise friendly have been made b - [Blockapps](https://blockapps.net/) _implementation of the Enterprise Ethereum protocol, tooling and APIs that form the STRATO platform_ - [Chainstack](https://chainstack.com/) _mainnet and testnet Ethereum infrastructure hosted in public & isolated customer clouds_ - [ConsenSys](https://consensys.net/) _provides a range of products and tools for building on Ethereum, as well as consulting and custom development services_ -- [Crossmint](http://crossmint.com/?utm_source=backlinks) _Enterprise-grade web3 development platform to deploy smart contracts, enable credit-card and cross chain payments, and use APIs to create, distribute, sell, store, and edit NFTs._ +- [Crossmint](http://crossmint.com/) _Enterprise-grade web3 development platform to deploy smart contracts, enable credit-card and cross chain payments, and use APIs to create, distribute, sell, store, and edit NFTs._ - [Envision Blockchain](https://envisionblockchain.com/) _provides enterprise focused consulting and development services specializing in Ethereum Mainnet_ - [EY OpsChain](https://blockchain.ey.com/products/contract-manager) _provides a procurement workflow by issuing RFQ’s, contracts, purchase orders, and invoices across your network of trusted business partners_ - [Hyperledger Besu](https://www.hyperledger.org/use/besu) _an enterprise focused open-source Ethereum client developed under the Apache 2.0 license and written in Java_ From b4d9a30f8dc95988a93b248f8291a6da50e746c9 Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:58:54 -0500 Subject: [PATCH 123/219] Update index.md to shorten the description --- src/content/developers/docs/frameworks/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/developers/docs/frameworks/index.md b/src/content/developers/docs/frameworks/index.md index c5a867f7cda..2f1b635ac11 100644 --- a/src/content/developers/docs/frameworks/index.md +++ b/src/content/developers/docs/frameworks/index.md @@ -95,11 +95,11 @@ Before diving into frameworks, we recommend you first read through our introduct - [GitHub](https://github.com/chainstack) - [Discord](https://discord.gg/BSb5zfp9AT) -**Crossmint -** **_The leading enterprise-grade web3 development platform, that allows you to build NFT applications without requiring any blockchain experience or holding cryptocurrency, and making the blockchain invisible to end users. The platform offers a one-stop-shop for most of your NFT infrastructure needs across all major chains EVM Chains(and others), including creating, distributing, selling, storing digital assets, and offering post-mint utility._** +**Crossmint -** **_Enterprise-grade web3 development platform, that allows you to build NFT applications on all major chains EVM Chains(and others)._** -- [Website](https://www.crossmint.com/?utm_source=backlinks) -- [Documentation](https://docs.crossmint.com/?utm_source=backlinks) -- [Discord](https://discord.com/invite/crossmint/?utm_source=backlinks) +- [Website](https://www.crossmint.com) +- [Documentation](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) **Brownie -** **_Python-based development environment and testing framework._** From 0cb47396607cfb34fe00f4d75e274e2b075db159 Mon Sep 17 00:00:00 2001 From: Rohit Ramesh <70317502+rohit-710@users.noreply.github.com> Date: Mon, 22 Apr 2024 16:00:25 -0500 Subject: [PATCH 124/219] Update index.md to remove utm_source --- .../developers/docs/smart-contracts/deploying/index.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/content/developers/docs/smart-contracts/deploying/index.md b/src/content/developers/docs/smart-contracts/deploying/index.md index 33167759ae6..50c57dba103 100644 --- a/src/content/developers/docs/smart-contracts/deploying/index.md +++ b/src/content/developers/docs/smart-contracts/deploying/index.md @@ -55,9 +55,10 @@ The specific steps involved will depend on the development framework in question **Crossmint - _Enterprise-grade web3 development platform to deploy smart contracts, enable credit-card and cross chain payments, and use APIs to create, distribute, sell, store, and edit NFTs._** -- [crossmint.com](https://www.crossmint.com/?utm_source=backlinks) -- [Documentation](https://docs.crossmint.com/?utm_source=backlinks) -- [Discord](https://discord.com/invite/crossmint/?utm_source=backlinks) +- [crossmint.com](https://www.crossmint.com) +- [Documentation](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) +- [Blog](https://blog.crossmint.com) ## Related tutorials {#related-tutorials} From 3603df51a0b8d9735a73d1a4dd3481757d063db2 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 22:01:37 +0000 Subject: [PATCH 125/219] 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 cb16d0987aa..d29e69c8bca 100644 --- a/README.md +++ b/README.md @@ -1798,7 +1798,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d ArtificialPB
ArtificialPB

🔧 Pedrojok01
Pedrojok01

🚧 - Vid Kersic
Vid Kersic

🔧 + Vid Kersic
Vid Kersic

🔧 🐛 Tantan Fu
Tantan Fu

🚧 Dharmik Dholariya
Dharmik Dholariya

🐛 Timur Badretdinov
Timur Badretdinov

🔧 From 32af4f22ee0f9697e87e148a057c2fc6841ea7ff Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 22:01:38 +0000 Subject: [PATCH 126/219] 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 8f6bb1e76ba..2e04ef9254d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11717,7 +11717,8 @@ "avatar_url": "https://avatars.githubusercontent.com/u/38610409?v=4", "profile": "https://github.com/Vid201", "contributions": [ - "tool" + "tool", + "bug" ] }, { From 7ba825a2f31858801add79507149e65fa9cb5089 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 22:19:08 +0000 Subject: [PATCH 127/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d29e69c8bca..c588223703d 100644 --- a/README.md +++ b/README.md @@ -1818,6 +1818,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d James Prestwich
James Prestwich

🖋 Dai Wentao
Dai Wentao

🐛 kuhant
kuhant

🔧 + Lucas Aschenbach
Lucas Aschenbach

🖋 From 8b0eb29c25dbbecf08f832f148d8dc790aa168e8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 22:19:09 +0000 Subject: [PATCH 128/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 2e04ef9254d..b415108da07 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11857,6 +11857,15 @@ "contributions": [ "tool" ] + }, + { + "login": "LucasAschenbach", + "name": "Lucas Aschenbach", + "avatar_url": "https://avatars.githubusercontent.com/u/37406743?v=4", + "profile": "https://github.com/LucasAschenbach", + "contributions": [ + "content" + ] } ], "contributorsPerLine": 7, From 29b938782c247a0b6132f69d70a5bdec8005bf26 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Mon, 22 Apr 2024 18:43:51 -0400 Subject: [PATCH 129/219] fix(Stat): wrap `Tooltip` child in anchor tag --- src/components/Stat/index.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx index ef81e2b1240..b079610078c 100644 --- a/src/components/Stat/index.tsx +++ b/src/components/Stat/index.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from "react" import type { IconType } from "react-icons/lib" import { MdInfoOutline, MdWarning } from "react-icons/md" -import { Flex, HStack, Icon, Text } from "@chakra-ui/react" +import { Box, chakra,Flex, HStack, Icon, Text } from "@chakra-ui/react" import { NULL_VALUE } from "@/lib/constants" @@ -44,7 +44,9 @@ const Stat = ({ tooltipProps, value, label, isError }: StatProps) => { {label} {!!tooltipProps && ( - + + + )} From aa70753431d42af63cc126b430ce8902ea44a346 Mon Sep 17 00:00:00 2001 From: tylerapfledderer Date: Mon, 22 Apr 2024 19:13:48 -0400 Subject: [PATCH 130/219] refactor(Stat): wrap Tooltip trigger content in button instead of anchor --- src/components/Stat/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Stat/index.tsx b/src/components/Stat/index.tsx index b079610078c..e7b7951b474 100644 --- a/src/components/Stat/index.tsx +++ b/src/components/Stat/index.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from "react" import type { IconType } from "react-icons/lib" import { MdInfoOutline, MdWarning } from "react-icons/md" -import { Box, chakra,Flex, HStack, Icon, Text } from "@chakra-ui/react" +import { Box, chakra, Flex, HStack, Icon, Text } from "@chakra-ui/react" import { NULL_VALUE } from "@/lib/constants" @@ -44,9 +44,9 @@ const Stat = ({ tooltipProps, value, label, isError }: StatProps) => { {label} {!!tooltipProps && ( - + - + )} From eef54318dc3c6d7b7e23aff4dc85c6584f1c6f5d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 23:51:53 +0000 Subject: [PATCH 131/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c588223703d..9694c82df4a 100644 --- a/README.md +++ b/README.md @@ -1819,6 +1819,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Dai Wentao
Dai Wentao

🐛 kuhant
kuhant

🔧 Lucas Aschenbach
Lucas Aschenbach

🖋 + juliettech
juliettech

From f3e56164ad1984401a0446fbefcb364633e14614 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 23:51:54 +0000 Subject: [PATCH 132/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index b415108da07..9003e5e147b 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11866,6 +11866,15 @@ "contributions": [ "content" ] + }, + { + "login": "juliettech13", + "name": "juliettech", + "avatar_url": "https://avatars.githubusercontent.com/u/19226636?v=4", + "profile": "https://juliet.tech", + "contributions": [ + "tutorial" + ] } ], "contributorsPerLine": 7, From 2bc61ef22dce0c22ec7bbb1fe86cd0f9bd0ef6b6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:16:46 +0000 Subject: [PATCH 133/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c588223703d..01bfc87c954 100644 --- a/README.md +++ b/README.md @@ -1819,6 +1819,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Dai Wentao
Dai Wentao

🐛 kuhant
kuhant

🔧 Lucas Aschenbach
Lucas Aschenbach

🖋 + 0xayot
0xayot

📖 From 467158a57430f5a7cfaa51d038234fba1ae1757b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:16:47 +0000 Subject: [PATCH 134/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index b415108da07..c6de6f157cb 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11866,6 +11866,15 @@ "contributions": [ "content" ] + }, + { + "login": "0xayot", + "name": "0xayot", + "avatar_url": "https://avatars.githubusercontent.com/u/101125111?v=4", + "profile": "https://github.com/0xayot", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, From 1592e97511bfdf5aee0a8c3c6bfe0ffb51db7441 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 01:47:19 +0000 Subject: [PATCH 135/219] docs: update README.md [skip ci] --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 01bfc87c954..c62777d07d5 100644 --- a/README.md +++ b/README.md @@ -1820,6 +1820,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d kuhant
kuhant

🔧 Lucas Aschenbach
Lucas Aschenbach

🖋 0xayot
0xayot

📖 + Louis
Louis

🖋 🐛 From d62a844897d25c09005d5bc631b48ac60faddf0e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 01:47:20 +0000 Subject: [PATCH 136/219] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index c6de6f157cb..1b18ad9f7f1 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -11875,6 +11875,16 @@ "contributions": [ "doc" ] + }, + { + "login": "lgaroche", + "name": "Louis", + "avatar_url": "https://avatars.githubusercontent.com/u/13414533?v=4", + "profile": "https://github.com/lgaroche", + "contributions": [ + "content", + "bug" + ] } ], "contributorsPerLine": 7, From 29d723333cada995101d5e6dd803b70c0b5f2980 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:54:48 -0700 Subject: [PATCH 137/219] chore: grammar adjustments --- .../docs/consensus-mechanisms/pos/attestations/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md b/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md index 1d7c0ae5e04..3bff413e1e8 100644 --- a/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md +++ b/public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md @@ -32,7 +32,7 @@ Finally, the validator signs the attestation and broadcasts it to the network. There is a substantial overhead associated with passing this data around the network for every validator. Therefore, the attestations from individual validators are aggregated within subnets before being broadcast more widely. This includes aggregating signatures together so that an attestation that gets broadcast includes the consensus `data` and a single signature formed by combining the signatures of all the validators that agree with that `data`. This can be checked using `aggregation_bits` because this provides the index of each validator in their committee (whose ID is provided in `data`) which can be used to query individual signatures. -In each epoch 16 validators in each subnet are selected to be the `aggregators`. The aggregators collects all the attestations they hears about over the gossip network that have equivalent `data` to their own. The sender of each matching attestation is recorded in the `aggregation_bits`. The aggregators then broadcasts the attestation aggregate to the wider network. +In each epoch 16 validators in each subnet are selected to be the `aggregators`. The aggregators collect all the attestations they hear about over the gossip network that have equivalent `data` to their own. The sender of each matching attestation is recorded in the `aggregation_bits`. The aggregators then broadcast the attestation aggregate to the wider network. When a validator is selected to be a block proposer they package aggregate attestations from the subnets up to the latest slot in the new block. From dc6ebebef81b1d7f53683d77c1ca94c64caa4372 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 22 Apr 2024 19:07:02 -0700 Subject: [PATCH 138/219] fix: double-listing --- .../content/developers/docs/smart-contracts/security/index.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/public/content/developers/docs/smart-contracts/security/index.md b/public/content/developers/docs/smart-contracts/security/index.md index d60a12f8345..707371ecbc1 100644 --- a/public/content/developers/docs/smart-contracts/security/index.md +++ b/public/content/developers/docs/smart-contracts/security/index.md @@ -492,8 +492,6 @@ If you plan on querying an on-chain oracle for asset prices, consider using one - **[Trail of Bits](https://www.trailofbits.com/)** - _Cybersecurity company that combines security research with an attacker mentality to reduce risk and fortify code._ -- **[Cyfrin](https://cyfrin.io)** - _Web3 security powerhouse, incubating crypto security through products and smart contract auditing services._ - - **[PeckShield](https://peckshield.com/)** - _Blockchain security company offering products and services for the security, privacy, and usability of the entire blockchain ecosystem._ - **[QuantStamp](https://quantstamp.com/)** - _Auditing service facilitating the mainstream adoption of blockchain technology through security and risk assessment services._ @@ -512,7 +510,7 @@ If you plan on querying an on-chain oracle for asset prices, consider using one - **[CodeHawks](https://codehawks.com/)** - _Competitive audits platform hosting smart contracts auditing competitions for security researchers._ -- **[Cyfrin](https://www.cyfrin.io/)** - _Blockchain security and web3 education firm focused on EVM and Vyper based protocols._ +- **[Cyfrin](https://cyfrin.io)** - _Web3 security powerhouse, incubating crypto security through products and smart contract auditing services._ - **[ImmuneBytes](https://www.immunebytes.com//smart-contract-audit/)** - _Web3 security firm offering security audits for blockchain systems through a team of experienced auditors and best-in-class tools._ From 209410bba7f71517d30975a8387f46a547aff108 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 22 Apr 2024 19:11:52 -0700 Subject: [PATCH 139/219] revert: test dir addition --- src/data/crowdin/translation-buckets-dirs.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/data/crowdin/translation-buckets-dirs.json b/src/data/crowdin/translation-buckets-dirs.json index e81dbe5b8f5..40947f5af95 100644 --- a/src/data/crowdin/translation-buckets-dirs.json +++ b/src/data/crowdin/translation-buckets-dirs.json @@ -110,9 +110,5 @@ { "id": 7833, "name": "28) Developer Tutorials IV" - }, - { - "id": 11098, - "name": "Test directory" } ] \ No newline at end of file From 27c8c6794899d88aee3eb2d8f30113b98919da20 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:02:18 -0700 Subject: [PATCH 140/219] april zh import --- .../tutorials/all-you-can-cache/index.md | 867 ++++++++++ .../index.md | 127 ++ .../erc-721-vyper-annotated-code/index.md | 36 +- .../tutorials/erc20-annotated-code/index.md | 92 +- .../erc20-with-safety-rails/index.md | 213 +++ .../index.md | 82 +- .../index.md | 46 +- .../index.md | 1540 +++++++++++++++++ .../index.md | 6 +- .../index.md | 110 ++ .../logging-events-smart-contracts/index.md | 10 +- .../index.md | 16 +- .../secure-development-workflow/index.md | 26 +- .../index.md | 85 +- .../index.md | 24 +- 15 files changed, 3086 insertions(+), 194 deletions(-) create mode 100644 public/content/translations/zh/developers/tutorials/all-you-can-cache/index.md create mode 100644 public/content/translations/zh/developers/tutorials/eip-1271-smart-contract-signatures/index.md create mode 100644 public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md create mode 100644 public/content/translations/zh/developers/tutorials/hello-world-smart-contract-fullstack/index.md create mode 100644 public/content/translations/zh/developers/tutorials/kickstart-your-dapp-frontend-development-wth-create-eth-app/index.md diff --git a/public/content/translations/zh/developers/tutorials/all-you-can-cache/index.md b/public/content/translations/zh/developers/tutorials/all-you-can-cache/index.md new file mode 100644 index 00000000000..8f51a614154 --- /dev/null +++ b/public/content/translations/zh/developers/tutorials/all-you-can-cache/index.md @@ -0,0 +1,867 @@ +--- +title: "一切皆可缓存" +description: 学习如何创建和使用缓存合约,以便进行更实惠的卷叠交易 +author: Ori Pomerantz +tags: + - "第二层" + - "缓存" + - "存储" +skill: intermediate +published: 2022-09-15 +lang: zh +--- + +当使用卷叠时,交易中一个字节的成本比一个存储插槽的成本要高得多。 因此,在链上缓存尽可能多的信息是有意义的。 + +在本文中,你将学习如何创建和使用缓存合约,使得任何可能被多次使用的参数值都会被缓存,并且(在第一次使用之后)可通过更少的字节数来使用,并学习如何编写使用此缓存的链下代码。 + +如果你想跳过这篇文章,直接查看源代码,[参见此处](https://github.com/qbzzt/20220915-all-you-can-cache)。 开发堆栈是 [Foundry](https://book.getfoundry.sh/getting-started/installation)。 + +## 总体设计 {#overall-design} + +为了简单起见,我们将假定所有交易参数是 `uint256`,长度为 32 个字节。 当我们收到交易时,将对每个参数进行解析,如下所示: + +1. 如果第一个字节是 `0xFF`,则将接下来的 32 个字节作为参数值并将其写入缓存。 + +2. 如果第一个字节是 `0xFE`,则将接下来的 32 个字节作为参数值,但_不_将其写入缓存。 + +3. 对于任何其他值,将前四位作为额外字节的数量,将后四位作为缓存键的最高有效位。 以下是一些示例: + + | calldata 中的字节 | 缓存键 | + |:--------------- | --------:| + | 0x0F | 0x0F | + | 0x10,0x10 | 0x10 | + | 0x12,0xAC | 0x02AC | + | 0x2D,0xEA, 0xD6 | 0x0DEAD6 | + +## 缓存操作 {#cache-manipulation} + +缓存是在 [`Cache.sol`](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol) 中实现的。 我们逐行学习它。 + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + + +contract Cache { + + bytes1 public constant INTO_CACHE = 0xFF; + bytes1 public constant DONT_CACHE = 0xFE; +``` + +这些常量用于解释特殊情况,其中我们提供了所有信息,但是是否希望将其写入缓存是可选的。 写入缓存需要对之前未使用的存储插槽执行两次 [`SSTORE`](https://www.evm.codes/#55) 操作,每次操作花费 22100 燃料,这样我们将此操作变为可选操作。 + +```solidity + + mapping(uint => uint) public val2key; +``` + +一个在值和其键之间的[映射](https://www.geeksforgeeks.org/solidity-mappings/)。 在发送交易之前,对值进行编码时需要这些信息。 + +```solidity + // Location n has the value for key n+1, because we need to preserve + // zero as "not in the cache". + uint[] public key2val; +``` + +我们可以使用数组来进行从键到值的映射,出于简单起见,我们按顺序分配键。 + +```solidity + function cacheRead(uint _key) public view returns (uint) { + require(_key <= key2val.length, "Reading uninitialize cache entry"); + return key2val[_key-1]; + } // cacheRead +``` + +从缓存中读取一个值。 + +```solidity + // Write a value to the cache if it's not there already + // Only public to enable the test to work + function cacheWrite(uint _value) public returns (uint) { + // If the value is already in the cache, return the current key + if (val2key[_value] != 0) { + return val2key[_value]; + } +``` + +在缓存中多次存储相同的值是没有意义的。 如果值已经存在,只需返回现有的键。 + +```solidity + // Since 0xFE is a special case, the largest key the cache can + // hold is 0x0D followed by 15 0xFF's. 如果缓存长度已经达到这个长度 + // 那么操作失败 + // 1 2 3 4 5 6 7 8 9 A B C D E F + require(key2val.length+1 < 0x0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, + "cache overflow"); +``` + +我认为我们永远无法获得如此庞大的缓存(大约 1.8\*1037 个条目,需要大约 1027 TB 的存储空间)。 然而,我知道[“640kB 始终足够了”](https://quoteinvestigator.com/2011/09/08/640k-enough/)。 这一测试非常实惠。 + +```solidity + // Write the value using the next key + val2key[_value] = key2val.length+1; +``` + +添加反向查找(从值到键)。 + +```solidity + key2val.push(_value); +``` + +添加正向查找(从键到值)。 因为我们按顺序分配值,所以我们可以将其添加在最后一个数组值之后。 + +```solidity + return key2val.length; + } // cacheWrite +``` + +返回 `key2val` 的新长度,该长度表示存储新值的单元格位置。 + +```solidity + function _calldataVal(uint startByte, uint length) + private pure returns (uint) +``` + +这个函数从任意长度的 calldata(最多 32 个字节,即一个字的大小)中读取一个值。 + +```solidity + { + uint _retVal; + + require(length < 0x21, + "_calldataVal length limit is 32 bytes"); + require(length + startByte <= msg.data.length, + "_calldataVal trying to read beyond calldatasize"); +``` + +这个函数是内部函数,因此如果其余的代码编写正确,则不需要这些测试。 然而,它们的成本不高,所以不妨拥有它们。 + +```solidity + assembly { + _retVal := calldataload(startByte) + } +``` + +此代码采用 [Yul](https://docs.soliditylang.org/en/v0.8.16/yul.html) 语言。 它从 calldata 中读取一个 32 字节的值。 即使该 calldata 在 `startByte+32` 之前停止,这种方法仍然有效,因为在以太坊虚拟机中,未初始化的空间被视为零。 + +```solidity + _retVal = _retVal >> (256-length*8); +``` + +我们并不一定需要一个 32 字节的值。 这将消除多余的字节。 + +```solidity + return _retVal; + } // _calldataVal + + + // Read a single parameter from the calldata, starting at _fromByte + function _readParam(uint _fromByte) internal + returns (uint _nextByte, uint _parameterValue) + { +``` + +从 calldata 中读取单个参数。 请注意,我们需要返回的不仅仅是我们读取的值,还包括下一个字节的位置,因为参数的长度可以从 1 个字节到 33 个字节不等。 + +```solidity + // The first byte tells us how to interpret the rest + uint8 _firstByte; + + _firstByte = uint8(_calldataVal(_fromByte, 1)); +``` + +Solidity 试图通过禁止可能危险的[隐式类型转换](https://docs.soliditylang.org/en/v0.8.16/types.html#implicit-conversions)来减少错误的数量。 降级操作,例如从 256 位降级为 8 位,需要为显式。 + +```solidity + + // Read the value, but do not write it to the cache + if (_firstByte == uint8(DONT_CACHE)) + return(_fromByte+33, _calldataVal(_fromByte+1, 32)); + + // Read the value, and write it to the cache + if (_firstByte == uint8(INTO_CACHE)) { + uint _param = _calldataVal(_fromByte+1, 32); + cacheWrite(_param); + return(_fromByte+33, _param); + } + + // If we got here it means that we need to read from the cache + + // Number of extra bytes to read + uint8 _extraBytes = _firstByte / 16; +``` + +取出低位四位([半字节](https://en.wikipedia.org/wiki/Nibble)),并将其与其他字节组合以从缓存中读取值。 + +```solidity + uint _key = (uint256(_firstByte & 0x0F) << (8*_extraBytes)) + + _calldataVal(_fromByte+1, _extraBytes); + + return (_fromByte+_extraBytes+1, cacheRead(_key)); + + } // _readParam + + + // Read n parameters (functions know how many parameters they expect) + function _readParams(uint _paramNum) internal returns (uint[] memory) { +``` + +我们可以从 calldata 中获取我们拥有的参数数量,但是调用我们的函数知道它们期望的参数数量。 让这些函数告诉我们会更容易一些。 + +```solidity + // The parameters we read + uint[] memory params = new uint[](_paramNum); + + // Parameters start at byte 4, before that it's the function signature + uint _atByte = 4; + + for(uint i=0; i<_paramNum; i++) { + (_atByte, params[i]) = _readParam(_atByte); + } +``` + +读取参数,直到你获取所需的数量。 如果我们超出了 calldata 的末尾,`_readParams` 将会回滚调用。 + +```solidity + + return(params); + } // readParams + + // For testing _readParams, test reading four parameters + function fourParam() public + returns (uint256,uint256,uint256,uint256) + { + uint[] memory params; + params = _readParams(4); + return (params[0], params[1], params[2], params[3]); + } // fourParam +``` + +Foundry 的一个重大优势是允许用 Solidity 编写测试([见下文的“测试缓存”](#testing-the-cache))。 这使得单元测试变得更加容易。 这个函数读取四个参数并返回这些参数,以便测试可以验证它们是否正确。 + +```solidity + // Get a value, return bytes that will encode it (using the cache if possible) + function encodeVal(uint _val) public view returns(bytes memory) { +``` + +`encodeVal` 是一个由链下代码调用的函数,用于帮助创建使用缓存的 calldata。 它接收一个值,并返回对其进行编码的字节。 该函数是一个 `view` 函数,因此不需要进行交易,并且在被外部调用时不需要支付任何燃料费用。 + +```solidity + uint _key = val2key[_val]; + + // The value isn't in the cache yet, add it + if (_key == 0) + return bytes.concat(INTO_CACHE, bytes32(_val)); +``` + +在[以太坊虚拟机](/developers/docs/evm/)中,所有未初始化的存储被假定为零。 因此,如果我们在查找一个不存在的值的键时,会得到一个零。 在这种情况下,对其进行编码的字节为 `INTO_CACHE`(这样下次将被缓存),接着是实际的值。 + +```solidity + // If the key is <0x10, return it as a single byte + if (_key < 0x10) + return bytes.concat(bytes1(uint8(_key))); +``` + +单字节是最简单的。 我们使用 [`bytes.concat`](https://docs.soliditylang.org/en/v0.8.16/types.html#the-functions-bytes-concat-and-string-concat) 函数将 `bytes` 类型转换为可以是任意长度的字节数组。 尽管名称如此,但当只提供一个参数时,它仍能正常工作。 + +```solidity + // Two byte value, encoded as 0x1vvv + if (_key < 0x1000) + return bytes.concat(bytes2(uint16(_key) | 0x1000)); +``` + +当我们有一个小于 163 的键时,我们可以用两个字节来表示它。 我们首先将一个 256 位的值 ` _key` 转换为一个 16 位的值,并使用逻辑“或”将额外字节数添加到第一个字节。 然后我们将其转换为 `bytes2` 值,继而可以转换为 `bytes`。 + +```solidity + // There is probably a clever way to do the following lines as a loop, + // but it's a view function so I'm optimizing for programmer time and + // simplicity. + + if (_key < 16*256**2) + return bytes.concat(bytes3(uint24(_key) | (0x2 * 16 * 256**2))); + if (_key < 16*256**3) + return bytes.concat(bytes4(uint32(_key) | (0x3 * 16 * 256**3))); + . + . + . + if (_key < 16*256**14) + return bytes.concat(bytes15(uint120(_key) | (0xE * 16 * 256**14))); + if (_key < 16*256**15) + return bytes.concat(bytes16(uint128(_key) | (0xF * 16 * 256**15))); +``` + +其他的值(例如 3 字节、4 字节等)的处理方式相同,只是字段大小不同。 + +```solidity + // If we get here, something is wrong. + revert("Error in encodeVal, should not happen"); +``` + +如果到了这一步,意味着我们得到了一个键,其值不小于 16*25615。 但是 `cacheWrite` 对键进行了限制,因此我们甚至无法达到 14\*25616(其首字节为 0xFE,因此看起来像 `DONT_CACHE`)。 添加一个测试来防止未来的开发者引入错误,并不需要太多成本。 + +```solidity + } // encodeVal + +} // Cache +``` + +### 测试缓存 {#testing-the-cache} + +Foundry 的一个优势是[允许你使用 Solidity 编写测试](https://book.getfoundry.sh/forge/tests),这使得编写单元测试更加容易。 `Cache` 类的测试可以在[此处](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/Cache.t.sol)找到。 由于测试代码通常会有很多重复的部分,本文仅说明有趣的部分。 + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; + + +// Need to run `forge test -vv` for the console. +import "forge-std/console.sol"; +``` + +这只是一个样板文件,用于使用测试包和 `console.log`。 + +```solidity +import "src/Cache.sol"; +``` + +我们需要知道我们正在测试的合约。 + +```solidity +contract CacheTest is Test { + Cache cache; + + function setUp() public { + cache = new Cache(); + } +``` + +在每个测试之前都会调用 `setUp` 函数。 在这种情况下,我们只需创建一个新的缓存,这样我们的测试就不会相互影响。 + +```solidity + function testCaching() public { +``` + +测试是以 `test` 开头的函数。 该函数检查基本的缓存功能,写入值并再次读取这些值。 + +```solidity + for(uint i=1; i<5000; i++) { + cache.cacheWrite(i*i); + } + + for(uint i=1; i<5000; i++) { + assertEq(cache.cacheRead(i), i*i); +``` + +这是你进行实际测试时使用的方法,使用 [`assert...` 函数](https://book.getfoundry.sh/reference/forge-std/std-assertions)。 在这种情况下,我们检查我们写入的值是否是我们读取的值。 我们可以忽略 `cache.cacheWrite` 的结果,因为我们知道缓存键是按线性分配的。 + +```solidity + } + } // testCaching + + + // Cache the same value multiple times, ensure that the key stays + // the same + function testRepeatCaching() public { + for(uint i=1; i<100; i++) { + uint _key1 = cache.cacheWrite(i); + uint _key2 = cache.cacheWrite(i); + assertEq(_key1, _key2); + } +``` + +首先,我们将每个值写入缓存两次,并确保键是相同的(这意味着第二次写入实际上并没有发生)。 + +```solidity + for(uint i=1; i<100; i+=3) { + uint _key = cache.cacheWrite(i); + assertEq(_key, i); + } + } // testRepeatCaching +``` + +理论上,这是一种不会影响连续缓存写入的错误。 所以在这里,我们进行一些非连续的写入操作,并看到值仍然没有被重新写入。 + +```solidity + // Read a uint from a memory buffer (to make sure we get back the parameters + // we sent out) + function toUint256(bytes memory _bytes, uint256 _start) internal pure + returns (uint256) +``` + +从 `bytes memory` 缓冲区中读取一个 256 位的字。 这个实用功能使我们能够验证,在运行使用缓存的函数调用时,我们是否收到了正确的结果。 + +```solidity + { + require(_bytes.length >= _start + 32, "toUint256_outOfBounds"); + uint256 tempUint; + + assembly { + tempUint := mload(add(add(_bytes, 0x20), _start)) + } +``` + +Yul 不支持超出 `uint256` 的数据结构,因此当你引用更复杂的数据结构,例如内存缓冲区 `_bytes` 时,你会得到该结构的地址。 Solidity 将 `bytes memory` 类型的值存储为一个 32 字节的字,其中包含长度信息,后跟实际的字节。因此,要获取字节数量 `_start`,我们需要计算 `_bytes+32+_start`。 + +```solidity + + return tempUint; + } // toUint256 + + // Function signature for fourParams(), courtesy of + // https://www.4byte.directory/signatures/?bytes4_signature=0x3edc1e6d + bytes4 constant FOUR_PARAMS = 0x3edc1e6d; + + // Just some constant values to see we're getting the correct values back + uint256 constant VAL_A = 0xDEAD60A7; + uint256 constant VAL_B = 0xBEEF; + uint256 constant VAL_C = 0x600D; + uint256 constant VAL_D = 0x600D60A7; +``` + +进行测试所需的一些常量。 + +```solidity + function testReadParam() public { +``` + +调用 `fourParams()` 函数,该函数使用 `readParams` 来测试我们是否正确读取参数。 + +```solidity + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; +``` + +我们无法使用普通的应用程序二进制接口机制来调用使用缓存的函数,因此我们需要使用低级别的 [`
.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html#members-of-addresses) 机制。 该机制接受一个 `bytes memory` 类型的输入,并将其作为输出返回(同时返回一个布尔值)。 + +```solidity + // First call, the cache is empty + _callInput = bytes.concat( + FOUR_PARAMS, +``` + +对于同一个合约来说,支持缓存函数(用于从交易直接调用)和非缓存函数(用于从其他智能合约调用)是很有用的。 为了做到这一点,我们需要继续依赖 Solidity 机制来调用正确的函数,而不是将所有内容放在一个 [`feedback` 函数](https://docs.soliditylang.org/en/v0.8.16/contracts.html#fallback-function)中。 这样做可以大大简化可组合性的实现。 在大多数情况下,一个字节就足够标识函数了,所以我们浪费了三个字节(16\*3= 48 单位燃料)。 然而,就我撰写此文时而言,这 48 单位燃料的成本为 0.07 美分,对于更简单、错误更少的代码而言,这是合理的成本。 + +```solidity + // First value, add it to the cache + cache.INTO_CACHE(), + bytes32(VAL_A), +``` + +第一个值:一个标志,表示它是一个完整的值,需要写入缓存,后面跟着 32 字节的值。 其他三个值类似,只是 `VAL_B` 不被写入缓存,而 `VAL_C` 同时作为第三个参数和第四个参数。 + +```solidity + . + . + . + ); + (_success, _callOutput) = _cacheAddr.call(_callInput); +``` + +这是我们实际调用 `Cache` 合约的地方。 + +```solidity + assertEq(_success, true); +``` + +我们期望这次调用取得成功。 + +```solidity + assertEq(cache.cacheRead(1), VAL_A); + assertEq(cache.cacheRead(2), VAL_C); +``` + +我们从一个空缓存开始,然后添加 `VAL_A`,接着是 `VAL_C`。 我们期望第一个值的键为 1,第二个值的键为 2。 + +``` + assertEq(toUint256(_callOutput,0), VAL_A); + assertEq(toUint256(_callOutput,32), VAL_B); + assertEq(toUint256(_callOutput,64), VAL_C); + assertEq(toUint256(_callOutput,96), VAL_C); +``` + +输出为四个参数。 在这里,我们验证其是否正确。 + +```solidity + // Second call, we can use the cache + _callInput = bytes.concat( + FOUR_PARAMS, + + // First value in the Cache + bytes1(0x01), +``` + +小于 16 的缓存键只占用一个字节。 + +```solidity + // Second value, don't add it to the cache + cache.DONT_CACHE(), + bytes32(VAL_B), + + // Third and fourth values, same value + bytes1(0x02), + bytes1(0x02) + ); + . + . + . + } // testReadParam +``` + +该调用之后的测试与第一次调用后的测试相同。 + +```solidity + function testEncodeVal() public { +``` + +这个函数类似于 `testReadParam`,不同之处在于我们使用 `encodeVal()` 来代替显式写入参数。 + +```solidity + . + . + . + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(VAL_A), + cache.encodeVal(VAL_B), + cache.encodeVal(VAL_C), + cache.encodeVal(VAL_D) + ); + . + . + . + assertEq(_callInput.length, 4+1*4); + } // testEncodeVal +``` + +`testEncodeVal()` 中唯一的附加测试是验证 `_callInput` 的长度是否正确。 对于第一次调用,长度为 4+33\*4。 对于第二次调用,其中每个值已经存在于缓存中,长度为 4+1\*4。 + +```solidity + // Test encodeVal when the key is more than a single byte + // Maximum three bytes because filling the cache to four bytes takes + // too long. + function testEncodeValBig() public { + // Put a number of values in the cache. + // To keep things simple, use key n for value n. + for(uint i=1; i<0x1FFF; i++) { + cache.cacheWrite(i); + } +``` + +上述 `testEncodeVal` 函数只将四个值写入缓存中,因此并未检查[处理多字节值的函数部分](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol#L144-L171)。 但是那段代码很复杂且容易出错。 + +该函数的第一部分是一个循环,这个循环将从 1 到 0x1FFF 的所有值按顺序写入缓存,因此我们将能够对这些值进行编码并知道这些值的去向。 + +```solidity + . + . + . + + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(0x000F), // One byte 0x0F + cache.encodeVal(0x0010), // Two bytes 0x1010 + cache.encodeVal(0x0100), // Two bytes 0x1100 + cache.encodeVal(0x1000) // Three bytes 0x201000 + ); +``` + +测试一个字节、两个字节和三个字节的值。 我们没有测试更多字节的值,因为编写足够的堆栈条目将需要很长时间(至少 0x10000000 个,约为 2.5 亿个)。 + +```solidity + . + . + . + . + } // testEncodeValBig + + + // Test what with an excessively small buffer we get a revert + function testShortCalldata() public { +``` + +测试在参数不足的异常情况下会发生什么。 + +```solidity + . + . + . + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, false); + } // testShortCalldata +``` + +由于发生了回滚,我们应该得到的结果是 `false`。 + +``` + // Call with cache keys that aren't there + function testNoCacheKey() public { + . + . + . + _callInput = bytes.concat( + FOUR_PARAMS, + + // First value, add it to the cache + cache.INTO_CACHE(), + bytes32(VAL_A), + + // Second value + bytes1(0x0F), + bytes2(0x1234), + bytes11(0xA10102030405060708090A) + ); +``` + +该函数获取四个完全合法的参数,但是缓存是空的,因此没有值可供读取。 + +```solidity + . + . + . + // Test what with an excessively long buffer everything works file + function testLongCalldata() public { + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; + + // First call, the cache is empty + _callInput = bytes.concat( + FOUR_PARAMS, + + // First value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_A), + + // Second value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_B), + + // Third value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_C), + + // Fourth value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_D), + + // And another value for "good luck" + bytes4(0x31112233) + ); +``` + +该函数发送五个值。 我们知道第五个值因为不是有效缓存条目而被忽略,但若未包含该值,将会导致回滚。 + +```solidity + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, true); + . + . + . + } // testLongCalldata + +} // CacheTest + +``` + +## 一个应用示例 {#a-sample-app} + +使用 Solidity 语言来编写测试非常重要,但最终,一个去中心化应用程序需要能够处理来自链外的请求才能发挥其实用性。 本文演示了如何在去中心化应用程序中使用缓存,其中使用了 `WORM`(Write Once, Read Many,写入一次,读取多次)的概念。 如果一个键尚未被写入,你可以向其写入一个值。 如果该键已被写入,你可以进行回滚。 + +### 合约 {#the-contract} + +[这就是合约](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/WORM.sol)。 这主要重复了我们已经完成的 `Cache` 和 `CacheTest` 部分内容,因此我们只涵盖有趣的部分。 + +```solidity +import "./Cache.sol"; + +contract WORM is Cache { +``` + +使用 `Cache` 的最简单方法是在我们自己的合约中继承它。 + +```solidity + function writeEntryCached() external { + uint[] memory params = _readParams(2); + writeEntry(params[0], params[1]); + } // writeEntryCached +``` + +此函数与上面的 `CacheTest` 中的 `fourParam` 函数类似。 由于我们并未遵循 ABI 规范,最好不要在函数中声明任何参数。 + +```solidity + // Make it easier to call us + // Function signature for writeEntryCached(), courtesy of + // https://www.4byte.directory/signatures/?bytes4_signature=0xe4e4f2d3 + bytes4 constant public WRITE_ENTRY_CACHED = 0xe4e4f2d3; +``` + +由于我们并未遵循应用程序二进制接口规范,调用 `writeEntryCached` 的外部代码需要手动构建 calldata,而不是使用 `worm.writeEntryCached`。 使用此常量值只是为了更方便地进行编写。 + +请注意,尽管我们将 `WRITE_ENTRY_CACHED` 定义为一个状态变量,但要在外部读取它,必须使用它的 getter 函数,即 `worm.WRITE_ENTRY_CACHED()`。 + +```solidity + function readEntry(uint key) public view + returns (uint _value, address _writtenBy, uint _writtenAtBlock) +``` + +Read 函数是一个 `view` 函数,因此它不需要进行交易,并且不会消耗燃料。 因此,对于该参数来说,使用缓存没有任何好处。 对于 view 函数,最好使用更简单的标准机制。 + +### 测试代码 {#the-testing-code} + +[这是合约的测试代码](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/WORM.t.sol)。 同样,让我们只关注有趣的部分。 + +```solidity + function testWReadWrite() public { + worm.writeEntry(0xDEAD, 0x60A7); + + vm.expectRevert(bytes("entry already written")); + worm.writeEntry(0xDEAD, 0xBEEF); +``` + +[此 (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert) 是我们如何在 Foundry 测试中指定下一次调用应该失败,以及报告的失败原因。 这适用于我们使用语法 `.()` 而不是构建 calldata 并使用低级别接口来调用合约(`.call()` 等)的情况。 + +```solidity + function testReadWriteCached() public { + uint cacheGoat = worm.cacheWrite(0x60A7); +``` + +这里我们利用了 `cacheWrite` 返回缓存键这一情况。 这并不是我们期望在生产环境中使用的内容,因为 `cacheWrite` 会改变状态,因此只能在交易中调用。 交易没有返回值,如果交易有结果,那么这些结果应该以事件的形式触发。 因此,`cacheWrite` 返回值只能从链上代码访问,而链上代码不需要参数缓存。 + +```solidity + (_success,) = address(worm).call(_callInput); +``` + +这就是我们对 Solidity 作出指示的方式,即虽然 `.call()` 有两个返回值,但我们只关注第一个返回值。 + +```solidity + (_success,) = address(worm).call(_callInput); + assertEq(_success, false); +``` + +由于我们使用低级别的 `
.call()` 函数,因此无法使用 `vm.expectRevert()`,而且必须查看从调用中获取的布尔型成功值。 + +```solidity + event EntryWritten(uint indexed key, uint indexed value); + + . + . + . + + _callInput = bytes.concat( + worm.WRITE_ENTRY_CACHED(), worm.encodeVal(a), worm.encodeVal(b)); + vm.expectEmit(true, true, false, false); + emit EntryWritten(a, b); + (_success,) = address(worm).call(_callInput); +``` + +这是我们在 Foundry 中验证代码[正确触发事件](https://book.getfoundry.sh/cheatcodes/expect-emit)的方式。 + +### 客户端 {#the-client} + +在 Solidity 测试中,你无法得到可以复制粘贴到你自己应用程序中的 JavaScript 代码。 为了编写那段代码,我将 WORM 部署到 [Optimism Goerli](https://community.optimism.io/docs/useful-tools/networks/#optimism-goerli),这是 [Optimism](https://www.optimism.io/) 的新测试网络。 地址为 [`0xd34335b1d818cee54e3323d3246bd31d94e6a78a`](https://goerli-optimism.etherscan.io/address/0xd34335b1d818cee54e3323d3246bd31d94e6a78a)。 + +[你可以在这里看到客户端的 JavaScript 代码](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/javascript/index.js)。 要使用该代码: + +1. 克隆 git 存储库: + + ```sh + git clone https://github.com/qbzzt/20220915-all-you-can-cache.git + ``` + +2. 安装必要的软件包: + + ```sh + cd javascript + yarn + ``` + +3. 复制配置文件: + + ```sh + cp .env.example .env + ``` + +4. 编辑 `.env` 文件以进行配置: + + | 参数 | 值 | + | --------------------- | ---------------------------------------------------------------------------------------- | + | MNEMONIC | 持有足够以太币来支付交易费用的帐户的助记词。 [你可以在此处免费获取 Optimism Goerli 网络的以太币](https://optimismfaucet.xyz/)。 | + | OPTIMISM_GOERLI_URL | Optimism Goerli 的 URL。 公共端点 `https://goerli.optimism.io` 存在速率限制,但能够满足我们此处的需求 | + +5. 运行 `index.js`。 + + ```sh + node index.js + ``` + + 这个示例应用程序首先将一个条目写入到 WORM,在 Etherscan 上显示 calldata 以及交易链接。 然后它会读回该条目,并显示它使用的键以及条目中的值(值、区块编号和作者)。 + +大多数客户端是普通的去中心化应用程序 JavaScript。 因此,我们只会介绍有趣的部分。 + +```javascript +. +. +. +const main = async () => { + const func = await worm.WRITE_ENTRY_CACHED() + + // Need a new key every time + const key = await worm.encodeVal(Number(new Date())) +``` + +每个时隙只能被写入一次,因此我们使用时间戳来确保不重复使用时隙。 + +```javascript +const val = await worm.encodeVal("0x600D") + +// Write an entry +const calldata = func + key.slice(2) + val.slice(2) +``` + +Ethers 期望调用数据是一个十六进制字符串,即以 `0x` 开头,后跟偶数个十六进制数字。 由于 `key` 和 `val` 都以 `0x` 开头,我们需要去除这些头部信息。 + +```javascript +const tx = await worm.populateTransaction.writeEntryCached() +tx.data = calldata + +sentTx = await wallet.sendTransaction(tx) +``` + +与 Solidity 的测试代码一样,我们无法正常调用缓存函数。 我们需要改用一个更低级别的机制。 + +```javascript + . + . + . + // Read the entry just written + const realKey = '0x' + key.slice(4) // remove the FF flag + const entryRead = await worm.readEntry(realKey) + . + . + . +``` + +对于读取条目,我们可以使用普通的机制。 在使用 `view` 函数时,不需要使用参数缓存。 + +## 结论 {#conclusion} + +本文中的代码是概念验证,其目的是使想法易于理解。 对于一个生产就绪系统,你可能希望实现一些额外的功能: + +- 处理不是 `uint256` 类型的值。 例如,字符串。 +- 除了使用全局缓存,也可以建立用户与缓存之间的映射。 不同用户使用不同的值。 +- 用于地址的数值与用于其他目的的数值是不同的。 为地址单独创建一个缓存可能是有意义的。 +- 当前的缓存键采用的是“先来者,得最小键”算法。 前 16 个值可以作为单个字节发送。 接下来的 4080 个值以两个字节发送。 接下来的大约一百万个值是以三个字节发送。 生产系统应该在缓存条目上保留使用计数器,并重新组织它们,使得 16 个_最常见_的值使用一个字节,接下来的 4080 个最常见的值使用两个字节,依此类推。 + + 然而,这是一个潜在的危险操作。 设想以下事件序列: + + 1. Noam Naive 调用 `encodeVal` 函数来对他想要向其中发送代币的地址进行编码。 该地址是应用程序中使用的最早一批地址之一,因此编码值为 0x06。 这是一个 `view` 函数,而不是一个交易,发生于 Noam 和他使用的节点之间,而其他人则对此毫不知情。 + + 2. Owen Owner 运行缓存重排序操作。 实际上,很少有人会使用那个地址,所以现在它被编码为 0x201122。 另一个数值,1018,被赋值为 0x06。 + + 3. Noam Naive 将他的代币发送到了 0x06 地址。 它们被发送到地址 `0x0000000000000000000000000de0b6b3a7640000`,由于没有人知道该地址的私钥,这些代币将永远留在那里。 Noam _不开心_。 + + 虽然有多种方法可以解决此问题,以及解决与缓存重新排序期间内存池中的交易相关的问题,但你必须对此有所了解。 + +由于我是 Optimism 的员工,这是我最熟悉的卷叠,所以这里我展示了使用 Optimism 进行缓存。 但是,对于任何内部处理费用较低的卷叠方案,这个方法应该是有效的,因为相比之下,将交易数据写入一层网络是主要费用。 diff --git a/public/content/translations/zh/developers/tutorials/eip-1271-smart-contract-signatures/index.md b/public/content/translations/zh/developers/tutorials/eip-1271-smart-contract-signatures/index.md new file mode 100644 index 00000000000..8a1eda2b413 --- /dev/null +++ b/public/content/translations/zh/developers/tutorials/eip-1271-smart-contract-signatures/index.md @@ -0,0 +1,127 @@ +--- +title: "EIP-1271:签署和验证智能合约签名" +description: 基于 EIP-1271 的智能合约签名生成与验证概述。 我们还介绍了 Safe(原 Gnosis Safe)中使用的 EIP-1271 实现,以此为智能合约开发者提供一个可参考的具体例子。 +author: Nathan H. Leung +lang: zh +tags: + - "eip-1271" + - "智能合约" + - "验证" + - "签名" +skill: intermediate +published: 2023-01-12 +--- + +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) 标准允许智能合约验证签名。 + +在本教程中,我们概述了数字签名、EIP-1271 的背景,以及 [Safe](https://safe.global/)(原 Gnosis Safe)使用的 EIP-1271 的具体实现。 总之,这可以作为在你自己的合约中实现 EIP-1271 的起点。 + +## 什么是签名? + +在这种情况下,签名(更准确地说“数字签名”)是一条信息加上某种证明,该证明表明信息来自某个特定的人/发件人/地址。 + +例如,数字签名可能如下所示: + +1. 信息:“我想用我的以太坊钱包登录这个网站” +2. 签名者:我的地址是 `0x000…` +3. 证明:这里有一些证明,证明我,`0x000…`,确实创建了这整条信息(通常会加密)。 + +值得注意的是,数字签名包括“信息”和“签名”两部分。 + +为什么? 例如,如果你给我一份合同让我签字,然后我剪掉了签名页,只把我的签名还给你,而没有合同的其他部分,那么这份合同就无效。 + +同样,如果没有相关信息,数字签名也将没有任何意义! + +## 为什么会有 EIP-1271? + +要在基于以太坊的区块链上创建数字签名,通常需要一个别人不知道的秘密私钥。 这样,你的签名才是你的(如果其他人不知道密钥,则无法创建相同的签名)。 + +你的以太坊帐户(即你的外部帐户/EOA)有一个与之关联的私钥,这是通常在网站或去中心化应用程序要求你签名时使用的私钥(例如“使用以太坊登录”)。 + +应用程序可以在[不知道你的私钥](https://en.wikipedia.org/wiki/Public-key_cryptography)的情况下[验证你使用 ethers.js 等第三方库创建的签名](https://docs.alchemy.com/docs/how-to-verify-a-message-signature-on-ethereum),并且确认_你_是那个创建签名的人。 + +> 事实上,由于外部帐户数字签名使用公钥加密,可以在**链下**生成和验证! 这就是无燃料去中心化自治组织投票的工作原理—并非在链上提交投票,而是使用加密库在链下创建和验证数字签名。 + +虽然外部帐户帐户有私钥,但智能合约帐户没有任何类型的私钥或密钥(因此“使用以太坊登录”等自然不适用于智能合约帐户)。 + +EIP-1271 旨在解决:如果智能合约没有可以合并到签名中的密匙,我们如何判断智能合约签名是有效的? + +## EIP-1271 是如何工作的? + +智能合约没有可用于签署信息的私钥。 那么,我们如何辨别签名的真伪呢? + +有一种想法是,我们可以直接_询问_智能合约签名是否真实! + +EIP-1271 所做的就是将“询问”智能合约给定签名是否有效这一想法标准化。 + +实现 EIP-1271 的合约必须有一个名为 `isValidSignature` 的函数,该函数接收信息和签名。 然后,合约可以运行一些验证逻辑(规范并没有在此强制执行任何特定内容),然后返回一个表示签名是否有效的值。 + +如果 `isValidSignature` 返回表示签名有效的结果,这就相当于合约在说“是的,我承认这个签名和信息!” + +### 接口 + +以下是 EIP-1271 规范中的确切接口(我们将在下文中讨论 `_hash` 参数,但现在请将其视为正在验证的信息): + +```jsx +pragma solidity ^0.5.0; + +contract ERC1271 { + + // bytes4(keccak256("isValidSignature(bytes32,bytes)") + bytes4 constant internal MAGICVALUE = 0x1626ba7e; + + /** + * @dev Should return whether the signature provided is valid for the provided hash + * @param _hash Hash of the data to be signed + * @param _signature Signature byte array associated with _hash + * + * MUST return the bytes4 magic value 0x1626ba7e when function passes. + * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5) + * MUST allow external calls + */ + function isValidSignature( + bytes32 _hash, + bytes memory _signature) + public + view + returns (bytes4 magicValue); +} +``` + +## EIP-1271 实现示例:安全 + +合约可通过多种方式实现 `isValidSignature`—规范本身对具体实现没有做出太多要求。 + +实现 EIP-1271 的一个代表性合约是 Safe(原 Gnosis Safe)。 + +在 Safe 的代码中,[实现了 ](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol) `isValidSignature`,从而使签名可通过以下[两种方式](https://ethereum.stackexchange.com/questions/122635/signing-messages-as-a-gnosis-safe-eip1271-support)创建和验证: + +1. 链上消息 + 1. 创建:一个安全的所有者创建一个新的安全交易来“签名”一则消息,并将消息作为数据传入交易中。 一旦足够的所有者对交易进行签名,使签名数量达到多签名阈值后,交易就会被广播并运行。 在交易中,会调用一个安全函数,将消息添加到“已批准”消息列表中。 + 2. 验证:调用 Safe 合约的 `isValidSignature` 函数,并传入待验证的消息作为消息参数,传入[一个空值作为签名参数](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol#L32)(即 `0x`)。 Safe 合约会看到签名参数为空,将不会对签名进行密码验证,而是直接检查消息是否在“已批准”消息列表中。 +2. 链下信息: + 1. 创建:安全的所有者在链下创建一条消息,然后让其他安全的所有者分别对消息进行签名,直到有足够的签名来达到多签名批准阈值。 + 2. 验证:调用 `isValidSignature`。 在消息参数中,传入要验证的消息。 在签名参数中,传入每个安全所有者的签名,所有签名都是背靠背连接在一起的。 Safe 合约会检查是否有足够签名以达到阈值,**并**检查每个签名的有效性。 如果是,它将返回一个表示签名验证成功的值。 + +## `_hash` 参数到底是什么? 为什么不传递整条消息? + +你可能已经发现,[EIP-1271 接口](https://eips.ethereum.org/EIPS/eip-1271)中的 `isValidSignature` 函数并不接收消息本身,而是使用 `_hash` 参数。 这意味着我们只需将消息的 32 个字节长的哈希值(一般通过 keccak256)传入 `isValidSignature`,而不是传入任意长度的完整消息。 + +calldata 的每一个字节(即传入智能合约函数的函数参数数据)都会[花费 16 个单位燃料(若为空字节,则会花费 4 上单位燃料)](https://eips.ethereum.org/EIPS/eip-2028),因此在消息较长时,这可以节省很多的燃料费。 + +### 先前的 EIP-1271 规范 + +现有 EIP-1271 规范中的 `isValidSignature` 函数,其第一个参数为 `bytes` 类型(任意长度,而不是固定长度的 `bytes32`),并且参数名为 `message`。 这是 EIP-1271 标准的一个[旧版本](https://github.com/safe-global/safe-contracts/issues/391#issuecomment-1075427206)。 + +## 如何在我的合约中实现 EIP-1271? + +这是一个非常开放式的规范。 Safe 的实现有一些不错的思路: + +- 你可以认为合约“所有者”的外部帐户签名是有效的。 +- 你可以存储已批准消息的列表,并且只认为这些消息是有效的。 + +最终,都将由作为合约开发者的你来决定! + +## 结论 + +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) 是一个允许智能合约验证签名的通用标准。 它为智能合约打开了一扇门,使其行为更像外部帐户(例如,为“使用以太坊登录”提供一种与智能合约协同工作的方式),而且它可通过多种方式实现(例如 Safe 有一个有用且有趣的实现方式值得考虑)。 diff --git a/public/content/translations/zh/developers/tutorials/erc-721-vyper-annotated-code/index.md b/public/content/translations/zh/developers/tutorials/erc-721-vyper-annotated-code/index.md index 5120f779987..f46dd560981 100644 --- a/public/content/translations/zh/developers/tutorials/erc-721-vyper-annotated-code/index.md +++ b/public/content/translations/zh/developers/tutorials/erc-721-vyper-annotated-code/index.md @@ -33,7 +33,7 @@ from vyper.interfaces import ERC721 implements: ERC721 ``` -ERC-721 接口内置在 Vyper 语言中。 [您可以点击此处查看代码定义。](https://github.com/vyperlang/vyper/blob/master/vyper/builtin_interfaces/ERC721.py) 接口定义是用 Python 而不是 Vyper 编写的,因为接口不仅在区块链内使用, 而且在外部客户端向区块链发送交易时也使用,而客户端可能 是用 Python 编写的。 +ERC-721 接口内置在 Vyper 语言中。 [你可以点击此处查看代码定义。](https://github.com/vyperlang/vyper/blob/master/vyper/builtin_interfaces/ERC721.py) 接口定义是用 Python 而不是 Vyper 编写的,因为接口不仅在区块链内使用, 而且在外部客户端向区块链发送交易时也使用,而客户端可能 是用 Python 编写的。 第一行导入接口,第二行指定我们在这里执行它。 @@ -47,7 +47,7 @@ interface ERC721Receiver: ERC-721 支持两类转账: -- `transferFrom`,让发送者指定任何目的地地址并让发送者 承担转账责任。 这意味着您可以转账到一个无效的地址,在这种情况下,NFT 将永远丢失。 +- `transferFrom`,让发送者指定任何目的地地址并让发送者 承担转账责任。 这意味着你可以转账到一个无效的地址,在这种情况下,NFT 将永远丢失。 - `safeTransferFrom`,检查目的地址是否是合约。 如果是,ERC-721 合约 将会询问接收合约是否要接收这笔 NFT 转账。 接收合约必须执行 `ERC721Receiver` 才能回应 `safeTransferFrom` 请求。 @@ -112,7 +112,7 @@ event Approval: tokenId: indexed(uint256) ``` -ERC-721 批准与 ERC-20 限额类似。 特定地址只允许转移特定 代币。 这就形成了一种合约在接受代币时作出回应的机制。 合约不能侦听 事件,所以如果您只是把代币转移给合约,它们不会“知道”这笔转账。 因此,代币所有者 首先提交批准,然后向合约发送请求:“我批准你转移 代币 X,请执行......”。 +ERC-721 批准与 ERC-20 限额类似。 特定地址只允许转移特定 代币。 这就形成了一种合约在接受代币时作出回应的机制。 合约不能侦听 事件,所以如果你只是把代币转移给合约,它们不会“知道”这笔转账。 因此,代币所有者 首先提交批准,然后向合约发送请求:“我批准你转移 代币 X,请执行......”。 这是一种设计选择,使 ERC-721 标准与 ERC-20 标准类似。 由于 ERC-721 代币 为非同质化代币,合约还可以通过查看代币的所有权来确定 它得到了一个特定代币。 @@ -129,7 +129,7 @@ event ApprovalForAll: approved: bool ``` -有时候,拥有一个能够管理某个帐户所有特定类型代币(由一个特定合约 管理的所有代币)的*运营者*是很有用的,这类似于委托书。 例如,我可能想把这样一种权力赋予一个合约,即 检查我是否已经 6 个月没有联系它了,如果属实,就会把我的资产分配给我的继承者(如果他们中一人要求这样做,合约在没有 被交易调用时什么都做不了)。 在 ERC-20 中,我们只需给继承合约提供一个高限额即可。 但这对 ERC-721 不起作用,因为代币是非同质化的。 这是对应的。 +有时候,拥有一个能够管理某个帐户所有特定类型代币(由一个特定合约 管理的所有代币)的_运营者_是很有用的,这类似于委托书。 例如,我可能想把这样一种权力赋予一个合约,即 检查我是否已经 6 个月没有联系它了,如果属实,就会把我的资产分配给我的继承者(如果他们中一人要求这样做,合约在没有 被交易调用时什么都做不了)。 在 ERC-20 中,我们只需给继承合约提供一个高限额即可。 但这对 ERC-721 不起作用,因为代币是非同质化的。 这是对应的。 `approved` 值表示事件是等待批准,还是等待撤回批准。 @@ -161,7 +161,7 @@ ownerToNFTokenCount: HashMap[address, uint256] ownerToOperators: HashMap[address, HashMap[address, bool]] ``` -一个帐户可能有多个运营者。 仅有 `HashMap` 不足以跟踪它们,因为每个键都会生成单一值。 然而,可以将 `HashMap[address, bool]` 作为值。 默认情况下,每个地址的都值是 `False`,这意味着它 不是运营者。 您可以根据需要将值设置为 `True`。 +一个帐户可能有多个运营者。 仅有 `HashMap` 不足以跟踪它们,因为每个键都会生成单一值。 然而,可以将 `HashMap[address, bool]` 作为值。 默认情况下,每个地址的都值是 `False`,这意味着它 不是运营者。 你可以根据需要将值设置为 `True`。 ```python # @dev Address of minter, who can mint a token @@ -202,7 +202,7 @@ def __init__(): """ ``` -在 Python 和 Vyper 中,通过指定多行字符串(以 `"""` 起始和结束),您还可以创建注释,但不能以任何方式使用它。 这些注释也可以包括 [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) 注释。 +在 Python 和 Vyper 中,通过指定多行字符串(以 `"""` 起始和结束),你还可以创建注释,但不能以任何方式使用它。 这些注释也可以包括 [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) 注释。 ```python self.supportedInterfaces[ERC165_INTERFACE_ID] = True @@ -221,7 +221,7 @@ def __init__(): @external ``` -函数定义前面以 (`@`) 开头的这些关键词称为*修饰符*。 它们 规定能够调用函数的环境。 +函数定义前面以 (`@`) 开头的这些关键词称为_修改器_。 它们 规定能够调用函数的环境。 - `@view` 指定此函数为 view 函数。 - `@external` 指定该特定函数可以由交易及其它合约调用。 @@ -295,7 +295,7 @@ def getApproved(_tokenId: uint256) -> address: return self.idToApprovals[_tokenId] ``` -注意,`getApproved` *可以*返回零。 如果代币有效,则返回 `self.idToApprovals[_tokenId]`。 如果没有批准者,该值为 0。 +注意,`getApproved` _可以_返回零。 如果代币有效,则返回 `self.idToApprovals[_tokenId]`。 如果没有批准者,该值为 0。 ```python @view @@ -323,7 +323,7 @@ def isApprovedForAll(_owner: address, _operator: address) -> bool: @internal ``` -修饰符 `@internal` 表示该函数只能由 同一合约内的其他函数访问。 按照惯例,这些函数名称也以下划线 (`_`) 开头。 +修改器 `@internal` 表示该函数只能由 同一合约内的其他函数访问。 按照惯例,这些函数名称也以下划线 (`_`) 开头。 ```python def _isApprovedOrOwner(_spender: address, _tokenId: uint256) -> bool: @@ -347,7 +347,7 @@ def _isApprovedOrOwner(_spender: address, _tokenId: uint256) -> bool: 2. 该地址经批准可以使用该代币 3. 该地址是代表代币所有者的运营者 -上面的函数可以是一个视图函数,因为它并不改变状态。 为了降低运营成本,任何*可以* 成为视图函数的函数都*应该*成为视图函数。 +上面的函数可以是一个视图函数,因为它并不改变状态。 为了降低运营成本,任何_可以_ 成为视图函数的函数都_应该_成为视图函数。 ```python @internal @@ -451,7 +451,7 @@ def transferFrom(_from: address, _to: address, _tokenId: uint256): self._transferFrom(_from, _to, _tokenId, msg.sender) ``` -此函数允许您向任意地址转账。 除非该地址是用户或是知道如何转移代币的 合约,否则您转移的任何代币都将卡在该地址中变得毫无用处。 +此函数允许你向任意地址转账。 除非该地址是用户或是知道如何转移代币的 合约,否则你转移的任何代币都将卡在该地址中变得毫无用处。 ```python @external @@ -485,7 +485,7 @@ def safeTransferFrom( if _to.is_contract: # check if `_to` is a contract address ``` -首先检查地址是否为合约(如果有代码)。 如果不是,假定它是一个用户 地址,并且该用户能够使用或转移代币。 但不要让该地址 给您一种虚假的安全感。 如果您将代币转移到一个没有人知道私钥的地址,即使使用了 `safeTransferFrom`,也可能损失代币。 +首先检查地址是否为合约(如果有代码)。 如果不是,假定它是一个用户 地址,并且该用户能够使用或转移代币。 但不要让该地址 给你一种虚假的安全感。 如果你将代币转移到一个没有人知道私钥的地址,即使使用了 `safeTransferFrom`,也可能损失代币。 ```python returnValue: bytes32 = ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) @@ -518,7 +518,7 @@ def approve(_approved: address, _tokenId: uint256): assert _approved != owner ``` -根据惯例,如果您不想要批准者,可以指定零地址而不是您自己。 +根据惯例,如果你不想要批准者,可以指定零地址而不是你自己。 ```python # Check requirements @@ -527,7 +527,7 @@ def approve(_approved: address, _tokenId: uint256): assert (senderIsOwner or senderIsApprovedForAll) ``` -要设置批准,您可以是所有者,也可以是所有者授权的运营者。 +要设置批准,你可以是所有者,也可以是所有者授权的运营者。 ```python # Set the approval @@ -578,7 +578,7 @@ def mint(_to: address, _tokenId: uint256) -> bool: assert msg.sender == self.minter ``` -只有铸币者(创建 ERC-721 合约的帐户)可以铸造新代币。 如果我们将来想改变铸币者的 身份,这可能会成为一个问题。 在生产合约 中,您可能需要一个函数,允许 铸币者将铸币者特权转让给其他人。 +只有铸币者(创建 ERC-721 合约的帐户)可以铸造新代币。 如果我们将来想改变铸币者的 身份,这可能会成为一个问题。 在生产合约 中,你可能需要一个函数,允许 铸币者将铸币者特权转让给其他人。 ```python # Throws if `_to` is zero address @@ -616,17 +616,17 @@ def burn(_tokenId: uint256): # 使用此合约 {#using-contract} -与 Solidity 相比,Vyper 中没有继承。 这种有意而为之的设计选择,是为了使代码 更清晰,从而更容易受保护。 因此,要创建您自己的 Vyper ERC-721 合约,您可以 利用[此合约](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy),并修改 它以实现想要的业务逻辑。 +与 Solidity 相比,Vyper 中没有继承。 这种有意而为之的设计选择,是为了使代码 更清晰,从而更容易受保护。 因此,要创建你自己的 Vyper ERC-721 合约,你可以 利用[此合约](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy),并修改 它以实现想要的业务逻辑。 # 总结 {#conclusion} 回顾一下,下面是此合约中最重要的几点: - 要通过安全转账方式接收 ERC-721 代币,合约必须实现 `ERC721Receiver` 接口。 -- 即使使用了安全转账方式,如果您将代币发送到私钥未知 的地址,代币仍然会被卡住。 +- 即使使用了安全转账方式,如果你将代币发送到私钥未知 的地址,代币仍然会被卡住。 - 当操作出现问题时,最好 `revert` 该调用,而不是只返回 失败值。 - 有了所有者,ERC-721 代币才存在。 -- 有三种经过授权的 NFT 转账方式。 您可以是所有者,可以针对特定代币获得批准, 或者可以是所有者全部代币的运营者。 +- 有三种经过授权的 NFT 转账方式。 你可以是所有者,可以针对特定代币获得批准, 或者可以是所有者全部代币的运营者。 - 过去的事件只在区块链之外可见。 区块链中运行的代码无法看到它们。 现在去实现安全的 Vyper 合约吧。 diff --git a/public/content/translations/zh/developers/tutorials/erc20-annotated-code/index.md b/public/content/translations/zh/developers/tutorials/erc20-annotated-code/index.md index 4c736456db1..b150447d98c 100644 --- a/public/content/translations/zh/developers/tutorials/erc20-annotated-code/index.md +++ b/public/content/translations/zh/developers/tutorials/erc20-annotated-code/index.md @@ -22,9 +22,9 @@ published: 2021-03-09 ![ERC-20 接口说明](erc20_interface.png) -如果您是一位经验丰富的程序员,您可能记得在 [Java](https://www.w3schools.com/java/java_interface.asp) 中,甚至在 [C 头文件](https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html) 中看到过类似的构造。 +如果你是一位经验丰富的程序员,你可能记得在 [Java](https://www.w3schools.com/java/java_interface.asp) 中,甚至在 [C 头文件](https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html) 中看到过类似的构造。 -这是来自 OpenZeppelin 的 [ERC-20 接口](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) 的定义。 这是将[人类可读标准](https://eips.ethereum.org/EIPS/eip-20)转换为 Solidity 代码。 当然, 接口本身并不定义*如何*做事。 这一点在下文合约的源代码中作了解释。 +这是来自 OpenZeppelin 的 [ERC-20 接口](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) 的定义。 这是将[人类可读标准](https://eips.ethereum.org/EIPS/eip-20)转换为 Solidity 代码。 当然, 接口本身并不定义_如何_做事。 这一点在下文合约的源代码中作了解释。   @@ -32,7 +32,7 @@ published: 2021-03-09 // SPDX-License-Identifier: MIT ``` -Solidity 文件中一般需要标识软件许可证。 [您可以在这里看到许可证列表](https://spdx.org/licenses/)。 如果需要不同的 许可证,只需在注释中加以说明。 +Solidity 文件中一般需要标识软件许可证。 [你可以在这里看到许可证列表](https://spdx.org/licenses/)。 如果需要不同的 许可证,只需在注释中加以说明。   @@ -71,7 +71,7 @@ interface IERC20 { 此函数标记为 `external`,表示[它只能从合约之外调用](https://docs.soliditylang.org/en/v0.7.0/cheatsheet.html#index-2)。 它返回的是合约中代币的总供应量 这个值按以太坊中最常见的类型返回,即无符号的 256 位(256 位是 以太坊虚拟机的原生字长宽度)。 此函数也是视图 `view` 类型,这意味着它不会改变合约状态,这样它可以在单个节点上执行,而不需要在区块链的每个节点上执行。 这类函数不会生成交易,也不会消耗[燃料](/developers/docs/gas/)。 -**注意:**理论上讲,合约创建者可能会通过返回比实际数量少的总供应量来做骗局,让每个代币 比实际看起来更有价值。 然而,这种担忧忽视了区块链的真正内涵。 所有在区块链上发生的事情都要通过每个节点 进行验证。 为了实现这一点,每个合约的机器语言代码和存储都可以在每个节点上找到。 虽然无需发布您的合约代码,但这样其它人都不会认真对待您,除非您发布源代码和用于编译的 Solidity 版本,这样人们可以用它来验证您提供的机器语言代码。 例如,请查看[此合约](https://etherscan.io/address/0xa530F85085C6FE2f866E7FdB716849714a89f4CD#code)。 +**注意:**理论上讲,合约创建者可能会通过返回比实际数量少的总供应量来做骗局,让每个代币 比实际看起来更有价值。 然而,这种担忧忽视了区块链的真正内涵。 所有在区块链上发生的事情都要通过每个节点 进行验证。 为了实现这一点,每个合约的机器语言代码和存储都可以在每个节点上找到。 虽然无需发布你的合约代码,但这样其它人都不会认真对待你,除非你发布源代码和用于编译的 Solidity 版本,这样人们可以用它来验证你提供的机器语言代码。 例如,请查看[此合约](https://etherscan.io/address/0xa530F85085C6FE2f866E7FdB716849714a89f4CD#code)。   @@ -82,7 +82,7 @@ interface IERC20 { function balanceOf(address account) external view returns (uint256); ``` -顾名思义,`balanceOf` 返回一个账户的余额。 以太坊帐户在 Solidity 中通过 `address` 类型识别,该类型有 160 位。 它也是 `external` 和 `view` 类型。 +顾名思义,`balanceOf` 返回一个帐户的余额。 以太坊帐户在 Solidity 中通过 `address` 类型识别,该类型有 160 位。 它也是 `external` 和 `view` 类型。   @@ -143,7 +143,7 @@ interface IERC20 { function approve(address spender, uint256 amount) external returns (bool); ``` -`approve` 函数创建了一个许可额度。 请务必阅读关于 如何避免函数被滥用的信息。 在以太坊中,您可以控制自己交易的顺序, 但无法控制其他方交易的执行顺序, 除非在看到其他方的交易发生之前 不提交您自己的交易。 +`approve` 函数创建了一个许可额度。 请务必阅读关于 如何避免函数被滥用的信息。 在以太坊中,你可以控制自己交易的顺序, 但无法控制其他方交易的执行顺序, 除非在看到其他方的交易发生之前 不提交你自己的交易。   @@ -257,7 +257,7 @@ contract ERC20 is Context, IERC20 { ``` -此行将 `SafeMath` 库附加到 `uint256` 类型。 您可以在 [此处](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol)找到此程序库。 +此行将 `SafeMath` 库附加到 `uint256` 类型。 你可以在 [此处](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol)找到此程序库。 ### 变量的定义 {#variable-definitions} @@ -277,7 +277,7 @@ contract ERC20 is Context, IERC20 { 映射 (address => mapping (address => uint256)) private _allowances; ``` -此变量,`_allowances` 存储之前提到过的许可限额。 第一个索引是 代币的所有者,第二个索引是获得许可限额的合约。 要查询地址 A 可以 从地址 B 账户中支出的额度,请使用 `_allowances[B][A]`。 +此变量,`_allowances` 存储之前提到过的许可限额。 第一个索引是 代币的所有者,第二个索引是获得许可限额的合约。 要查询地址 A 可以 从地址 B 帐户中支出的额度,请使用 `_allowances[B][A]`。   @@ -301,7 +301,7 @@ contract ERC20 is Context, IERC20 { 解决方案是保持整数值,但是计数时使用一个价值非常小的分数代币, 而不是真正的代币。 就以太币而言,分数代币称为 wei,10^18 个 wei 等于一个 以太币。 在撰写本文时,10,000,000,000,000 wei 约等于一美分或欧分。 -应用程序需要知道如何显示代币余额。 如果某位用户有 3,141,000,000,000,000,000 wei,那是否是 3.14 个以太币? 31.41 个以太币? 还是 3,141 个以太币? 对于以太币,10^18 个 wei 等于 1 个以太币,但对于您的 代币,您可以选择一个不同的值。 如果无法合理拆分代币,您可以将 `_decimals` 值设为零。 如果想要使用与以太币相同的标准,请使用 **18**。 +应用程序需要知道如何显示代币余额。 如果某位用户有 3,141,000,000,000,000,000 wei,那是否是 3.14 个以太币? 31.41 个以太币? 还是 3,141 个以太币? 对于以太币,10^18 个 wei 等于 1 个以太币,但对于你的 代币,你可以选择一个不同的值。 如果无法合理拆分代币,你可以将 `_decimals` 值设为零。 如果想要使用与以太币相同的标准,请使用 **18**。 ### 构造函数 {#the-constructor} @@ -364,17 +364,17 @@ contract ERC20 is Context, IERC20 { 返回类型为 `string memory`,意味着返回在内存中存储的字符串。 变量,如 字符串,可以存储在三个位置: -| | 有效时间 | 合约访问 | 燃料成本 | -| -------- | ---------- | -------- | ---------------------------------- | -| 内存 | 函数调用 | 读/写 | 几十到几百不等(距离越远费用越高) | -| 调用数据 | 函数调用 | 只读 | 不可用作返回类型,只可用作函数参数 | -| 存储 | 直到被修改 | 读/写 | 高(读取需要 800,写入需要 2 万) | +| | 有效时间 | 合约访问 | 燃料成本 | +| ---- | ----- | ---- | ------------------- | +| 内存 | 函数调用 | 读/写 | 几十到几百不等(距离越远费用越高) | +| 调用数据 | 函数调用 | 只读 | 不可用作返回类型,只可用作函数参数 | +| 存储 | 直到被修改 | 读/写 | 高(读取需要 800,写入需要 2万) | 在这种情况下,`memory` 是最好的选择。 ### 读取代币信息 {#read-token-information} -这些是提供代币信息的函数,不管是总量还是 账户余额。 +这些是提供代币信息的函数,不管是总量还是 帐户余额。 ```solidity /** @@ -398,7 +398,7 @@ contract ERC20 is Context, IERC20 { } ``` -读取一个帐户的余额。 请注意,任何人都可以查看他人账户的余额。 试图隐藏此信息没有意义,因为它在每个节点上 都是可见的。 _区块链上没有秘密_ +读取一个帐户的余额。 请注意,任何人都可以查看他人帐户的余额。 试图隐藏此信息没有意义,因为它在每个节点上 都是可见的。 _区块链上没有秘密_ ### 代币转账 {#transfer-tokens} @@ -430,7 +430,7 @@ contract ERC20 is Context, IERC20 { ### 许可额度函数 {#allowance-functions} -这些是实现许可额度功能的函数:`allowance`、`approve`、`transferFrom` 和 `_approve`。 此外,除基本标准外,OpenZeppelin 实现还包含了一些能够提高 安全性的功能:`increaseAllowance` 和 `decreaseAllowance`。 +这些是实现许可额度功能的函数:`allowance`、`approve`、`transferFrom` 和 `_approve`。 此外,除基本标准外,OpenZeppelin 实现还包含了一些能够提高 安全性的功能:`increaseAllowance` 和 ` decreaseAllowance `。 #### 许可额度函数 {#allowance} @@ -471,7 +471,7 @@ contract ERC20 is Context, IERC20 { } ``` -我们使用内部函数尽量减少发生状态变化之处。 *任何*可以改变状态的 函数都是一种潜在的安全风险,需要对其安全性进行审核。 这样我们就能减少出错的机会。 +我们使用内部函数尽量减少发生状态变化之处。 _任何_可以改变状态的 函数都是一种潜在的安全风险,需要对其安全性进行审核。 这样我们就能减少出错的机会。 #### TransferFrom 函数 {#transferFrom} @@ -509,35 +509,35 @@ contract ERC20 is Context, IERC20 { #### OpenZeppelin 安全加法 {#openzeppelin-safety-additions} -将许可额度从一个非零值设定为另一个非零值是有危险的, 因为您只能控制自己的交易顺序,而无法控制其他人的交易顺序。 假设现在有两个用户,天真的 Alice 和不诚实的 Bill。 Alice 想要从 Bill 处获取一些服务, 她认为值五个代币,所以她给了 Bill 五个代币的许可额度。 +将许可额度从一个非零值设定为另一个非零值是有危险的, 因为你只能控制自己的交易顺序,而无法控制其他人的交易顺序。 假设现在有两个用户,天真的 Alice 和不诚实的 Bill。 Alice 想要从 Bill 处获取一些服务, 她认为值五个代币,所以她给了 Bill 五个代币的许可额度。 之后有了一些变化,Bill 的价格提高到了十个代币。 Alice 仍然想要购买服务,就发送了一笔交易,将 Bill 的许可额度设置为 10。 当 Bill 在交易池中看到这个新的交易时, 他就会发送一笔交易,以花费 Alice 的五个代币,并且设定高得多的 燃料价格,这样就会更快挖矿。 这样的话,Bill 可以先花五个代币,然后 当 Alice 的新许可额度放款后,他就可以再花费十个代币,这样总共花费了 15 个代币, 超过了 Alice 本欲授权的金额。 这种技术叫做 [抢先交易](https://consensys.github.io/smart-contract-best-practices/attacks/#front-running) -| Alice 的交易 | Alice 的随机数 | Bill 的交易 | Bill 的随机数 | Bill 的许可额度 | Bill 从 Alice 处获得的总收入 | -| ----------------- | -------------- | ----------------------------- | ------------- | --------------- | ---------------------------- | -| approve(Bill, 5) | 10 | | | 5 | 0 | -| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | -| approve(Bill, 10) | 11 | | | 10 | 5 | -| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 15 | +| Alice 的交易 | Alice 的随机数 | Bill 的交易 | Bill 的随机数 | Bill 的许可额度 | Bill 从 Alice 处获得的总收入 | +| ----------------- | ---------- | ----------------------------- | --------- | ---------- | -------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | +| approve(Bill, 10) | 11 | | | 10 | 5 | +| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 15 | -为了避免这个问题,有两个函数(`increaseAllowance` 和 `decreaseAllowance`)使您 能够修改指定数额的许可额度。 所以,如果 Bill 已经花费了五个代币, 他就只能再花五个代币。 根据时间的不同,有两种方法可以生效, 这两种方法都会使 Bill 最终只得到十个代币: +为了避免这个问题,有两个函数(`increaseAllowance` 和 `decreaseAllowance`)使你 能够修改指定数额的许可额度。 所以,如果 Bill 已经花费了五个代币, 他就只能再花五个代币。 根据时间的不同,有两种方法可以生效, 这两种方法都会使 Bill 最终只得到十个代币: A: -| Alice 的交易 | Alice 的随机数 | Bill 的交易 | Bill 的随机数 | Bill 的许可额度 | Bill 从 Alice 处获得的总收入 | -| -------------------------- | -------------: | ---------------------------- | ------------: | --------------: | ---------------------------- | -| approve(Bill, 5) | 10 | | | 5 | 0 | -| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | -| increaseAllowance(Bill, 5) | 11 | | | 0+5 = 5 | 5 | -| | | transferFrom(Alice, Bill, 5) | 10,124 | 0 | 10 | +| Alice 的交易 | Alice 的随机数 | Bill 的交易 | Bill 的随机数 | Bill 的许可额度 | Bill 从 Alice 处获得的总收入 | +| -------------------------- | ----------:| ---------------------------- | ---------:| ----------:| -------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | +| increaseAllowance(Bill, 5) | 11 | | | 0+5 = 5 | 5 | +| | | transferFrom(Alice, Bill, 5) | 10,124 | 0 | 10 | B: -| Alice 的交易 | Alice 的随机数 | Bill 的交易 | Bill 的随机数 | Bill 的许可额度 | Bill 从 Alice 处获得的总收入 | -| -------------------------- | -------------: | ----------------------------- | ------------: | --------------: | ---------------------------: | -| approve(Bill, 5) | 10 | | | 5 | 0 | -| increaseAllowance(Bill, 5) | 11 | | | 5+5 = 10 | 0 | -| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 10 | +| Alice 的交易 | Alice 的随机数 | Bill 的交易 | Bill 的随机数 | Bill 的许可额度 | Bill 从 Alice 处获得的总收入 | +| -------------------------- | ----------:| ----------------------------- | ---------:| ----------:| --------------------:| +| approve(Bill, 5) | 10 | | | 5 | 0 | +| increaseAllowance(Bill, 5) | 11 | | | 5+5 = 10 | 0 | +| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 10 | ```solidity /** @@ -607,7 +607,7 @@ B: function _transfer(address sender, address recipient, uint256 amount) internal virtual { ``` -`_transfer` 这个函数将代币从一个账户转到另一个账户。 有两个函数调用它,分别是 `transfer`(从发送人本人账户发送)和 `transferFrom`(使用许可额度,从其他人的账户发送)。 +`_transfer` 这个函数将代币从一个帐户转到另一个帐户。 有两个函数调用它,分别是 `transfer`(从发送人本人帐户发送)和 `transferFrom`(使用许可额度,从其他人的帐户发送)。   @@ -628,11 +628,11 @@ B: 使用该合约有两种方法: 1. 将其作为模板,编写自己的代码 -1. [从它继承](https://www.bitdegree.org/learn/solidity-inheritance)一个合约,并且重写您需要修改的函数 +1. [从它继承](https://www.bitdegree.org/learn/solidity-inheritance)一个合约,并且重写你需要修改的函数 -第二种方法要好得多,因为 OpenZeppelin ERC-20 代码已经过审核,其安全性也已得到证实。 当您的合约继承它时, 可以清楚地表明修改了哪些函数,只需要审核这些特定的函数,人们就会信任您的合约。 +第二种方法要好得多,因为 OpenZeppelin ERC-20 代码已经过审核,其安全性也已得到证实。 当你的合约继承它时, 可以清楚地表明修改了哪些函数,只需要审核这些特定的函数,人们就会信任你的合约。 -代币每次易手时,通常都需要调用一个函数。 然而,`_transfer` 是一个非常重要的函数, 重新编写可能会不安全(见下文),所以最好不要重写。 解决方案是重写 `_beforeTokenTransfer` 函数,这是一个[挂钩函数](https://wikipedia.org/wiki/Hooking)。 您可以重写此函数,之后每次转账都会调用它。 +代币每次易手时,通常都需要调用一个函数。 然而,`_transfer` 是一个非常重要的函数, 重新编写可能会不安全(见下文),所以最好不要重写。 解决方案是重写 `_beforeTokenTransfer` 函数,这是一个[挂钩函数](https://wikipedia.org/wiki/Hooking)。 你可以重写此函数,之后每次转账都会调用它。   @@ -654,7 +654,7 @@ B: #### \_mint 和 \_burn 函数 {#\_mint-and-\_burn} -这两个函数(`_mint` 和 `_burn`)修改代币的总供应量。 它们都是内部函数,在原有合约中没有任何调用它们的函数。 因此,仅通过继承合约并添加您自己的逻辑, 来决定在什么条件下可以铸造新代币或消耗现有代币时, 它们才是有用的。 +这两个函数(`_mint` 和 `_burn`)修改代币的总供应量。 它们都是内部函数,在原有合约中没有任何调用它们的函数。 因此,仅通过继承合约并添加你自己的逻辑, 来决定在什么条件下可以铸造新代币或消耗现有代币时, 它们才是有用的。 **注意:**每一个 ERC-20 代币都通过自己的业务逻辑来决定代币管理。 例如,一个固定供应总量的合约可能只在构造函数中调用 `_mint`,而从不调用 `_burn`。 一个销售代币的合约 将在支付时调用 `_mint`,并大概在某个时间点调用 `_burn`, 以避免过快的通货膨胀。 @@ -758,7 +758,7 @@ B: } ``` -此函数修改了 `>_decimals` 变量,此变量用于设置用户接口如何计算金额。 您应该从构造函数里面调用。 在之后的任何时候调用都是不正当的, 应用程序一般不会处理。 +此函数修改了 `>_decimals` 变量,此变量用于设置用户接口如何计算金额。 你应该从构造函数里面调用。 在之后的任何时候调用都是不正当的, 应用程序一般不会处理。 ### 钩子 {#hooks} @@ -789,9 +789,9 @@ B: 复习一下,这些是我认为此合约中最重要的概念(你们的看法可能与我不同) - _区块链上没有秘密_ 智能合约可以访问的任何信息 都可以提供给全世界。 -- 您可以控制自己交易的订单,但在其他人的交易发生时, 则不能控制。 这就是为什么更改许可额度时会有风险,因为它 允许消费者花掉这两个许可额度的总和。 -- `uint256` 类型值的溢出。 换言之,_0-1=2^256-1_。 如果这不是预期的 行为,您必须自行检查(或使用 SafeMath 库执行该服务)。 请注意, [Solidity 0.8.0](https://docs.soliditylang.org/en/breaking/080-breaking-changes.html) 中对此进行了更改。 +- 你可以控制自己交易的订单,但在其他人的交易发生时, 则不能控制。 这就是为什么更改许可额度时会有风险,因为它 允许消费者花掉这两个许可额度的总和。 +- `uint256` 类型值的溢出。 换言之,_0-1=2^256-1_。 如果这不是预期的 行为,你必须自行检查(或使用 SafeMath 库执行该服务)。 请注意, [Solidity 0.8.0](https://docs.soliditylang.org/en/breaking/080-breaking-changes.html) 中对此进行了更改。 - 将特定类型变量的状态改变放在一个特定的地方,这样可以使审核更容易。 这就是我们使用以下等函数的原因,例如 `_approve` 函数,它可以被`approve`、`transferFrom`、 `increaseAllowance` 和 `decreaseAllowance` 调用。 - 状态更改应为最小操作单元,其中没有任何其他动作 (如在 `_transfer` 中所见)。 这是因为在状态更改期间,会出现不一致的情况。 例如, 在减少发送人的余额,和增加接收人的余额之间, 代币总量会小于应有总量。 如果在这两个时刻之间有任何操作, 特别是调用不同的合约,则可能出现滥用。 -现在您已经了解了 OpenZeppelin ERC-20 合约是怎么编写的, 尤其是如何使之更加安全,您即可编写自己的安全合约和应用程序。 +现在你已经了解了 OpenZeppelin ERC-20 合约是怎么编写的, 尤其是如何使之更加安全,你即可编写自己的安全合约和应用程序。 diff --git a/public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md b/public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md new file mode 100644 index 00000000000..19e218967f2 --- /dev/null +++ b/public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md @@ -0,0 +1,213 @@ +--- +title: ERC-20 安全保障 +description: 如何帮助人们避免犯下低级错误 +author: Ori Pomerantz +lang: zh +tags: + - "erc-20" +skill: beginner +published: 2022年8月15日 +--- + +## 简介 {#introduction} + +以太坊的厉害之处之一在于不存在可以修改或取消你的交易的中心化组织。 但同时,以太坊也面临许多困难,其中之一便是没有任何中心化组织有权力消除用户错误或非法交易。 在这篇文章中,你将了解以太坊用户在使用 [ERC-20](/developers/docs/standards/tokens/erc-20/) 代币时犯下的一些常见错误以及如何创建 ERC-20 合约来帮助用户避免犯这些错误,或者赋予中心化组织某些权力(例如冻结帐户的权力)。 + +请注意:虽然我们将使用 [OpenZeppelin ERC-20 代币合约](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20),本文未对此进行详细阐述。 你可以在[这里](/developers/tutorials/erc20-annotated-code)找到此信息。 + +如果你想要查看完整的源代码: + +1. 请打开 [Remix IDE](https://remix.ethereum.org/)。 +2. 点击克隆 github 图标 (![clone github icon](icon-clone.png))。 +3. 克隆 github 存储库 `https://github.com/qbzzt/20220815-erc20-safety-rails`。 +4. 打开**合约 > erc20-safety-rails.sol**。 + +## 创建 ERC-20 合约 {#creating-an-erc-20-contract} + +在添加安全保障功能之前,我们首先需要 ERC-20 合约。 在这篇文章中,我们将使用 [the OpenZeppelin 合约向导](https://docs.openzeppelin.com/contracts/4.x/wizard)。 在另一个浏览器中将其打开,然后遵循以下说明: + +1. 选择 **ERC-20**。 +2. 请输入以下设置: + + | 参数 | 值 | + | -------------- | ---------------- | + | 姓名 | SafetyRailsToken | + | Symbol | SAFE | + | Premint | 1000 | + | 特性 | 无 | + | Access Control | Ownable | + | Upgradability | 无 | + +3. 向上滚动并点击 **Open in Remix**(适用于 Remix)或点击 **Download** 以使用另一个环境。 假设你正在使用 Remix,如果你想使用其他环境,只需要做些适当调整即可。 +4. 我们现在已经拥有一份功能齐全的 ERC-20 合约。 你可以展开 `.deps`>`npm` 查看导入的代码。 +5. 编译、部署并使用该合约,确认其作为 ERC-20 合约能否正常发挥作用。 如果你需要学习如何使用 Remix,请[使用本教程](https://remix.ethereum.org/?#activate=udapp,solidity,LearnEth)。 + +## 常见错误 {#common-mistakes} + +### 错误 {#the-mistakes} + +用户有时会向错误的地址发送代币。 尽管有时我们很难理解他们这么做的目的,但有两种错误类型经常发生且很容易检测到: + +1. 给合约自己的地址发送代币。 例如,[Optimism 的 OP 代币](https://optimism.mirror.xyz/qvd0WfuLKnePm1Gxb9dpGchPf5uDz5NSMEFdgirDS4c)在不到 2 个月的时间内累计[超过 120,000个](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042#tokentxns)。 这代表着人们可能刚刚失去的大量财富。 + +2. 将代币发送到一个空地址,该地址并不对应一个[外部帐户](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs)或者一份[智能合约](/developers/docs/smart-contracts)。 尽管我没有关于这类情况发生频率的统计资料,但[这种事件发生一次,就能让用户损失 20,000,000 代币](https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595)。 + +### 防止转账 {#preventing-transfers} + +Open Zeppelin ERC-20 合约包含[一个钩子(`_beforeTokenTransfer`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol#L364-L368)),在转账代币之前会调用此钩子。 默认情况下,这个钩子不会发生任何作用,但是我们可以在钩子上挂起自己的功能,例如在出现问题时进行回滚的检查。 + +若要使用此钩子,请在构造函数后面添加此函数: + +```solidity + function _beforeTokenTransfer(address from, address to, uint256 amount) + internal virtual + override(ERC20) + { + super._beforeTokenTransfer(from, to, amount); + } +``` + +如果你不熟悉 Solidity,你可能对此函数的某些部分感到陌生。 + +```solidity + internal virtual +``` + +`virtual` 关键字表明,正如我们可以从 `ERC-20` 继承函数并重写此函数一样,其他合约也可以从我们这里继承函数并重写此函数。 + +```solidity + override(ERC20) +``` + +我们必须明确指定我们正在[重写](https://docs.soliditylang.org/en/v0.8.15/contracts.html#function-overriding) `_beforeTokenTransfer` 的 ERC20 代币定义。 一般来说,从安全的角度来看,显式定义比隐式定义要好得多—如果你做过的事就在眼前,你就不会忘记你已经做了这件事。 这也是我们需要指定重写哪个超类的 `_beforeTokenTransfer` 的原因。 + +```solidity + super._beforeTokenTransfer(from, to, amount); +``` + +这一行调用我们从其中继承函数的合约的 `_beforeTokenTransfer` 函数。 在这种情况下,只有 `ERC20` 和 `Ownable` 没有这个钩子。 尽管目前 `ERC20._beforeTokenTransfer` 没有执行任何操作,但我们还是会调用它,以防将来添加功能(然后我们决定重新部署合约,因为合约在部署后不会改变)。 + +### 对要求进行编码 {#coding-the-requirements} + +我们希望在函数中添加以下要求: + +- `to` 地址不能等于 `address(this)`,即 ERC-20 合约本身的地址。 +- `to` 地址不能为空,必须为以下任一地址: + - 外部帐户 (EOA)。 我们无法直接检查地址是否为外部帐户,但可以检查地址的以太币余额。 外部帐户几乎总是有余额的,即使不再使用也是如此—余额很难降至最后一 Wei。 + - 智能合约。 测试一个地址是否是智能合约要难一些。 有一个检查外部代码长度的操作码,被称为 [`EXTCODESIZE`](https://www.evm.codes/#3b),但它不能直接在 Solidity 中使用。 为此,我们必须使用以太坊虚拟机汇编语言 [Yul](https://docs.soliditylang.org/en/v0.8.15/yul.html)。 我们还可以使用 Solidity 的其他值([`
.code` 和 `
.codehash`](https://docs.soliditylang.org/en/v0.8.15/units-and-global-variables.html#members-of-address-types)),但开销更大。 + +让我们逐行查看新代码: + +```solidity + require(to != address(this), "Can't send tokens to the contract address"); +``` + +这是第一个要求,即检查确保 `to` 和 `this(address)` 不同。 + +```solidity + bool isToContract; + assembly { + isToContract := gt(extcodesize(to), 0) + } +``` + +这就是我们检查地址是否为合约的方法。 我们无法直接从 Yul 接收输出,因此我们定义了一个变量来保留结果(本例中为 `isToContract`)。 Yul 的工作方式是将每个操作码都视为一个函数。 因此我们首先调用 [`EXTCODESIZE`](https://www.evm.codes/#3b) 来获取合约大小,然后使用 [`GT`](https://www.evm.codes/#11) 来检查它是否为零(我们处理的是无符号整数,所以它当然不能为负)。 然后,我们将结果写入 `isToContract` 中。 + +```solidity + require(to.balance != 0 || isToContract, "Can't send tokens to an empty address"); +``` + +最后,我们还要实际检查地址是否为空。 + +## 管理访问 {#admin-access} + +有时,拥有可以撤消错误的管理员是很有用的。 为了减少滥用的可能性,该管理员可以是[多重签名](https://blog.logrocket.com/security-choices-multi-signature-wallets/),因此必须有多人同意才能进行操作。 本文将介绍两种管理功能: + +1. 冻结和解冻帐户。 例如,当帐户可能被泄露时,这就很有用。 +2. 资产清理。 + + 有时,欺诈者会将欺诈性代币发送到真实代币的合约中以获得合法性。 例如,[参见此处](https://optimistic.etherscan.io/token/0x2348b1a1228ddcd2db668c3d30207c3e1852fbbe?a=0x4200000000000000000000000000000000000042)。 合法的 ERC-20 合约是 [0x4200....0042](https://optimistic.etherscan.io/address/0x4200000000000000000000000000000000000042)。 冒充它的合约是 [0x234....bbe](https://optimistic.etherscan.io/address/0x2348b1a1228ddcd2db668c3d30207c3e1852fbbe)。 + + 也有可能有人误将合法的 ERC-20 代币发送到我们的合约中,这也是我们希望有办法将这些代币取出的另一个原因。 + +OpenZeppelin 提供两种机制来实现管理访问: + +- [`Ownable`](https://docs.openzeppelin.com/contracts/4.x/access-control#ownership-and-ownable) 合约只有一个所有者。 具有 `onlyOwner`[ 修改器](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm)的函数只能由该所有者调用。 所有者可以将所有权转让给其他人或完全放弃。 所有其他帐户的权利通常是相同的。 +- [`AccessControl`](https://docs.openzeppelin.com/contracts/4.x/access-control#role-based-access-control) 合约具有[基于角色的访问控制 (RBAC)](https://en.wikipedia.org/wiki/Role-based_access_control)。 + +为简单起见,本文将使用 `Ownable`。 + +### 冻结和解冻合约 {#freezing-and-thawing-contracts} + +冻结和解冻合约需要几处更改: + +- [](https://www.tutorialspoint.com/solidity/solidity_mappings.htm)从地址到[布尔值](https://en.wikipedia.org/wiki/Boolean_data_type)的映射来追踪哪些地址被冻结。 所有值的初始值都是 0,对于布尔值来说,它被解释为“false”。 这正是我们想要的,因为默认情况下帐户不会被冻结。 + + ```solidity + mapping(address => bool) public frozenAccounts; + ``` + +- 当帐户被冻结或解冻时,用于通知相关人员的[事件](https://www.tutorialspoint.com/solidity/solidity_events.htm)。 从技术上讲,这些操作并不需要事件,但它有助于链下代码能够监听这些事件并了解正在发生的情况。 当发生与他人相关的事情时,智能合约能够发出这些信息,这被认为是一种很好的方式。 + + 这些事件都有索引,因此可以搜索帐户被冻结或解冻的所有时间。 + + ```solidity + // When accounts are frozen or unfrozen + event AccountFrozen(address indexed _addr); + event AccountThawed(address indexed _addr); + ``` + +- 用于冻结和解冻帐户的函数。 这两个函数几乎完全相同,因此我们只介绍冻结函数。 + + ```solidity + function freezeAccount(address addr) + public + onlyOwner + ``` + + 标记为 [`public`](https://www.tutorialspoint.com/solidity/solidity_contracts.htm) 的函数可由其他智能合约调用,也可由交易直接调用。 + + ```solidity + { + require(!frozenAccounts[addr], "Account already frozen"); + frozenAccounts[addr] = true; + emit AccountFrozen(addr); + } // freezeAccount + ``` + + 如果帐户已被冻结,则会回滚。 否则,冻结帐户并 `emit` 一个事件。 + +- 更改 `_beforeTokenTransfer` 以防止资金从冻结帐户中转出。 请注意,资金仍可转入冻结帐户。 + + ```solidity + require(!frozenAccounts[from], "The account is frozen"); + ``` + +### 资产清理 {#asset-cleanup} + +要释放此合约持有的 ERC-20 代币,我们需要调用它们所属代币合约上的函数,即 [ `transfer`](https://eips.ethereum.org/EIPS/eip-20#transfer) 或 [`approve`](https://eips.ethereum.org/EIPS/eip-20#approve)。 在这种情况下,没有必要将燃料浪费在许可额度上,我们也可以直接转账。 + +```solidity + function cleanupERC20( + address erc20, + address dest + ) + public + onlyOwner + { + IERC20 token = IERC20(erc20); +``` + +这是我们收到地址时为合约创建对象的语法。 我们可以做到这一点,是因为我们将 ERC20 代币的定义作为源代码的一部分(见第 4 行),该文件包括 [IERC20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) 的定义,即 OpenZeppelin ERC-20 合约的接口。 + +```solidity + uint balance = token.balanceOf(address(this)); + token.transfer(dest, balance); + } +``` + +这是一个清理函数,所以我们可能不想留下任何代币。 与其手动从用户那里获取余额,我们不如将这一过程自动化。 + +## 结论 {#conclusion} + +这并不是一个完美的解决方案—“用户犯错误”的问题没有完美的解决方案。 不过,使用这类检查至少可以避免一些错误。 冻结帐户的功能虽然危险,但可以通过阻止黑客窃取资金来限制某些黑客攻击的危害。 diff --git a/public/content/translations/zh/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md b/public/content/translations/zh/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md index bc8600975e6..26d206e07a4 100644 --- a/public/content/translations/zh/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md +++ b/public/content/translations/zh/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md @@ -1,6 +1,6 @@ --- title: 以太坊开发入门 -description: "这是一份针对以太坊开发入门的初学者指南。 我们将带领您从启动一个 API 终端节点开始,到提出一个命令行请求,再到编写您的第一个 web3 脚本。 无需区块链的开发经验!" +description: "这是一份针对以太坊开发入门的初学者指南。 我们将带领你从启动一个 API 终端节点开始,到提出一个命令行请求,再到编写你的第一个 web3 脚本。 无需区块链的开发经验!" author: "Elan Halpern" tags: - "javascript" @@ -11,7 +11,7 @@ tags: skill: beginner lang: zh published: 2020-10-30 -source: 中 +source: Medium sourceUrl: https://medium.com/alchemy-api/getting-started-with-ethereum-development-using-alchemy-c3d6a45c567f --- @@ -19,40 +19,40 @@ sourceUrl: https://medium.com/alchemy-api/getting-started-with-ethereum-developm 这是一份关于以太坊开发的初学者指南。 在本教程中,我们将使用[ Alchemy](https://alchemyapi.io/),这是一个领先的区块链开发者平台,为 70% 的顶级区块链应用程序(包括 Maker、0x、MyEtherWallet、Dharma 和 Kyber)的数百万用户提供支持。 Alchemy 使我们能够访问以太坊链上的 API 端点,这样我们就可以读写交易。 -我们将带您注册 Alchemy 来编写您的第一个 web3 脚本! 无需区块链的开发经验! +我们将带你注册Alchemy来编写你的第一个web3 脚本! 无需区块链的开发经验! -## 1. 注册免费 Alchemy 帐户 {#sign-up-for-a-free-alchemy-account} +## 1. 注册免费Alchemy帐户 {#sign-up-for-a-free-alchemy-account} 创建 Alchemy 帐户很容易,[点击此处免费注册](https://auth.alchemyapi.io/signup)。 -## 2. 创建一个 Alchemy 应用程序 {#create-an-alchemy-app} +## 2. 创建一个Alchemy应用程序 {#create-an-alchemy-app} -为了与以太坊通信,以及为了使用 Alchemy 的产品,您需要一个 API 密钥来验证您的请求。 +为了与以太坊通信,以及为了使用 Alchemy 的产品,你需要一个 API 密钥来验证你的请求。 -您可以通过[仪表板](http://dashboard.alchemyapi.io/)创建 API 密钥。 要创建一个新密钥,导航到如下所示的“Create App”: +你可以通过[仪表板](http://dashboard.alchemyapi.io/)创建API密钥。 要创建一个新密钥,导航到如下所示的“Create App”: 特别感谢[_ShapeShift_](https://shapeshift.com/)_让我们展示他们的仪表板!_ ![Alchemy仪表板](./alchemy-dashboard.png) -填写“Create App”下的详细信息以获取您的新密钥。 在此处还可以看到您以前创建的应用以及您的团队创建的应用。 通过点击任何应用的“View Key”来查看现有密钥。 +填写“Create App”下的详细信息以获取你的新密钥。 在此处还可以看到你以前创建的应用以及你的团队创建的应用。 通过点击任何应用的“View Key”来查看现有密钥。 ![使用Alchemy创建应用程序的截图](./create-app.png) -您也可以通过将鼠标悬停在“Apps”上并选择一个来获取现有 API 密钥。 您可以在这里“查看密钥”,以及“编辑应用程序”来特定域名加入白名单、查看几个开发者工具,并查看分析。 +你也可以通过将鼠标悬停在“Apps”上并选择一个来获取现有API密钥。 你可以在这里“查看密钥”,以及“编辑应用程序”来特定域名加入白名单、查看几个开发者工具,并查看分析。 ![显示用户如何获取API密钥的GIF图](./pull-api-keys.gif) ## 3. 在命令行中发送请求 {#make-a-request-from-the-command-line} -使用 JSON-RPC 和 curl 通过 Alchemy 与以太坊区块链交互。 +使用JSON-RPC和curl通过Alchemy与以太坊区块链交互。 对于手动请求,我们建议通过`JSON RPC`发送`POST`请求来进行交互。 只需传入`Content-Type: application/json`标头和查询作为`POST`主体,具有以下字段: -- `jsonrpc`: JSON-RPC 版本,目前只支持`2.0`。 -- `method`:ETH API 方法。 [请参阅 API 参考。](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc) +- `jsonrpc`: JSON-RPC版本,目前只支持`2.0`。 +- `method`:ETH API方法。 [请参阅API参考。](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc) - `params`:要传递到方法的参数列表。 -- `id`:请求的 ID。 将通过响应返回,这样就可以跟踪一个响应属于哪个请求。 +- `id`:请求的ID。 将通过响应返回,这样就可以跟踪一个响应属于哪个请求。 这是一个可通过命令行运行的示例,用于查询当前燃气价格: @@ -71,29 +71,39 @@ _**注意:**将 [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainne { "id": 73,"jsonrpc": "2.0","result": "0x09184e72a000" // 10000000000000 } ``` -## 4. 设置 Web3 客户端 {#set-up-your-web3-client} +## 4. 设置Web3客户端 {#set-up-your-web3-client} -**如果您已有客户端,** 将您当前的节点提供商的 URL 更改为您的 API 密钥的 Alchemy URL: `“https://eth-mainnet.alchemyapi.io/v2/your-api-key”` +**如果你已有客户端,** 将你当前的节点提供商的 URL 更改为你的 API 密钥的 Alchemy URL: `“https://eth-mainnet.alchemyapi.io/v2/your-api-key”` -**_注意:_**下面的脚本需要在一个**节点环境**中运行或**保存到一个文件运行**,而不是通过命令行运行。 如果您尚未安装节点或 npm ,请查看此适用于 mac 的快速设置指南。 +**_注意:_**下面的脚本需要在一个**节点环境**中运行或**保存到一个文件运行**,而不是通过命令行运行。 如果你尚未安装节点或npm ,请查看此适用于mac的快速设置指南 -许多 [Web3 库](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries)都可以和 Alchemy 集成。但是,我们建议使用 [Alchemy Web3](https://docs.alchemy.com/reference/api-overview),它是 web3.js 的替代插件,可与 Alchemy 无缝协作。 这个库有很多优点,例如自动重试和可靠的 WebSocket 支持。 +。

+ +许多 [Web3 库](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries)都可以和 Alchemy 集成。但是,我们建议使用 [Alchemy Web3](https://docs.alchemy.com/reference/api-overview),它是 web3.js 的替代插件,可与 Alchemy 无缝协作。 这个库有很多优点,例如自动重试和可靠的WebSocket支持。 要安装 AlchemyWeb3.js,请**导航到项目目录**并运行: -**使用 yarn:** +**使用yarn:** + + ``` yarn add @alch/alchemy-web3 ``` -**使用 NPM:** + +**使用NPM:** + + ``` npm install @alch/alchemy-web3 ``` -要与 Alchemy 的节点基础设施交互,请在 NodeJS 中运行或将其添加到 JavaScript 文件: + +要与Alchemy的节点基础设施交互,请在NodeJS中运行或将其添加到JavaScript文件: + + ```js const { createAlchemyWeb3 } = require("@alch/alchemy-web3") @@ -102,26 +112,39 @@ const web3 = createAlchemyWeb3( ) ``` -## 5. 编写您的第一个 Web3 脚本! {#write-your-first-web3-script} -现在用一个小的 web3 编程来练习,我们将编写一个简单的脚本,用于打印出以太坊主网中最新的区块高度。 + + +## 5. 编写你的第一个Web3脚本! {#write-your-first-web3-script} + +现在用一个小的web3编程来练习,我们将编写一个简单的脚本,用于打印出以太坊主网中最新的区块高度。 **1. 在终端中创建一个新的项目目录并通过 cd 命令进入该目录(如果尚未这样做):** + + ``` mkdir web3-example cd web3-example ``` + **2. 在项目中安装 Alchemy Web3(或任何 Web3)依赖项(如果尚未这样做):** + + ``` npm install @alch/alchemy-web3 ``` + **3. 创建一个名为 `index.js` 的文件并添加以下内容:** -> 最终应将`demo`替换为您的 Alchemy HTTP API 密钥 。 + + +> 最终应将`demo`替换为你的Alchemy HTTP API密钥 。 + + ```js async function main() { @@ -133,22 +156,29 @@ async function main() { main() ``` + 不熟悉 async 函数? 来看看这篇 [Medium 文章](https://medium.com/better-programming/understanding-async-await-in-javascript-1d81bb079b2c)。 **4. 使用节点在终端中运行该脚本** + + ``` node index.js ``` + **5. 现在应该会在控制台中看到最新的区块编号输出结果!** + + ``` The latest block number is 11043912 ``` -**哇! 恭喜! 您刚刚使用 Alchemy 编写了您的第一个 Web3 脚本 🎉** -不知道下一步该怎么做? 尝试部署您的第一个智能合约,开始练习 Solidity 编程同时参阅我们的 [Hello World 智能合约指南](https://docs.alchemyapi.io/tutorials/hello-world-smart-contract),或使用 [Dashboard Demo App](https://docs.alchemyapi.io/tutorials/demo-app) 测试您的仪表板知识! +**哇! 恭喜! 你刚刚使用 Alchemy 编写了你的第一个 Web3 脚本🎉** + +不知道下一步该怎么做? 尝试部署你的第一个智能合约,开始练习 Solidity 编程同时参阅我们的 [Hello World 智能合约指南](https://docs.alchemyapi.io/tutorials/hello-world-smart-contract),或使用 [Dashboard Demo App](https://docs.alchemyapi.io/tutorials/demo-app) 测试你的仪表板知识! -免费*[注册 Alchemy](https://auth.alchemyapi.io/signup),查看我们的[相关文档](https://docs.alchemyapi.io/),并关注我们的 [Twitter](https://twitter.com/AlchemyPlatform)* 了解最新消息。 +免费_[注册 Alchemy](https://auth.alchemyapi.io/signup),查看我们的[相关文档](https://docs.alchemyapi.io/),并关注我们的 [Twitter](https://twitter.com/AlchemyPlatform)_ 了解最新消息。 diff --git a/public/content/translations/zh/developers/tutorials/guide-to-smart-contract-security-tools/index.md b/public/content/translations/zh/developers/tutorials/guide-to-smart-contract-security-tools/index.md index 358cfbfe734..80bb2ea3450 100644 --- a/public/content/translations/zh/developers/tutorials/guide-to-smart-contract-security-tools/index.md +++ b/public/content/translations/zh/developers/tutorials/guide-to-smart-contract-security-tools/index.md @@ -21,11 +21,11 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/progr 每种技术都有优缺点,在[特定情况](#determining-security-properties)下会很有用: -| 技术 | 工具 | 使用方法 | 速度 | 错误遗漏 | 误报 | -| -------- | --------- | ------------------- | ---- | -------- | ---- | -| 静态分析 | Slither | CLI 和脚本 | 秒 | 中度 | 低 | -| 模糊测试 | Echidna | Solidity 属性 | 分钟 | 低 | 无 | -| 符号执行 | Manticore | Solidity 属性和脚本 | 小时 | 无\* | 无 | +| 技术 | 工具 | 使用方法 | 速度 | 错误遗漏 | 误报 | +| ---- | --------- | -------------- | -- | ----- | -- | +| 静态分析 | Slither | CLI 和脚本 | 秒 | 中度 | 低 | +| 模糊测试 | Echidna | Solidity 属性 | 分钟 | 低 | 无 | +| 符号执行 | Manticore | Solidity 属性和脚本 | 小时 | 无\* | 无 | \* 如果在没有超时情况下遍历所有路径 @@ -48,12 +48,12 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/progr ## 确定安全属性 {#determining-security-properties} -为了有效测试和验证代码,您必须确定需要注意的地方。 因为花费在安全上的资源是有限的,只有划分出代码库中的薄弱和高价值部分,才能优化您的工作。 威胁建模可以提供帮助。 供考虑的审核方法有: +为了有效测试和验证代码,你必须确定需要注意的地方。 因为花费在安全上的资源是有限的,只有划分出代码库中的薄弱和高价值部分,才能优化你的工作。 威胁建模可以提供帮助。 供考虑的审核方法有: - [快速风险评估](https://infosec.mozilla.org/guidelines/risk/rapid_risk_assessment.html)(时间紧迫时我们的首选方法) - [数据中心系统威胁建模指南](https://csrc.nist.gov/publications/detail/sp/800-154/draft) (aka NIST 800-154) - [Shostack 线程建模](https://www.amazon.com/Threat-Modeling-Designing-Adam-Shostack/dp/1118809998) -- [STRIDE]() / [DREAD]() +- [STRIDE](https://wikipedia.org/wiki/STRIDE_(security)) / [DREAD](https://wikipedia.org/wiki/DREAD_(risk_assessment_model)) - [PASTA](https://wikipedia.org/wiki/Threat_model#P.A.S.T.A.) - [使用断言](https://blog.regehr.org/archives/1091) @@ -67,11 +67,11 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/progr - Echidna 和 Manticore 是测试状态机规范的首选工具。 -- **访问控制。**如果您的系统有特权用户(例如所有者、监管者等),您必须确保 (1) 每个用户只能执行授权操作,并且 (2) 没有用户可以阻止权限更大的用户的操作。 +- **访问控制。**如果你的系统有特权用户(例如所有者、监管者等),你必须确保 (1) 每个用户只能执行授权操作,并且 (2) 没有用户可以阻止权限更大的用户的操作。 - - Slither、Echidna 和 Manticore 都可以检查访问控制正确与否。 例如,Slither 可以检查是否只有白名单上的函数缺少 onlyOwner 修饰符。 Echidna 和 Manticore 可用于更复杂的访问控制,例如仅当合约达到给定状态时才授予权限。 + - Slither、Echidna 和 Manticore 都可以检查访问控制正确与否。 例如,Slither 可以检查是否只有白名单上的函数缺少 onlyOwner 修改器。 Echidna 和 Manticore 可用于更复杂的访问控制,例如仅当合约达到给定状态时才授予权限。 -- **算术运算**。检查算术运算的可靠性至关重要。 在所有地方使用 `SafeMath` 是防止上溢/下溢很好的做法,但您还必需考虑其他算术缺陷,包括四舍五入和限制合约的缺陷。 +- **算术运算**。检查算术运算的可靠性至关重要。 在所有地方使用 `SafeMath` 是防止上溢/下溢很好的做法,但你还必需考虑其他算术缺陷,包括四舍五入和限制合约的缺陷。 - 在这里,Manticore 是最佳选择。 如果算术超出 SMT 求解器的范围,则可以使用 Echidna。 @@ -79,25 +79,25 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/progr - Slither 是确保检测出这些问题的工具。 -- **外部交互**。这里指合约之间的互动,一些外部合约不应该被信任。 例如,如果您的合约依赖于外部预言机,那么如果现有预言机有一半被泄漏,它是否仍然是安全的? +- **外部交互**。这里指合约之间的互动,一些外部合约不应该被信任。 例如,如果你的合约依赖于外部预言机,那么如果现有预言机有一半被泄漏,它是否仍然是安全的? - - Manticore 和 Echidna 是测试您的合约外部互动的最佳选择。 Manticore 有一个内置机制来存留外部合约。 + - Manticore 和 Echidna 是测试你的合约外部互动的最佳选择。 Manticore 有一个内置机制来存留外部合约。 -- **标准一致性**。 以太坊标准(例如 ERC20)记录了他们在设计上的缺陷。 请注意您正在构建的标准的局限性。 - - Slither、Echidna 和 Manticore 可以帮助您发现偏离特定标准的情况。 +- **标准一致性**。 以太坊标准(例如 ERC20)记录了他们在设计上的缺陷。 请注意你正在构建的标准的局限性。 + - Slither、Echidna 和 Manticore 可以帮助你发现偏离特定标准的情况。 ### 工具选择备忘清单 {#tool-selection-cheatsheet} -| 组件 | 工具 | 示例 | -| ------------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| 状态机 | Echidna、Manticore | | -| 访问控制 | Slither、Echidna、Manticore | [Slither 练习 2](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/slither/exercise2.md)、[Echidna 练习 2](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/Exercise-2.md) | -| 算术运算 | Manticore、Echidna | [Echidna 练习 1](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/Exercise-1.md)、[Manticore 练习 1 - 3](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore/exercises) | -| 继承的正确性 | Slither | [Slither 练习 1](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/slither/exercise1.md) | -| 外部交互 | Manticore、Echidna | | -| 标准一致性 | Slither、Echidna、Manticore | [`slither-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) | +| 组件 | 工具 | 示例 | +| ------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 状态机 | Echidna、Manticore | | +| 访问控制 | Slither、Echidna、Manticore | [Slither 练习 2](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/slither/exercise2.md)、[Echidna 练习 2](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/Exercise-2.md) | +| 算术运算 | Manticore、Echidna | [Echidna 练习 1](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/Exercise-1.md)、[Manticore 练习 1 - 3](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore/exercises) | +| 继承的正确性 | Slither | [Slither 练习 1](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/slither/exercise1.md) | +| 外部交互 | Manticore、Echidna | | +| 标准一致性 | Slither、Echidna、Manticore | [`slither-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) | -其他领域需要根据您的目标进行检查, 但以上囊括的大致重点领域对于所有智能合约系统来说都是一个良好的开端。 +其他领域需要根据你的目标进行检查, 但以上囊括的大致重点领域对于所有智能合约系统来说都是一个良好的开端。 我们公开的审计包含了经过验证或测试的属性实例。 请考虑阅读以下报告的`自动测试和验证部分`,以查看实际安全属性: diff --git a/public/content/translations/zh/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/zh/developers/tutorials/hello-world-smart-contract-fullstack/index.md new file mode 100644 index 00000000000..0232efa6b7a --- /dev/null +++ b/public/content/translations/zh/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -0,0 +1,1540 @@ +--- +title: 针对初学者的 Hello World 智能合约指南 - 全栈 +description: 关于编写和部署一个基于以太坊的简单智能合约的入门教程。 +author: "nstrike2" +tags: + - "solidity" + - "hardhat" + - "alchemy" + - "智能合约" + - "部署" + - "区块链浏览器" + - "前端" + - "交易" +skill: beginner +lang: zh +published: 2021-10-25 +--- + +如果你是区块链开发的新手,不知道从哪里开始或者如何部署并与智能合约交互,那么这个指南就是为你准备的。 我们将演示如何使用 [MetaMask](https://metamask.io)、[Solidity](https://docs.soliditylang.org/en/v0.8.0/)、[安全帽](https://hardhat.org)以及 [Alchemy](https://alchemyapi.io/eth),在 Goerli 测试网络上创建和部署一个简单的智能合约。 + +你将会需要一个 Alchemy 帐户来完成这个教程。 [注册一个免费帐户](https://www.alchemy.com/)。 + +如果你有任何问题,请随时在 [Alchemy Discord](https://discord.gg/gWuC7zB) 中提出! + +## 第一部分 - 使用安全帽创建和部署你的智能合约 {#part-1} + +### 连接以太坊网络 {#connect-to-the-ethereum-network} + +有多种方法可以向以太坊链发起连接请求。 简单起见,我们将会使用一个 Alchemy 上的免费帐户。Alchemy 是一个区块链开发者平台和应用程序接口,让我们在不用自己运行节点的情况下与以太坊链进行通信。 Alchemy 还有着用于监控和分析的开发者工具;我们将在本教程中利用这些工具来深入了解我们智能合约部署中的情况。 + +### 创建你的应用程序和应用程序接口密钥 {#create-your-app-and-api-key} + +当你创建了一个 Alchemy 帐户后,你可以通过创建应用程序来生成应用程序接口密钥。 这将允许你向 Goerli 测试网发送请求。 如果你不熟悉测试网,你可以[阅读 Alchemy 指南来选择一个网络](https://docs.alchemyapi.io/guides/choosing-a-network)。 + +在 Alchemy 仪表板上,找到位于导航栏的 **Apps** 下拉菜单并点击 **Create App**。 + +![创建应用程序 Hello world](./hello-world-create-app.png) + +给你的应用程序命名为“_Hello World_”并写一个简短的描述。 选择 **Staging** 作为你的环境以及 **Goerli** 作为你的网络。 + +![创建应用程序视图 hello world](./create-app-view-hello-world.png) + +_注:请确保选择 **Goerli**,否则本教程将不适用。_ + +点击 **Create app**。 你的应用程序应该会出现在下面的表中。 + +### 创建一个以太坊帐户 {#create-an-ethereum-account} + +你需要一个以太坊帐户来发送和接受交易。 我们将会使用 MetaMask,这是一个浏览器中的虚拟钱包,可供用户管理他们的以太坊帐户地址。 + +你可以[在这里](https://metamask.io/download.html)免费下载并创建一个 MetaMask 帐户。 当你正在创建一个帐户,或者如果你已经有了一个帐户,请确保切换到右上角的“Goerli Test Network”(这样我们就不会使用主网代币进行交易)。 + +### 步骤 4:从水龙头添加以太币 {#step-4-add-ether-from-a-faucet} + +为了将你的智能合约部署到测试网络,你需要一些虚拟以太币。 为了获得 Goerli 网络上的以太币,请前往 Goerli 水龙头并输入你的 Goerli 帐户地址。 注意 Goerli 水龙头最近可能不太可靠 - 请查看[测试网络页面](/developers/docs/networks/#goerli)以了解可以尝试的选项列表: + +_注:由于网络拥塞,这可能需要一些时间。_ + +### 步骤 5:查看帐户余额 {#step-5-check-your-balance} + +为了核查钱包中的以太币,我们使用 [Alchemy 的 Composer 工具](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D)来发送 [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) 请求。 这将返回我们钱包中的以太币金额。 想要了解更多请查看 [Alchemy 关于如何使用 Composer 工具的简短教程](https://youtu.be/r6sjRxBZJuU)。 + +输入你的 MetaMask 帐户地址并点击 **Send Request**。 你将会看到类似以下代码片段的响应。 + +```json +{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } +``` + +> _注:此结果以 wei 为单位,而非 ETH。 Wei 是以太币的最小计量单位。_ + +哦! 这里显示了我们所有的虚拟货币。 + +### 步骤 6:初始化我们的项目 {#step-6-initialize-our-project} + +首先,需要为我们的项目创建一个文件夹。 导航到你的命令行并输入以下内容。 + +``` +mkdir hello-world +cd hello-world +``` + +现在我们进入了项目文件夹,我们将使用 `npm init` 来初始化项目。 + +> 如果你尚未安装 npm,请按照[这些说明来安装 Node.js 和 npm](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm)。 + +对于本教程而言,你如何回答初始化问题并不重要。 以下是我们的参考操作方式: + +``` +package name: (hello-world) +version: (1.0.0) +description: hello world smart contract +entry point: (index.js) +test command: +git repository: +keywords: +author: +license: (ISC) + +About to write to /Users/.../.../.../hello-world/package.json: + +{ + "name": "hello-world", + "version": "1.0.0", + "description": "hello world smart contract", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} +``` + +批准 package.json,我们就可以进行下一步了! + +### 步骤 7:下载安全帽 {#step-7-download-hardhat} + +安全帽是一个用于编译、部署、测试和调试以太坊软件的开发环境。 它帮助开发者在本地构建智能合约和去中心化应用程序并部署到实时链上。 + +在我们的 `hello-world` 项目中运行: + +``` +npm install --save-dev hardhat +``` + +查看此页面,了解更多有关[安装说明](https://hardhat.org/getting-started/#overview)的详细信息。 + +### 步骤 8:创建安全帽项目 {#step-8-create-hardhat-project} + +在我们的 `hello-world` 项目文件夹中,运行: + +``` +npx hardhat +``` + +然后应该能看到一条欢迎消息和选项,用于选择你想要做的事情。 选择“创建一个空的 hardhat.config.js”: + +``` +888 888 888 888 888 +888 888 888 888 888 +888 888 888 888 888 +8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 +888 888 "88b 888P" d88" 888 888 "88b "88b 888 +888 888 .d888888 888 888 888 888 888 .d888888 888 +888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. +888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 + +👷 Welcome to Hardhat v2.0.11 👷‍ + +What do you want to do? … +Create a sample project +❯ Create an empty hardhat.config.js +Quit +``` + +这将会在项目中生成一个 `hardhat.config.js` 文件。 我们稍后将在教程中使用它来为我们的项目指定设置。 + +### 步骤 9:添加项目文件夹 {#step-9-add-project-folders} + +为了使项目有条理,我们将创建两个新的文件夹。 在命令行中,导航到你的 `hello-world` 项目的根目录中并输入: + +``` +mkdir contracts +mkdir scripts +``` + +- `contracts/` 是保存我们的 hello world 智能合约代码文件的位置 +- `scripts/` 是我们存放脚本的位置,用于部署我们的合约和与之交互。 + +### 步骤 10:编写合约 {#step-10-write-our-contract} + +你可能在问自己,到底什么时候才能写代码? 就是现在! + +在你最喜爱的编辑器中打开 hello-world 项目。 智能合约通常使用 Solidity 来编写,我们也将使用它来编写智能合约。 + +1. 导航到 `contracts` 文件夹并创建一个名为 `HelloWorld.sol` 的新文件。 +2. 下面是我们将在本教程中使用的示例 Hello World 智能合约。 将下面的内容复制到 `HelloWorld.sol` 文件中。 + +_注:务必阅读注释以理解此合约的内容。_ + +``` +// Specifies the version of Solidity, using semantic versioning. +// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity >=0.7.3; + +// Defines a contract named `HelloWorld`. +// 一个合约是函数和数据(其状态)的集合。 Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + //Emitted when update function is called + //Smart contract events are a way for your contract to communicate that something happened on the blockchain to your app front-end, which can be 'listening' for certain events and take action when they happen. + event UpdatedMessages(string oldStr, string newStr); + + // Declares a state variable `message` of type `string`. + // 状态变量是其值永久存储在合约存储中的变量。 The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value. + string public message; + + // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation. + // 构造器用于初始化合约的数据。 Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable). + message = initMessage; + } + + // A public function that accepts a string argument and updates the `message` storage variable. + function update(string memory newMessage) public { + string memory oldMsg = message; + message = newMessage; + emit UpdatedMessages(oldMsg, newMessage); + } +} +``` + +这是一个在创建时存储一条消息的基础智能合约。 可以通过调用 `update` 函数来更新该合约。 + +### 步骤 11:将 Metamask 和 Alchemy 连接至你的项目 {#step-11-connect-metamask-alchemy-to-your-project} + +我们创建了 MetaMask 钱包、Alchemy 帐户,并且编写了一个智能合约,现在是将这三者连起来的时候了。 + +从你的钱包发出的每一笔交易都需要使用你独有私钥的签名。 为了给我们的程序提供此权限,我们可以安全地将私钥存储在一个环境文件中。 我们也会在此存储一个 Alchemy 的应用程序接口密钥。 + +> 如需了解更多关于发送交易的信息,请查看关于使用 web3 发送交易的[教程](https://docs.alchemyapi.io/alchemy/tutorials/sending-transactions-using-web3-and-alchemy)。 + +首先,在项目目录中安装 dotenv 软件包: + +``` +npm install dotenv --save +``` + +然后,在项目根目录下创建一个 `.env` 文件。 在文件中添加你的 MetaMask 私钥和 HTTP Alchemy 应用程序接口 URL。 + +你的环境文件必须以 `.env` 命名,否则不会被识别为环境文件。 + +不要命名为 `process.env` 或 `.env-custom` 或其他名称。 + +- 遵循[这些说明](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key)导出你的私钥 +- 请从下方获取超文本传输协议 Alchemy 应用程序接口网址 + +![](./get-alchemy-api-key.gif) + +你的 `.env` 文件应该类似: + +``` +API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" +PRIVATE_KEY = "your-metamask-private-key" +``` + +为了将这些变量和代码连接,我们将在步骤 13 中调用 `hardhat.config.js` 文件中的这些变量。 + +### 步骤 12:安装 Ethers.js {#step-12-install-ethersjs} + +Ethers.js 是一个程序库,通过以更加方便用户的方法打包[标准 JSON RPC 方法](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc),从而更容易与以太坊互动,以及向以太坊提出请求。 + +安全帽可用于集成[插件](https://hardhat.org/plugins/)以获取额外的工具和扩展功能。 我们将利用 [Ethers 插件](https://hardhat.org/plugins/nomiclabs-hardhat-ethers.html)完成合约部署。 + +在你的项目目录中输入: + +```bash +npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" +``` + +### 步骤 13:更新 hardhat.config.js {#step-13-update-hardhat.configjs} + +到目前为止,我们已经添加了几个依赖库和插件,现在我们需要更新 `hardhat.config.js`,以便项目使用所有这些新的组件。 + +按如下所示更新你的 `hardhat.config.js` 代码: + +```javascript +/** + * @type import('hardhat/config').HardhatUserConfig + */ + +require("dotenv").config() +require("@nomiclabs/hardhat-ethers") + +const { API_URL, PRIVATE_KEY } = process.env + +module.exports = { + solidity: "0.7.3", + defaultNetwork: "goerli", + networks: { + hardhat: {}, + goerli: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`], + }, + }, +} +``` + +### 步骤 14:编写合约 {#step-14-compile-our-contract} + +为了确保一切正常,我们来编译一下合约。 `compile` 任务是安全帽的内部任务之一。 + +在命令行中运行: + +```bash +npx hardhat compile +``` + +你可能会看到关于 `SPDX license identifier not provided in source file` 的警告,但不用担心,希望其他方面看起来一切正常! 如果遇到问题,你可以随时在 [Alchemy cord](https://discord.gg/u72VCg3) 社区中发消息询问。 + +### 步骤 15:编写部署脚本 {#step-15-write-our-deploy-script} + +合约已经写完,配置文件也准备妥当,现在是写合约部署脚本的时候了。 + +转到 `scripts/` 文件夹,创建一个名为 `deploy.js` 的新文件,在其中添加以下内容: + +```javascript +async function main() { + const HelloWorld = await ethers.getContractFactory("HelloWorld") + + // Start deployment, returning a promise that resolves to a contract object + const hello_world = await HelloWorld.deploy("Hello World!") + console.log("Contract deployed to address:", hello_world.address) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) +``` + +安全帽在[合约教程](https://hardhat.org/tutorial/testing-contracts.html#writing-tests)中对这些代码的每一行均提供了很好的解释,我们在这里直接引用他们的解释。 + +```javascript +const HelloWorld = await ethers.getContractFactory("HelloWorld") +``` + +ethers.js 中的 `ContractFactory` 是用于部署新智能合约的抽象对象。因此这里的 `HelloWorld` 是我们 hello world 合约实例的[工厂](https://en.wikipedia.org/wiki/Factory_(object-oriented_programming))。 使用 `hardhat-ethers` 插件时,`ContractFactory` 和 `Contract` 实例默认与第一个签名者(所有者)相连。 + +```javascript +const hello_world = await HelloWorld.deploy() +``` + +调用 `ContractFactory` 代码中的 `deploy()` 函数会启动合约部署,然后返回解析为 `Contract` 对象的 `Promise`。 这个对象包括我们智能合约中每个函数的对应调用方法。 + +### 步骤 16:部署合约 {#step-16-deploy-our-contract} + +我们终于准备好部署我们的智能合约啦! 导航到命令行后运行: + +```bash +npx hardhat run scripts/deploy.js --network goerli +``` + +你会看到类似以下所示的信息: + +```bash +Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 +``` + +**请保存这个地址**。 之后在教程中我们会用到这个地址。 + +如果我们在 [Goerli etherscan](https://goerli.etherscan.io) 搜索我们的合约地址,我们应能够看到它已经成功部署。 交易将类似以下: + +![](./etherscan-contract.png) + +`From` 地址应该匹配你的 MetaMask 帐户地址,`To` 地址将是**合约创建**。 如果我们点击进入交易,我们将在 `To` 字段中看到我们的合约地址。 + +![](./etherscan-transaction.png) + +恭喜! 你刚刚在以太坊测试网上部署了一个智能合约。 + +为了更深入了解到底发生了什么,我们转到 [Alchemy 仪表板](https://dashboard.alchemyapi.io/explorer)中的 Explorer 选项卡。 如果你有多个 Alchemy 应用程序,请确保按应用程序筛选,然后选择 **Hello World**。 + +![](./hello-world-explorer.png) + +在这里,你会看到一系列 JSON-RPC 方法,当我们调用 `.deploy()` 函数时,安全帽/Ethers 会在后端完成这些方法。 在这里有两个重要的方法,[`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) 是用于把我们的合约写入 Goerli 链的请求,[`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash) 是根据哈希读取交易信息的请求。 如需了解更多关于发送交易的信息,请查看[我们关于使用 Web3 发送交易的教程](/developers/tutorials/sending-transactions-using-web3-and-alchemy/)。 + +## 第二部分 - 和你的智能合约交互 {#part-2-interact-with-your-smart-contract} + +现在我们已经成功地将智能合约部署到 Goerli 网络,让我们学习如何与它交互。 + +### 创建 interact.js 文件 {#create-a-interactjs-file} + +这是我们将在其中编写交互脚本的文件。 我们将使用在第一部分中安装的 Ethers.js 库。 + +在 `scripts/` 文件夹中,新建一个文件,命名为 `interact.js`,添加以下代码: + +```javascript +// interact.js + +const API_KEY = process.env.API_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY +const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS +``` + +### 更新 .env 文件 {#update-your-env-file} + +我们将使用新的环境变量,因此需要在[我们之前创建的 ](#step-11-connect-metamask-&-alchemy-to-your-project)`.env` 文件中定义这些变量。 + +我们需要为 Alchemy `API_KEY` 和部署你的智能合约的 `CONTRACT_ADDRESS` 添加定义。 + +你的 `.env` 文件应该如下所示: + +```bash +# .env + +API_URL = "https://eth-goerli.alchemyapi.io/v2/" +API_KEY = "" +PRIVATE_KEY = "" +CONTRACT_ADDRESS = "0x" +``` + +### 获取你的合约应用程序二进制接口 {#grab-your-contract-ABI} + +我们的合约 [ABI(应用程序二进制接口)](/glossary/#abi)是与我们的智能合约交互的接口。 安全帽自动生成应用程序二进制接口,并将其保存在 `HelloWorld.json` 中。 为了使用该接口,我们需要通过在我们的 `interact.js` 文件中添加以下代码行来解析内容: + +```javascript +// interact.js +const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") +``` + +如果你想查看应用程序二进制接口,你可以将其发送到你的控制台: + +```javascript +console.log(JSON.stringify(contract.abi)) +``` + +要查看输出到控制台的应用程序二进制接口,请导航至你的终端并运行: + +```bash +npx hardhat run scripts/interact.js +``` + +### 创建合约的实例 {#create-an-instance-of-your-contract} + +为了与我们的合约进行交互,我们需要在代码中创建一个合约实例。 要使用 Ethers.js 实现,我们需要使用三个概念: + +1. 提供者 - 为你提供区块链读写访问权限的节点提供者。 +2. 签名者 - 代表可以给交易签名的以太坊帐户 +3. 合约 - 代表部署在链上的特定合约的 Ethers.js对象 + +我们将使用上一步中的合约应用程序二进制接口来创建我们的合约实例: + +```javascript +// interact.js + +// Provider +const alchemyProvider = new ethers.providers.AlchemyProvider( + (network = "goerli"), + API_KEY +) + +// Signer +const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) + +// Contract +const helloWorldContract = new ethers.Contract( + CONTRACT_ADDRESS, + contract.abi, + signer +) +``` + +在 [ethers.js 文档](https://docs.ethers.io/v5/)获取更多关于提供者、签名者和合约的信息。 + +### 阅读 init 消息 {#read-the-init-message} + +还记得我们用 `initMessage = "Hello world!"` 部署合约时的情况吗? 我们现在要读取存储在智能合约中的消息,并将其输出到控制台。 + +在 JavaScript 中,与网络交互时会使用异步函数。 要了解更多关于异步函数的信息,[请阅读这篇 Medium 文章](https://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff)。 + +使用下面的代码来调用智能合约中的 `message` 函数,并读取 init 消息: + +```javascript +// interact.js + +// ... + +async function main() { + const message = await helloWorldContract.message() + console.log("The message is: " + message) +} +main() +``` + +在终端使用 `npx hardhat run scripts/interact.js` 运行文件后,我们应该看到如下响应: + +``` +The message is: Hello world! +``` + +恭喜! 你刚刚成功从以太坊区块链读取了智能合约数据,好样的! + +### 更新消息 {#update-the-message} + +除了读取消息,我们还可以使用 `update` 函数更新保存在我们智能合约中的消息! 很酷,对吗? + +要更新消息,我们可以直接在实例化的合约对象上调用 `update` 函数: + +```javascript +// interact.js + +// ... + +async function main() { + const message = await helloWorldContract.message() + console.log("The message is: " + message) + + console.log("Updating the message...") + const tx = await helloWorldContract.update("This is the new message.") + await tx.wait() +} +main() +``` + +请注意,在第 11 行,我们对返回的交易对象调用了 `.wait()`。 这确保了脚本在退出函数前等待交易在区块链上完成挖掘。 如果不包含 `.wait()` 调用,脚本可能不会看到合约中更新后的 `message` 值。 + +### 读取新消息 {#read-the-new-message} + +你可以重复[前面的步骤](#read-the-init-message)来读取更新后的 `message` 值。 花点时间,看看是否可以进行必要的更改以输出新值! + +如果你需要提示,你的 `interact.js` 文件现在应如下所示: + +```javascript +// interact.js + +const API_KEY = process.env.API_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY +const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS + +const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") + +// provider - Alchemy +const alchemyProvider = new ethers.providers.AlchemyProvider( + (network = "goerli"), + API_KEY +) + +// signer - you +const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) + +// contract instance +const helloWorldContract = new ethers.Contract( + CONTRACT_ADDRESS, + contract.abi, + signer +) + +async function main() { + const message = await helloWorldContract.message() + console.log("The message is: " + message) + + console.log("Updating the message...") + const tx = await helloWorldContract.update("this is the new message") + await tx.wait() + + const newMessage = await helloWorldContract.message() + console.log("The new message is: " + newMessage) +} + +main() +``` + +现在只需运行脚本,你应该能够看到旧消息、更新状态和输出到终端的新消息! + +`npx hardhat run scripts/interact.js --network goerli` + +``` +The message is: Hello World! +Updating the message... +The new message is: This is the new message. +``` + +当运行那条脚本时,你可能会发现 `Updating the message...` 步骤需要一段时间才能加载完成,然后再加载新消息。 这是由挖矿过程导致的;如果你希望在对交易进行挖矿的同时追踪交易,可以访问 [Alchemy 内存池](https://dashboard.alchemyapi.io/mempool)查看交易的状态。 如果交易被丢弃,可以访问 [Goerli Etherscan](https://goerli.etherscan.io) 并搜索你的交易哈希值。 + +## 第三部分:将你的智能合约发布到 Etherscan {#part-3-publish-your-smart-contract-to-etherscan} + +你已经完成了实现智能合约相关的所有艰苦工作,现在是时候与世界分享了! + +通过在 Etherscan 上验证你的智能合约,任何人都可以查看其源代码,并与智能合约进行交互。 让我们开始吧! + +### 步骤 1:在你的 Etherscan 帐户上生成应用程序接口密钥 {#step-1-generate-an-api-key-on-your-etherscan-account} + +需要 Etherscan 应用程序接口密钥来验证你是否拥有你正在尝试发布的智能合约。 + +如果你还没有 Etherscan 帐户,[请注册一个帐户](https://etherscan.io/register)。 + +登录后,在导航栏中找到你的用户名,将鼠标悬停在用户名上,然后选择 **My profile** 按钮。 + +在你的个人资料页面上,应该可以看到一个侧边导航栏。 从侧边导航栏中,选择 **API Key**。 接下来,按“Add”按钮创建一个新的应用程序接口密钥,将你的应用程序命名为 **hello-world**,然后按 **Create New API Key** 按钮。 + +你的新应用程序接口密钥应出现在应用程序接口密钥表中。 将应用程序接口复制到剪贴板。 + +接下来,我们需要将 Etherscan 应用程序接口添加到 `.env` 文件中。 + +添加完成后,你的 `.env` 文件应如下所示: + +```javascript +API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" +PUBLIC_KEY = "your-public-account-address" +PRIVATE_KEY = "your-private-account-address" +CONTRACT_ADDRESS = "your-contract-address" +ETHERSCAN_API_KEY = "your-etherscan-key" +``` + +### 使用安全帽部署智能合约 {#hardhat-deployed-smart-contracts} + +#### 安装 hardhat-etherscan {#install-hardhat-etherscan} + +使用安全帽将你的合约发布到 Etherscan 非常简单。 首先需要安装 `hardhat-etherscan` 插件。 `hardhat-etherscan` 会在 Etherscan 上自动验证智能合约的源代码和应用程序二进制接口。 为了添加此插件,你需要在 `hello-world` 目录中运行: + +```text +npm install --save-dev @nomiclabs/hardhat-etherscan +``` + +安装完成后,在你的 `hardhat.config.js` 文件中添加下面的语句,并添加 Etherscan 配置选项: + +```javascript +// hardhat.config.js + +require("dotenv").config() +require("@nomiclabs/hardhat-ethers") +require("@nomiclabs/hardhat-etherscan") + +const { API_URL, PRIVATE_KEY, ETHERSCAN_API_KEY } = process.env + +module.exports = { + solidity: "0.7.3", + defaultNetwork: "goerli", + networks: { + hardhat: {}, + goerli: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`], + }, + }, + etherscan: { + // Your API key for Etherscan + // Obtain one at https://etherscan.io/ + apiKey: ETHERSCAN_API_KEY, + }, +} +``` + +#### 在 Etherscan 验证你的智能合约 {#verify-your-smart-contract-on-etherscan} + +确认所有文件都已保存,且所有 `.env` 变量都已正确配置。 + +运行 `verify` 任务,传入合约地址以及要部署到的网络: + +```text +npx hardhat verify --network goerli DEPLOYED_CONTRACT_ADDRESS 'Hello World!' +``` + +确保 `DEPLOYED_CONTRACT_ADDRESS` 是你在 Goerli 测试网络上部署的智能合约的地址。 此外,最后一个参数 (`'Hello World!'`) 必须是你在[第一部分的部署步骤](#write-our-deploy-script)中使用的相同字符串。 + +如果一切正常,你会在终端中看到以下消息: + +```text +Successfully submitted source code for contract +contracts/HelloWorld.sol:HelloWorld at 0xdeployed-contract-address +for verification on Etherscan. Waiting for verification result... + + +Successfully verified contract HelloWorld on Etherscan. +https://goerli.etherscan.io/address/#contracts +``` + +恭喜! 你的智能合约代码已经在 Etherscan 部署! + +### 在 Etherscan 查看你的智能合约! {#check-out-your-smart-contract-on-etherscan} + +当你进入终端中给出的链接时,你应该会看到你的智能合约代码和应用程序二进制接口已在 Etherscan 上发布! + +**哇 - 你成功了! 现在所有人都可以调用或写入你的智能合约! 我们已经等不及看你接下来会做什么了!** + +## 第 4 部分 - 将智能合约与前端集成 {#part-4-integrating-your-smart-contract-with-the-frontend} + +本教程结束时,你将知道如何: + +- 将 MetaMask 钱包连接到你的去中心化应用程序 +- 使用 [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) 应用程序接口从你的智能合约中读取数据 +- 使用 MetaMask 对以太坊交易签名 + +对于此去中心化应用程序,我们会使用 [React](https://reactjs.org/) 作为前端框架;然而,需要注意的是,我们不会花很多时间来分解其基本内容,而是会聚焦于将 Web3 功能引入我们的项目。 + +作为前提条件,你需要对 React 有基本的了解。 否则,建议你完成官方的 [React 入门教程](https://reactjs.org/tutorial/tutorial.html)。 + +### 克隆启动文件 {#clone-the-starter-files} + +首先,到 [hello-world-part-four GitHub 存储库](https://github.com/alchemyplatform/hello-world-part-four-tutorial)中获取项目的初始文件,并将此存储库克隆到你的本地计算机中。 + +在本地打开克隆的存储库。 你会注意到它包含两个文件夹:`starter-files` 和 `completed`。 + +- `starter-files` - **我们会在这个目录中工作**,我们会将用户界面连接到你的以太坊钱包以及我们在[第三部分](#part-3)中发布到 Etherscan 的智能合约。 +- `completed` 包含已完成的整个教程,并只应用作出现问题时的参考。 + +下面,用你喜欢的代码编辑器打开 `starter-files`,然后进入 `src` 文件夹。 + +我们编写的所有代码都将保存在 `src` 文件夹下。 我们将通过编辑 `HelloWorld.js` 组件并编写 `util/interact.js` JavaScript 文件,为我们的项目提供 Web3 功能。 + +### 查看初始文件 {#check-out-the-starter-files} + +在我们开始编写之前,让我们看看初始文件为我们提供了什么。 + +#### 让你的 react 项目运行起来 {#get-your-react-project-running} + +首先在浏览器中运行 React 项目。 React 的美妙之处在于,一旦我们的项目在浏览器中运行,保存的任何更改都会在浏览器中实时更新。 + +要让项目运行,浏览到 `starter-files` 文件夹的根目录,然后在终端运行 `npm install` 以安装项目的依赖项: + +```bash +cd starter-files +npm install +``` + +依赖项安装完成后,在终端运行 `npm start`: + +```bash +npm start +``` + +这样做应该会在你的浏览器中打开 [http://localhost:3000/](http://localhost:3000/),在这里你会看到我们项目的前端界面。 它应该包含一个字段 \(一个更新存储在智能合约中的消息的地方\),一个“Connect Wallet”按钮,以及一个“Update”按钮。 + +如果你试图点击这些按钮,你会发现它们都不起作用—这是因为我们仍然需要对其功能进行编程。 + +#### `HelloWorld.js` 组件 {#the-helloworld-js-component} + +让我们在编辑器中返回 `src` 文件夹并打开 `HelloWorld.js` 文件。 理解该文件中的所有内容非常重要,因为它是我们将要处理的主要 React 组件。 + +在该文件开头,你会发现我们有几条 import 语句,这些语句是我们项目运行所必须的,它们包括 React 程序库,useEffect 和 useState 钩子,一些来自 `./util/interact.js` 的项(我们之后还会更详细的说明它们!)以及 Alchemy 徽标。 + +```javascript +// HelloWorld.js + +import React from "react" +import { useEffect, useState } from "react" +import { + helloWorldContract, + connectWallet, + updateMessage, + loadCurrentMessage, + getCurrentWalletConnected, +} from "./util/interact.js" + +import alchemylogo from "./alchemylogo.svg" +``` + +下面,我们来定义将在特定事件后更新的状态变量。 + +```javascript +// HelloWorld.js + +//State variables +const [walletAddress, setWallet] = useState("") +const [status, setStatus] = useState("") +const [message, setMessage] = useState("No connection to the network.") +const [newMessage, setNewMessage] = useState("") +``` + +以下是每个变量的含义: + +- `walletAddress` — 存储用户钱包地址的字符串 +- `status` — 用于存储有用消息,指导用户如何与去中心化应用程序交互的字符串 +- `message` — 存储智能合约中当前消息的字符串 +- `newMessage` — 存储将要写入智能合约中的新消息的字符串 + +在状态变量后,你会发现五个还未实现的函数:`useEffect`、`addSmartContractListener`、`addWalletListener`、`connectWalletPressed` 以及 `onUpdatePressed`。 我们会在下面解释它们的作用: + +```javascript +// HelloWorld.js + +//called only once +useEffect(async () => { + //TODO: implement +}, []) + +function addSmartContractListener() { + //TODO: implement +} + +function addWalletListener() { + //TODO: implement +} + +const connectWalletPressed = async () => { + //TODO: implement +} + +const onUpdatePressed = async () => { + //TODO: implement +} +``` + +- [`useEffect`](https://reactjs.org/docs/hooks-effect.html) — 这是会在你的组件被渲染后调用的 React 钩子。 因为向它传入了一个空的数组 `[]` 属性 \(见第 4 行\),它只会在组件的_第一次_渲染时被调用。 在这里我们会加载智能合约中存储的当前消息,调用智能合约和钱包监听器,并更新用户界面来反映钱包是否已连接。 +- `addSmartContractListener` — 这个函数设置了一个监听器,这个监听器会监视 HelloWorld 合约中的 `UpdatedMessages` 事件,并在智能合约中的消息变化时更新用户界面。 +- `addWalletListener` — 这个函数设置了一个监听器,来检测用户的 MetaMask 钱包的状态变化,比如用户断开他们的钱包或切换钱包地址时。 +- `connectWalletPressed` — 这个函数用于将用户的 MetaMask 钱包连接到我们的去中心化应用程序。 +- `onUpdatePressed` — 这个函数会在用户更新智能合约中存储的消息时被调用。 + +在接近该文件末尾处,我们获得我们组件的用户界面。 + +```javascript +// HelloWorld.js + +//the UI of our component +return ( +
+ + + +

Current Message:

+

{message}

+ +

New Message:

+ +
+ setNewMessage(e.target.value)} + value={newMessage} + /> +

{status}

+ + +
+
+) +``` + +如果你细致地检查这段代码,就会发现我们在用户界面中的哪里使用了各种状态变量: + +- 在第 6-12 行,如果用户的钱包已连接 \(即 `walletAddress.length > 0`\),我们就在 ID 为“walletButton;”的按钮中显示用户 `walletAddress` 的截短版,否则我们就只显示“连接钱包”。 +- 在第 17 行,我们显示在 `message` 字符串中获取的智能合约中存储的当前消息。 +- 在第 23-26 行,我们使用一个[受控组件,](https://reactjs.org/docs/forms.html#controlled-components)以用于在文本字段中输入更改时更新 `newMessage` 状态变量。 + +除了状态变量之外,你还将看到,在分别单击 ID 为 `publishButton` 和 `walletButton` 的按钮时,会调用 `connectWalletPressed` 和 `onUpdatePressed`。 + +最后,我们来看看 `HelloWorld.js` 组件是在哪里添加的。 + +如果你打开 `App.js` 文件,将会看到我们的 `HelloWorld.js` 组件是在第 7 行添加的。此文件是 React 中的主要组件,作为所有其他组件的容器。 + +最后,让我们再看看另一个为你提供的文件,`interact.js`。 + +#### `interact.js` 文件 {#the-interact-js-file} + +因为我们建议采用 [M-V-C](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) 规范,我们需要一个单独的文件包含用来管理我们的去中心化应用程序的逻辑、数据和规则的所有函数,然后我们就能将这些函数导出到前端 \(`HelloWorld.js` 组件\)。 + +👆🏽这就是 `interact.js` 文件的确切目的! + +进入 `src` 目录中的 `util` 文件夹,然后你就会发现我们引入了 `interact.js` 文件,它包含所有的智能合约交互以及钱包函数和变量。 + +```javascript +// interact.js + +//export const helloWorldContract; + +export const loadCurrentMessage = async () => {} + +export const connectWallet = async () => {} + +const getCurrentWalletConnected = async () => {} + +export const updateMessage = async (message) => {} +``` + +你会发现在文件的开头,我们注释了 `helloWorldContract` 对象。 在之后的教程里,我们会删除这个对象的注释,并且在这个变量中实例化智能合约,然后我们可以将其导出到 `HelloWorld.js` 组件。 + +`helloWorldContract` 对象之后的四个未实现函数会发挥以下作用: + +- `loadCurrentMessage` — 这个函数处理加载智能合约中存储的信息的逻辑。 它会使用 [Alchemy Web3 API](https://github.com/alchemyplatform/alchemy-web3),向 Hello World 智能合约发起一个_读取_调用。 +- `connectWallet` — 这个函数会将用户的 MetaMask 连接到我们的去中心化应用程序。 +- `getCurrentWalletConnected` — 这个函数会在页面加载时检查是否已经有以太坊帐户连接到我们的去中心化应用程序,并且相应更新我们的用户界面。 +- `updateMessage` — 这个函数会更新智能合约中存储的消息。 它会向 Hello World 智能合约发起一个_写入_调用,所以用户的 MetaMask 钱包需要签名一个以太坊交易来更新此消息。 + +现在我们已经了解所操作的对象,让我们看看如何从智能合约中读取吧! + +### 第三步:从你的智能合约中读取 {#step-3-read-from-your-smart-contract} + +为了从智能合约中读取,你需要成功设置以下内容: + +- 一个到以太坊链的应用程序接口连接 +- 一个已加载的智能合约实例 +- 一个用来调用智能合约函数的函数 +- 一个监听器,用于监听智能合约中你正读取的数据出现变化时的更新 + +听起来步骤可能很多,但是不要担心! 我们会引导你逐步完成这些步骤! :\) + +#### 建立一个到以太坊链的应用程序接口连接 {#establish-an-api-connection-to-the-ethereum-chain} + +还记得我们在教程的第二部分怎么用我们的 [Alchemy Web3 密钥从我们的智能合约中读取](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract/interacting-with-a-smart-contract#step-1-install-web3-library)吗? 你在去中心化应用程序中也需要一个 Alchemy Web3 密钥来从链上读取。 + +如果你还没有提前准备好,首先,我们来安装 [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3),导航到 `starter-files` 的根目录,然后在你的终端运行以下内容: + +```text +npm install @alch/alchemy-web3 +``` + +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) 是 [Web3.js](https://docs.web3js.org/) 的包装器,提供增强的应用程序接口方法和其他重要优势,让 Web3 开发者的工作更轻松。 它设计成只需经过最少的配置即可使用,因此你可以直接在你的应用程序中开始使用它! + +然后,在你的项目目录中安装 [dotenv](https://www.npmjs.com/package/dotenv) 程序包,我们就有了一个在获取我们应用程序接口密钥后安全存储它的地方。 + +```text +npm install dotenv --save +``` + +对于我们的去中心化应用程序,将不再使用 HTTP 应用程序接口密钥,**而是改用 Websockets 应用程序接口密钥**,因为它会允许我们设置一个监测智能合约中消息变化的监听器。 + +在你获得应用程序接口密钥后,在你的根目录中创建 `.env` 文件,并在其中添加你的 Alchemy Websockets URL。 在这之后,你的 `.env` 文件应该如下所示: + +```javascript +REACT_APP_ALCHEMY_KEY = wss://eth-goerli.ws.alchemyapi.io/v2/ +``` + +现在,我们已经准备好在我们的去中心化应用程序中设置 Alchemy Web3 端点了! 让我们回到嵌套在 `util` 文件夹中的 `interact.js`,并在文件的开头加上以下代码: + +```javascript +// interact.js + +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +//export const helloWorldContract; +``` + +在上面,我们先从 `.env` 文件中导入了 Alchemy 密钥,然后将 `alchemyKey` 传递给 `createAlchemyWeb3` 以建立 Alchemy Web3 端点。 + +准备好此端点后,我们就可以加载智能合约了! + +#### 加载你的 Hello World 智能合约 {#loading-your-hello-world-smart-contract} + +要加载你的 Hello World 智能合约,将需要其合约地址和应用程序二进制接口,如果你完成了[这个教程的第三部分](/developers/tutorials/hello-world-smart-contract-fullstack/#part-3-publish-your-smart-contract-to-etherscan-part-3-publish-your-smart-contract-to-etherscan),这两者都可以在 Etherscan 上找到。 + +#### 如何从 Etherscan 获取合约的应用程序二进制接口 {#how-to-get-your-contract-abi-from-etherscan} + +如果你跳过了这个教程的第三部分,你可以使用 HelloWorld 合约,其地址为 [0x6f3f635A9762B47954229Ea479b4541eAF402A6A](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code)。 它的应用程序二进制接口可在[这里](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code)找到。 + +在指定合约将要调用的函数,以及确保函数以你期望的格式返回数据时,合约的应用程序二进制接口必不可少。 复制合约应用程序二进制接口后,让我们将其保存到 `src` 目录,保存为文件名为 `contract-abi.json` 的 JSON 文件。 + +你的 contract-abi.json 文件应存储在 src 文件夹。 + +有了合约地址、应用程序二进制接口和 Alchemy Web3 端点,我们就可以使用[合约方法](https://docs.web3js.org/api/web3-eth-contract/class/Contract)来加载智能合约的实例。 将你的合约应用程序二进制接口导入 `interact.js` 文件,然后添加你的合约地址。 + +```javascript +// interact.js + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" +``` + +现在,我们终于可以删除 `helloWorldContract` 变量的注释,并用 AlchemyWeb3 端点加载智能合约了: + +```javascript +// interact.js +export const helloWorldContract = new web3.eth.Contract( + contractABI, + contractAddress +) +``` + +概括一下,你的 `interact.js` 文件的前 12 行应该如下所示: + +```javascript +// interact.js + +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" + +export const helloWorldContract = new web3.eth.Contract( + contractABI, + contractAddress +) +``` + +我们现在已经加载了合约,可以实现 `loadCurrentMessage` 函数了! + +#### 在 `interact.js` 文件中实现 `loadCurrentMessage` {#implementing-loadCurrentMessage-in-your-interact-js-file} + +这个函数非常简单。 我们将通过一个简单的异步 Web3 调用来从我们的合约中读取信息。 我们的函数会返回智能合约中存储的消息: + +将 `interact.js` 文件中的 `loadCurrentMessage` 更新为如下: + +```javascript +// interact.js + +export const loadCurrentMessage = async () => { + const message = await helloWorldContract.methods.message().call() + return message +} +``` + +因为我们希望在用户界面中显示该智能合约,让我们将 `HelloWorld.js` 组件中的 `useEffect` 函数更新如下: + +```javascript +// HelloWorld.js + +//called only once +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) +}, []) +``` + +注意,我们只希望在组件第一次渲染时调用 `loadCurrentMessage` 函数一次。 我们很快会实现 `addSmartContractListener` 以在智能合约中的消息变化后自动更新用户界面。 + +在我们深入研究监听器之前,让我们看看现在已经做了什么! 保存你的 `HelloWorld.js` 和 `interact.js` 文件,然后访问 [http://localhost:3000/](http://localhost:3000/)。 + +你会发现当前的消息不再是“No connection to the network.” 相反,它反映了智能合约中存储的消息。 酷! + +#### 你的用户界面现在应该反映了智能合约中存储的消息 {#your-UI-should-now-reflect-the-message-stored-in-the-smart-contract} + +说到监听器…… + +#### 实现 `addSmartContractListener` {#implement-addsmartcontractlistener} + +回想我们在[这个教程的第 1 部分](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract#step-10-write-our-contract)编写的 `HelloWorld.sol`,你会记得有一个名为 `UpdatedMessages` 的智能合约事件,这是在调用我们的智能合约的 `update` 函数后触发的 \(参见第 9 行和第 27 行\): + +```javascript +// HelloWorld.sol + +// Specifies the version of Solidity, using semantic versioning. +// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.7.3; + +// Defines a contract named `HelloWorld`. +// 一个合约是函数和数据(其状态)的集合。 Once deployed, a contract resides at a specific address on the Ethereum blockchain. Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + //Emitted when update function is called + //Smart contract events are a way for your contract to communicate that something happened on the blockchain to your app front-end, which can be 'listening' for certain events and take action when they happen. + event UpdatedMessages(string oldStr, string newStr); + + // Declares a state variable `message` of type `string`. + // 状态变量是其值永久存储在合约存储中的变量。 The keyword `public` makes variables accessible from outside a contract and creates a function that other contracts or clients can call to access the value. + string public message; + + // Similar to many class-based object-oriented languages, a constructor is a special function that is only executed upon contract creation. + // 构造器用于初始化合约的数据。 Learn more:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // Accepts a string argument `initMessage` and sets the value into the contract's `message` storage variable). + message = initMessage; + } + + // A public function that accepts a string argument and updates the `message` storage variable. + function update(string memory newMessage) public { + string memory oldMsg = message; + message = newMessage; + emit UpdatedMessages(oldMsg, newMessage); + } +} +``` + +智能合约事件是你的合约向你的前端应用程序传达区块链上发生的事情 \(即:有一个_事件_\)的一种方式,你的前端应用程序可以“监听”特定事件,并在事件发生时采取行动。 + +`addSmartContractListener` 函数将专门监听我们 Hello World 智能合约的 `UpdatedMessages` 事件,并更新用户界面来显示新消息。 + +将 `addSmartContractListener` 修改为如下内容: + +```javascript +// HelloWorld.js + +function addSmartContractListener() { + helloWorldContract.events.UpdatedMessages({}, (error, data) => { + if (error) { + setStatus("😥 " + error.message) + } else { + setMessage(data.returnValues[1]) + setNewMessage("") + setStatus("🎉 Your message has been updated!") + } + }) +} +``` + +让我们分析一下当监听器检测到事件时会发生什么: + +- 如果事件触发时出现错误,它将通过我们的 `status` 状态变量反映在用户界面中。 +- 反之,我们就可以使用返回的 `data` 对象。 `data.returnValues` 是一个以 0 为起始索引的数组,其中数组的第一个元素保存的是之前的消息,而第二个元素则保存了更新后的新消息。 总体来说,在成功触发事件的情况下,我们会将 `message` 字符串设置为更新后的消息,同时清除 `newMessage` 字符串,并且更新 `status` 状态变量以表明已在智能合约上发布一条新的消息。 + +最终,我们应在 `useEffect` 钩子函数中调用这个监听器,确保它在 `HelloWorld.js` 组件初次渲染时即被初始化。 综上所述,我们的 `useEffect` 钩子函数应当如下所示: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() +}, []) +``` + +现在我们已经掌握了从智能合约读取消息的方法,那么接下来了解如何向智能合约中写入消息那就太棒了! 然而,要向我们的去中心化应用执行写入,我们首先必须有一个连接到该去中心化应用程序的以太坊钱包。 + +接下来,我们将着手设置以太坊钱包 \(MetaMask\),然后将其连接到我们的去中心化应用程序! + +### 第四步:设置你的以太坊钱包 {#step-4-set-up-your-ethereum-wallet} + +为了向以太坊链上写入任何数据,用户必须使用其虚拟钱包的私钥来签署交易。 在本教程中,我们将使用浏览器中的虚拟钱包 [MetaMask](https://metamask.io/) 来管理你的以太坊帐户地址,因为它让终端用户签署交易变得极其简单。 + +如果你想了解更多关于以太坊交易的运作方式,请查看以太坊基金会的[这个页面](/developers/docs/transactions/)。 + +#### 下载 MetaMask {#download-metamask} + +你可以[在这里](https://metamask.io/download.html)免费下载并创建一个 MetaMask 帐户。 在你创建帐户时,或者如果你已经有帐户,请确保切换到右上角的“Goerli 测试网络”(这样我们就不会使用实际货币进行交易)。 + +#### 通过水龙头中添加以太币 {#add-ether-from-a-faucet} + +为了在以太坊区块链上签署交易,我们需要一些虚拟以太币。 要获取以太币,你可以前往 [FaucETH](https://fauceth.komputing.org) 并输入你的 Goerli 帐户地址,单击“Request funds”,然后在下拉菜单中选择“Ethereum Testnet Goerli”,最后再次单击“Request funds”按钮。 你应该会很快在你的 MetaMask 帐户中看到以太币! + +#### 查看你的余额 {#check-your-balance} + +为了核查我们帐户中有余额,我们使用 [Alchemy composer 工具](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D)发出 [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) 请求。 这将返回我们钱包中的以太币数量。 输入你的 Metamask 帐户地址并单击“发送请求”后,你应该会看到这样的响应: + +```text +{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} +``` + +**注意:**结果以 wei 为单位,而非 ETH。 Wei 是以太币的最小计量单位。 从 wei 到 eth 的转换是:1 eth = 10¹⁸ wei。 因此,如果我们将 0xde0b6b3a7640000 转换为十进制,我们会得到 1\*10¹⁸,它等于 1 eth。 + +哦! 我们的虚拟以太币都在那里了! 🤑 + +### 第五步:将 MetaMask 连接到你的用户界面 {#step-5-connect-metamask-to-your-UI} + +既然我们的 MetaMask 钱包已经设置好了,我们将我们的去中心化应用程序与之连接! + +#### `connectWallet` 函数 {#the-connectWallet-function} + +在我们的 `interact.js` 文件中,我们实现了 `connectWallet` 函数,然后我们可以在 `HelloWorld.js` 组件中调用它。 + +让我们将 `connectWallet` 函数修改为以下形式: + +```javascript +// interact.js + +export const connectWallet = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_requestAccounts", + }) + const obj = { + status: "👆🏽 Write a message in the text-field above.", + address: addressArray[0], + } + return obj + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + You must install MetaMask, a virtual Ethereum wallet, in your + browser. + +

+
+ ), + } + } +} +``` + +那么,这一大段代码究竟是做什么的呢? + +首先,该函数会检查你的浏览器是否启用了 `window.ethereum`。 + +`window.ethereum` 是一个由 MetaMask 和其他钱包提供商注入的全局应用程序接口,它允许网站请求用户的以太坊帐户。 如果被批准,它可以读取用户连接的区块链上的数据,并建议用户签署消息和交易。 参阅 [MetaMask 文档](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents)了解更多信息! + +如果 `window.ethereum` _ 不存在_,则表示未安装 MetaMask。 这会导致返回一个 JSON 对象,其中返回的 `address` 是一个空字符串,而 `status` JSX 对象指示用户必须安装 MetaMask。 + +现在如果 `window.ethereum` _存在_,那么事情就会变得有趣。 + +使用 try/catch 循环,我们将尝试通过调用 [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts) 连接到 MetaMask。 调用此函数将在浏览器中打开 MetaMask,提示用户将他们的钱包连接到你的去中心化应用程序。 + +- 如果用户选择连接,`method: "eth_requestAccounts"` 将返回一个数组,其中包含连接到去中心化应用程序的用户的所有帐户地址。 总之,我们的 `connectWallet` 函数将返回一个 JSON 对象,其中包含此数组中的_第一个 _ `address` \(见第 9 行\),并返回一条 `status` 信息,提示用户向智能合约写入信息。 +- 如果用户拒绝连接,则 JSON 对象将包含返回的 `address` 的空字符串和反映用户拒绝连接的 `status` 信息。 + +现在我们已经编写了这个 `connectWallet` 函数,下一步是调用它到我们的 `HelloWorld.js` 组件中。 + +#### 将 `connectWallet` 函数添加到你的 `HelloWorld.js` 用户界面组件中 {#add-the-connectWallet-function-to-your-HelloWorld-js-ui-component} + +导航到 `HelloWorld.js` 文件中的 `connectWalletPressed` 函数,并将其更新为以下内容: + +```javascript +// HelloWorld.js + +const connectWalletPressed = async () => { + const walletResponse = await connectWallet() + setStatus(walletResponse.status) + setWallet(walletResponse.address) +} +``` + +注意我们的大部分函数是如何从 `interact.js` 文件中的 `HelloWorld.js` 组件中抽象出来的? 这就是我们遵守 M-V-C 规范的原因! + +在 `connectWalletPressed` 中,我们只需对导入的 `connectWallet` 函数进行 await 调用,并使用其响应,通过变量的状态挂钩更新我们的 `status` 和 `walletAddress ` 变量。 + +现在,让我们保存两个文件 \(`HelloWorld.js` 和 `interact.js`\) ,并测试一下我们目前的用户界面。 + +打开浏览器,在地址栏中输入 [localhost:3000](http://localhost:3000/),然后按页面右上角的“Connect Wallet”按钮。 + +如果你安装了 MetaMask,系统会提示你将钱包连接到去中心化应用程序。 接受邀请并连接。 + +你会看到钱包按钮现在反映你的地址已连接! 太棒了 🔥 ! + +接下来,尝试刷新页面......有点儿奇怪。 我们的钱包按钮提示我们连接 MetaMask,尽管它已经连接...... + +然而,不要害怕! 我们可以通过实现 `getCurrentWalletConnected` 轻松解决这个问题(明白了吗?),它将检查一个地址是否已经连接到我们的去中心化应用程序,并相应地更新我们的用户界面! + +#### `getCurrentWalletConnected` 函数 {#the-getcurrentwalletconnected-function} + +将 `interact.js` 文件中的 `getCurrentWalletConnected` 函数更新如下: + +```javascript +// interact.js + +export const getCurrentWalletConnected = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_accounts", + }) + if (addressArray.length > 0) { + return { + address: addressArray[0], + status: "👆🏽 Write a message in the text-field above.", + } + } else { + return { + address: "", + status: "🦊 Connect to MetaMask using the top right button.", + } + } + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + You must install MetaMask, a virtual Ethereum wallet, in your + browser. + +

+
+ ), + } + } +} +``` + +这段代码与我们刚刚在上一步中编写的 `connectWallet` 函数 _非常相似_ 。 + +主要区别在于,这里我们调用了 `eth_accounts` 方法,它只是返回一个数组,其中包含当前连接到我们的去中心化应用程序的 MetaMask 地址,而不是调用 `eth_requestAccounts` 方法来打开 MetaMask 以供用户连接他们的钱包。 + +为了看看这个函数在实际应用中的效果,让我们在 `HelloWorld.js` 组件的 `useEffect` 函数中调用它: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() + + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) +}, []) +``` + +请注意,我们使用调用 `getCurrentWalletConnected` 的响应来更新我们的 `walletAddress` 和 `status` 状态变量。 + +现在我们已经添加了这段代码,让我们刷新浏览器窗口,看看最新的效果如何。 + +很不错! 按钮应显示你已连接,并显示已连接钱包地址的预览 — 即使在你刷新后也是如此! + +#### 实现 `addWalletListener` {#implement-addwalletlistener} + +我们的去中心化应用程序钱包设置的最后一步是实现钱包监听器,以便我们的用户界面在钱包状态发生变化时更新,例如当用户断开或切换帐户时。 + +在你的 `HelloWorld.js` 文件中,按照以下方式修改你的 `addWalletListener` 函数: + +```javascript +// HelloWorld.js + +function addWalletListener() { + if (window.ethereum) { + window.ethereum.on("accountsChanged", (accounts) => { + if (accounts.length > 0) { + setWallet(accounts[0]) + setStatus("👆🏽 Write a message in the text-field above.") + } else { + setWallet("") + setStatus("🦊 Connect to MetaMask using the top right button.") + } + }) + } else { + setStatus( +

+ {" "} + 🦊 + You must install MetaMask, a virtual Ethereum wallet, in your browser. + +

+ ) + } +} +``` + +我敢打赌,到了这一步你可能已经无需我们帮助就能理解这里发生的情况了,但为了确保详尽无遗,我们还是快速梳理一下: + +- 首先,我们的函数检查是否启用了 `window.ethereum` \(即 MetaMask 已安装\)。 + - 如果未启用,我们只需将 `status` 状态变量设置为提示用户安装 MetaMask 的 JSX 字符串。 + - 如果启用,我们会在第 3 行设置监听器 `window.ethereum.on("accountsChanged")` 监听 MetaMask 钱包中的状态变化,变化包括用户将其他帐户连接到去中心化应用程序、切换帐户或断开帐户。 如果至少连接了一个帐户,`walletAddress` 状态变量将更新为监听器返回的 `accounts` 数组中的第一个帐户。 否则,`walletAddress` 设置为空字符串。 + +最后,但同样重要的一点是,我们必须在 `useEffect` 函数中调用它: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() + + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) + + addWalletListener() +}, []) +``` + +就是这样! 我们已经成功完成了所有钱包功能的编程! 现在,我们来完成最后一个任务:更新智能合约中存储的消息! + +### 第六步:实现 `updateMessage` 函数 {#step-6-implement-the-updateMessage-function} + +好嘞,伙计们,我们已经来到最后阶段了! 在 `interact.js` 文件中的 `updateMessage` 函数中,我们将执行以下操作: + +1. 确保我们想要在智能合约中发布的消息有效 +2. 使用 MetaMask 钱包签署每项交易 +3. 从 `HelloWorld.js` 前端组件调用这个函数 + +这不会太耗时;我们把这个去中心化应用程序做完! + +#### 输入错误处理 {#input-error-handling} + +显然,我们在函数开头加入一些输入错误处理代码是有意义的做法。 + +如果未安装 MetaMask 扩展,或者钱包尚未连接 \(即传入的 `address` 为空字符串\),亦或是 `message` 为空字符串,我们希望函数能够提前返回。 让我们在 `updateMessage` 函数中添加以下错误处理代码: + +```javascript +// interact.js + +export const updateMessage = async (address, message) => { + if (!window.ethereum || address === null) { + return { + status: + "💡 Connect your MetaMask wallet to update the message on the blockchain.", + } + } + + if (message.trim() === "") { + return { + status: "❌ Your message cannot be an empty string.", + } + } +} +``` + +现在,我们已经实现了正确的输入错误处理,接下来就是通过 MetaMask 来签署交易的时候了! + +#### 签署交易 {#signing-our-transaction} + +如果你已经对传统的 web3 以太坊交易驾轻就熟,那么接下来我们要编写的代码将会非常熟悉。 在输入错误处理代码下方,向 `updateMessage` 函数添加以下内容: + +```javascript +// interact.js + +//set up transaction parameters +const transactionParameters = { + to: contractAddress, // Required except during contract publications. + from: address, // must match user's active address. + data: helloWorldContract.methods.update(message).encodeABI(), +} + +//sign the transaction +try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + status: ( + + ✅{" "} + + View the status of your transaction on Etherscan! + +
+ ℹ️ Once the transaction is verified by the network, the message will be + updated automatically. +
+ ), + } +} catch (error) { + return { + status: "😥 " + error.message, + } +} +``` + +让我们来详细解析下这些代码的工作原理。 首先,我们设置了交易参数,具体内容如下: + +- `to` 指定接收者地址\(我们的智能合约\) +- `from` 指定交易的签名者,即我们传入函数的 `address` 变量 +- `data` 包含对我们的“Hello World”智能合约中 `update` 方法的调用,其中将 `message` 字符串变量作为输入 + +接下来,我们进行对 `window.ethereum.request` 进行异步调用,请求 MetaMask 对交易进行签名。 请注意,在第 11 和 12 行中,我们指定了以太坊方法 `eth_sendTransaction`,并传入了我们的 `transactionParameters`。 + +此时,MetaMask 将在浏览器中打开,并提示用户签署或拒绝交易。 + +- 如果交易成功,该函数将返回一个 JSON 对象,其中 `status` JSX 字符串会提示用户前往 Etherscan 查看更多关于他们交易的信息。 +- 如果交易失败,该函数将返回一个 JSON 对象,其中 `status` 字符串会传递错误消息。 + +综上所述,我们的 `updateMessage` 函数应如下所示: + +```javascript +// interact.js + +export const updateMessage = async (address, message) => { + //input error handling + if (!window.ethereum || address === null) { + return { + status: + "💡 Connect your MetaMask wallet to update the message on the blockchain.", + } + } + + if (message.trim() === "") { + return { + status: "❌ Your message cannot be an empty string.", + } + } + + //set up transaction parameters + const transactionParameters = { + to: contractAddress, // Required except during contract publications. + from: address, // must match user's active address. + data: helloWorldContract.methods.update(message).encodeABI(), + } + + //sign the transaction + try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + status: ( + + ✅{" "} + + View the status of your transaction on Etherscan! + +
+ ℹ️ Once the transaction is verified by the network, the message will + be updated automatically. +
+ ), + } + } catch (error) { + return { + status: "😥 " + error.message, + } + } +} +``` + +最后但同样重要的是,我们需要将 `updateMessage` 函数与我们的 `HelloWorld.js` 组件进行连接。 + +#### 将 `updateMessage` 函数连接到 `HelloWorld.js` 前端 {#connect-updatemessage-to-the-helloworld-js-frontend} + +我们的 `onUpdatePressed` 函数应当通过异步调用导入的 `updateMessage` 函数,并根据交易成功或失败的结果来修改 `status` 状态变量: + +```javascript +// HelloWorld.js + +const onUpdatePressed = async () => { + const { status } = await updateMessage(walletAddress, newMessage) + setStatus(status) +} +``` + +这个实现非常干净且简单。 你猜怎么着... 你的去中心化应用程序终于完工了! + +现在就去测试一下 **Update** 按钮吧! + +### 开发你的去中心化应用程序 {#make-your-own-custom-dapp} + +哇哦,你成功完成了本教程的全部内容! 回顾一下,你已经学习了如何: + +- 使用 MetaMask 钱包连接你的去中心化应用程序项目 +- 使用 [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) 应用程序接口从你的智能合约中读取数据 +- 使用 MetaMask 对以太坊交易签名 + +现在,你已经完全掌握本教程中的技能,可以着手开发属于自己的个性化去中心化应用程序项目了! 一如既往,如果你有任何问题,欢迎随时在 [Alchemy Discord](https://discord.gg/gWuC7zB) 频道联系我们寻求帮助。 🧙‍♂️ + +完成本教程后,请在 Twitter 上标记我们 [@alchemyplatform](https://twitter.com/AlchemyPlatform),告诉我们你的体验如何,或者你是否有任何反馈! diff --git a/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md b/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md index 122112b79c6..01d01f8fd24 100644 --- a/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md +++ b/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md @@ -9,7 +9,7 @@ tags: - "测试" - "模拟" skill: intermediate -published: 2020-05-02 +published: 2020年05月02日 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/mocking-contracts --- @@ -87,8 +87,8 @@ contract PrivateERC20Mock is PrivateERC20 { 你将得到以下错误消息之一: -- `PrivateERC20Mock.sol: 类型错误:重写函数缺少"override"修饰符。(TypeError: Overriding function is missing "override" specifier.)` -- `PrivateERC20.sol:类型错误:尝试重写非virtual函数。 您是否忘记了添加“virtual”关键字?(TypeError: Trying to override non-virtual function. Did you forget to add "virtual"?.)` +- `PrivateERC20Mock.sol: 类型错误:重写函数缺少"override"修改器。(TypeError: Overriding function is missing "override" specifier.)` +- `PrivateERC20.sol:类型错误:尝试重写非virtual函数。 你是否忘记了添加“virtual”关键字?(TypeError: Trying to override non-virtual function. Did you forget to add "virtual"?.)` 由于使用的是新的 Solidity 0.6 版本,所以必须为可被重写的函数添加 `virtual` 关键字,为执行重写的函数添加 override。 因此,我们为两个 `isPublic` 函数添加这些关键字。 diff --git a/public/content/translations/zh/developers/tutorials/kickstart-your-dapp-frontend-development-wth-create-eth-app/index.md b/public/content/translations/zh/developers/tutorials/kickstart-your-dapp-frontend-development-wth-create-eth-app/index.md new file mode 100644 index 00000000000..3fe08c87523 --- /dev/null +++ b/public/content/translations/zh/developers/tutorials/kickstart-your-dapp-frontend-development-wth-create-eth-app/index.md @@ -0,0 +1,110 @@ +--- +title: 使用 create-eth-app 启动去中心化应用程序前端开发 +description: 如何使用 create-eth-app 及其功能的概述 +author: "Markus Waas" +tags: + - "create-eth-app" + - "前端" + - "javascript" + - "ethers.js" + - "图表" + - "deFi" +skill: beginner +lang: zh +published: 2020-04-27 +source: soliditydeveloper.com +sourceUrl: https://soliditydeveloper.com/create-eth-app +--- + +上一次,我们了解 [Solidity](https://soliditydeveloper.com/solidity-overview-2020) 大的框架时,已经提到了 [create-eth-app](https://github.com/PaulRBerg/create-eth-app)。 现在,你将了解如何使用它,它集成了哪些功能以及如何对其进行扩展等内容。 这个应用程序由 [Sablier](http://sablier.com/) 创始人 Paul Razvan Berg 首创,它将启动你的前端开发,并且提供多个可选集成供你选择。 + +## 安装 {#installation} + +安装需要 Yarn 0.25 或更高版本 (`npm install yarn --global`)。 安装就像运行程序一样简单: + +```bash +yarn create eth-app my-eth-app +cd my-eth-app +yarn react-app:start +``` + +这是正后台使用 [create-react-app](https://github.com/facebook/create-react-app)。 要查看你的应用程序,请打开 `http://localhost:3000/`。 当你准备好部署到生产环境中时,使用 yarn build 创建一个缩小的捆绑包。 一个简单的托管它的方法是使用 [ Netlify](https://www.netlify.com/)。 你可以创建一个 GitHub 存储库,将其添加到 Netlify,设置构建命令,这样就完成了! 你的应用程序将被托管并可供所有人使用。 所有这些都是免费的。 + +## 功能 {#features} + +### React 和 create-react-app {#react--create-react-app} + +首先,我们来了解应用程序的核心:React 和 _create-react-app_ 带来的所有附加功能。 如果你不想集成以太坊,那么仅使用它是一个很好的选择。 [React](https://reactjs.org/) 本身使构建交互式 UI 变得非常容易。 它可能不像 [Vue](https://vuejs.org/) 那样方便初学者,但仍然被广泛使用。 它具有更多的功能,最重要的是还有数千个附加库可供选择。 _create-react-app_ 也使它非常容易开始使用,具有的功能包括: + +- React、JSX、ES6、TypeScript、Flow 语法支持。 +- ES6 之外的语言附加功能,如对象扩展运算符。 +- 自动添加前缀的 CSS,所以你不需要 -webkit- 或其他前缀。 +- 快速交互式单元测试运行程序,内置对覆盖率报告的支持。 +- 对常见错误发出警告的实时开发服务器。 +- 一个用于捆绑JS、CSS和图片的构建脚本,带有哈希值和资源映射。 + +尤其是 _create-eth-app_ 正在使用新的 [hooks effect](https://reactjs.org/docs/hooks-effect.html)。 这是一种编写强大而又非常小巧的所谓功能组件的方法。 关于如何在 _create-eth-app_ 中使用 Apollo,请看下面关于 Apollo 的部分。 + +### Yarn Workspace {#yarn-workspaces} + +[Yarn Workspace](https://classic.yarnpkg.com/en/docs/workspaces/)允许你拥有多个包, 但可以从根目录对他们进行管理,而且可以使用 `yarn install` 一次性安装所有依赖项。 这对于较小的附加包,例如智能合约地址/ABI 管理(关于你在哪里部署了哪些智能合约以及如何与它们通信的信息)或图集成等,尤其有意义,这两个包都是 `create-eth-app` 的一部分。 + +### ethers.js {#ethersjs} + +虽然 [Web3](https://docs.web3js.org/) 仍被广泛使用,但 [ethers.js](https://docs.ethers.io/) 作为一种替代方案,在过去一年中获得了更多的关注,并且已集成到 _create-eth-app_ 中。 你可以使用这个操作,将它更改为 Web3,或者考虑升级为 [ethers.js v5](https://docs-beta.ethers.io/),该版本即将完成测试阶段。 + +### 图表 {#the-graph} + +与 [Restful API](https://restfulapi.net/) 相比,[GraphQL](https://graphql.org/) 是处理数据的另一种方式。 与 Restful Api 相比,它们有几个优势,特别是对于去中心化的区块链数据来说更是如此。 如果你对这背后的原因感兴趣,可以看看 [GraphQL 将为去中心化网络提供动力](https://medium.com/graphprotocol/graphql-will-power-the-decentralized-web-d7443a69c69a)。 + +通常你会直接从你的智能合约中获取数据。 想要读取上次交易的时间吗? 只需调用 `MyContract.methods.latestTradeTime().call()`,它会从以太坊节点获取数据并传输到你的去中心化应用程序中。 但如果你需要数百个不同的数据点,该怎么办? 这将导致在节点上进行数百次数据提取操作,每次都有[往返延时](https://wikipedia.org/wiki/Round-trip_delay_time),使你的去中心化应用程序缓慢且效率低下。 一个变通的办法是在你的合约中设置一个取数器调用函数,一次性返回多个数据。 但这并不总是理想的。 + +然后你可能对历史数据也感兴趣。 你不仅想知道上次交易的时间,还想知道自己做过的所有交易的时间。 使用 _create-eth-app_ 子图包,阅读[文档](https://thegraph.com/docs/define-a-subgraph)并使其适合你自己的合约。 如果你正在寻找受欢迎的智能合约,甚至可能已经有了一个子图。 可以查看[子图浏览器](https://thegraph.com/explorer/)。 + +有了子图后,你可以在去中心化应用程序中编写一个简单的查询来检索所有重要的区块链数据,包括你需要的历史数据,并且只需一次提取操作即可。 + +### Apollo {#apollo} + +由于 [Apollo Boost](https://www.apollographql.com/docs/react/get-started/) 集成,你可以轻松将图集成到 React 去中心化应用程序中。 特别是在使用 [React hooks 和 Apollo](https://www.apollographql.com/blog/apollo-client-now-with-react-hooks-676d116eeae2) 时,获取数据就像在你的组件中写一个 GraphQl 查询一样简单: + +```js +const { loading, error, data } = useQuery(myGraphQlQuery) + +React.useEffect(() => { + if (!loading && !error && data) { + console.log({ data }) + } +}, [loading, error, data]) +``` + +## 模板 {#templates} + +在顶部,你可以从几个不同的模板中进行选择。 到目前为止,你可以使用 Aave、Comp、UniSwap 或 sablier 集成。 它们都增加了重要的服务智能合约地址以及预先制作的子图集成。 只需将模板添加到创建命令,例如 `yarn create eth-app my-eth-app --with-template aave`。 + +### Aave {#aave} + +[Aave](https://aave.com/) 是一个去中心化的货币借贷市场。 存款人向市场提供流动性以赚取被动收入,而借款人则可以利用抵押物进行借贷。 Aave 的一个独特功能是那些[闪电贷](https://docs.aave.com/developers/guides/flash-loans),让你可以在没有任何抵押品的情况下借钱,只要你在一次交易中返还贷款即可。 例如,这对于在套利交易中为你提供额外的现金很有用。 + +为你赢得利益的交易代币被称为 _aTokens_。 + +当你选择将 Aave 与 _create-eth-app_ 集成时,你将获得[子图集成](https://docs.aave.com/developers/getting-started/using-graphql)。 Aave 使用 The Graph,并且已经在 [Ropsten](https://thegraph.com/explorer/subgraph/aave/protocol-ropsten) 和 [Mainnet](https://thegraph.com/explorer/subgraph/aave/protocol) 上以[原始](https://thegraph.com/explorer/subgraph/aave/protocol-raw)或[格式化](https://thegraph.com/explorer/subgraph/aave/protocol)形式为你提供了几个现成的子图。 + +![Aave 闪电贷备忘录 – “是啊,如果我的闪电贷可以保留超过 1 笔交易,那就太好了”](./flashloan-meme.png) + +### Compound {#compound} + +[ Compound ](https://compound.finance/) 类似于 Aave。 集成中已包含新的 [Compound v2 Subgraph](https://medium.com/graphprotocol/https-medium-com-graphprotocol-compound-v2-subgraph-highlight-a5f38f094195)。 在这里,赚取利益的代币竟然被称为_ cTokens_。 + +### Uniswap {#uniswap} + +[Uniswap](https://uniswap.exchange/) 是一个去中心化的交易所 (DEX)。 流动性供应商可以通过为交易双方提供所需的代币或以太币来赚取费用。 它正在被广泛使用,因此对于非常多的各种代币来说,它的流动性是最高的当中的一个。 例如,你可以轻松地将其集成到你的去中心化应用程序中,让用户可以将他们的以太币换成 DAI 币。 + +遗憾的是,在撰写本文时,集成仅针对 Uniswap v1,而不是 [刚刚发布的 v2](https://uniswap.org/blog/uniswap-v2/)。 + +### Sablier {#sablier} + +[Sablier](https://sablier.com/) 允许用户进行流支付。 完成最初的设置后,你实际上是不断地得到你的货币,而不是在某个支付日,并且不需要进行进一步的管理。 该集成包含了它[自己的子图](https://thegraph.com/explorer/subgraph/sablierhq/sablier)。 + +## 接下来是什么? {#whats-next} + +如果你对 _create-eth-app_ 有任何疑问,请访问 [Sablier 社区服务器](https://discord.gg/bsS8T47),在那里你可以与 _create-eth-app_ 的作者取得联系。 作为接下来的第一步,你可能希望集成一个 UI 框架,例如 [Material UI](https://material-ui.com/),为你实际需要的数据编写 GraphQL 查询并设置部署。 diff --git a/public/content/translations/zh/developers/tutorials/logging-events-smart-contracts/index.md b/public/content/translations/zh/developers/tutorials/logging-events-smart-contracts/index.md index e47c608f3ab..1edade90aac 100644 --- a/public/content/translations/zh/developers/tutorials/logging-events-smart-contracts/index.md +++ b/public/content/translations/zh/developers/tutorials/logging-events-smart-contracts/index.md @@ -15,7 +15,7 @@ sourceUrl: https://ethereumdev.io/logging-data-with-events/ address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" --- -在 solidity 中,[事件](/developers/docs/smart-contracts/anatomy/#events-and-logs)是智能合约可触发的调度信号。 去中心化应用程序或其他任何连接到以太坊 JSON-PRC 应用程序接口的程序,都可以监听这些事件并执行相应操作。 还可以为事件编制索引,便于以后可以搜索事件历史。 +在solidity中,[事件](/developers/docs/smart-contracts/anatomy/#events-and-logs)是智能合约可触发的调度信号。 去中心化应用程序或其他任何连接到以太坊 JSON-PRC 应用程序接口的程序,都可以监听这些事件并执行相应操作。 还可以为事件编制索引,便于以后可以搜索事件历史。 ## 事件 {#events} @@ -55,12 +55,12 @@ contract Counter { 注意: -- **第 5 行**:我们声明了事件及其包含的内容、旧值以及新值。 +- **第5行**:我们声明了事件及其包含的内容、旧值以及新值。 -- **第 13 行**:当我们增加 count 变量的值时,我们会触发事件。 +- **第13行**:当我们增加count变量的值时,我们会触发事件。 -如果我们现在部署合约并调用 increment 函数,如果您在名为 logs 的数组内单击新交易,我们将看到 Remix 会自动显示它。 +如果我们现在部署合约并调用increment函数,如果你在名为logs的数组内单击新交易,我们将看到Remix会自动显示它。 ![Remix截屏](./remix-screenshot.png) -日志在调试智能合约时非常有用,另一方面,如果您构建一个不同人使用的应用,并且使分析更容易跟踪和了解您的智能合约的使用情况,那么日志也是非常重要的手段。 交易生成的日志显示在常见区块浏览器中,例如,您还可以使用日志创建链下脚本,以便监听特定事件并在事件发生时采取行动。 +日志在调试智能合约时非常有用,另一方面,如果你构建一个不同人使用的应用,并且使分析更容易跟踪和了解你的智能合约的使用情况,那么日志也是非常重要的手段。 交易生成的日志显示在常见区块浏览器中,例如,你还可以使用日志创建链下脚本,以便监听特定事件并在事件发生时采取行动。 diff --git a/public/content/translations/zh/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md b/public/content/translations/zh/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md index 64b9bb27f35..52a2697eca7 100644 --- a/public/content/translations/zh/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md +++ b/public/content/translations/zh/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md @@ -3,8 +3,6 @@ title: 离线数据完整性的默克尔证明 description: 在链上确保链下数据的完整性 author: Ori Pomerantz tags: - - "默克尔" - - "完整性" - "存储" skill: advanced lang: zh @@ -17,7 +15,7 @@ published: 2021-12-30 为了解决这个问题,以太坊生态系统开发了[许多以去中心化方式存储数据的 代替方法](/developers/docs/storage/)。 通常情况下, 需要在可用性与价格之间进行取舍。 然而,完整性通常可以得到保证。 -本篇文章中,您将学习**如何**在以下情况下确保数据的完整性:不将数据存储在区块链上,而是使用 [Merkle 证明](https://computersciencewiki.org/index.php/Merkle_proof)。 +本篇文章中,你将学习**如何**在以下情况下确保数据的完整性:不将数据存储在区块链上,而是使用 [Merkle 证明](https://computersciencewiki.org/index.php/Merkle_proof)。 ## 工作原理 {#how-does-it-work} @@ -27,7 +25,7 @@ published: 2021-12-30 ![默克尔树](tree.png) -根哈希是唯一需要存储在链上的部分。 为了证明一个特定值,您需要提供所有与之合并才能获取根的哈希值。 例如,要证明 `C`,您需要提供 `D`、`H(A-B)` 和 `H(E-H)`。 +根哈希是唯一需要存储在链上的部分。 为了证明一个特定值,你需要提供所有与之合并才能获取根的哈希值。 例如,要证明 `C`,你需要提供 `D`、`H(A-B)` 和 `H(E-H)`。 ![C 值证明](proof-c.png) @@ -59,7 +57,7 @@ const dataArray = [ ] ``` -例如,将每条数据编码为单个 256 位整数,并以非 JSON 的格式存储。 然而,这意味着在提取合约中的数据时,可以大大减少处理工作,从而显著降低了燃料成本。 [您可以在链上读取 JSON 格式的数据](https://github.com/chrisdotn/jsmnSol),但请尽量避免这么做。 +例如,将每条数据编码为单个 256 位整数,并以非 JSON 的格式存储。 然而,这意味着在提取合约中的数据时,可以大大减少处理工作,从而显著降低了燃料成本。 [你可以在链上读取 JSON 格式的数据](https://github.com/chrisdotn/jsmnSol),但请尽量避免这么做。 ```javascript // The array of hash values, as BigInts @@ -78,7 +76,7 @@ const hash = (x) => 以太币哈希函数的预期结果是一个带十六进制数字的 JavaScript 字符串,如 `0x60A7`,并用另一个相同结构的字符串响应。 然而,对于代码的其他部分,使用 `BigInt` 类型更为容易,所以我们将转换为一个十六进制字符串,然后再转回 BigInt。 ```javascript -// Symetrical hash of a pair so we won't care if the order is reversed. +// Symmetrical hash of a pair so we won't care if the order is reversed. const pairHash = (a, b) => hash(hash(a) ^ hash(b)) ``` @@ -195,7 +193,7 @@ contract MerkleProof { } // setRoot ``` -为默克尔根设置和获取函数。 在生产系统中,让每个人都更新默克尔根是一个*非常糟糕的主意*。 这里这样做是为了简化示例代码。 **不要在数据完整性非常重要的系统上执行**。 +为默克尔根设置和获取函数。 在生产系统中,让每个人都更新默克尔根是一个_非常糟糕的主意_。 这里这样做是为了简化示例代码。 **不要在数据完整性非常重要的系统上执行**。 ```solidity     function hash(uint _a) internal pure returns(uint) { @@ -207,7 +205,7 @@ contract MerkleProof { } ``` -此函数生成一个配对哈希值。 它只是将 `hash` 和 `pairHash` 函数的 JavaScript 代码变成 Solidity。 +此函数生成一个配对哈希值。 它只是将 `hash` 和 `pairHash` 函数的 JavaScript 代码转变为 Solidity。 **注意:**这是又一次对可读性的优化。 根据[函数定义](https://www.tutorialspoint.com/solidity/solidity_cryptographic_functions.htm),也许可以将数据存储为 [`bytes32`](https://docs.soliditylang.org/en/v0.5.3/types.html#fixed-size-byte-arrays) 类型值并避免转换。 @@ -240,4 +238,4 @@ contract MerkleProof { 在现实中,你可能永远不会独立实现默克尔树。 有很多广为人知并经过审核的程序库可供使用,一般来说,最好不要自己独立实现加密基元。 但我希望你们现在能够更好地理解默克尔证明,并能够决定何时值得使用。 -请注意,虽然默克尔证明能维持*完整性*,但并不维持*可用性*。 如果数据存储方决定禁止访问,而且你不能构建默克尔树来访问你的资产,那么知道没有人可以拿走你的资产也只能作为一种小小的慰藉而已。 所以默克尔树最好和某种去中心化存储一起使用,例如星际文件系统。 +请注意,虽然默克尔证明能维持_完整性_,但并不维持_可用性_。 如果数据存储方决定禁止访问,而且你不能构建默克尔树来访问你的资产,那么知道没有人可以拿走你的资产也只能作为一种小小的慰藉而已。 所以默克尔树最好和某种去中心化存储一起使用,例如星际文件系统。 diff --git a/public/content/translations/zh/developers/tutorials/secure-development-workflow/index.md b/public/content/translations/zh/developers/tutorials/secure-development-workflow/index.md index 0ecc39f28d4..737456713af 100644 --- a/public/content/translations/zh/developers/tutorials/secure-development-workflow/index.md +++ b/public/content/translations/zh/developers/tutorials/secure-development-workflow/index.md @@ -15,19 +15,19 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel ## 智能合约开发清单 {#smart-contract-development-checklist} -这是一个高级别的过程,我们建议在您编写智能合约时遵循。 +这是一个高级别的过程,我们建议在你编写智能合约时遵循。 检查已知的安全问题: -- 使用 [Slither](https://github.com/crytic/slither) 审核您的合约。 该程序有 40 多个内置检测器,可以应对常见的脆弱性。 在每次签入时使用新代码运行它,确保它获得一个干净的报告(或使用分类模式来消除某些问题)。 -- 使用 [Crytic](https://crytic.io/) 审核您的合约。 它可以检查 Slither 未涉及的 50 个问题。 Crytic 还可以帮助您的团队成员保持联系,通过在 GitHub 上的拉取请求轻松显示安全问题。 +- 使用 [Slither](https://github.com/crytic/slither) 审核你的合约。 该程序有 40 多个内置检测器,可以应对常见的脆弱性。 在每次签入时使用新代码运行它,确保它获得一个干净的报告(或使用分类模式来消除某些问题)。 +- 使用 [Crytic](https://crytic.io/) 审核你的合约。 它可以检查 Slither 未涉及的 50 个问题。 Crytic 还可以帮助你的团队成员保持联系,通过在 GitHub 上的拉取请求轻松显示安全问题。 -考虑您的智能合约的特殊功能: +考虑你的智能合约的特殊功能: -- 您的合约是否可以升级? 使用 [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) 或 [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/) 检查您的可升级代码是否有缺陷。 我们记录了 17 种升级可能出现的问题。 -- 您的合约是否声明符合 ERC 的要求? 使用 [`slither-check-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) 对它们进行审核。 这个工具能立即识别出六个常见规范的偏差。 -- 您在 Truffle 中设有单元测试吗? 将它们添加到 [`slither-prop`](https://github.com/crytic/slither/wiki/Property-generation)。 它可以根据您的具体代码自动生成一套强大的安全属性,用于 ERC20 功能。 -- 您是否与第三方代币集成? 在依赖外部合约之前,请先查看我们的[代币集成清单](/developers/tutorials/token-integration-checklist/)。 +- 你的合约是否可以升级? 使用 [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) 或 [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/) 检查你的可升级代码是否有缺陷。 我们记录了 17 种升级可能出现的问题。 +- 你的合约是否声明符合 ERC 的要求? 使用 [`slither-check-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) 对它们进行审核。 这个工具能立即识别出六个常见规范的偏差。 +- 你在 Truffle 中设有单元测试吗? 将它们添加到 [`slither-prop`](https://github.com/crytic/slither/wiki/Property-generation)。 它可以根据你的具体代码自动生成一套强大的安全属性,用于 ERC20 功能。 +- 你是否与第三方代币集成? 在依赖外部合约之前,请先查看我们的[代币集成清单](/developers/tutorials/token-integration-checklist/)。 目视检查代码的关键安全功能。 @@ -38,19 +38,19 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel 记录关键安全属性,并使用自动化测试生成器对其进行评估: - 学习 [记录代码的安全属性](/developers/tutorials/guide-to-smart-contract-security-tools/)。 一开始是艰难的,但它是实现良好结果的最重要的活动。 这也是使用本教程中任何高级技术的先决条件。 -- 在 Solidity 中定义安全属性,用于 [Echidna](https://github.com/crytic/echidna) 和 [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html)。 重点是您的状态机、访问控制、算术运算、外部交互和标准一致性。 +- 在 Solidity 中定义安全属性,用于 [Echidna](https://github.com/crytic/echidna) 和 [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html)。 重点是你的状态机、访问控制、算术运算、外部交互和标准一致性。 - 使用 [ Slither 的 Python API](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) 定义安全属性。 重点是继承、变量依赖项、访问控制和其他结构问题。 -- 在每次提交时,使用 [Crytic](https://crytic.io) 运行您的属性测试。 Crytic 可以使用和评估安全属性测试,因此团队中的每个人都可以轻松地看到他们通过 GitHub。 测试失败会阻止提交。 +- 在每次提交时,使用 [Crytic](https://crytic.io) 运行你的属性测试。 Crytic 可以使用和评估安全属性测试,因此团队中的每个人都可以轻松地看到他们通过 GitHub。 测试失败会阻止提交。 最后,请注意自动化工具无法轻易找到的问题: -- 缺乏隐私:当您的事务在池中排队时,其他所有人都可以看到您的事务 +- 缺乏隐私:当你的事务在池中排队时,其他所有人都可以看到你的事务 - 抢先提前交易 - 加密操作 - 与外部 DeFi 组件的风险互动 ## 寻求帮助 {#ask-for-help} -[以太坊的办公时间](https://calendly.com/dan-trailofbits/ethereum-office-hours)为每周二下午。 这些 1 小时的 1 对 1 会议是一个机会,您可以向我们询问有关安全的任何问题,使用我们的工具进行故障排除,并获得专家对您当前方法的反馈。 我们将帮助您消化本指南。 +[以太坊的办公时间](https://calendly.com/dan-trailofbits/ethereum-office-hours)为每周二下午。 这些 1 小时的 1 对 1 会议是一个机会,你可以向我们询问有关安全的任何问题,使用我们的工具进行故障排除,并获得专家对你当前方法的反馈。 我们将帮助你消化本指南。 -加入我们的 Slack: [ Empire Hacking](https://join.slack.com/t/empirehacking/shared_invite/zt-h97bbrj8-1jwuiU33nnzg67JcvIciUw)。 如果您有任何问题,可以随时在 #crytic 和 #ethereum 频道上联系我们。 +加入我们的 Slack: [ Empire Hacking](https://join.slack.com/t/empirehacking/shared_invite/zt-h97bbrj8-1jwuiU33nnzg67JcvIciUw)。 如果你有任何问题,可以随时在 #crytic 和 #ethereum 频道上联系我们。 diff --git a/public/content/translations/zh/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md b/public/content/translations/zh/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md index 885c97821b5..6c3c84a6963 100644 --- a/public/content/translations/zh/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md +++ b/public/content/translations/zh/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md @@ -13,51 +13,56 @@ source: Alchemy 文档 sourceUrl: https://docs.alchemy.com/alchemy/tutorials/sending-txs --- -本文是面向初学者的指南,介绍如何用 Web3 发送以太坊交易。 向以太坊区块链发送交易主要有三个步骤:创建、签署和广播。 我们将对这三个方面进行讨论,希望能回答您可能遇到的所有问题! 在本教程中,我们将使用 [Alchemy](https://www.alchemy.com/) 将我们的交易发送到以太坊链。 可以[点击此处创建一个免费 Alchemy 帐户](https://auth.alchemyapi.io/signup)。 +本文是面向初学者的指南,介绍如何用 Web3 发送以太坊交易。 向以太坊区块链发送交易主要有三个步骤:创建、签署和广播。 我们将对这三个方面进行讨论,希望能回答你可能遇到的所有问题! 在本教程中,我们将使用 [Alchemy](https://www.alchemy.com/) 将我们的交易发送到以太坊链。 可以[点击此处创建一个免费 Alchemy 帐户](https://auth.alchemyapi.io/signup)。 -**注意:**本指南适用于在应用程序*后端*签署交易。 如果想在前端集成交易签署,请查看将 [Web3 与浏览器提供程序集成](https://docs.alchemy.com/reference/api-overview#with-a-browser-provider)。 +**注意:**本指南适用于在应用程序_后端_签署交易。 如果想在前端集成交易签署,请查看将 [Web3 与浏览器提供程序集成](https://docs.alchemy.com/reference/api-overview#with-a-browser-provider)。 ## 基本概念 {#the-basics} -像大多数区块链开发人员刚开始的时候一样,您可能已经对如何发送交易(应该非常简单)进行了一些研究,然后阅读了大量的指南,发现每个人有不同的解读,让您有点不知所措和困惑。 如果您已上了那条船,就不要担心,我们在某些时候都会这样! 所以,在开始之前,让我们弄清楚一些事情: +像大多数区块链开发人员刚开始的时候一样,你可能已经对如何发送交易(应该非常简单)进行了一些研究,然后阅读了大量的指南,发现每个人有不同的解读,让你有点不知所措和困惑。 如果你已上了那条船,就不要担心,我们在某些时候都会这样! 所以,在开始之前,让我们弄清楚一些事情: -### 1. Alchemy 不会存储您的私钥 {#alchemy-does-not-store-your-private-keys} +### 1. Alchemy 不会存储你的私钥 {#alchemy-does-not-store-your-private-keys} -- 这意味着 Alchemy 无法代表您签署和发送交易。 这样做的原因是出于安全考虑。 Alchemy 绝不会要求您分享您的私钥,您也绝不应该与托管节点(或任何人)分享您的私钥。 -- 您可以使用 Alchemy 的核心应用程序接口读取区块链,但要写入它,您需要使用其他方式签署交易然后通过 Alchemy 发送它们(任何其他[节点服务](/developers/docs/nodes-and-clients/nodes-as-a-service/)也是如此)。 +- 这意味着 Alchemy 无法代表你签署和发送交易。 这样做的原因是出于安全考虑。 Alchemy 绝不会要求你分享你的私钥,你也绝不应该与托管节点(或任何人)分享你的私钥。 +- 你可以使用 Alchemy 的核心应用程序接口读取区块链,但要写入它,你需要使用其他方式签署交易然后通过 Alchemy 发送它们(任何其他[节点服务](/developers/docs/nodes-and-clients/nodes-as-a-service/)也是如此)。 -### 2. 什么是 "签名者"? {#what-is-a-signer} +### 2. 什么是“签名者”? {#what-is-a-signer} -- 签名者将使用您的私钥为您签署交易。 在本教程中,我们将使用 [Alchemy Web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3) 签署我们的交易,但您也可以使用任何其他 Web3 库。 +- 签名者将使用你的私钥为你签署交易。 在本教程中,我们将使用 [Alchemy Web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3) 签署我们的交易,但你也可以使用任何其他 Web3 库。 - 在前端,一个很好的签名者示例是 [MetaMask](https://metamask.io/),它将代表你签署和发送交易。 ### 3. 为什么我需要在我的交易上签名? {#why-do-i-need-to-sign-my-transactions} - 每个想要在以太坊网络上发送交易的用户都必须在交易上签名(使用他们的私钥),以验证交易的来源是其所声称的那个人。 -- 保护这个私钥非常重要,因为拥有这个私钥就可以完全控制您的以太坊帐户,允许您(或任何有权限的人)代表您进行交易。 +- 保护这个私钥非常重要,因为拥有这个私钥就可以完全控制你的以太坊帐户,允许你(或任何有权限的人)代表你进行交易。 ### 4. 如何保护我的私钥? {#how-do-i-protect-my-private-key} -- 有许多方法来保护您的私钥,并使用它来发送交易。 在本教程中,我们将使用 `.env` 文件。 然而,你也可以使用一个单独的存储私钥的服务提供器,使用一个密钥库文件,或其他选项。 +- 有许多方法来保护你的私钥,并使用它来发送交易。 在本教程中,我们将使用 `.env` 文件。 然而,你也可以使用一个单独的存储私钥的服务提供器,使用一个密钥库文件,或其他选项。 ### 5. `eth_sendTransaction` 和 `eth_sendRawTransaction` 之间有什么区别? {#difference-between-send-and-send-raw} `eth_sendTransaction` 和 `eth_sendRawTransaction` 都是 Ethereum API 函数,用于将交易广播到 Ethereum 网络,以便将其添加到未来的区块中。 它们在处理交易签名的方式上有所不同。 -- [`eth_sendTransaction`](https://docs.web3js.org/api/web3-eth/function/sendTransaction) 用于发送*未签名的*交易,这意味着您发送到的节点必须管理您的私钥,以便它能够在将交易广播到链中之前对交易进行签名。 由于 Alchemy 没有用户私钥,因此他们不支持这种方法。 -- [`eth_sendRawTransaction`](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) 用于广播已经签名的交易。 这意味着您首先必须使用 [`signTransaction(tx, private_key)`](https://docs.web3js.org/api/web3-eth-accounts/function/signTransaction),然后将结果发送到 `eth_sendRawTransaction`。 +- [`eth_sendTransaction`](https://docs.web3js.org/api/web3-eth/function/sendTransaction) 用于发送_未签名的_交易,这意味着你向其发送交易的节点必须管理你的私钥,以便该节点能够在将交易广播到链上之前对交易进行签名。 由于 Alchemy 没有用户私钥,因此他们不支持这种方法。 +- [`eth_sendRawTransaction`](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) 用于广播已经签名的交易。 这意味着你首先必须使用 [`signTransaction(tx, private_key)`](https://docs.web3js.org/api/web3-eth-accounts/function/signTransaction),然后将结果发送到 `eth_sendRawTransaction`。 -当使用 web3 时,通过调用函数 [web3.eth.sendSignedTransaction](https://docs.web3js.org/api/web3-eth/function/sendSignedTransaction) 来访问`eth_sendRawTransaction`。 +当使用 web3 时,通过调用函数 [web3.eth.sendSignedTransaction](https://docs.web3js.org/api/web3-eth/function/sendSignedTransaction) 来访问 `eth_sendRawTransaction`。 这就是我们将在本教程中使用的函数。 ### 6. Web3 库是什么? {#what-is-the-web3-library} - Web3.js 是一个围绕标准 JSON-RPC 调用的封装库,在以太坊开发中使用相当普遍。 -- 有许多针对不同语言的 web3 库。 在本教程中,我们将使用 [Alchemy Web3](https://docs.alchemy.com/reference/api-overview),它用 JavaScript 编写。 您可以在[这里](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries)查看其他选项。 +- 有许多针对不同语言的 web3 库。 在本教程中,我们将使用 [Alchemy Web3](https://docs.alchemy.com/reference/api-overview),它用 JavaScript 编写。 你可以在[这里](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries)查看其他选项,例如 [ethers.js](https://docs.ethers.org/v5/)。 好了,现在我们把这些问题都解决了,让我们继续学习教程。 请随时在 Alchemy [discord](https://discord.gg/gWuC7zB) 中提问! +### 7. 如何发起安全、燃料优化且私密的交易? {how-to-send-secure-gas-optimized-and-private-transactions} + +- [Alchemy 有一套交易应用程序接口。](https://docs.alchemy.com/reference/transact-api-quickstart)。 你可以使用它们发起强化交易,在交易发生之前模拟交易,发起私密交易,和发起燃料优化交易。 +- 你也可以使用 [Notify 应用程序接口](https://docs.alchemy.com/docs/alchemy-notify)在你的交易被从内存池添加到链上时收到提醒。 + **注意:**本指南需要使用 Alchemy 帐户、以太坊地址或安装 MetaMask 钱包、NodeJs 和 npm。 如果没有,按以下步骤操作: 1. [创建一个免费的 Alchemy 帐户](https://auth.alchemyapi.io/signup) @@ -66,13 +71,13 @@ sourceUrl: https://docs.alchemy.com/alchemy/tutorials/sending-txs ## 发送交易的步骤 {#steps-to-sending-your-transaction} -### 1. 在 Rinkeby 测试网上创建一个 Alchemy 程序 {#create-an-alchemy-app-on-the-rinkeby-testnet} +### 1. 在 Sepolia 测试网上创建一个 Alchemy 应用程序 {#create-an-alchemy-app-on-the-sepolia-testnet} -导航到您的 [Alchemy 仪表板](https://dashboard.alchemyapi.io/)并创建一个新的应用程序,选择 Rinkeby(或任何其他测试网)作为您的网络。 +导航到你的 [Alchemy 仪表板](https://dashboard.alchemyapi.io/)并创建一个新的应用程序,选择 Sepolia(或任何其他测试网)作为你的网络。 -### 2. 从 Rinkeby faucet 请求 ETH {#request-eth-from-rinkeby-faucet} +### 2. 从 Sepolia 水龙头请求以太币 {#request-eth-from-sepolia-faucet} -按照 [Alchemy Rinkeby 水龙头](https://www.rinkebyfaucet.com/)相关说明接收以太币。 确保包含您的 **Rinkeby** 以太坊地址(来自 MetaMask)而不是其他网络。 按照说明操作后,请仔细检查您是否已在钱包中收到以太币。 +请参考 [Alchemy Sepolia](https://www.sepoliafaucet.com/) 的说明来接收以太币。 确保包含你的 **Sepolia** 以太坊地址(来自 MetaMask),而不是其他网络。 按照说明操作后,请仔细检查你是否已在钱包中收到以太币。 ### 3. 创建一个新的项目目录,并使用 `cd` 命令进入该目录。 {#create-a-new-project-direction} @@ -87,6 +92,8 @@ cd sendtx-example 在你的项目目录中运行以下命令,以安装 [Alchemy Web3](https://docs.alchemy.com/reference/api-overview): +注意,如果你想要使用 ethers.js 库, 请按照[这里](https://docs.alchemy.com/docs/how-to-send-transactions-on-ethereum)的说明操作。 + ``` npm install @alch/alchemy-web3 ``` @@ -101,10 +108,10 @@ npm install dotenv --save ### 6. 创建 `.env` 文件 {#create-the-dotenv-file} -在您的项目目录中创建一个 `.env` 文件并添加以下内容(替换”`your-api-url`“和”`your-private-key`“) +在你的项目目录中创建一个 `.env` 文件并添加以下内容(替换“`your-api-url`”和“`your-private-key`”) -- 要找到您的 Alchemy API URL,请导航到您刚刚在仪表板上创建的应用程序详细信息页面。 点击右上角的“查看密钥”,然后获取 HTTP URL。 -- 要使用 MetaMask 查找您的私钥,请查看此[指南](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key)。 +- 要找到你的 Alchemy 应用程序接口 URL,请导航到你刚刚在仪表板上创建的应用程序详细信息页面。点击右上角的“View Key”,然后获取 HTTP URL。 +- 要使用 MetaMask 查找你的私钥,请查看此[指南](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key)。 ``` API_URL = "your-api-url" @@ -112,14 +119,14 @@ PRIVATE_KEY = "your-private-key" ``` -不要提交 .env! 请确保永远不要与任何人共享或公开您的 .env 文件,因为这样做会泄露您的私钥。 如果您使用版本控制,请将您的 .env 添加到 gitignore 文件中。 +不要提交 .env! 请确保永远不要与任何人共享或公开你的 .env 文件,因为这样做会泄露你的私钥。 如果你使用版本控制,请将你的 .env 添加到 gitignore 文件中。 ### 7. 创建 `sendTx.js` 文件 {#create-sendtx-js} -太好了,既然我们已经在 `.env` 文件中保护了敏感数据,我们开始编码吧。 对于我们的发送交易示例,我们将把 ETH 发送回 Rinkeby faucet。 +太好了,既然我们已经在 `.env` 文件中保护了敏感数据,我们开始编码吧。 为了发起示例交易,我们将以太币发送回Sepolia 水龙头。 -创建一个 `sendTx.js` 文件,这是我们将配置和发送我们的示例交易的地方,并在文件中添加以下几行代码: +创建一个 `sendTx.js` 文件,我们将在其中配置和发送我们的示例交易,并在该文件中添加以下几行代码: ``` async function main() { @@ -153,46 +160,46 @@ async function main() { main(); ``` -确保将**第 6 行**中的地址替换为您自己的公共地址。 +确保将**第 6 行**中的地址替换为你自己的公共地址。 现在,在我们开始运行这段代码之前,我们先来谈谈其中的一些组件。 -- `nonce` : nonce 规范用于跟踪从您的地址发送的交易数量。 为了安全起见,我们需要这样做,以防止[重放攻击](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce)。 要获得从您的地址发送的交易数量,我们使用 [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount)。 -- `transaction`:交易对象有几个方面需要我们指定 - - `to`:这是我们要发送以太币的地址。 在此用例中,我们将以太币发送回我们最初请求的 [Rinkeby 水龙头](https://faucet.rinkeby.io/)。 +- `nonce`:nonce 规范用于跟踪从你的地址发送的交易数量。 为了安全起见,我们需要这样做,以防止[重放攻击](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce)。 要获得从你的地址发送的交易数量,我们可以使用 [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount)。 +- `transaction`:交易对象有几个方面需要我们指定。 + - `to`:这是我们要向其发送以太币的地址。 在这个示例中,我们将以太币发送回我们最初请求的 [Sepolia 水龙头](https://sepoliafaucet.com/)。 - `value`:这是我们希望发送的金额,以 Wei 为单位,其中 10^18 Wei = 1 个以太币 - - `gas`:有多种方法用来确定要包括在您的交易中的正确燃料数量。 Alchemy 甚至提供了一个[燃料价格 Web 钩子](https://docs.alchemyapi.io/guides/alchemy-notify#address-activity-1),用于当燃料价落在某个阈值范围内时通知您。 对于主网交易,最好查看[以太币燃料站](https://ethgasstation.info/)一类的燃料估算器,以确定要包括的正确燃料数量。 21000 是以太坊操作所使用的最小燃料数量,所以为了确保我们的交易得以执行,我们在这里输入 30000。 + - `gas`:有多种方法可确定要包括在你的交易中的正确燃料数量。 Alchemy 甚至提供了一个[燃料价格 Web 钩子](https://docs.alchemyapi.io/guides/alchemy-notify#address-activity-1),用于当燃料价落在某个阈值范围内时通知你。 对于主网交易,最好查看[以太坊燃料站](https://ethgasstation.info/)一类的燃料估算器,以确定要包括的正确燃料数量。 21000 是以太坊操作所使用的最小燃料数量,所以为了确保我们的交易得以执行,我们在这里输入 30000。 - `nonce`:参见上面的 nonce 定义。 Nonce 从零开始计数。 - - [OPTIONAL] 数据:用于在您的转账中发送附加信息或调用智能合约,余额转账不需要,请查看下面的注释。 + - [OPTIONAL] data:用于在你的转账中发送附加信息或调用智能合约,余额转账不需要此项,请查看下面的注释。 - `signedTx`:要签署交易对象,我们将使用 `signTransaction` 方法和我们的 `PRIVATE_KEY` - `sendSignedTransaction`:在我们有一个已签署交易后,我们可以通过使用 `sendSignedTransaction` 将其发送出去,以包含在后续区块中 **关于数据的注释** 有两种主要类型的交易可以在以太坊中发送。 -- 余额转账:将以太币从一个地址发送到另一个地址。 不需要数据字段,但是,如果您想在交易中发送附加信息,可以在此字段中包含 HEX 格式的信息。 +- 余额转账:将以太币从一个地址发送到另一个地址。 不需要数据字段,但是,如果你想在交易中发送附加信息,可以在此字段中包含 HEX 格式的信息。 - 例如,假设我们想将星际文件系统文档的哈希写入以太坊链,以便为其提供不可变的时间戳。 我们的数据字段应该看起来像该数据:`web3.utils.toHex('IPFS hash')`。 现在任何人都可以查询该链并查看该文档的添加时间。 -- 智能合约交易:在链上执行一些智能合约代码。 在这种情况下,数据字段应包含您希望执行的智能函数及任何参数。 +- 智能合约交易:在链上执行一些智能合约代码。 在这种情况下,数据字段应包含你希望执行的智能函数及任何参数。 - 有关实际示例,请查看此 [Hello World 教程](https://docs.alchemyapi.io/alchemy/tutorials/hello-world-smart-contract#step-8-create-the-transaction)中的第 8 步。 -### 8. 使用 `节点 sendTx.js` 运行代码 {#run-the-code-using-node-sendtx-js} +### 8. 使用 `node sendTx.js` 运行代码 {#run-the-code-using-node-sendtx-js} -返回到您的终端或命令行并运行: +返回到你的终端或命令行并运行: ``` node index.js ``` -### 9. 在内存池中查看您的交易 {#see-your-transaction-in-the-mempool} +### 9. 在内存池中查看你的交易 {#see-your-transaction-in-the-mempool} -在您的 Alchemy 仪表板上打开[内存池页面](https://dashboard.alchemyapi.io/mempool),并通过您创建的应用程序筛选,以找到您的交易。 我们可以在这里观看交易从待处理状态转换到已开采状态(如果成功),或者从待处理状态转换到被丢弃状态(如果失败)。 确保页面保持在“全部”视图下,这样您就能捕捉到“已开采”、“待处理”和“被丢弃”的交易。 您还可以通过查找发送到地址 `0x31b98d14007bdee637298086988a0bbd31184523` 的交易来搜索您的交易。 +在你的 Alchemy 仪表板上打开[内存池页面](https://dashboard.alchemyapi.io/mempool),并通过你创建的应用程序筛选,以找到你的交易。 我们可以在这里看到交易从待处理状态转换到已开采状态(如果成功),或者从待处理状态转换到被丢弃状态(如果失败)。 确保页面保持在“All”视图下,这样你就能捕捉到“已开采”、“待处理”和“被丢弃”的交易。 你还可以通过查找发送到地址 `0x31b98d14007bdee637298086988a0bbd31184523` 的交易来搜索你的交易。 -要在找到交易后查看交易的详细信息,请选择交易哈希值,您将看到这样的视图: +要在找到交易后查看交易的详细信息,请选择交易哈希值,你将看到这样的视图: ![内存池监视器截图](./mempool.png) -在此处,您可以通过单击红色圆圈中的图标,在 Etherscan 上查看您的交易! +在此处,你可以通过单击红色圆圈中的图标,在 Etherscan 上查看你的交易! -**太好了! 您刚刚使用 Alchemy 发送了您的第一笔以太坊交易 🎉** +**太好了! 你刚刚使用 Alchemy 发送了你的第一笔以太坊交易 🎉** _如有关于本指南的反馈和建议,请在 Alchemy 的 [Discord](https://discord.gg/A39JVCM) 上给 Elan 留言!_ diff --git a/public/content/translations/zh/developers/tutorials/waffle-test-simple-smart-contract/index.md b/public/content/translations/zh/developers/tutorials/waffle-test-simple-smart-contract/index.md index cd99b2f1dae..cb94430a192 100644 --- a/public/content/translations/zh/developers/tutorials/waffle-test-simple-smart-contract/index.md +++ b/public/content/translations/zh/developers/tutorials/waffle-test-simple-smart-contract/index.md @@ -12,7 +12,7 @@ lang: zh published: 2021-02-26 --- -## 在本教程中,您将学习如何: {#in-this-tutorial-youll-learn-how-to} +## 在本教程中,你将学习如何: {#in-this-tutorial-youll-learn-how-to} - 测试钱包余额的变化 - 利用指定参数测试事件的触发 @@ -20,18 +20,18 @@ published: 2021-02-26 ## 前提条件 {#assumptions} -- 您能够创建一个新的 JavaScript 或 TypeScript 项目 -- 您有一定的使用 JavaScript 来进行测试的基本经验 -- 您使用过一些包管理器,如 yarn 或 npm -- 您拥有关于智能合约和 Solidity 的非常基础的知识 +- 你能够创建一个新的 JavaScript 或 TypeScript 项目 +- 你有一定的使用 JavaScript 来进行测试的基本经验 +- 你使用过一些包管理器,如 yarn 或 npm +- 你拥有关于智能合约和 Solidity 的非常基础的知识 # 入门指南 {#getting-started} -该教程演示了如何使用 yarn 进行测试设置和运行,但如果您更喜欢使用 npm 也没有问题——我将为您提供官方 Waffle [文档](https://ethereum-waffle.readthedocs.io/en/latest/index.html)的参考链接。 +该教程演示了如何使用 yarn 进行测试设置和运行,但如果你更喜欢使用 npm 也没有问题——我将为你提供官方 Waffle [文档](https://ethereum-waffle.readthedocs.io/en/latest/index.html)的参考链接。 ## 安装依赖项 {#install-dependencies} -将 ethereum-waffle 和 typescript 依赖项[添加](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#installation)到您的项目的开发依赖项中。 +将 ethereum-waffle 和 typescript 依赖项[添加](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#installation)到你的项目的开发依赖项中。 ```bash yarn add --dev ethereum-waffle ts-node typescript @types/jest @@ -92,7 +92,7 @@ contract EtherSplitter { ## 测试设置 {#test-setup} -使用 Waffle 进行测试需要使用 Chai 匹配器和 Mocha,因此您需要将它们[添加](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)到您的项目中。 请更新您的 package.json 文件,在 scripts 部分添加 `test` 条目: +使用 Waffle 进行测试需要使用 Chai 匹配器和 Mocha,因此你需要将它们[添加](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)到你的项目中。 请更新你的 package.json 文件,在 scripts 部分添加 `test` 条目: ```json "scripts": { @@ -101,7 +101,7 @@ contract EtherSplitter { } ``` -如果您想要[执行](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#running-tests)您的测试,只需要运行 `yarn test`。 +如果你想要[执行](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#running-tests)你的测试,只需要运行 `yarn test`。 # 测试 {#testing} @@ -194,10 +194,10 @@ it("Reverts when Vei amount uneven", async () => { 如果测试通过,这将确保该交易确实已被回滚。 然而,在 `require` 语句中传递的消息和我们在 `revertedWith` 中期望的消息之间也必须完全匹配。 如果我们回到 EtherSplitter 合约的代码中,在关于 wei 数量的 `require` 语句中,我们提供了这样的信息:“Uneven wei amount not allowed”(不允许 wei 数量不均匀)。 这与我们在测试中期望的消息相匹配。 如果它们不相等,则测试将失败。 -# 恭喜您! {#congratulations} +# 恭喜你! {#congratulations} -您已经迈出了使用 Waffle 测试智能合约的第一步! 您可能对其它的 Waffle 教程感兴趣: +你已经迈出了使用 Waffle 测试智能合约的第一步! 你可能对其它的 Waffle 教程感兴趣: - [使用 Waffle 测试 ERC20](/developers/tutorials/testing-erc-20-tokens-with-waffle/) - [Waffle:动态模拟和测试合约调用](/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/#gatsby-focus-wrapper) -- [Waffle 使用 hardhat 和 ethers 设置 hello world 的教程](/developers/tutorials/waffle-say-hello-world-with-hardhat-and-ethers/) +- [Waffle使用hardhat和ethers设置hello world的教程](/developers/tutorials/waffle-hello-world-with-buidler-tutorial/) From 631fa047d28d91f4c76ba7bc1a6dcaf7316ea2c5 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:12:31 -0700 Subject: [PATCH 141/219] fix: markdown-checker results --- .../zh/developers/tutorials/erc20-with-safety-rails/index.md | 4 ++-- .../how-to-mock-solidity-contracts-for-testing/index.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md b/public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md index 19e218967f2..1383711e9c9 100644 --- a/public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md +++ b/public/content/translations/zh/developers/tutorials/erc20-with-safety-rails/index.md @@ -6,7 +6,7 @@ lang: zh tags: - "erc-20" skill: beginner -published: 2022年8月15日 +published: 2022-08-15 --- ## 简介 {#introduction} @@ -141,7 +141,7 @@ OpenZeppelin 提供两种机制来实现管理访问: 冻结和解冻合约需要几处更改: -- [](https://www.tutorialspoint.com/solidity/solidity_mappings.htm)从地址到[布尔值](https://en.wikipedia.org/wiki/Boolean_data_type)的映射来追踪哪些地址被冻结。 所有值的初始值都是 0,对于布尔值来说,它被解释为“false”。 这正是我们想要的,因为默认情况下帐户不会被冻结。 +- 从地址到[布尔值](https://en.wikipedia.org/wiki/Boolean_data_type)的[映射](https://www.tutorialspoint.com/solidity/solidity_mappings.htm)来追踪哪些地址被冻结。 所有值的初始值都是 0,对于布尔值来说,它被解释为“false”。 这正是我们想要的,因为默认情况下帐户不会被冻结。 ```solidity mapping(address => bool) public frozenAccounts; diff --git a/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md b/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md index 01d01f8fd24..e2a50a5108a 100644 --- a/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md +++ b/public/content/translations/zh/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md @@ -9,7 +9,7 @@ tags: - "测试" - "模拟" skill: intermediate -published: 2020年05月02日 +published: 2020-05-02 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/mocking-contracts --- From 7581f3a4a3fc6bcaa9561ffea38635faf0217769 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:27:45 -0700 Subject: [PATCH 142/219] chore: april zh-tw import --- .../translations/zh-tw/bridges/index.md | 32 +- .../content/translations/zh-tw/dao/index.md | 389 ++++++++++++------ .../zh-tw/decentralized-identity/index.md | 99 ++--- .../content/translations/zh-tw/defi/index.md | 53 +-- .../content/translations/zh-tw/desci/index.md | 57 ++- .../translations/zh-tw/governance/index.md | 9 +- .../content/translations/zh-tw/nft/index.md | 41 +- .../content/translations/zh-tw/refi/index.md | 14 +- .../translations/zh-tw/security/index.md | 220 +++++----- .../zh-tw/smart-contracts/index.md | 18 +- .../zh-tw/social-networks/index.md | 65 ++- .../translations/zh-tw/staking/pools/index.md | 6 +- .../translations/zh-tw/staking/saas/index.md | 7 +- .../translations/zh-tw/staking/solo/index.md | 8 +- .../content/translations/zh-tw/web3/index.md | 14 +- .../zh-tw/zero-knowledge-proofs/index.md | 158 +++---- src/intl/zh-tw/common.json | 35 +- src/intl/zh-tw/page-dapps.json | 15 +- src/intl/zh-tw/page-eth.json | 15 +- src/intl/zh-tw/page-gas.json | 10 +- src/intl/zh-tw/page-get-eth.json | 3 +- src/intl/zh-tw/page-layer-2.json | 18 +- src/intl/zh-tw/page-run-a-node.json | 6 - src/intl/zh-tw/page-stablecoins.json | 13 +- src/intl/zh-tw/page-staking.json | 16 +- src/intl/zh-tw/page-wallets-find-wallet.json | 35 +- src/intl/zh-tw/page-wallets.json | 21 +- src/intl/zh-tw/page-what-is-ethereum.json | 18 +- 28 files changed, 762 insertions(+), 633 deletions(-) diff --git a/public/content/translations/zh-tw/bridges/index.md b/public/content/translations/zh-tw/bridges/index.md index e25bc6c5781..5e17cd03c3c 100644 --- a/public/content/translations/zh-tw/bridges/index.md +++ b/public/content/translations/zh-tw/bridges/index.md @@ -6,32 +6,32 @@ lang: zh-tw # 區塊鏈跨鏈橋 {#prerequisites} -_Web 3 已發展成由一層和二層網路擴容解決方案組成的生態系統,每個解決方案都有獨特的功能和取捨。 隨著區塊鏈協定數量的增加,[跨鏈移動資產的需求也隨之增加](https://dune.xyz/eliasimos/Bridge-Away-(from-Ethereum))。 為了滿足此需求,我們需要跨鏈橋。_ +_Web 3 已發展成由一層和二層網路擴容解決方案組成的生態系統,每個解決方案都有獨特的功能和取捨。 As the number of blockchain protocols increases, so does the demand to move assets across chains. 為了滿足此需求,我們需要跨鏈橋。_ ## 什麼是跨鏈橋? {#what-are-bridges} -區塊鏈跨鏈橋的作用,與現實世界中的橋樑,功用是一樣的。 就像現實橋樑連接兩地一樣,跨鏈橋連接的是兩個區塊鏈生態系統。 跨鏈橋透過傳送資訊和資產,來促進區塊鏈之間的通訊。 +區塊鏈跨鏈橋的作用,與現實世界中的橋樑,功用是一樣的。 就像現實橋樑連接兩地一樣,跨鏈橋連接的是兩個區塊鏈生態系統。 **Bridges facilitate communication between blockchains through the transfer of information and assets**. 讓我們來看一個例子: 你來自美國,正計劃去歐洲旅行。 你有美元,但你需要歐元才能消費。 為了將你的美元兌換成歐元,你可以支付少量手續費來換匯。 -但如果想換用不同的區塊鏈,要怎麼做? 假設你想用以太坊主網上的以太幣兌換 [Arbitrum](https://arbitrum.io/) 上的以太幣。 就像我們為歐元進行貨幣換匯一樣,我們需要一種機制,將我們的以太幣從以太坊轉移到 Arbitrum。 跨鏈橋能實現這種交易。 在這個例子中,[Arbitrum 有一個原生的跨鏈橋](https://bridge.arbitrum.io/),可以將以太幣從以太坊主網轉移到 Arbitrum。 +But, what do you do if you want to make a similar exchange to use a different [blockchain](/glossary/#blockchain)? Let's say you want to exchange [ETH](/glossary/#ether) on Ethereum Mainnet for ETH on [Arbitrum](https://arbitrum.io/). 就像我們為歐元進行貨幣換匯一樣,我們需要一種機制,將我們的以太幣從以太坊轉移到 Arbitrum。 跨鏈橋能實現這種交易。 在這個例子中,[Arbitrum 有一個原生的跨鏈橋](https://bridge.arbitrum.io/),可以將以太幣從以太坊主網轉移到 Arbitrum。 ## 為什麼我們需要跨鏈橋? {#why-do-we-need-bridges} -所有區塊鏈都有局限性。 以太坊需要卷軸才能擴容及跟上需求。 或者,Solana 和 Avalanche 等一層網路,透過不同的設計來實現更高的吞吐量,但是犧牲了去中心化。 +所有區塊鏈都有局限性。 For Ethereum to scale and keep up with demand, it has required [rollups](/glossary/#rollups). 或者,Solana 和 Avalanche 等一層網路,透過不同的設計來實現更高的吞吐量,但是犧牲了去中心化。 -然而,所有的區塊鏈都是在獨立的環境中開發的,並具有不同的規則和共識機制。 這意味著其無法原生通訊,代幣也無法在區塊鏈之間自由移動。 +However, all blockchains develop in isolated environments and have different rules and [consensus](/glossary/#consensus) mechanisms. 這意味著其無法原生通訊,代幣也無法在區塊鏈之間自由移動。 跨鏈橋的存在就是為了連接區塊鏈,使彼此之間能傳送資訊和代幣。 -跨鏈橋能實現以下幾點: +**Bridges enable**: - 資產和資訊的跨鏈轉移。 -- 使去中心化應用程式能取得多種區塊鏈的優勢,因此增強區塊鏈的能力(因為協定現在在設計上有更多的創新空間)。 +- [dapps](/glossary/#dapp) to access the strengths of various blockchains – thus enhancing their capabilities (as protocols now have more design space for innovation). - 能讓使用者存取新的平台,並徹底善用不同區塊鏈的優勢。 - 能讓來自不同區塊鏈生態系統的開發者相互合作,並為使用者建立新平台。 @@ -57,7 +57,7 @@ _Web 3 已發展成由一層和二層網路擴容解決方案組成的生態系 ### 擁有原生加密資產 {#own-native} -假設你想擁有原生比特幣 (BTC),但你的資金只存在於以太坊主網上。 要在以太坊上獲得比特幣,你可以購買包裝比特幣 (WBTC)。 然而,WBTC 是以太坊網路原生的 ERC-20 代幣,這表示它是以太坊版本的比特幣,而不是比特幣區塊鏈上的原始資產。 要擁有原生比特幣,你必須使用跨鏈橋將資產從以太坊轉移到比特幣。 這將會橋接包裝比特幣並轉換為原生比特幣。 或者,你可能擁有比特幣,並希望在以太坊去中心化金融協定中使用它。 這將需要以另一種方式橋接,從比特幣到包裝比特幣,然後可將包裝比特幣作為以太坊上的資產。 +假設你想擁有原生比特幣 (BTC),但你的資金只存在於以太坊主網上。 要在以太坊上獲得比特幣,你可以購買包裝比特幣 (WBTC)。 However, WBTC is an [ERC-20](/glossary/#erc-20) token native to the Ethereum network, which means it’s an Ethereum version of Bitcoin and not the original asset on the Bitcoin blockchain. 要擁有原生比特幣,你必須使用跨鏈橋將資產從以太坊轉移到比特幣。 這將會橋接包裝比特幣並轉換為原生比特幣。 Alternatively, you might own BTC and want to use it in Ethereum [DeFi](/glossary/#defi) protocols. 這將需要以另一種方式橋接,從比特幣到包裝比特幣,然後可將包裝比特幣作為以太坊上的資產。 你也可以使用 中央化交易所 完成上述所有操作。 但是,除非你已有資金在交易所內,否則會涉及多個步驟,而你可能會覺得使用跨鏈橋比較好。 @@ -69,11 +69,11 @@ _Web 3 已發展成由一層和二層網路擴容解決方案組成的生態系 跨鏈橋具有許多不同的設計類型和複雜度。 通常,跨鏈橋分為兩類,即受信任和去信任跨鏈橋。 -| 受任跨鏈橋 | 去信任跨鏈橋 | -| -------------------------------------------- | ----------------------------- | -| 受信任跨鏈橋倚賴一個中心實體或系統來運作。 | 去信任跨鏈橋利用智慧型合約及演算法來運行。 | -| 在資金監管及跨鏈橋的安全性方面,具有許多信任假設。 使用者大多有賴於跨鏈橋運營商的聲譽。 | 屬於去信任,即跨鏈橋的安全性與底層區塊鏈的安全性相同。 | -| 使用者需放棄對其加密資產的控制。 | 透過智慧型合約,去信任跨鏈橋讓使用者能繼續控制他們的資金。 | +| 受任跨鏈橋 | 去信任跨鏈橋 | +| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| 受信任跨鏈橋倚賴一個中心實體或系統來運作。 | 去信任跨鏈橋利用智慧型合約及演算法來運行。 | +| 在資金監管及跨鏈橋的安全性方面,具有許多信任假設。 使用者大多有賴於跨鏈橋運營商的聲譽。 | 屬於去信任,即跨鏈橋的安全性與底層區塊鏈的安全性相同。 | +| 使用者需放棄對其加密資產的控制。 | Through [smart contracts](/glossary/#smart-contract), trustless bridges enable users to remain in control of their funds. | 簡而言之,我們可以說受信任跨鏈橋具有信任假設,去信任跨鏈橋則是將信任最小化,不必在底層領域之外做出新的信任假設。 這些術語可做這樣的解釋: @@ -126,9 +126,3 @@ _Web 3 已發展成由一層和二層網路擴容解決方案組成的生態系 - [EIP-5164:跨鏈執行](https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658) _2022 年 6 月 18 日 - Brendan Asselstine_ - [二層網路跨鏈橋風險框架](https://gov.l2beat.com/t/l2bridge-risk-framework/31) _2022 年 7 月 5 日 - Bartek Kiepuszewski_ - [「為什麼未來會多鏈並存但不是跨鏈」](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) _2022 年 1 月 8 日 - Vitalik Buterin_ -- [什麼是區塊鏈跨鏈橋?如何予以分類?](https://blog.li.finance/what-are-blockchain-bridges-and-how-can-we-classify-them-560dc6ec05fa) _2021 年 2 月 18 日 - Arjun Chand_ -- [什麼是跨鏈橋?](https://www.alchemy.com/overviews/cross-chain-bridges) _2020 年 5 月 10 日 - Alchemy_ -- [區塊鏈跨鏈橋:建立加密網路的網路](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) _2021 年 9 月 8 日 - Dmitriy Berenzon_ -- [加密貨幣領域的跨鏈橋](https://medium.com/chainsafe-systems/bridges-in-crypto-space-12e158f5fd1e) _2021 年 8 月 23 日 - Ben Adar Hyman_ -- [互操作性的三難困境](https://medium.com/connext/the-interoperability-trilemma-657c2cf69f17) _2021 年 10 月 1 日 - Arjun Bhuptani_ -- [保護跨鏈橋:正確完成跨鏈通訊](https://medium.com/dragonfly-research/secure-the-bridge-cross-chain-communication-done-right-part-i-993f76ffed5d) _2021 年 8 月 23 日 - Celia Wan_ diff --git a/public/content/translations/zh-tw/dao/index.md b/public/content/translations/zh-tw/dao/index.md index eced44cfeb8..bfd97e5872b 100644 --- a/public/content/translations/zh-tw/dao/index.md +++ b/public/content/translations/zh-tw/dao/index.md @@ -14,11 +14,11 @@ summaryPoint3: 一個將資產投入特定事業的安全場所。 ## 什麼是去中心化自治組織 {#what-are-daos} -去中心化自治組織為一種集體擁有、由區塊鏈治理,並致力於一個共同使命的組織。 +去中心化自治組織為一種集體擁有,並致力於共同使命的組織。 去中心化自治組織使我們不需信任一個良善的領導者來管理資金或經營,便能與世界各地志趣相投的人們共事。 沒有執行長能夠衝動使用資金,也沒有財務長可以作假帳。 取而代之的是,由基於區塊鏈上程式碼所制定的規則來定義組織如何運作以及如何使用資金。 -組織擁有自己的資金庫,未經團體核准,任何人都無權使用。 每項決策都是經由提案和投票來治理,並確保每位組織成員都能發聲,且任何事都是上鏈且透明的。 +組織擁有自己的資金庫,未經團體核准,任何人都無權使用。 每項決策都是經由提案和投票來治理,並確保每位組織成員都能發聲,且任何事都是[上鏈](/glossary/#on-chain)且透明的。 ## 為何我們需要去中心化自治組織? {#why-dao} @@ -40,126 +40,265 @@ summaryPoint3: 一個將資產投入特定事業的安全場所。 為了幫助你了解,以下略舉幾個去中心化自治組織的使用範例: -- 慈善機構 – 你可以接受來自全世界任何人的捐款,並投票決定資助的事業。 -- 共同擁有權 – 你可以購買實體或虛擬資產,且組織成員可以對如何使用資產進行投票。 -- 風險投資和捐款 – 你可以成立風險基金,透過該基金匯集投資資本並投票進行商業投資。 後續收益可以分配給相應的去中心化自治組織成員。 - -## 去中心化自治組織如何運作? {#how-daos-work} - -去中心化自治組織背後的運作架構為其智慧型合約,智慧型合約定義組織的規則,並對該團體的資金庫進行規範。 一旦在以太坊上部署合約,除非投票通過,否則不能修改規則。 任何不符合程式碼規則和邏輯的行為都會失效。 由於資金庫也是以智慧型合約定義,因此任何人都無法不經團體核准而挪用資金。 這意味著去中心化自治組織不需要中心化管理機構。 相反地,團體會共同做出決定,而付款會在投票通過之後自動獲得授權。 - -之所以能夠做到這一點,是因為智慧型合約一旦部署於以太坊,就無法被篡改。 一切都是公開的,只要有人修改程式碼(去中心化自治組織的規則)就會被發現。 - - - 進一步了解智慧型合約 - - -## 以太坊與去中心化自治組織 {#ethereum-and-daos} - -以太坊為去中心化自治組織提供了極佳的基礎,原因如下: - -- 以太坊本身的共識足夠分散,同時建立已久,足以讓組織信任其網路。 -- 智慧型合約程式碼部署後便無法修改,即使是所有人亦然。 這使得去中心化自治組織可以完全按照程式設定的規則運作。 -- 智慧型合約可以發送/接收資金。 如果少了這點,你就需要可信的中間人來管理團體的資金。 -- 事實證明,比起競爭,以太坊社群更趨向合作,使得最佳做法和支援系統得以快速發展。 - -## 去中心化自治組織的治理 {#dao-governance} - -管理去中心化自治組織時有許多考量,例如投票及提案該如何運作。 - -### 授權 {#governance-delegation} - -授權類似去中心化自治組織版本的代議民主。 代幣持有者向自我提名、並承諾管理協議且掌握最新消息的使用者分配選票。 - -#### 知名案例 {#governance-example} - -[以太坊名稱服務](https://claim.ens.domains/delegate-ranking) — 以太坊名稱服務持有者可將其選票分配給積極代表他們參與活動的社群成員。 - -### 自動交易治理 {#governance-example} - -在許多去中心化自治組織中,如達規定人數的成員投予同意,交易將被自動執行。 - -#### 知名案例 {#governance-example} - -[Nouns](https://nouns.wtf) – Nouns DAO 中,如票數達規定數量且大多數票投予同意,只要不被創辦人所否決,一筆交易會自動被執行。 - -### 多簽治理 {#governance-example} - -雖然去中心化治理組織可有上千名的投票成員,資金可存在於一個由 5-20 名被信任且通常資訊公開(由社群所知的公開身份)的活躍社群成員所共享的錢包中。 投票後,多簽簽署人會執行社群的意願。 - -## 去中心化自治組織相關法律 {#dao-laws} - -1977 年,懷俄明州創造了有限責任公司制度以保護創業家並限定其責任。 更近期,懷俄明州首創去中心化自治組織相關法律,給予去中心化自治組織法律地位。 目前懷俄明州、佛蒙特州,以及維京群島皆某種程度上具去中心化自治組織相關法律。 - -### 知名案例 {#law-example} - -[CityDAO](https://citydao.io)——CityDAO 透過懷俄明州去中心化自治組織的相關法律購買了黃石國家公園附近 40 英畝的地。 - -## 去中心化自治組織成員 {#dao-membership} - -成為去中心化自治組織的成員有多個模式。 成員可以決定投票方式和去中心化自治組織的其他重要事務。 - -### 代幣型成員 {#token-based-membership} - -取決於使用的代幣,通常完全開放。 這類治理代幣大部分都能在去中心化交易所自由地交易。 只有少部分必須透過提供流動性或其他某些「工作量證明」來賺取。 無論是哪一種方式,只要持有代幣就能獲得投票權。 - -_通常用於治理廣泛的去中心化協定及/或代幣本身。_ - -#### 知名案例 {#token-example} - -[MakerDAO](https://makerdao.com)——MakerDAO 的代幣 MKR 在去中心化交易所普遍可得,且任何人皆可買進投票權來決定 Maker 協議的未來。 - -### 股份型成員 {#share-based-membership} - -股份型去中心化自治組織擁有更多權力,但仍然相當公開。 任何潛在的會員都可以申請加入去中心化自治組織,通常會以代幣或工作的形式提供有價值的貢獻。 股份直接代表投票權及所有權。 成員可以隨時帶著自己所佔的股份退出。 - -_通常用於關係較為緊密、以人為中心的組織,例如慈善機構、勞工團體、投資組織等, 也可以治理協定及代幣。_ - -#### 知名案例 {#share-example} - -[MolochDAO](http://molochdao.com/) – MolochDAO 專注於資助以太坊計畫。 想加入為成員必須提出申請,以便團體評估你是否具備必要的專業知識和資金來對潛在的受資助者作出明智判斷。 你無法直接在公開市場購買加入該去中心化自治組織的權限。 - -### 信譽型成員 {#reputation-based-membership} - -信譽代表參與證明,並能授予去中心化自治組織的投票權。 不同於代幣型或股份型成員,信譽型去中心化自治組織不會將所有權轉讓給貢獻者。 信譽不能購買、移轉或授權;去中心化自治組織成員必須透過參與來獲得信譽。 鏈上投票是開放式的,潛在成員可以自由提出加入去中心化自治組織的申請,並要求獲得信譽和代幣作為貢獻的獎勵。 - -_通常用於協定和去中心化應用程式的去中心化開發及治理,但也非常適合各種組織,如慈善機構、勞工團體、投資俱樂部等。_ - -#### 知名案例 {#reputation-example} - -[DXdao](https://DXdao.eth.link) – DXdao 是一個全球主權聯合組織,自 2019 年以來一直致力於建構與治理去中心化協定和應用程式。 它利用信譽型治理和全局共識來協調和管理資金,這意味著沒有人可以透過收購來影響其未來。 - -## 參與/建立去中心化自治組織 {#join-start-a-dao} - -### 參與去中心化自治組織 {#join-a-dao} - -- [以太坊社群去中心化自治組織](/community/get-involved/#decentralized-autonomous-organizations-daos) -- [DAOHaus 的去中心化自治組織清單](https://app.daohaus.club/explore) -- [Tally.xyz 的去中心化自治組織清單](https://www.tally.xyz) - -### 建立去中心化自治組織 {#start-a-dao} - -- [使用 DAOHaus 建立去中心化自治組織](https://app.daohaus.club/summon) -- [使用 Tally 建立一個治理者型去中心化自治組織](https://www.tally.xyz/add-a-dao) -- [建立由 Aragon 支援的去中心化自治組織](https://aragon.org/product) -- [建立 colony](https://colony.io/) -- [使用 DAOstack 全局共識建立去中心化自治組織](https://alchemy.daostack.io/daos/create) - -## 延伸閱讀 {#further-reading} - -### 去中心化自治組織相關文章 {#dao-articles} - -- [什麼是去中心化自治組織?](https://aragon.org/dao)– [Aragon](https://aragon.org/) -- [去中心化自治組織手冊](https://daohandbook.xyz) -- [去中心化自治組織之家](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [Metagame](https://wiki.metagame.wtf/) -- [何謂去中心化自治組織?它有何用途?](https://daohaus.substack.com/p/-what-is-a-dao-and-what-is-it-for)– [DAOhaus](https://daohaus.club/) -- [如何創立由去中心化自治組織支援的數位社群](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) -- [什麼是去中心化自治組織?](https://coinmarketcap.com/alexandria/article/what-is-a-dao)– [Coinmarketcap](https://coinmarketcap.com) -- [什麼是全局共識?](https://medium.com/daostack/holographic-consensus-part-1-116a73ba1e1c)- [DAOstack](https://daostack.io/) -- [Vitalik,《去中心化自治組織並非法人團體:去中心化在自治組織裡的重要之處》](https://vitalik.eth.limo/general/2022/09/20/daos.html) -- [去中心化自治組織、去中心化自治公司、去中心化應用程式等:不完整術語指引](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [以太坊部落格](https://blog.ethereum.org) - -### 影片 {#videos} - -- [什麼是加密貨幣世界的去中心化自治組織?](https://youtu.be/KHm0uUPqmVE) -- [一個去中心化自治組織是否能建立一座城市?](https://www.ted.com/talks/scott_fitsimones_could_a_dao_build_the_next_great_city)– [TED](https://www.ted.com/) +- **慈善機構** – 您可以接受來自全世界任何人的捐款,並投票決定資助的事業。 +- **共同擁有權** – 您可以購買實體或虛擬資產,且組織成員可以對如何使用資產進行投票。 +- **風險投資和捐款** – 您可以成立風險基金,透過該基金匯集投資資本並投票進行商業投資。 後續收益可以分配給相應的去中心化自治組織成員。 + +