diff --git a/client/src/containers/Header.js b/client/src/containers/Header.js index 31b2605d4..26409355a 100644 --- a/client/src/containers/Header.js +++ b/client/src/containers/Header.js @@ -242,6 +242,7 @@ class Header extends React.Component { tr: strings.turkish, uk: strings.ukrainian, ko: strings.korean, + hu: strings.hungarian, }; const ddOpen = Boolean(this.state.multiDDOpen); diff --git a/client/src/gamedata/hu/descriptions/levels/coinflip.md b/client/src/gamedata/hu/descriptions/levels/coinflip.md new file mode 100644 index 000000000..00903e347 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/coinflip.md @@ -0,0 +1,5 @@ +Ez egy pénzfeldobós játék, ahol feldobási sorozatot kell építened azáltal, hogy kitalálod a pénzfeldobás eredményét. A szint befejezéséhez pszichikai képességeidet kell használnod, hogy 10-szer egymás után kitaláld a helyes eredményt. + +  +Dolgok, amelyek segíthetnek +* Lásd a ["?"](https://ethernaut.openzeppelin.com/help) oldalt fent a jobb felső sarokban a menüben, "A konzolon túl" szekció diff --git a/client/src/gamedata/hu/descriptions/levels/coinflip_complete.md b/client/src/gamedata/hu/descriptions/levels/coinflip_complete.md new file mode 100644 index 000000000..cd943db50 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/coinflip_complete.md @@ -0,0 +1,6 @@ +Véletlen számok generálása Solidity-ben trükkös lehet. Jelenleg nincs natív módja a generálásuknak, és minden, amit az okosszerződésekben használsz, nyilvánosan látható, beleértve a lokális változókat és az privátként megjelölt állapotváltozókat is. A bányászok szintén kontrollálják az olyan dolgokat, mint a blokkhashe-k, időbélyegek és azt, hogy bizonyos tranzakciókat belevennek-e - ami lehetővé teszi számukra, hogy ezeket az értékeket a javukra hajlítsák. + +Kriptográfiailag bizonyított véletlen számok beszerzéséhez használhatod a [Chainlink VRF](https://docs.chain.link/docs/get-a-random-number)-et, amely egy orákulum-ot, a LINK tokent és egy on-chain szerződést használ annak ellenőrzésére, hogy a szám valóban véletlen. + +Néhány egyéb lehetőség közé tartozik a Bitcoin blokk fejlécek használata ([BTC Relay](http://btcrelay.org)-n keresztül ellenőrizve), [RANDAO](https://github.com/randao/randao), vagy [Oraclize](http://www.oraclize.it/)). + diff --git a/client/src/gamedata/hu/descriptions/levels/delegate.md b/client/src/gamedata/hu/descriptions/levels/delegate.md new file mode 100644 index 000000000..aad662438 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/delegate.md @@ -0,0 +1,7 @@ +Ennek a szintnek a célja, hogy megszerezd a kapott példány tulajdonjogát. + +  +Dolgok, amelyek segíthetnek +* Nézd meg a Solidity dokumentációját a `delegatecall` alacsony szintű függvényről, hogyan működik, hogyan használható műveleteknek on-chain könyvtárakhoz való delegálására, és milyen következményei vannak a végrehajtási hatókörre. +* Fallback metódusok +* Metódus azonosítók diff --git a/client/src/gamedata/hu/descriptions/levels/delegate_complete.md b/client/src/gamedata/hu/descriptions/levels/delegate_complete.md new file mode 100644 index 000000000..ecdfbec51 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/delegate_complete.md @@ -0,0 +1,5 @@ +A `delegatecall` használata különösen kockázatos, és több történelmi hackben támadási vektorként használták. Ezzel a szerződésed gyakorlatilag azt mondja: "itt van, -másik szerződés- vagy -másik könyvtár-, csinálj amit akarsz az állapotommal". A delegáltaknak teljes hozzáférésük van a szerződésed állapotához. A `delegatecall` függvény egy erőteljes funkció, de veszélyes, és rendkívüli óvatossággal kell használni. + + +Kérlek nézd meg [A Parity Wallet Hack magyarázata](https://blog.openzeppelin.com/on-the-parity-wallet-multisig-hack-405a8c12e8f7) cikket egy pontos magyarázatért, hogyan használták ezt az ötletet 30 millió USD ellopására. + diff --git a/client/src/gamedata/hu/descriptions/levels/elevator.md b/client/src/gamedata/hu/descriptions/levels/elevator.md new file mode 100644 index 000000000..55f8bfa34 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/elevator.md @@ -0,0 +1,5 @@ +Ez a lift nem fogja hagyni, hogy elérd az épületed tetejét. Ugye? + +##### Dolgok, amelyek segíthetnek: +* Néha a Solidity nem jó az ígéretek betartásában. +* Ez az `Elevator` elvárja, hogy egy `Building`-ből használják. diff --git a/client/src/gamedata/hu/descriptions/levels/elevator_complete.md b/client/src/gamedata/hu/descriptions/levels/elevator_complete.md new file mode 100644 index 000000000..cad0c262e --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/elevator_complete.md @@ -0,0 +1,4 @@ +Használhatod a `view` függvény módosítót egy interfészen, hogy megakadályozd az állapot módosításokat. A `pure` módosító szintén megakadályozza a függvényeket az állapot módosításában. +Győződj meg róla, hogy elolvasod a [Solidity dokumentációját](http://solidity.readthedocs.io/en/develop/contracts.html#view-functions) és megtanulod a buktatóit. + +Egy alternatív módja ennek a szintnek a megoldására egy olyan view függvény építése, amely különböző eredményeket ad vissza a bemeneti adatoktól függően, de nem módosítja az állapotot, pl. `gasleft()`. diff --git a/client/src/gamedata/hu/descriptions/levels/fallback.md b/client/src/gamedata/hu/descriptions/levels/fallback.md new file mode 100644 index 000000000..556c904ae --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/fallback.md @@ -0,0 +1,12 @@ +Nézd meg figyelmesen a szerződés kódját lent. + +Akkor nyered meg ezt a szintet, ha +1) megszerezed a szerződés tulajdonjogát +2) csökkented az egyenlegét 0-ra + +  +Dolgok, amelyek segíthetnek +* Hogyan küldjünk ethert az ABI-val való interakció során +* Hogyan küldjünk ethert az ABI-n kívül +* Wei/ether egységek közötti konverzió (lásd a `help()` parancsot) +* Fallback metódusok diff --git a/client/src/gamedata/hu/descriptions/levels/fallback_complete.md b/client/src/gamedata/hu/descriptions/levels/fallback_complete.md new file mode 100644 index 000000000..beaa492bc --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/fallback_complete.md @@ -0,0 +1,5 @@ +Tudod az alapokat arról, hogyan megy be és ki az ether a szerződésekből, beleértve a fallback metódus használatát is. + +Megtanultad az OpenZeppelin Ownable szerződését is, és hogy hogyan használható bizonyos metódusok használatának korlátozására egy kiváltságos címre. + +Lépj tovább a következő szintre, amikor készen állsz! diff --git a/client/src/gamedata/hu/descriptions/levels/fallout.md b/client/src/gamedata/hu/descriptions/levels/fallout.md new file mode 100644 index 000000000..d4146db45 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/fallout.md @@ -0,0 +1,5 @@ +Szerezd meg a lenti szerződés tulajdonjogát a szint befejezéséhez. + +  +Dolgok, amelyek segíthetnek +* Solidity Remix IDE diff --git a/client/src/gamedata/hu/descriptions/levels/fallout_complete.md b/client/src/gamedata/hu/descriptions/levels/fallout_complete.md new file mode 100644 index 000000000..1608c24cb --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/fallout_complete.md @@ -0,0 +1,15 @@ +Ez elég buta volt, nem? A valós világbeli szerződéseknek sokkal biztonságosabbnak kell lenniük ennél, és sokkal nehezebbnek kell lennie őket feltörni, igaz? + +Nos... Nem egészen. + +A Rubixi története egy nagyon ismert eset az Ethereum ökoszisztémában. A cég megváltoztatta a nevét 'Dynamic Pyramid'-ről 'Rubixi'-re, de valahogy nem nevezték át a szerződésük konstruktor metódusát: + +``` +contract Rubixi { + address private owner; + function DynamicPyramid() { owner = msg.sender; } + function collectAllFees() { owner.transfer(this.balance) } + ... +``` + +Ez lehetővé tette a támadónak, hogy meghívja a régi konstruktort és megszerezze a szerződés tulajdonjogát, valamint ellopjon néhány pénzeszközt. Igen. Nagy hibák követhetők el az okosszerződések világában. diff --git a/client/src/gamedata/hu/descriptions/levels/force.md b/client/src/gamedata/hu/descriptions/levels/force.md new file mode 100644 index 000000000..aeb61107f --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/force.md @@ -0,0 +1,9 @@ +Néhány szerződés egyszerűen nem fogadja el a pénzed `¯\_(ツ)_/¯` + +Ennek a szintnek a célja, hogy a szerződés egyenlege nagyobb legyen, mint nulla. + +  +Dolgok, amelyek segíthetnek: +* Fallback metódusok +* Néha a legjobb módja egy szerződés megtámadásának egy másik szerződéssel történik. +* Lásd a ["?"](https://ethernaut.openzeppelin.com/help) oldalt fent, "A konzolon túl" szekció diff --git a/client/src/gamedata/hu/descriptions/levels/force_complete.md b/client/src/gamedata/hu/descriptions/levels/force_complete.md new file mode 100644 index 000000000..6604bac58 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/force_complete.md @@ -0,0 +1,4 @@ +A Solidity-ben, hogy egy szerződés tudjon ethert fogadni, a fallback függvényt `payable`-ként kell megjelölni. + +Azonban nincs módja megakadályozni, hogy egy támadó ethert küldjön egy szerződésnek önmegsemmisítéssel. Ezért fontos, hogy ne számíts az `address(this).balance == 0` invariánsra semmilyen szerződési logikában. + diff --git a/client/src/gamedata/hu/descriptions/levels/gatekeeper1.md b/client/src/gamedata/hu/descriptions/levels/gatekeeper1.md new file mode 100644 index 000000000..b30265824 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/gatekeeper1.md @@ -0,0 +1,6 @@ +Juttatd túl a kapuőrt és regisztrálj belépőként a szint teljesítéséhez. + +##### Dolgok, amelyek segíthetnek: +* Emlékezz arra, amit a Telephone és Token szinteken tanultál. +* Többet tanulhatsz a speciális `gasleft()` függvényről a Solidity dokumentációjában (lásd [Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) és [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)). + diff --git a/client/src/gamedata/hu/descriptions/levels/gatekeeper1_complete.md b/client/src/gamedata/hu/descriptions/levels/gatekeeper1_complete.md new file mode 100644 index 000000000..0e86e70a1 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/gatekeeper1_complete.md @@ -0,0 +1 @@ +Szép munka! Most próbálkozz a második kapuőrrel... diff --git a/client/src/gamedata/hu/descriptions/levels/gatekeeper2.md b/client/src/gamedata/hu/descriptions/levels/gatekeeper2.md new file mode 100644 index 000000000..1a76fd6b0 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/gatekeeper2.md @@ -0,0 +1,6 @@ +Ez a kapuőr néhány új kihívást vezet be. Regisztrálj belépőként a szint teljesítéséhez. + +##### Dolgok, amelyek segíthetnek: +* Emlékezz arra, amit tanultál az első kapuőr megkerüléséből - az első kapu ugyanaz. +* Az `assembly` kulcsszó a második kapuban lehetővé teszi egy szerződésnek, hogy hozzáférjen olyan funkcionalitáshoz, amely nem natív a vanilla Solidity-ben. Lásd [Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) további információkért. Az `extcodesize` hívás ebben a kapuban megkapja egy szerződés kódjának méretét egy adott címen - többet tanulhatsz arról, hogyan és mikor van ez beállítva a [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf) 7. szakaszában. +* A `^` karakter a harmadik kapuban egy bitwise művelet (XOR), és itt használják egy másik gyakori bitwise művelet alkalmazására (lásd [Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)). A Coin Flip szint szintén jó kiindulópont ennek a kihívásnak a megközelítésekor. diff --git a/client/src/gamedata/hu/descriptions/levels/gatekeeper2_complete.md b/client/src/gamedata/hu/descriptions/levels/gatekeeper2_complete.md new file mode 100644 index 000000000..38c7897d2 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/gatekeeper2_complete.md @@ -0,0 +1 @@ +Remek munka! Most, hogy túljutottál a kapuőrön, megvan benned, ami kell a [theCyber](https://etherscan.io/address/thecyber.eth#code)-hez való csatlakozáshoz, egy decentralizált klub az Ethereum mainnet-en. Szerezz egy jelmondatot a készítő megkeresésével [reddit](https://www.reddit.com/user/0age)-en vagy [email](mailto:0age@protonmail.com)-en keresztül, és használd azt a regisztrációhoz a szerződésnél a [gatekeepertwo.thecyber.eth](https://etherscan.io/address/gatekeepertwo.thecyber.eth#code) címen (vedd figyelembe, hogy csak az első 128 belépőt fogadja el a szerződés). diff --git a/client/src/gamedata/hu/descriptions/levels/instances.md b/client/src/gamedata/hu/descriptions/levels/instances.md new file mode 100644 index 000000000..198a587ff --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/instances.md @@ -0,0 +1,69 @@ +Ez a szint végigvezet a játék alapjain. + +  +#### 1. MetaMask beállítása +Ha még nincs meg, telepítsd a [MetaMask böngésző bővítményt](https://metamask.io/) (Chrome-ban, Firefox-ban, Brave-ben vagy Opera-ban asztali gépeden). +Állítsd be a bővítmény tárcáját és használd a hálózat választót, hogy a preferált hálózatra mutathasson a bővítmény felületének bal felső sarkában. Alternatívaként használhatod a UI gombot a hálózatok közötti váltáshoz. Ha nem támogatott hálózatot választasz, a játék értesít és elvisz az alapértelmezett Sepolia testnet-re. + +#### 2. Nyisd meg a böngésző konzolját +Nyisd meg a böngésző konzolját: `Eszközök > Fejlesztői eszközök`. + +Látnod kell néhány üzenetet a játéktól. Az egyiknek ki kellene írnia a játékos címedet. Ez fontos lesz a játék során! Mindig megnézheted a játékos címedet a következő paranccsal: + +`player` + +Figyelj az figyelmeztetésekre és hibákra, mert fontos információkat nyújthatnak a játékmenet során. + +#### 3. Használd a konzol segédprogramokat + +Az aktuális ether egyenlegedet is megnézheted beírva: + +`getBalance(player)` + +###### MEGJEGYZÉS: Bontsd ki a promise-t, hogy lásd a valódi értéket, még ha "pending"-et ír is. Ha Chrome v62-t használsz, használhatod az `await getBalance(player)` parancsot tisztább konzol élményért. + +Nagyszerű! Hogy lásd, milyen más hasznos függvényeid vannak a konzolon, írd be: + +`help()` + +Ezek szuper hasznosak lesznek a játékmenet során. + +#### 4. Az ethernaut szerződés +Add meg a következő parancsot a konzolon: + +`ethernaut` + +Ez a játék fő okosszerződése. Nem kell közvetlenül interakcióba lépned vele a konzolon keresztül (mivel ezt az alkalmazás megteszi helyetted), de megteheted, ha szeretnéd. Az objektummal való játszadozás most nagyszerű módja annak, hogy megtanuld, hogyan lépj interakcióba a játék többi okosszerződésével. + +Bontsd ki az ethernaut objektumot, hogy lásd, mi van benne. + +#### 5. Interakció az ABI-val +Az `ethernaut` egy `TruffleContract` objektum, amely becsomagolja az `Ethernaut.sol` szerződést, amelyet telepítettek a blokkláncra. + +Többek között a szerződés ABI-ja elérhetővé teszi az `Ethernaut.sol` összes publikus metódusát, mint például az `owner`. Írd be például a következő parancsot: + +`ethernaut.owner()` vagy `await ethernaut.owner()` ha Chrome v62-t használsz. + +Láthatod, ki az ethernaut szerződés tulajdonosa. + +#### 6. Szerezz teszt ethert +A játék játszásához teszt etherre lesz szükséged. A legegyszerűbb módja a testnet ether megszerzésének egy érvényes faucet a választott hálózatodhoz. + +Amint látsz néhány érmét az egyenlegedben, lépj tovább a következő lépésre. + +#### 7. Szint példány megszerzése +Amikor egy szintet játszol, nem közvetlenül az ethernaut szerződéssel lépsz interakcióba. Ehelyett megkéred, hogy generáljon egy **szint példányt** neked. Ehhez kattints a "Új példány kérése" gombra az oldal alján. Tedd meg most és gyere vissza! + +A MetaMask-nak kérnie kell, hogy engedélyezd a tranzakciót. Tedd meg, és látnod kell néhány üzenetet a konzolon. Vedd figyelembe, hogy ez egy új szerződést telepít a blokkláncra, és eltarthat néhány másodpercig, szóval légy türelmes, amikor új szint példányokat kérsz! + +#### 8. A szerződés vizsgálata +Ahogy az ethernaut szerződéssel tetted, megvizsgálhatod ennek a szerződésnek az ABI-ját a konzolon keresztül a `contract` változóval. + +#### 9. Lépj interakcióba a szerződéssel a szint befejezéséhez +Nézd meg a szint info metódusát: `contract.info()` vagy `await contract.info()` ha Chrome v62-t használsz. +Minden szükséges információval rendelkezel a szint befejezéséhez a szerződésen belül. +Amikor tudod, hogy befejezted a szintet, küldd be a szerződést a beküldés gombbal az oldal alján. +Ez visszaküldi a példányodat az ethernaut-nak, amely meghatározza, hogy befejezted-e. + + +##### Tipp: ne felejtsd el, hogy mindig megnézheted a szerződés ABI-ját! diff --git a/client/src/gamedata/hu/descriptions/levels/instances_complete.md b/client/src/gamedata/hu/descriptions/levels/instances_complete.md new file mode 100644 index 000000000..6daa37edd --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/instances_complete.md @@ -0,0 +1,6 @@ +Gratulálunk! Befejezted az oktatóprogramot. +Nézd meg a Solidity kódot a szerződéshez, amellyel most interakcióba léptél, lent. + +Most már készen állsz a játék összes szintjének befejezésére, és mostantól egyedül vagy. + +Isten veled!! diff --git a/client/src/gamedata/hu/descriptions/levels/king.md b/client/src/gamedata/hu/descriptions/levels/king.md new file mode 100644 index 000000000..73373ee0a --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/king.md @@ -0,0 +1,5 @@ +Az alábbi szerződés egy nagyon egyszerű játékot képvisel: aki olyan mennyiségű ethert küld neki, amely nagyobb, mint a jelenlegi nyeremény, az lesz az új király. Egy ilyen eseménynél a megdöntött király megkapja az új nyereményt, így egy kis ethert keres a folyamatban! Olyan ponzi, amilyen csak lehet xD + +Milyen szórakoztató játék. A célod, hogy összetörd. + +Amikor visszaküldöd a példányt a szintnek, a szint vissza fogja szerezni a királyságot. Akkor nyered meg a szintet, ha el tudod kerülni egy ilyen önkikiáltást. diff --git a/client/src/gamedata/hu/descriptions/levels/king_complete.md b/client/src/gamedata/hu/descriptions/levels/king_complete.md new file mode 100644 index 000000000..a76c7a1ba --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/king_complete.md @@ -0,0 +1,3 @@ +Az Ethernaut szintjeinek többsége megpróbál (természetesen túlegyszerűsített formában) valamit bemutatni, ami valóban megtörtént — egy igazi hackot vagy egy igazi hibát. + +Ebben az esetben lásd: [King of the Ether](https://www.kingoftheether.com/thrones/kingoftheether/index.html) és [King of the Ether Postmortem](http://www.kingoftheether.com/postmortem.html). diff --git a/client/src/gamedata/hu/descriptions/levels/naughtcoin.md b/client/src/gamedata/hu/descriptions/levels/naughtcoin.md new file mode 100644 index 000000000..93f0d2fad --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/naughtcoin.md @@ -0,0 +1,6 @@ +A NaughtCoin egy ERC20 token, és már mind nálad van. A bökkenő az, hogy csak egy 10 éves zárási időszak után tudod átvinni őket. Ki tudod találni, hogyan viheted át őket egy másik címre, hogy szabadon átvihesd őket? Teljesítsd ezt a szintet úgy, hogy a token egyenleged 0 lesz. + +  +Dolgok, amelyek segíthetnek +* Az [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) specifikáció +* Az [OpenZeppelin](https://github.com/OpenZeppelin/zeppelin-solidity/tree/master/contracts) kódbázis diff --git a/client/src/gamedata/hu/descriptions/levels/naughtcoin_complete.md b/client/src/gamedata/hu/descriptions/levels/naughtcoin_complete.md new file mode 100644 index 000000000..ca645b5d3 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/naughtcoin_complete.md @@ -0,0 +1 @@ +Amikor olyan kódot használsz, ami nem a tiéd, jó ötlet megismerkedni vele, hogy jó megértést szerezz arról, hogyan illik össze minden. Ez különösen fontos lehet, amikor több szintű importok vannak (az importjaidnak vannak importjai), vagy amikor authorizációs kontrollokat implementálsz, pl. amikor engedélyezed vagy tiltod az embereket bizonyos dolgok megtételében. Ebben a példában egy fejlesztő átfuthatja a kódot és azt gondolhatja, hogy a `transfer` az egyetlen módja a tokenek mozgatásának, és íme, vannak más módok is ugyanazon művelet végrehajtására más implementációval. diff --git a/client/src/gamedata/hu/descriptions/levels/privacy.md b/client/src/gamedata/hu/descriptions/levels/privacy.md new file mode 100644 index 000000000..114307592 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/privacy.md @@ -0,0 +1,11 @@ +Ennek a szerződésnek a készítője elég óvatos volt, hogy megvédje a tárolásának érzékeny területeit. + +Nyisd ki ezt a szerződést a szint megnyeréséhez. + +Dolgok, amelyek segíthetnek: +* A tárolás működésének megértése +* A paraméter elemzés működésének megértése +* A típuskonverzió működésének megértése + +Tippek: +* Ne feledd, hogy a metamask csak egy kényelmi eszköz. Használj másik eszközt, ha problémákat okoz. A haladó játékmenet magában foglalhatja a remix vagy a saját web3 provider használatát. diff --git a/client/src/gamedata/hu/descriptions/levels/privacy_complete.md b/client/src/gamedata/hu/descriptions/levels/privacy_complete.md new file mode 100644 index 000000000..d4acd7f91 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/privacy_complete.md @@ -0,0 +1,3 @@ +Semmi sem privát az Ethereum blokkláncban. A private kulcsszó csupán a Solidity nyelv mesterséges konstrukciója. A Web3 `getStorageAt(...)` használható bárminek a tárolásból való olvasására. Trükkös lehet elolvasni amit akarsz, mivel számos optimalizálási szabály és technika kerül felhasználásra, hogy a tárolást amennyire csak lehet, tömörítsék. + +Nem lehet sokkal bonyolultabb annál, mint ami ebben a szintben bemutatásra került. Továbbiak itt: [How to read Ethereum contract storage](https://medium.com/aigang-network/how-to-read-ethereum-contract-storage-44252c8af925) szerző: "Darius" diff --git a/client/src/gamedata/hu/descriptions/levels/reentrancy.md b/client/src/gamedata/hu/descriptions/levels/reentrancy.md new file mode 100644 index 000000000..04c167b7f --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/reentrancy.md @@ -0,0 +1,9 @@ +Ennek a szintnek a célja, hogy ellopd az összes pénzeszközt a szerződésből. + +  +Dolgok, amelyek segíthetnek: +* A nem megbízható szerződések kódot futtathatnak ott, ahol legkevésbé várod. +* Fallback metódusok +* Throw/revert buborékozás +* Néha a legjobb módja egy szerződés megtámadásának egy másik szerződéssel történik. +* Lásd a ["?"](https://ethernaut.openzeppelin.com/help) oldalt fent, "A konzolon túl" szekció diff --git a/client/src/gamedata/hu/descriptions/levels/reentrancy_complete.md b/client/src/gamedata/hu/descriptions/levels/reentrancy_complete.md new file mode 100644 index 000000000..14e8a17c7 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/reentrancy_complete.md @@ -0,0 +1,12 @@ +A visszatérési támadások (re-entrancy) megelőzése érdekében, amikor pénzeszközöket mozgatsz ki a szerződésedből, használd a [Checks-Effects-Interactions mintát](https://solidity.readthedocs.io/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern), figyelembe véve, hogy a `call` csak false-t ad vissza anélkül, hogy megszakítaná a végrehajtási folyamatot. Olyan megoldások is használhatók, mint a [ReentrancyGuard](https://docs.openzeppelin.com/contracts/2.x/api/utils#ReentrancyGuard) vagy a [PullPayment](https://docs.openzeppelin.com/contracts/2.x/api/payment#PullPayment). + +A `transfer` és a `send` már nem ajánlott megoldások, mivel potenciálisan elronthatják a szerződéseket az Istanbul hard fork után [Forrás 1](https://diligence.consensys.net/blog/2019/09/stop-using-soliditys-transfer-now/) [Forrás 2](https://forum.openzeppelin.com/t/reentrancy-after-istanbul/1742). + +Mindig feltételezd, hogy a pénzeszközök fogadója, amelyet küldesz, lehet egy másik szerződés, nem csak egy normál cím. Ezért kódot futtathat a payable fallback metódusában és *újra beléphet* a szerződésedbe, esetleg összezavarva az állapotodat/logikádat. + +A visszatérés (re-entrancy) gyakori támadás. Mindig készülj fel rá! + +  +#### A DAO Hack + +A híres DAO hack visszatérést használt, hogy hatalmas mennyiségű ethert vonjon ki az áldozat szerződésből. Lásd [15 sor kód, amely megakadályozhatta volna a DAO Hack-et](https://blog.openzeppelin.com/15-lines-of-code-that-could-have-prevented-thedao-hack-782499e00942). diff --git a/client/src/gamedata/hu/descriptions/levels/shop.md b/client/src/gamedata/hu/descriptions/levels/shop.md new file mode 100644 index 000000000..ce1bf0c19 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/shop.md @@ -0,0 +1,5 @@ +Meg tudod szerezni a tárgyat a boltból kevesebbért, mint a kért ár? + +##### Dolgok, amelyek segíthetnek: +* A `Shop` elvárja, hogy egy `Buyer`-ből használják +* A view függvények korlátozásainak megértése diff --git a/client/src/gamedata/hu/descriptions/levels/shop_complete.md b/client/src/gamedata/hu/descriptions/levels/shop_complete.md new file mode 100644 index 000000000..618468e25 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/shop_complete.md @@ -0,0 +1,3 @@ +A szerződések bármilyen módon manipulálhatják a más szerződések által látott adatokat, ahogy akarják. + +Nem biztonságos megváltoztatni az állapotot külső és nem megbízható szerződési logika alapján. diff --git a/client/src/gamedata/hu/descriptions/levels/telephone.md b/client/src/gamedata/hu/descriptions/levels/telephone.md new file mode 100644 index 000000000..780143a5b --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/telephone.md @@ -0,0 +1,5 @@ +Szerezd meg a lenti szerződés tulajdonjogát a szint befejezéséhez. + +  +Dolgok, amelyek segíthetnek +* Lásd a ["?"](https://ethernaut.openzeppelin.com/help) oldalt fent, "A konzolon túl" szekció diff --git a/client/src/gamedata/hu/descriptions/levels/telephone_complete.md b/client/src/gamedata/hu/descriptions/levels/telephone_complete.md new file mode 100644 index 000000000..9a3107e12 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/telephone_complete.md @@ -0,0 +1,21 @@ +Bár ez a példa egyszerű lehet, a `tx.origin` és a `msg.sender` összekeverése adathalász-szerű támadásokhoz vezethet, mint például [ez](https://blog.ethereum.org/2016/06/24/security-alert-smart-contract-wallets-created-in-frontier-are-vulnerable-to-phishing-attacks/). + +Egy lehetséges támadás példája az alábbiakban látható. + +1) Használd a `tx.origin`-t annak meghatározására, kinek a tokenjeit kell átutalni, pl. + +``` +function transfer(address _to, uint _value) { + tokens[tx.origin] -= _value; + tokens[_to] += _value; +} +``` +2) A támadó ráveszi az áldozatot, hogy pénzt küldjön egy rosszindulatú szerződésnek, amely meghívja a token szerződés átutalási funkcióját, pl. + +``` +function () payable { + token.transfer(attackerAddress, 10000); +} +``` + +3) Ebben a forgatókönyvben a `tx.origin` az áldozat címe lesz (míg a `msg.sender` a rosszindulatú szerződés címe lesz), aminek eredményeként a pénzeszközök az áldozattól a támadóhoz kerülnek. diff --git a/client/src/gamedata/hu/descriptions/levels/token.md b/client/src/gamedata/hu/descriptions/levels/token.md new file mode 100644 index 000000000..6cb0972ce --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/token.md @@ -0,0 +1,7 @@ +Ennek a szintnek a célja, hogy feltörd az alábbi alap token szerződést. + +20 tokennel kezdesz, és akkor nyered meg a szintet, ha valahogy sikerül további tokenekhez jutni. Lehetőleg nagyon sok tokenhez. + +  +Dolgok, amelyek segíthetnek: +* Mi az a kilométeróra? diff --git a/client/src/gamedata/hu/descriptions/levels/token_complete.md b/client/src/gamedata/hu/descriptions/levels/token_complete.md new file mode 100644 index 000000000..0b6939849 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/token_complete.md @@ -0,0 +1,12 @@ +A túlcsordulások (overflows) nagyon gyakoriak a Solidity-ben, és ellenőrizni kell őket vezérlő utasításokkal, mint például: +``` +if(a + c > a) { + a = a + c; +} +``` + +Egy egyszerűbb alternatíva az OpenZeppelin SafeMath könyvtárának használata, amely automatikusan ellenőrzi a túlcsordulásokat az összes matematikai operátorban. Az eredményül kapott kód így néz ki: +``` +a = a.add(c); +``` +Ha van túlcsordulás, a kód visszavon (revert). diff --git a/client/src/gamedata/hu/descriptions/levels/vault.md b/client/src/gamedata/hu/descriptions/levels/vault.md new file mode 100644 index 000000000..6eec2a541 --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/vault.md @@ -0,0 +1 @@ +Nyisd ki a széfet a szint teljesítéséhez! diff --git a/client/src/gamedata/hu/descriptions/levels/vault_complete.md b/client/src/gamedata/hu/descriptions/levels/vault_complete.md new file mode 100644 index 000000000..9cae56d2b --- /dev/null +++ b/client/src/gamedata/hu/descriptions/levels/vault_complete.md @@ -0,0 +1,3 @@ +Fontos emlékezni, hogy egy változó privátként való megjelölése csak megakadályozza más szerződéseket abban, hogy hozzáférjenek. A privátként megjelölt állapotváltozók és a lokális változók még mindig nyilvánosan hozzáférhetők. + +Annak biztosításához, hogy az adatok privátak legyenek, titkosítani kell őket, mielőtt a blokkláncra kerülnének. Ebben a forgatókönyvben a visszafejtési kulcsot soha nem szabad on-chain küldeni, mivel akkor látható lesz mindenkinek, aki keresi. A [zk-SNARKs](https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/) lehetőséget biztosít annak meghatározására, hogy valaki rendelkezik-e egy titkos paraméterrel, anélkül hogy valaha is fel kellene fednie a paramétert. diff --git a/client/src/gamedata/hu/strings.json b/client/src/gamedata/hu/strings.json new file mode 100644 index 000000000..53c4a4042 --- /dev/null +++ b/client/src/gamedata/hu/strings.json @@ -0,0 +1,124 @@ +{ + "ethernaut": "Ethernaut", + "title": "Az Ethernaut", + "hiring": "Keresünk munkatársakat!", + "ctfRegister": "Regisztrálj most!", + "ctfInfo": "Ethernaut CTF eseményt szervezünk: Egy 48 órás capture the flag verseny díjakkal és blockchain kihívásokkal, március 16-tól.", + "info": "

Az Ethernaut egy Web3/Solidity alapú wargame, amelyet az overthewire.org inspirált, és az Ethereum Virtuális Gépen játszható. Minden szint egy okosszerződés, amelyet 'meg kell törni'. A játék 100%-ban nyílt forráskódú, és minden szintet más játékosok hoztak létre. Van egy érdekes ötleted? A pull requestek

", + "home": "Főoldal", + "help": "Segítség", + "stats": "Statisztikák", + "ethernautHelp": "Segítség", + "footer": "-tel és -lel fejlesztve az OpenZeppelin csapat által", + "english": "English", + "arabic": "عربي", + "spanish": "Español", + "ukrainian": "Українська", + "portuguese": "Português", + "japanese": "日本語", + "turkish": "Türkçe", + "chinese_simplified": "简体中文", + "chinese_traditional": "正體中文", + "french": "Français", + "russian": "Русский", + "korean": "한국어", + "hungarian": "Magyar", + "playNow": "Játssz most!", + "toggleNavigation": "Navigáció váltása", + "levelCompleted": "Szint teljesítve!", + "sources": "Források", + "submitInstance": "Példány beküldése", + "getNewInstance": "Új példány kérése", + "accountNotConnectedTitle": "MetaMask fiók nincs csatlakoztatva", + "accountNotConnectedMessage": "A kalandod megkezdéséhez csatlakoztasd a MetaMask tárcádat! A játékunk közvetlenül az Ethernaut on-chain szerződésekkel kommunikál, ami azt jelenti, hogy a játékbeli cselekvéseid a blokkláncon kerülnek rögzítésre. A MetaMask fiókod összekapcsolásával biztonságosan interakcióba léphetsz ezekkel az okosszerződésekkel, ami lehetővé teszi a kihívások megoldását és a játékban való előrehaladást.", + "connectAccount": "Csatlakozás", + "deployMessageTitle": "A játék nincs telepítve", + "deprecatedNetwork": "Elavult hálózat", + "networkBeingDeprecated": "A hálózat elavul", + "deployMessage": "Jelenleg a játék csak ezeket a hálózatokat támogatja:", + "deployConfirmation": "Szeretnéd telepíteni a szerződéseket ezen a hálózaton, vagy át szeretnél váltani a Sepolia hálózatra?", + "deployNote": "Megjegyzés: Ha az összes szintet telepíted, végigvezetünk téged, hogy beküldd az egész telepített játékot ezen a hálózaton.", + "deployGame": "Játék telepítése", + "switchToSepolia": "Váltás Sepoliára", + "continueAnyway": "Folytatás mindenképpen", + "deployLevel": "Szint telepítése", + "helperDeployAllContracts": "Az összes fennmaradó szerződés telepítése a jelenlegi hálózaton.", + "confirmMainnetDeploy": "A mainnet hálózaton vagy, a játéknak nincs pénzügyi értéke, nem kellene ezen a hálózaton telepítened.", + "submitLevelFooter": "Telepítsd az összes szintet (deployAllContracts() a konzolon), hogy hozzáadd a jelenlegi hálózatot a Github repository-nkhoz új támogatott hálózatként.", + "submitGameFooter": "Nagyszerű! Az egész játék telepítve van ezen a hálózaton. Kattints ide, hogy GitHub issue-t nyiss és küldd el nekünk :)", + "nextLevel": "Tovább a következő szintre", + "uLevels": "Szintek", + "lLevels": "szintek", + "refresh": "Frissítés", + "uCompleted": "Teljesítve", + "lCompleted": "teljesítve", + "players": "játékosok", + "player": "Játékos", + "levelName": "Szint neve", + "levelAddress": "Szint címe", + "blockNum": "Blokk szám", + "uCreated": "Létrehozva", + "lCreated": "létrehozva", + "instance": "Példány", + "numberOf": "Száma", + "warning": "Figyelmeztetés", + "warningMessage": "Nincs web3 provider és a játék csak olvasható módban van", + "levelAuthor": "Szint készítő(k):", + "pleaseWait": "KÉRLEK VÁRJ", + "donate": "Ez a szint megtanított neked valami hasznosat? Adományozz a szint készítőjének (mainnet-en):", + "openConsole": "NYISD MEG A KONZOLT A JÁTÉKHOZ", + "difficulty": "Nehézség", + "error": "Hiba", + "retrying": "újrapróbálkozás...", + "typeHelpMessage": "Írd be: help() az egyedi web3 bővítmények listájáért", + "slowNetworkMessage": "Idegesítő 'Lassú hálózat észlelve' üzenet? Próbáld ki: Dev Tools beállítások -> Csak felhasználói üzenetek vagy tiltsd le a 'chrome://flags/#enable-webfonts-intervention-v2'-t", + "notContractSetMessage": "Nincs beállított szerződés, menj egy szintre és kattints az 'Új példány kérése' gombra", + "levelAddressMessage": "Szint címe", + "instanceAddressMessage": "Példány címe", + "playerAddressMessage": "Játékos címe", + "selectedNetworkMessage": "Jelenlegi hálózat: ", + "ethernautAddressMessage": "Ethernaut címe", + "noLevelsDataMessage": "Nem található szint adat", + "ethernautNotFoundMessage": "Az Ethernaut szerződés nem található a jelenlegi hálózaton. Kérlek győződj meg róla, hogy (1) használod a metamask-ot, (2) támogatott hálózaton van, (3) nincs zárolva, (4 opcionális) November 2-től bekapcsolhatod a privacy módot (alapértelmezetten KI van kapcsolva) a Metamask beállításokban, ha nem szeretnéd alapértelmezetten megosztani az információidat. (5 opcionális) Ha a privacy mód BE van kapcsolva, engedélyezned kell a metamask-nak ennek az oldalnak a használatát. és (6) majd frissítsd.", + "requestingNewInstanceMessage": "Új példány kérése a szinttől...", + "unableToRetrieveLevelMessage": "Nem lehet lekérni a szint példányt! Kérlek ellenőrizd a gáz mennyiséget és próbáld újra.", + "transactionNoLogsMessage": "A tranzakció nem tartalmaz naplókat", + "noPlayerAddressMessage": "Nem található játékos cím! Győződj meg róla, hogy 1) Telepítetted a metamask böngésző bővítményt és 2) nincs zárolva. 3 opcionális) November 2-től bekapcsolhatod a privacy módot (alapértelmezetten KI van kapcsolva) a beállításokban, ha nem szeretnéd alapértelmezetten megosztani az információidat. 4 opcionális) Ha a privacy mód BE van kapcsolva, engedélyezned kell a metamask-nak ennek az oldalnak a használatát. 5) majd frissítsd.", + "noEthersMessage": "Jaj, nincs ethered! Szerezz egy érvényes faucet-ből a választott hálózatodhoz", + "submitLevelMessage": "Szint példány beküldése...", + "wellDoneMessage": "Szép munka", + "completedLevelMessage": "Teljesítetted ezt a szintet!!!", + "uncompletedLevelMessage": "Hoppá! Úgy tűnik, még nem törtéd meg ezt a szintet", + "metamaskKnownIssue": "Jaj! Úgy tűnik, egy ismert Metamask problémába futottál. Próbáld meg letiltani és újra engedélyezni a metamask bővítményt, és ha ez nem működik, attól tartok, be kell zárnod az összes Chrome folyamatot és újra kell indítanod, amíg nem jelenik meg javítás. Ne aggódj, újraindítás után többé nem kellene látnod ezt az üzenetet.", + "eventsCompletionMessage": "Hiba a befejezési események figyelésekor:", + "unexpectedAddressMessage": "Váratlan cím a LevelCompletedLog eseményben (kihagyva):", + "helperPlayer": "jelenlegi játékos címe", + "helperEthernaut": "fő játék szerződés", + "helperLevel": "jelenlegi szint szerződés címe", + "helperContract": "jelenlegi szint szerződés példány (ha létrehozva)", + "helperInstance": "jelenlegi szint példány szerződés címe (ha létrehozva)", + "helperVersion": "jelenlegi játék verzió", + "helperGetBalance": "lekéri egy cím egyenlegét etherben", + "helperGetBlockNumber": "lekéri a jelenlegi hálózat blokk számát", + "helperSendTransaction": "tranzakció küldési segédprogram", + "helperGetNetworkId": "ethereum hálózat azonosító lekérése", + "helperToWei": "ether egységek átváltása wei-re", + "helperFromWei": "wei egységek átváltása etherre", + "levelNotTranslated": "Ez a szint nincs lefordítva vagy a fordítás hiányos.", + "contributeTranslation": "Kattints ide a fordítás javításához", + "usingConsole": "A legtöbb játék interakció a böngésző konzolján keresztül történik: `Dev Tools -> Console`. Nyisd meg a konzolt és add meg a parancsot: \n\n`help()`\n\n hogy lásd a játék által a konzolba injektált objektumok és függvények listáját. Mivel a legtöbb interakció aszinkron, javasoljuk a Chrome v62 használatát, amely engedélyezi az `async/await` kulcsszavakat a konzolon, így ahelyett, hogy írnád: \n\n`getBalance(player)> PROMISE`\n\n és megnyitnád a promise-t. Az await/async-kel írhatod:\n\n`await getBalance(player) > '1.11002387' `\n\n", + "gameMechanics": "A játék a fő `Ethernaut.sol` szerződést használja a játékosok előrehaladásának kezeléséhez és a `Level.sol` implementációkkal való interakció delegálásához. Minden szint szerződés példányokat bocsát ki a játékosoknak, hogy manipulálják, összetörjék, megsemmisítsék, kijavítsák, stb. A játékos kér egy példányt, manipulálja és visszaküldi a játéknak a szint befejezésének értékelésére.\n\n Mind a példányok kérése, mind a példányok visszaküldése a játéknak a felhasználói felület gombjaival történik minden szinten. Amikor ez az alkalmazás lekér egy példányt az `Ethernaut.sol`-ból, becsomagolja egy `TruffleContract` objektumba és elérhetővé teszi a böngésző konzolján. Lásd az első szintet egy teljes útmutatóért, hogyan játszd a játékot.", + "beyondConsole": "Néhány szint megköveteli, hogy a böngésző konzolon kívül dolgozz. Vagyis solidity kódot írj és telepítsd a hálózaton, hogy megtámadhasd a szint példány szerződését egy másik szerződéssel. Ezt többféleképpen is megteheted, például: \n\n1) Használd a Remix-et a kód megírásához és telepítéséhez a megfelelő hálózaton. Lásd [Remix Solidity IDE](https://remix.ethereum.org/). \n\n2) Állíts be egy helyi truffle projektet a támadó szerződések fejlesztéséhez és telepítéséhez. Lásd [Truffle Framework](https://trufflesuite.com/).", + "troubleshooting": "Néha \n\n(a) az alkalmazás állapota vagy (b) a MetaMask bővítmény állapota \n\nkicsit összekuszálódhat, különösen hálózatváltás, feloldás után, stb. Ha amit látsz, nem sok értelmet ad, próbáld meg frissíteni az alkalmazást, hard-frissíteni, letiltani és újra engedélyezni a metamask bővítményt vagy akár újraindítani a böngészőt. \n\nHa problémát találsz, kérlek értesíts minket: ethernaut@zeppelin.solutions", + "poweredBy": "működteti a ", + "setupMetamask": "Ha még nincs meg, telepítsd a [MetaMask böngésző bővítményt](https://metamask.io/) (Chrome-ban, Firefox-ban, Brave-ben vagy Opera-ban asztali gépeden). \n\nÁllítsd be a bővítmény tárcáját és használd a hálózat választót, hogy a preferált hálózatra mutathasson a bővítmény felületének bal felső sarkában. Alternatívaként használhatod a UI gombot a hálózatok közötti váltáshoz. Ha nem támogatott hálózatot választasz, a játék értesít és elvisz az alapértelmezett Sepolia testnet-re. \n\nAmint kész, gyere vissza ide és töltsd újra a weboldalt", + "FifthyPercentMessage": "Nagyszerű munka! Az Ethernaut felénél jársz és egyre jobb leszel a dolgok összetörésében. Blockchain biztonsági kutatóként dolgozni az OpenZeppelin-nél szórakoztató lehet... https://grnh.se/fdbf1c043us", + "SeventyFivePercentMessage": "75%: Jó munka anon…már mélyen lent vagy a nyúl üregében....ki tudja hová visz... https://grnh.se/d4a786e43us", + "NinetyPercentMessage": "90%: Majdnem ott vagy anon! Már csak néhány kihívás maradt, amíg befejezed az Ethernaut-ot! Gondoltál már Blockchain biztonsági karrierre?https://grnh.se/cfcca8c83us", + "HundredPercentMessage": "100%: Gratulálunk! A web3 nyúl üregében tett utad lenyűgöző és megünneplendő! Most már megvannak a készségeid az okosszerződések összetöréséhez! Mi jön ezután anon? Jelentkezz Blockchain biztonsági kutatónak az OpenZeppelin-hez, és járulj hozzá a web3 top protokolljainak biztonságához! https://grnh.se/26c05aac3us", + "Menu": "Menü", + "Networks": "Hálózatok", + "Languages": "Nyelvek", + "PageNotFoundTitle": "404 Hiba - Az oldal nem található", + "PageNotFoundText": "Hoppá! A keresett oldal nem található." +}