Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/denial.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Bu, zaman içinde yavaş yavaş fon akıtan basit bir cüzdan. Para çekme ortağı (withdrawing partner) olarak yavaş yavaş fonları çekebilirsin.

Eğer sahibin `withdraw()`'ı çağırdığında fonları çekmesini engelleyebilirsen (kontratın hala fonları varken ve transfer 1M gas veya daha altındayken) bu seviyeyi geçersin.
8 changes: 8 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/denial_complete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Bu seviye, sabit bir gas miktarı belirtilmediğinde bilinmeyen dış kontrat çağrılarının hâlâ hizmet engelleme (DoS) saldırı vektörleri yaratabileceğini gösterir.

Eğer bir dış çağrı revert ettiğinde işlem akışına devam etmek için low-level `call` kullanıyorsan, mutlaka sabit bir gas ödeneği (gas stipend) belirt. Örneğin: `call.gas(100000).value()`.

Genellikle re-entrancy saldırılarını önlemek için [checks-effects-interactions](http://solidity.readthedocs.io/en/latest/security-considerations.html#use-the-checks-effects-interactions-pattern) desenini izlemelisin, ancak fonksiyonun sonunda birden fazla dış çağrı yapılması gibi başka durumlarda da benzer sorunlar ortaya çıkabilir.

*Not*: Bir dış `CALL`, o an kullanılabilir gazın en fazla 63/64 oranını kullanabilir.
Bu yüzden, tamamlanması gereken opcode’lar için kalan gaz miktarına bağlı olarak, yeterince yüksek gazlı bir işlem (yani kalan 1/64’lük gazın üst düzey çağrıyı tamamlayabilecek kadar olduğu bir işlem) bu özel saldırıya karşı bir dereceye kadar korunma sağlayabilir.
18 changes: 18 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/dex.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Bu seviyenin amacı, aşağıdaki basit [DEX](https://en.wikipedia.org/wiki/Decentralized_exchange) kontratını fiyat manipülasyonu ile hacklemen ve fonları çalman.

10 adet `token1` ve 10 adet `token2` ile başlayacaksın. DEX kontratı ise iki tokenden de 100 adet ile başlıyor.

Eğer sözleşmeden en az birini (token1 ya da token2) tamamen boşaltmayı başarıp sözleşmenin varlıkların “kötü” bir fiyatını raporlamasına yol açarsan, bu seviyeyi geçersin.

 
### Kısa not
Normalde bir ERC20 token ile swap yaparken sözleşmenin token’larını harcayabilmesi için önce `approve` etmen gerekir. Oyunun sözdizimine uyması için biz DEX kontratına `approve` metodunu ekledik. Yani token kontratlarını doğrudan çağırmak yerine şu komutu kullanabilirsin: `contract.approve(contract.address, <uint amount>)`. Bu, iki token için de istenen miktarda onay verecektir.`SwappableToken` kontratını ayrıca inceleyebilirsin ama zorunda değilsin.

&nbsp;
Yardımcı olabilecek noktalar:
* Token fiyatı nasıl hesaplanıyor?
* `swap` metodu nasıl çalışıyor?
* Bir ERC20 işlemini `approve` ile nasıl onaylarsın?
* Bir kontratla etkileşmenin birden fazla yolu vardır!
* Remix yardımcı olabilir.
* "At Address" ne işe yarar?
9 changes: 9 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/dex2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Bu seviye, bir önceki seviyedeki `Dex` kontratının ince şekilde değiştirilmiş bir versiyonu olan `DexTwo`’yu farklı bir yöntemle çökertmeni isteyecek.

Başarılı olmak için `DexTwo` kontratındaki token1 ve token2 bakiyelerini tamamen boşaltman gerekiyor.

Başlangıçta yine `token1`’den 10, `token2`’den 10 token ile başlıyorsun. DEX kontratı hâlâ her iki tokenden de 100 ile başlıyor.

&nbsp;
Yardımcı olabilecek noktalar:
* `swap` metodu nasıl değiştirilmiş?
9 changes: 9 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/dex2_complete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Gördüğümüz gibi, kontratlar arasındaki etkileşim beklenmedik davranışların kaynağı olabilir.

Bir kontratın [ERC20 standardını](https://eips.ethereum.org/EIPS/eip-20) uyguladığını iddia etmesi onun güvenilir olduğu anlamına gelmez.

Bazı tokenler, `transfer` metodlarından boolean değer döndürmeyerek ERC20 standardından sapar. Detaylar için: [Missing return value bug - At least 130 tokens affected](https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca).

Diğer ERC20 tokenleri, özellikle kötü niyetli kişiler tarafından tasarlanmış olanlar, daha zararlı davranabilir.

Eğer bir DEX tasarlıyorsan ve herhangi biri kendi tokenlerini merkezi bir otoritenin izni olmadan listeleyebiliyorsa, DEX’in doğruluğu DEX kontratı ile işlem gören token kontratlarının etkileşimine bağlı olacaktır.
57 changes: 57 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/dex_complete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
Tam sayı matematiğini bir kenara bırakacak olursak, herhangi bir kaynaktan fiyat veya veri almak, akıllı sözleşmeler için devasa bir saldırı vektörü oluşturur.

Bu örnekten de görebileceğiniz gibi, çok sermayesi olan biri fiyatı tek hamlede manipüle edebilir ve buna bağlı çalışan tüm uygulamalar yanlış fiyat kullanabilir.

Borsa kendi başına merkeziyetsiz olsa da, varlığın fiyatı merkezidir çünkü tek bir DEX’ten gelir. Ancak, gerçek varlıkları temsil eden token’lar söz konusu olduğunda, çoğu token birden fazla DEX ve ağda işlem çiftine sahiptir. Bu durum, spesifik bir DEX hedef alındığında varlık fiyatı üzerindeki etkiyi azaltır.

[Oracle'lar](https://betterprogramming.pub/what-is-a-blockchain-oracle-f5ccab8dbd72?source=friends_link&sk=d921a38466df8a9176ed8dd767d8c77d) akıllı sözleşmelere veri girişi ve çıkışı sağlamak için kullanılır.

[Chainlink Data Feeds](https://docs.chain.link/docs/get-the-latest-price) merkeziyetsiz verileri akıllı sözleşmelerinize taşımak için kullanılan güvenli ve güvenilir bir yoldur. Çok çeşitli kaynaklardan veri alabilir, [güvenli rastgelelik](https://docs.chain.link/docs/chainlink-vrf), [herhangi bir API çağrısı](https://docs.chain.link/docs/make-a-http-get-request) yapabilme, [modüler oracle ağı oluşturma](https://docs.chain.link/docs/architecture-decentralized-model), [bakım/izleme (upkeep), eylemler ve yönetim imkanları](https://docs.chain.link/docs/kovan-keeper-network-beta) ile sınırsız özelleştirme olanağı da sunar.

[Uniswap TWAP Oracles](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) ise zaman ağırlıklı ortalama fiyat [TWAP](https://en.wikipedia.org/wiki/Time-weighted_average_price#) modeline dayanır. Bu tasarım cazip olabilir, ancak protokol büyük ölçüde DEX likiditesine bağımlıdır; likidite düşükse fiyatlar kolayca manipüle edilebilir.

Aşağıda, Sepolia testnet üzerinde Chainlink veri kaynağından Bitcoin’in USD fiyatını alma örneği bulunuyor:

```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract PriceConsumerV3 {
AggregatorV3Interface internal priceFeed;

/**
* Network: Sepolia
* Aggregator: BTC/USD
* Address: 0x1b44F3514812d835EB1BDB0acB33d3fA3351Ee43
*/
constructor() {
priceFeed = AggregatorV3Interface(
0x1b44F3514812d835EB1BDB0acB33d3fA3351Ee43
);
}

/**
* Returns the latest price.
*/
function getLatestPrice() public view returns (int) {
// prettier-ignore
(
/* uint80 roundID */,
int price,
/*uint startedAt*/,
/*uint timeStamp*/,
/*uint80 answeredInRound*/
) = priceFeed.latestRoundData();
return price;
}
}

```
[Remix'te dene](https://remix.ethereum.org/#url=https://docs.chain.link/samples/PriceFeeds/PriceConsumerV3.sol)

Chainlink veri kaynağı [sayfasını](https://data.chain.link/ethereum/mainnet/crypto-usd/btc-usd) kontrol ederek Bitcoin fiyatının 31 farklı kaynaktan sorgulandığını görebilirsiniz.

Ayrıca, tüm Chainlink fiyat beslemelerinin adreslerinin [listesini](https://docs.chain.link/data-feeds/price-feeds/addresses/) de inceleyebilirsiniz.

10 changes: 10 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/doubleentrypoint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Bu seviye, özel bir işlevi olan bir `CryptoVault` kontratını içeriyor, `sweepToken` fonksiyonu. Bu, kontratta sıkışan token’ları almak için yaygın olarak kullanılan bir fonksiyondur. `CryptoVault` silinemeyecek (sweeping yapılamayacak) bir `underlying` token ile çalışır; çünkü bu token `CryptoVault`'un temel mantığının önemli bir parçasıdır. Diğer tüm token’lar ise alınabilir (sweep yapılabilir).

Underlying token, `DoubleEntryPoint` kontratında tanımlı DET token örneğidir ve `CryptoVault` içinde 100 birim bulunur. Buna ek olarak, `CryptoVault` içinde 100 birim `LegacyToken LGT` da vardır.

Bu seviyede, `CryptoVault`’daki hatayı bulmalı ve token’ların çekilmesini engelleyecek bir çözüm geliştirmelisin.

Kontrat ayrıca bir `Forta` kontratına sahiptir; buraya herhangi bir kullanıcı kendi `detection bot` kontratını kaydedebilir. Forta; DeFi, NFT, governance, köprüler ve diğer Web3 sistemlerindeki tehditleri ve anormallikleri olabildiğince hızlı tespit etmek için merkeziyetsiz ve topluluk tabanlı bir izleme ağıdır. Senin görevin bir `detection bot` uygulamak ve bunu `Forta` kontratına kaydetmektir. Bot, potansiyel saldırıları veya hata istismarlarını önlemek için doğru uyarıları oluşturacak şekilde çalışmalıdır.

Yardımcı olabilecek noktalar:
- Bir token kontratı için double entry point nasıl çalışır?
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Tebrikler!

Bu, bir [Forta bot](https://docs.forta.network/en/latest/) ile ilk deneyimin.

Forta, bağımsız node operatörlerinden oluşan merkeziyetsiz bir ağdır ve tüm işlemleri ile blok blok durum değişikliklerini olağan dışı işlemler ve tehditler açısından tarar. Bir sorun tespit edildiğinde, node operatörleri potansiyel riskler hakkında abonelere uyarılar gönderir; bu sayede kullanıcılar gerekli aksiyonları alabilir.

Buradaki örnek yalnızca eğitim amaçlıdır çünkü Forta botları henüz akıllı kontratlara entegre edilmemiştir. Forta’da bir bot, belirli koşulları veya olayları tespit eden bir kod scriptidir; uyarı yayımlandığında otomatik bir işlem tetiklemez - en azından şimdilik. Bu seviyede botun uyarısı, Forta'nın amaçlanan bot tasarımından farklı olarak, işlemde etkili bir şekilde geri dönüşü (revert) tetikler.

Detection botları, kontratların son implementasyonlarına çok bağlıdır ve bazıları yükseltilebilir olduğundan bot entegrasyonlarını bozabilir ama bunu önlemek için kontrat yükseltmelerini takip eden ve bu durumlara tepki veren özel bir bot oluşturmak da mümkündür. Nasıl yapılacağını [buradan](https://docs.forta.network/en/latest/quickstart/) öğrenebilirsin.

Ayrıca, OpenZeppelin’in [Compound protokolü ile yaptığı son işbirliği](https://compound.finance/governance/proposals/76) sırasında ortaya çıkan güncel bir güvenlik sorununu da geçtiğinizi belirtelim.

Double entry point özelliğine sahip token’lar, birçok protokolü etkileyebilecek karmaşık bir yapıdır. Çünkü genellikle her token için yalnızca bir kontrat olduğu varsayılır. Ama bu sefer durum farklıydı :) Neler olduğuna tüm detaylarıyla [buradan](https://blog.openzeppelin.com/compound-tusd-integration-issue-retrospective/) ulaşabilirsin.
5 changes: 5 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/elevator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Bu asansör binanın tepesine ulaşmana izin vermeyecek. Değil mi?

##### Yardımcı olabilecek noktalar:
* Bazen solidity, verdiği sözleri tutmakta pek iyi değildir.
* Bu `Elevator (asansör)`, bir `Building (bina)` içinden kullanılmak üzere tasarlanmıştır.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Bir arayüzde `view` fonksiyon belirleyicisini kullanarak durum (state) değişikliklerini önleyebilirsin. `pure` değiştiricisi de fonksiyonların durumu değiştirmesini engeller.
[Solidity dokümantasyonunu](http://solidity.readthedocs.io/en/develop/contracts.html#view-functions) mutlaka oku ve bu konudaki ince noktaları öğren.

Bu seviyeyi çözmenin alternatif bir yolu da, girdiye (input) bağlı olarak farklı sonuçlar döndüren fakat durumu değiştirmeyen bir view fonksiyonu yazmaktır, örneğin `gasleft()`.

5 changes: 5 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/gatekeeper1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Bu seviyeyi geçmek için bekçiyi (gatekeeper) atlatmalı ve katılımcı olarak kaydolmalısın.

##### Yardımcı olabilecek noktalar:
* Telephone ve Token seviyelerinde öğrendiklerini hatırla.
* Solidity dokümantasyonundaki özel fonksiyon `gasleft()` hakkında daha fazla bilgi edinebilirsin ([Units and Global Variables](https://docs.soliditylang.org/en/v0.8.3/units-and-global-variables.html) ve [External Function Calls](https://docs.soliditylang.org/en/v0.8.3/control-structures.html#external-function-calls)).
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Tebrikler! Şimdi ikinci bekçiyi aşmayı dene bakalım...
6 changes: 6 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/gatekeeper2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Bu bekçi seni biraz daha zorlayacak yeni engellerle tanıştırıyor. Bu seviyeyi geçmek için katılımcı olarak kaydolman gerekiyor.

##### Yardımcı olabilecek noktalar:
* İlk bekçiden geçerken öğrendiklerini hatırla — çünkü ilk kapı tamamen aynı.
* İkinci kapıdaki `assembly` anahtar kelimesi, Solidity’nin kendi sözdiziminin ötesinde düşük seviyeli (low-level) fonksiyonlara erişmeni sağlar. Daha fazla bilgi için [Solidity Assembly](http://solidity.readthedocs.io/en/v0.4.23/assembly.html) sayfasına göz at. Bu kapıda kullanılan `extcodesize` komutu, belirli bir adresteki sözleşme kodunun boyutunu döndürür - bu değerin ne zaman ve nasıl ayarlandığını anlamak için [yellow paper](https://ethereum.github.io/yellowpaper/paper.pdf)'ın 7. bölümüne bakabilirsin.
* Üçüncü kapıda kullanılan `^` karakteri bir bit düzeyinde XOR (özel veya) işlemidir ve burada bir başka yaygın bit düzeyi işlemini uygulamak için kullanılmıştır. ([Solidity cheatsheet](http://solidity.readthedocs.io/en/v0.4.23/miscellaneous.html#cheatsheet)'e göz at). Ayrıca Coin Flip seviyesi de bu meydan okumaya hazırlanmak için iyi bir başlangıç noktasıdır.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Harika gidiyorsun! Artık bekçiyi geçebildiğine göre, Ethereum mainnet üzerindeki [theCyber](https://etherscan.io/address/thecyber.eth#code), adlı merkeziyetsiz kulübe katılacak yeteneğe sahipsin. Bir şifre (passphrase) almak için kulüp başkanıyla [reddit](https://www.reddit.com/user/0age) veya [email](mailto:[email protected]) üzerinden iletişime geç. Ardından şifreyi kullanarak sözleşmeye [gatekeepertwo.thecyber.eth](https://etherscan.io/address/gatekeepertwo.thecyber.eth#code) üzerinden kaydol. (Sözleşme yalnızca ilk 128 katılımcıyı kabul ediyor).

6 changes: 6 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/gatekeeper3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Kapıları aş ve bir katılımcı ol.

##### Yardımcı olabilecek noktalar:
* Düşük seviyeli (low-level) fonksiyonların dönüş değerlerini hatırla.
* Anlam (semantic) konusunda dikkatli ol.
* Ethereum’da depolamanın (storage) nasıl çalıştığını tekrar gözden geçir.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Tebrikler! Daha fazla bilgi için [bunu](https://web3js.readthedocs.io/en/v1.2.9/web3-eth.html?highlight=getStorageAt#getstorageat) ve [bunu](https://medium.com/loom-network/ethereum-solidity-memory-vs-storage-how-to-initialize-an-array-inside-a-struct-184baf6aa2eb) okuyabilirsin.
7 changes: 7 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/goodsamaritan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Bu seviye; zengin, yardımsever ve kim isterse ona birkaç coin bağışlamaya hazır olan cömert ve iyi bir Samiriyeli'yi temsil ediyor.

Peki sen… onun cüzdanındaki tüm bakiyeyi sıfırlayabilir misin?

Yardımcı olabilecek noktalar:

- [Solidity Custom Errors](https://blog.soliditylang.org/2021/04/21/custom-errors/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Tebrikler!

Solidity’deki custom errors, tıpkı fonksiyon çağrılarında olduğu gibi 4 baytlık ‘selector’ ile tanımlanır. Bu hatalar, çağrı zinciri boyunca yukarı doğru iletilir (bubbled up) ve GoodSamaritan’ın `requestDonation()` fonksiyonunda görüldüğü gibi bir try-catch bloğundaki catch tarafından yakalanana kadar ilerler. Bu yüzden hatanın doğrudan çağrı yaptığın hedef kontrat (bu durumda Wallet) tarafından atıldığını varsaymak güvenli değildir. Çağrı zincirinin daha derinlerindeki herhangi bir diğer kontrat, aynı hatayı tanımlayıp beklenmedik bir yerde fırlatabilir; mesela saldırgan kontratındaki `notify(uint256 amount)` fonksiyonunda olduğu gibi.
9 changes: 9 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/higherorder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Kuralların çiğnenmek için var olduğu, kurnaz ve cesur olanların güç kazandığı bir dünya hayal et. Gizemlerle dolu Higher Order’a hoş geldin! Burada bir hazine seni bekliyor ve başkomutan en tepedeki koltuğunda hüküm sürüyor.

Amacın, Higher Order’ın komutanı olmak! Bol şans!

##### Yardımcı olabilecek noktalar:
* Bazen, `calldata` güvenilmez olabilir.
* Derleyiciler sürekli gelişiyor, adeta birer uzay gemisine dönüşüyorlar.


Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Higher Order meydan okumasını fethettin ve Dirty Higher Order Bits açığını kullanarak Komutan unvanını kazandın.Bu görevde, Solidity’nin derinliklerine inip byte’ları manipüle etmeyi ve fonksiyon türü kontrollerini aşmayı öğrendin.

Bu zafer, yalnızca teknik becerilerini göstermekle kalmıyor, aynı zamanda yaratıcı ve eleştirel düşünme yeteneğini de ortaya koyuyor.
1 change: 1 addition & 0 deletions client/src/gamedata/tr/descriptions/levels/impersonator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SlockDotIt’in yeni ürünü **ECLocker**, IoT kapı kilitlerini Solidity akıllı kontratlarla entegre ediyor ve yetkilendirme için Ethereum ECDSA kullanıyor. Geçerli bir imza kilide gönderildiğinde sistem `Open` event’ini yayınlayıp yetkili kontrolöre kapıyı açma imkânı tanıyor. SlockDotIt, ürünü piyasaya sürmeden önce güvenliğini değerlendirmek üzere seni işe aldı. Sistemi, herkesin kapıyı açabilmesini sağlayacak şekilde ele geçirebilir misin?
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Tebrikler! Eliptik eğri imzalarının sırlarını başarıyla çözdün!

[EIP-2'de](https://eips.ethereum.org/EIPS/eip-2), açıklandığı gibi, doğrulama mantığımızda şu an izin verilen `0 < s < secp256k1n` aralığı imza esnekliği (malleability) sorununa açık kapı bırakıyor. Bir imzayı alıp `s` değerini `s`’den `secp256k1n - s`’ye çevirip `v` değerini değiştirdiğinde (27 -> 28, 28 -> 27), ortaya çıkan imza aynı imzacıyı yine geri çıkaracaktır.

Ne yaptığını tam bilmiyorsan güvenli uygulamalar kullanmak önemli. ecrecover’ı güvenli kullanmayı öğrenmek için [OpenZeppelin implementasyonuna](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/448efeea6640bbbc09373f03fbc9c88e280147ba/contracts/utils/cryptography/ECDSA.sol#L128-L154) bak.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Büyülü Atlıkarınca’ya hoş geldin sevgili Anon, burada yaratıklar sonsuz bir büyü içinde dönüp durur. Bu sihirli, sınırsız dijital çarkta göz kamaştırıcı bir enerjiyle neşeyle dönüp dururlar.

Eğlenceye katılması için bir yaratık ekle, ama kuralı unutma, yoksa oyun yarım kalır.
Bir hayvan binecekse, tekrar kontrol ettiğinde dikkat et; aynı hayvan mutlaka orada olmalı!

Atlıkarıncanın sihirli kuralını bozabilir misin?
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Tebrikler, atlıkarıncanın sihirli kuralını bozdun! Düşük seviyeli veri manipülasyonu dünyasında, özellikle verileri depolama yuvalarında sıkıştırırken detayları hatırlamak hayati önem taşır.
11 changes: 11 additions & 0 deletions client/src/gamedata/tr/descriptions/levels/magicnum.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Bu seviyeyi çözmek için Ethernaut’a, `whatIsTheMeaningOfLife()` çağrısına doğru 32 baytlık sayı ile cevap veren bir `Solver` (Kontrat) vermen yeterli.

Kolay gibi, değil mi?
Eh… bir de bir sorun var.

Solver’ın kodu çok küçük olmalı. Çok çoooook küçük. En fazla 10 byte.

İpucu: Belki artık Solidity derleyicisinin konforundan çıkıp bunu elle yazmanın vakti gelmiştir O_o.
Doğru duydun: Raw EVM bytecode.

Bol şans!
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Tebrikler! Eğer bu seviyeyi çözdüysen, kendini Evrenin Efendisi olarak görebilirsin.

Hadi bakalım, odadaki rastgele bir nesneyi Magnum bakışınla delip geç. Şimdi de uzaktan hareket ettirmeyi dene; telekinezi yeteneklerin çalışmaya başlamış olabilir.

Loading