From 3dffe9333e278027ad1eda0eb1581a9b2bde0064 Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 03:32:29 +0200 Subject: [PATCH 1/9] :hammer: Fix broken links --- client/src/gamedata/authors.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/gamedata/authors.json b/client/src/gamedata/authors.json index 278763b83..36bf9808a 100644 --- a/client/src/gamedata/authors.json +++ b/client/src/gamedata/authors.json @@ -43,7 +43,7 @@ "kyle@iosiro.com" ], "websites": [ - "https://github.com/syncikin" + "https://github.com/kylriley" ] }, "34x4p08": { @@ -54,7 +54,7 @@ "34x4p08@gmail.com" ], "websites": [ - "https://github.com/34x4p08" + "https://github.com/chainpioneer" ] }, "0age": { From 174916703c5e83c7b51308e377d275d4b1eb86e7 Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 04:35:47 +0200 Subject: [PATCH 2/9] :heavy_plus_sign: Adding unique html title pages --- client/package.json | 1 + client/src/containers/Help.js | 4 ++++ client/src/containers/Leaderboard.js | 4 ++++ client/src/containers/Level.js | 4 ++++ yarn.lock | 22 +++++++++++++++++++++- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 6e6c83d7d..926034c32 100644 --- a/client/package.json +++ b/client/package.json @@ -25,6 +25,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-ga": "^3.3.0", + "react-helmet": "^6.1.0", "react-markdown": "^8.0.0", "react-onclickoutside": "^6.12.2", "react-paginate": "^8.1.4", diff --git a/client/src/containers/Help.js b/client/src/containers/Help.js index 53c9f48d1..0e7bf21fe 100644 --- a/client/src/containers/Help.js +++ b/client/src/containers/Help.js @@ -4,6 +4,7 @@ import { bindActionCreators } from "redux"; import MarkdownComponent from "../components/common/Markdown"; import { loadTranslations } from "../utils/translations"; import Footer from "../components/common/Footer"; +import { Helmet } from 'react-helmet'; class Help extends React.Component { render() { @@ -12,6 +13,9 @@ class Help extends React.Component { return (
+ + The Ethernaut - Help +

Setup Metamask

diff --git a/client/src/containers/Leaderboard.js b/client/src/containers/Leaderboard.js index 53b0b1f86..61453dee7 100644 --- a/client/src/containers/Leaderboard.js +++ b/client/src/containers/Leaderboard.js @@ -9,6 +9,7 @@ import { NETWORKS } from "client/src/constants"; import Footer from "../components/common/Footer"; import axios from "axios"; import { ALIAS_PATH, getLeaderboardPath } from "client/src/constants"; +import { Helmet } from 'react-helmet'; const playersPerPage = 20; @@ -123,6 +124,9 @@ function Leaderboard() { return (
+ + The Ethernaut - Leaderboard +
Leaderboard
diff --git a/client/src/containers/Level.js b/client/src/containers/Level.js index ab3bdce0e..fd776cb64 100644 --- a/client/src/containers/Level.js +++ b/client/src/containers/Level.js @@ -14,6 +14,7 @@ import { withRouter } from "../hoc/withRouter"; import { getLevelKey } from "../utils/contractutil"; import { deployAndRegisterLevel } from "../utils/deploycontract"; import { svgFilter } from "../utils/svg"; +import { Helmet } from 'react-helmet'; class Level extends React.Component { constructor(props) { @@ -151,6 +152,9 @@ class Level extends React.Component { return (
+ + {`The Ethernaut - ${level.name}`} +
{(isDescriptionMissingTranslation || isCompleteDescriptionMissingTranslation) && ( diff --git a/yarn.lock b/yarn.lock index 57b41cd2a..e46d9aaed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12421,7 +12421,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15, prop-types@^15.0.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15, prop-types@^15.0.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -12680,11 +12680,26 @@ react-error-overlay@^6.0.9: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== +react-fast-compare@^3.1.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== + react-ga@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.1.tgz#d8e1f4e05ec55ed6ff944dcb14b99011dfaf9504" integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== +react-helmet@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" + integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== + dependencies: + object-assign "^4.1.1" + prop-types "^15.7.2" + react-fast-compare "^3.1.1" + react-side-effect "^2.1.0" + react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -12860,6 +12875,11 @@ react-scripts@^4.0.3: optionalDependencies: fsevents "^2.1.3" +react-side-effect@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" + integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== + react-sidebar@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/react-sidebar/-/react-sidebar-3.0.2.tgz#cf695b5a78098e70460c847fb0c6c81cfd896c37" From 4b7080f03af51ee146b78e11b33cf5c6e3b8e561 Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 04:40:07 +0200 Subject: [PATCH 3/9] :scissors: shorten metadescription --- client/public/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/public/index.html b/client/public/index.html index 1510cf937..fc1456450 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -14,20 +14,20 @@ The Ethernaut - + - + - + From 2f34dd376e54a0b1ed39ca838c817990f0993c89 Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 04:48:08 +0200 Subject: [PATCH 4/9] :scissors: Remove title from meta description --- client/public/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/public/index.html b/client/public/index.html index fc1456450..62d32ecb3 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -14,20 +14,20 @@ The Ethernaut - + - + - + From 2a0f16328c07e077220236bc82e8917ce3ed338e Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 06:12:16 +0200 Subject: [PATCH 5/9] :hammer: Address pages with duplicate meta description --- client/public/index.html | 62 +++++++--------- .../src/components/not-found/NotFound404.js | 39 +++++++++- client/src/containers/App.js | 72 +++++++++++++++---- client/src/containers/Help.js | 36 +++++++++- client/src/containers/Leaderboard.js | 35 ++++++++- client/src/containers/Level.js | 35 ++++++++- client/src/containers/Stats.js | 37 ++++++++++ 7 files changed, 263 insertions(+), 53 deletions(-) diff --git a/client/public/index.html b/client/public/index.html index 62d32ecb3..39efd6aa8 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -1,43 +1,35 @@ - + - + - - - - - - - Ethernaut - - - The Ethernaut - - - - - - - - - - - - - - - - - + + + + + +
- - - - - - + + + + + + diff --git a/client/src/components/not-found/NotFound404.js b/client/src/components/not-found/NotFound404.js index 0e464f10f..8ebc73513 100644 --- a/client/src/components/not-found/NotFound404.js +++ b/client/src/components/not-found/NotFound404.js @@ -3,8 +3,9 @@ import { connect } from "react-redux"; import { bindActionCreators } from "redux"; import { loadTranslations } from "../../utils/translations"; import { randBadIcon } from "../../utils/^^"; -import "../../styles/app.css" +import "../../styles/app.css"; import Footer from "../common/Footer"; +import { Helmet } from "react-helmet"; class NotFound404 extends React.Component { render() { @@ -13,6 +14,42 @@ class NotFound404 extends React.Component { return (
+ + The Ethernaut - Not Found 404 + {/* */} + + + {/* */} + + + + + + {/* */} + + + + + +

{randBadIcon()}

diff --git a/client/src/containers/App.js b/client/src/containers/App.js index bb0f09634..a82bee309 100644 --- a/client/src/containers/App.js +++ b/client/src/containers/App.js @@ -14,8 +14,10 @@ import { networkOnDeprecationOrDeprecated, isDeprecatedNetwork, deprecationStatus, - deprecationDate + deprecationDate, } from "../utils/networkDeprecation"; +import { Helmet } from "react-helmet"; + class App extends React.Component { constructor() { @@ -122,6 +124,42 @@ class App extends React.Component { return (
+ + The Ethernaut + {/* */} + + + {/* */} + + + + + + {/* */} + + + + + + {/* Parent container */}
{/* Main title and buttons */} @@ -175,7 +213,9 @@ class App extends React.Component { {/*deprecation window*/}

{randBadIcon()}

- {isDeprecatedNetwork(this.state.chainId)? strings.deprecatedNetwork : strings.networkBeingDeprecated} + {isDeprecatedNetwork(this.state.chainId) + ? strings.deprecatedNetwork + : strings.networkBeingDeprecated}


{strings.deployMessage} @@ -184,11 +224,11 @@ class App extends React.Component { - {!isDeprecatedNetwork(this.state.chainId) && + {!isDeprecatedNetwork(this.state.chainId) && ( - } + )}
)} @@ -223,16 +263,20 @@ function mapDispatchToProps(dispatch) { function supportedNetworksList(_supportedNetworks) { return ( -
    - {_supportedNetworks.map((network, idx) => ( -
  • - {network} - {networkOnDeprecationOrDeprecated(constants.NETWORKS[network].id) - && " (" + deprecationStatus(constants.NETWORKS[network].id) + - " on " + deprecationDate(constants.NETWORKS[network].id) + ")"} -
  • - ))} -
) +
    + {_supportedNetworks.map((network, idx) => ( +
  • + {network} + {networkOnDeprecationOrDeprecated(constants.NETWORKS[network].id) && + " (" + + deprecationStatus(constants.NETWORKS[network].id) + + " on " + + deprecationDate(constants.NETWORKS[network].id) + + ")"} +
  • + ))} +
+ ); } export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App)); diff --git a/client/src/containers/Help.js b/client/src/containers/Help.js index 0e7bf21fe..a5e2a676c 100644 --- a/client/src/containers/Help.js +++ b/client/src/containers/Help.js @@ -13,9 +13,43 @@ class Help extends React.Component { return (
- + The Ethernaut - Help + {/* */} + + + {/* */} + + + + + + {/* */} + + + + + +

Setup Metamask

diff --git a/client/src/containers/Leaderboard.js b/client/src/containers/Leaderboard.js index 61453dee7..dde059975 100644 --- a/client/src/containers/Leaderboard.js +++ b/client/src/containers/Leaderboard.js @@ -9,7 +9,7 @@ import { NETWORKS } from "client/src/constants"; import Footer from "../components/common/Footer"; import axios from "axios"; import { ALIAS_PATH, getLeaderboardPath } from "client/src/constants"; -import { Helmet } from 'react-helmet'; +import { Helmet } from "react-helmet"; const playersPerPage = 20; @@ -126,6 +126,39 @@ function Leaderboard() {
The Ethernaut - Leaderboard + {/* */} + + + {/* */} + + + + + + {/* */} + + + + +
diff --git a/client/src/containers/Level.js b/client/src/containers/Level.js index fd776cb64..55f37049d 100644 --- a/client/src/containers/Level.js +++ b/client/src/containers/Level.js @@ -153,7 +153,40 @@ class Level extends React.Component { return (
- {`The Ethernaut - ${level.name}`} + {`The Ethernaut - ${level.name}`} + {/* */} + + + {/* */} + + + + + + {/* */} + + + + +
{(isDescriptionMissingTranslation || diff --git a/client/src/containers/Stats.js b/client/src/containers/Stats.js index 47f318047..e012a9109 100644 --- a/client/src/containers/Stats.js +++ b/client/src/containers/Stats.js @@ -8,6 +8,7 @@ import { validateAddress } from '../utils/ethutil' import Statistic from '../components/stats/Statistic'; import StatisticPanel from '../components/stats/Panel'; import Footer from "../components/common/Footer"; +import { Helmet } from 'react-helmet'; class Stats extends React.Component { @@ -103,6 +104,42 @@ class Stats extends React.Component { render() { return
+ + The Ethernaut - Statistics + {/* */} + + + {/* */} + + + + + + {/* */} + + + + + +
From f03432dfd84cd99148d574d6e2c56f6b98c719c2 Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 06:18:54 +0200 Subject: [PATCH 6/9] :hammer: Fix images custom alt text --- client/src/containers/Level.js | 2 +- client/src/containers/Mosaic.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/containers/Level.js b/client/src/containers/Level.js index 55f37049d..104a2a037 100644 --- a/client/src/containers/Level.js +++ b/client/src/containers/Level.js @@ -238,7 +238,7 @@ class Level extends React.Component {
diff --git a/client/src/containers/Mosaic.js b/client/src/containers/Mosaic.js index 7f35efa1e..c49babc4d 100644 --- a/client/src/containers/Mosaic.js +++ b/client/src/containers/Mosaic.js @@ -33,7 +33,7 @@ class Mosaic extends React.Component { } >
- + {`${level.name}
{`${level.completed ? ' ✔' : ''}`}{' '} {level.name} From 0e3df3240d2662982d0641a1d16349ff0b06e552 Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 16:56:30 +0200 Subject: [PATCH 7/9] :hammer: Make your link anchor text more descriptive level 13 --- client/src/gamedata/en/descriptions/levels/gatekeeper1.md | 2 +- client/src/gamedata/es/descriptions/levels/gatekeeper1.md | 2 +- client/src/gamedata/fr/descriptions/levels/gatekeeper1.md | 2 +- client/src/gamedata/ja/descriptions/levels/gatekeeper1.md | 2 +- client/src/gamedata/pt_br/descriptions/levels/gatekeeper1.md | 2 +- client/src/gamedata/zh_cn/descriptions/levels/gatekeeper1.md | 2 +- client/src/gamedata/zh_tw/descriptions/levels/gatekeeper1.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/gamedata/en/descriptions/levels/gatekeeper1.md b/client/src/gamedata/en/descriptions/levels/gatekeeper1.md index 68e521bb2..b07de9e54 100644 --- a/client/src/gamedata/en/descriptions/levels/gatekeeper1.md +++ b/client/src/gamedata/en/descriptions/levels/gatekeeper1.md @@ -2,4 +2,4 @@ Make it past the gatekeeper and register as an entrant to pass this level. ##### Things that might help: * Remember what you've learned from the Telephone and Token levels. -* You can learn more about the special function `gasleft()`, in Solidity's documentation (see [here](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) and [here](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). +* You can learn more about the special function `gasleft()`, in Solidity's documentation (see [Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) and [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). diff --git a/client/src/gamedata/es/descriptions/levels/gatekeeper1.md b/client/src/gamedata/es/descriptions/levels/gatekeeper1.md index ea1a35634..150c9bffe 100644 --- a/client/src/gamedata/es/descriptions/levels/gatekeeper1.md +++ b/client/src/gamedata/es/descriptions/levels/gatekeeper1.md @@ -2,4 +2,4 @@ Pase el gatekeeper y regístrate como entrant para pasar este nivel. ##### Cosas que pueden ayudar: * Recuerda lo que has aprendido en los niveles de Telephone y Token. -* Puedes obtener más información sobre la función especial `gasleft()`, en la documentación de Solidity (consulta [aquí](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) y [aquí](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file +* Puedes obtener más información sobre la función especial `gasleft()`, en la documentación de Solidity (consulta [Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) y [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file diff --git a/client/src/gamedata/fr/descriptions/levels/gatekeeper1.md b/client/src/gamedata/fr/descriptions/levels/gatekeeper1.md index f292bbc74..ea6ba8000 100644 --- a/client/src/gamedata/fr/descriptions/levels/gatekeeper1.md +++ b/client/src/gamedata/fr/descriptions/levels/gatekeeper1.md @@ -2,4 +2,4 @@ Passez le gardien (Gatekeeper) et inscrivez-vous en tant que participant (entran ##### Voici quelques conseils: * * Rappelez-vous ce que vous avez appris des niveaux Téléphone et Token. -* Vous pouvez en savoir plus sur la fonction spéciale `gasleft()`, dans la documentation de Solidity (voir [ici](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) et [ici](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file +* Vous pouvez en savoir plus sur la fonction spéciale `gasleft()`, dans la documentation de Solidity (voir [Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) et [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file diff --git a/client/src/gamedata/ja/descriptions/levels/gatekeeper1.md b/client/src/gamedata/ja/descriptions/levels/gatekeeper1.md index 124de2c7e..ad542bcd6 100644 --- a/client/src/gamedata/ja/descriptions/levels/gatekeeper1.md +++ b/client/src/gamedata/ja/descriptions/levels/gatekeeper1.md @@ -3,4 +3,4 @@ このレベルのヒント。 - Telephone と Token のレベルで学んだことを思い出してください。 -- 特殊関数`gasleft()`については、Solidity のドキュメント([ここ](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html)や[ここ](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)を参照)で詳しく説明されています。 +- 特殊関数`gasleft()`については、Solidity のドキュメント([Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html)や[External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)を参照)で詳しく説明されています。 diff --git a/client/src/gamedata/pt_br/descriptions/levels/gatekeeper1.md b/client/src/gamedata/pt_br/descriptions/levels/gatekeeper1.md index 13a4fe4d2..69e450467 100644 --- a/client/src/gamedata/pt_br/descriptions/levels/gatekeeper1.md +++ b/client/src/gamedata/pt_br/descriptions/levels/gatekeeper1.md @@ -2,4 +2,4 @@ Passe pelo porteiro e registre-se como um participante para passar deste nível. Coisas que podem ser úteis: * Lembre-se do que você aprendeu nos níveis `Telephone` e `Token`. -* Você pode aprender mais sobre a função especial `gasleft()` na documentação da Solidity (veja [aqui](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) e [aqui](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file +* Você pode aprender mais sobre a função especial `gasleft()` na documentação da Solidity (veja [Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) e [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file diff --git a/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper1.md b/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper1.md index e2a52853c..1f13d6411 100644 --- a/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper1.md +++ b/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper1.md @@ -2,4 +2,4 @@ ##### 这可能有帮助: * 想一想你在 Telephone 和 Token 关卡学到的知识. -* 你可以在 solidity 文档中更深入的了解 `gasleft()` 函数 (参见 [here](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) 和 [here](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). +* 你可以在 solidity 文档中更深入的了解 `gasleft()` 函数 (参见 [Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) 和 [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). diff --git a/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper1.md b/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper1.md index e365886bd..38b8f8d22 100644 --- a/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper1.md +++ b/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper1.md @@ -3,4 +3,4 @@   可能會有用的資訊 * 回憶一下你在 Telephone 和 Token 關卡學到了什麼 -* 可以去翻翻 Solidity 文件,更深入的了解一下 `gasleft()` 函式的資訊 (參見 [這裡](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) 和 [這裡](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file +* 可以去翻翻 Solidity 文件,更深入的了解一下 `gasleft()` 函式的資訊 (參見 [Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) 和 [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). \ No newline at end of file From e3462e2dbfae9aed0e98cf5d24ec88abf4278b91 Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 16:57:35 +0200 Subject: [PATCH 8/9] :point_up: Make sure each page has exactly one H1 tag --- client/src/containers/App.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/containers/App.js b/client/src/containers/App.js index a82bee309..7f089c227 100644 --- a/client/src/containers/App.js +++ b/client/src/containers/App.js @@ -193,7 +193,7 @@ class App extends React.Component {
{/*deploy window*/}

{randGoodIcon()}

-

{strings.deployMessageTitle}

+

{strings.deployMessageTitle}


{strings.deployMessage} {supportedNetworksList(supportedNetworks)} @@ -212,11 +212,11 @@ class App extends React.Component {
{/*deprecation window*/}

{randBadIcon()}

-

+

{isDeprecatedNetwork(this.state.chainId) ? strings.deprecatedNetwork : strings.networkBeingDeprecated} -

+
{strings.deployMessage} {supportedNetworksList(supportedNetworks)} From 617aedab11f22ac91fe0b6306ddef628aad976da Mon Sep 17 00:00:00 2001 From: GianfrancoBazzani Date: Wed, 17 Jul 2024 17:11:41 +0200 Subject: [PATCH 9/9] :hammer: Make your link anchor text more descriptive level 14 --- client/src/gamedata/en/descriptions/levels/gatekeeper2.md | 4 ++-- client/src/gamedata/es/descriptions/levels/gatekeeper2.md | 4 ++-- client/src/gamedata/fr/descriptions/levels/gatekeeper2.md | 4 ++-- client/src/gamedata/ja/descriptions/levels/gatekeeper2.md | 4 ++-- client/src/gamedata/pt_br/descriptions/levels/gatekeeper2.md | 4 ++-- client/src/gamedata/zh_cn/descriptions/levels/gatekeeper2.md | 4 ++-- client/src/gamedata/zh_tw/descriptions/levels/gatekeeper2.md | 4 ++-- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/client/src/gamedata/en/descriptions/levels/gatekeeper2.md b/client/src/gamedata/en/descriptions/levels/gatekeeper2.md index 5f7acfc64..b8e514076 100644 --- a/client/src/gamedata/en/descriptions/levels/gatekeeper2.md +++ b/client/src/gamedata/en/descriptions/levels/gatekeeper2.md @@ -2,5 +2,5 @@ This gatekeeper introduces a few new challenges. Register as an entrant to pass ##### Things that might help: * Remember what you've learned from getting past the first gatekeeper - the first gate is the same. -* The `assembly` keyword in the second gate allows a contract to access functionality that is not native to vanilla Solidity. See [here](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) for more information. The `extcodesize` call in this gate will get the size of a contract's code at a given address - you can learn more about how and when this is set in section 7 of the [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). -* The `^` character in the third gate is a bitwise operation (XOR), and is used here to apply another common bitwise operation (see [here](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). The Coin Flip level is also a good place to start when approaching this challenge. \ No newline at end of file +* The `assembly` keyword in the second gate allows a contract to access functionality that is not native to vanilla Solidity. See [Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) for more information. The `extcodesize` call in this gate will get the size of a contract's code at a given address - you can learn more about how and when this is set in section 7 of the [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). +* The `^` character in the third gate is a bitwise operation (XOR), and is used here to apply another common bitwise operation (see [Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). The Coin Flip level is also a good place to start when approaching this challenge. \ No newline at end of file diff --git a/client/src/gamedata/es/descriptions/levels/gatekeeper2.md b/client/src/gamedata/es/descriptions/levels/gatekeeper2.md index 080e0f5eb..aa3a722cc 100644 --- a/client/src/gamedata/es/descriptions/levels/gatekeeper2.md +++ b/client/src/gamedata/es/descriptions/levels/gatekeeper2.md @@ -2,5 +2,5 @@ Este gatekeeper presenta algunos desafíos nuevos. Regístrate como entrant para ##### Cosas que pueden ayudar: * Recuerda lo que has aprendido al pasar el primer gatekeeper: el primer gate es el mismo. -* La palabra clave `assembly` en el segundo gatekeeper permite que un contrato acceda a una funcionalidad que no es nativa de Solidity. Consulta [aquí](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) para obtener más información. La llamada `extcodesize` en este gate obtendrá el tamaño del código de un contrato en una dirección determinada; puedes obtener más información sobre cómo y cuándo se setea en la sección 7 del [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). -* El carácter `^` en el tercer gate es una operación bit a bit (XOR), y se usa aquí para aplicar otra operación bit a bit común (ver [aquí](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). El nivel CoinFlip también es un buen lugar para comenzar al tratar este desafío. \ No newline at end of file +* La palabra clave `assembly` en el segundo gatekeeper permite que un contrato acceda a una funcionalidad que no es nativa de Solidity. Consulta [Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) para obtener más información. La llamada `extcodesize` en este gate obtendrá el tamaño del código de un contrato en una dirección determinada; puedes obtener más información sobre cómo y cuándo se setea en la sección 7 del [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). +* El carácter `^` en el tercer gate es una operación bit a bit (XOR), y se usa aquí para aplicar otra operación bit a bit común (ver [Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). El nivel CoinFlip también es un buen lugar para comenzar al tratar este desafío. \ No newline at end of file diff --git a/client/src/gamedata/fr/descriptions/levels/gatekeeper2.md b/client/src/gamedata/fr/descriptions/levels/gatekeeper2.md index 3aede31ce..dba9090c5 100644 --- a/client/src/gamedata/fr/descriptions/levels/gatekeeper2.md +++ b/client/src/gamedata/fr/descriptions/levels/gatekeeper2.md @@ -2,5 +2,5 @@ Ce gatekeeper introduit quelques nouveaux défis. Inscrivez-vous en tant que par ##### Voici quelques conseils: * Rappelez-vous ce que vous avez appris en franchissant le premier gardien (Gatekeeper) - la première porte (gate) est la même. -* Le mot clé `assembly` dans la deuxième porte permet à un contrat d'accéder à des fonctionnalités qui ne sont pas natives de Solidity. Voir [ici](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) pour plus d'informations. L'appel `extcodesize` dans cette porte obtiendra la taille du code d'un contrat à une adresse donnée - vous pouvez en savoir plus sur comment et quand cela est défini dans la section 7 du [papier jaune](https://ethereum.github.io/yellowpaper/paper.pdf). -* Le caractère `^` dans la troisième porte est une opération bitwise (XOR), et est utilisé ici pour appliquer une autre opération bitwise commune (voir [ici](http://solidity.readthedocs.io/en/v0.4.23/ miscellaneous.html#cheatsheet)). Le niveau Coin Flip est également un bon point de départ pour aborder ce défi. \ No newline at end of file +* Le mot clé `assembly` dans la deuxième porte permet à un contrat d'accéder à des fonctionnalités qui ne sont pas natives de Solidity. Voir [Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) pour plus d'informations. L'appel `extcodesize` dans cette porte obtiendra la taille du code d'un contrat à une adresse donnée - vous pouvez en savoir plus sur comment et quand cela est défini dans la section 7 du [papier jaune](https://ethereum.github.io/yellowpaper/paper.pdf). +* Le caractère `^` dans la troisième porte est une opération bitwise (XOR), et est utilisé ici pour appliquer une autre opération bitwise commune (voir [Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). Le niveau Coin Flip est également un bon point de départ pour aborder ce défi. \ No newline at end of file diff --git a/client/src/gamedata/ja/descriptions/levels/gatekeeper2.md b/client/src/gamedata/ja/descriptions/levels/gatekeeper2.md index 12d14733f..365731b61 100644 --- a/client/src/gamedata/ja/descriptions/levels/gatekeeper2.md +++ b/client/src/gamedata/ja/descriptions/levels/gatekeeper2.md @@ -3,5 +3,5 @@ このレベルのヒント: - 最初のゲートキーパーを通過したときに学んだことを思い出してください。 -- 第 2 のゲートの`assembly`キーワードは、コントラクトが vanilla Solidity のネイティブではない機能にアクセスすることを可能にします。詳しくは[こちら](http://solidity.readthedocs.io/en/v0.4.23/assembly.html)をご覧ください。このゲートの`extcodesize`コールは、与えられたアドレスにおけるコントラクトのコードのサイズを取得します。これがいつどのように設定されるかについては、[イエローペーパー](https://ethereum.github.io/yellowpaper/paper.pdf)のセクション 7 で詳しく知ることができます。 -- 3 番目のゲートの`^`文字はビット演算(XOR)で、ここでは別の一般的なビット演算を適用するために使用されています([こちら](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)を参照)。この課題に取り組む際には、「Coin Flip」レベルから始めるのも良いでしょう。 +- 第 2 のゲートの`assembly`キーワードは、コントラクトが vanilla Solidity のネイティブではない機能にアクセスすることを可能にします。詳しくは[Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html)をご覧ください。このゲートの`extcodesize`コールは、与えられたアドレスにおけるコントラクトのコードのサイズを取得します。これがいつどのように設定されるかについては、[イエローペーパー](https://ethereum.github.io/yellowpaper/paper.pdf)のセクション 7 で詳しく知ることができます。 +- 3 番目のゲートの`^`文字はビット演算(XOR)で、ここでは別の一般的なビット演算を適用するために使用されています([Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)を参照)。この課題に取り組む際には、「Coin Flip」レベルから始めるのも良いでしょう。 diff --git a/client/src/gamedata/pt_br/descriptions/levels/gatekeeper2.md b/client/src/gamedata/pt_br/descriptions/levels/gatekeeper2.md index 1746e4732..a197eec0a 100644 --- a/client/src/gamedata/pt_br/descriptions/levels/gatekeeper2.md +++ b/client/src/gamedata/pt_br/descriptions/levels/gatekeeper2.md @@ -2,5 +2,5 @@ Este porteiro apresenta alguns novos desafios. Registre-se como um participante Coisas que podem ser úteis: * Lembre-se do que você aprendeu ao passar pelo primeiro porteiro - o primeiro portão é o mesmo. -* A palavra-chave `assembly` no segundo portão permite que um contrato acesse uma funcionalidade que não é nativa da Solidity básica. Consulte [aqui](https://docs.soliditylang.org/en/latest/assembly.html) para obter mais informações. A chamada `extcodesize` neste portão retornará o tamanho do código de um contrato em um determinado endereço - você pode aprender mais sobre como e quando isso é definido na seção 7 do [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). -* O caractere `^` no terceiro portão é uma operação bit a bit (XOR) e é usado aqui para aplicar outra operação bit a bit comum (consulte [aqui](https://docs.soliditylang.org/en/latest/cheatsheet.html)). O nível `Coin Flip` também é um bom lugar para começar ao abordar esse desafio. \ No newline at end of file +* A palavra-chave `assembly` no segundo portão permite que um contrato acesse uma funcionalidade que não é nativa da Solidity básica. Consulte [Solidity Assembly](https://docs.soliditylang.org/en/latest/assembly.html) para obter mais informações. A chamada `extcodesize` neste portão retornará o tamanho do código de um contrato em um determinado endereço - você pode aprender mais sobre como e quando isso é definido na seção 7 do [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). +* O caractere `^` no terceiro portão é uma operação bit a bit (XOR) e é usado aqui para aplicar outra operação bit a bit comum (consulte [Solidity cheatsheet](https://docs.soliditylang.org/en/latest/cheatsheet.html)). O nível `Coin Flip` também é um bom lugar para começar ao abordar esse desafio. \ No newline at end of file diff --git a/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper2.md b/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper2.md index a67513d2a..9b393eaf5 100644 --- a/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper2.md +++ b/client/src/gamedata/zh_cn/descriptions/levels/gatekeeper2.md @@ -2,5 +2,5 @@ ##### 这可能有帮助: * 想一想你从上一个守门人那学到了什么. -* 第二个门中的 `assembly` 关键词可以让一个合约访问非原生的 vanilla solidity 功能. 参见 [here](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) . `extcodesize` 函数可以用来得到给定地址合约的代码长度 - 你可以在这个页面学习到更多 [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). -* `^` 符号在第三个门里是位操作 (XOR), 在这里是代表另一个常见的位操作 (参见 [here](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). Coin Flip 关卡也是一个很好的参考. +* 第二个门中的 `assembly` 关键词可以让一个合约访问非原生的 vanilla solidity 功能. 参见 [Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) . `extcodesize` 函数可以用来得到给定地址合约的代码长度 - 你可以在这个页面学习到更多 [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf). +* `^` 符号在第三个门里是位操作 (XOR), 在这里是代表另一个常见的位操作 (参见 [Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). Coin Flip 关卡也是一个很好的参考. diff --git a/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper2.md b/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper2.md index 44cd4442b..2a636e869 100644 --- a/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper2.md +++ b/client/src/gamedata/zh_tw/descriptions/levels/gatekeeper2.md @@ -3,5 +3,5 @@   可能會有用的資訊 * 回想一下你從上一個守衛那學到了什麽,第一道門是一樣的 -* 第二道門的 `assembly` 關鍵字可以讓合約去存取 Solidity 非原生的功能。參見 [這裡](http://solidity.readthedocs.io/en/v0.4.23/assembly.html)。在這道門的 `extcodesize` 函式,可以用來得到給定地址的合約程式碼長度,你可以在 [黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf) 的第七章學到更多相關的資訊。 -* `^` 字元在第三個門裡是位元運算 (XOR),在這裡是為了應用另一個常見的位元運算手段 (參見 [這裡](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet))。Coin Flip 關卡也是一個想要破這關很好的參考資料。 \ No newline at end of file +* 第二道門的 `assembly` 關鍵字可以讓合約去存取 Solidity 非原生的功能。參見 [Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html)。在這道門的 `extcodesize` 函式,可以用來得到給定地址的合約程式碼長度,你可以在 [黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf) 的第七章學到更多相關的資訊。 +* `^` 字元在第三個門裡是位元運算 (XOR),在這裡是為了應用另一個常見的位元運算手段 (參見 [Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet))。Coin Flip 關卡也是一個想要破這關很好的參考資料。 \ No newline at end of file