diff --git a/public/content/translations/tr/developers/docs/scaling/validium/index.md b/public/content/translations/tr/developers/docs/scaling/validium/index.md index ba745c10845..c20b0b80abe 100644 --- a/public/content/translations/tr/developers/docs/scaling/validium/index.md +++ b/public/content/translations/tr/developers/docs/scaling/validium/index.md @@ -1,23 +1,23 @@ --- title: Validium -description: Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak Validium'a giriş. +description: "Şu anda Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olarak Validium'a giriş." lang: tr sidebarDepth: 3 --- -Validium, [ZK toplamalar](/developers/docs/scaling/zk-rollups/) gibi geçerlilik kanıtlarını kullanarak işlemlerin bütünlüğünü sağlamaya çalışan ancak işlem verilerini Ethereum ana ağında saklamayan bir [ölçeklendirme çözümü](/developers/docs/scaling/)dür. Zincir dışı veri kullanılabilirliği birtakım artı ve eksileri içinde barındırırken ölçeklenebilirlik tarafında büyük gelişmelere yol açabilir (validium'lar saniyede [~9000 veya daha fazla işlem yapabilir](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)). +Validium, [ZK-toplamalar](/developers/docs/scaling/zk-rollups/) gibi geçerlilik kanıtları kullanarak işlemlerin bütünlüğünü sağlayan ancak işlem verilerini Ethereum Ana Ağı'nda saklamayan bir [ölçeklendirme çözümüdür](/developers/docs/scaling/). Zincir dışı veri kullanılabilirliği bazı ödünleri beraberinde getirse de, ölçeklenebilirlikte büyük gelişmelere yol açabilir (validium'lar saniyede [~9.000 veya daha fazla işlem](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) işleyebilir). ## Ön Koşullar {#prerequisites} -Bu konuyu anlamak için [Ethereum ölçeklendirme](/developers/docs/scaling/) ve [katman 2](/layer-2) sayfalarını daha önce okumuş olmalısınız. +[Ethereum ölçeklendirme](/developers/docs/scaling/) ve [katman 2](/layer-2) hakkındaki sayfamızı okuyup anlamış olmalısınız. ## Validium nedir? {#what-is-validium} -Validium'lar, Ethereum Ana Ağı'ndaki işlemleri zincir dışı veri kullanılabilirliği ve hesaplama yoluyla işleyerek çıktı hacmini artırmak için tasarlanmış ölçeklendirme çözümleridir. Sıfır bilgi toplamaları (ZK toplamaları) gibi validium'lar da Ethereum'daki zincir dışı işlemleri doğrulamak için [sıfır bilgi kanıtları](/glossary/#zk-proof) yayımlar. Bu da geçersiz durum geçişlerini önler ve validium zincirinin güvenlik garantisini artırır. +Validium'lar, Ethereum Ana Ağı'ndaki işlemleri zincir dışı veri kullanılabilirliği ve hesaplama yoluyla işleyerek çıktı hacmini artırmak için tasarlanmış ölçeklendirme çözümleridir. Sıfır bilgili toplamalar (ZK-toplamalar) gibi, validium'lar da Ethereum'daki zincir dışı işlemleri doğrulamak için [sıfır bilgili ispatlar](/glossary/#zk-proof) yayımlar. Bu da geçersiz durum geçişlerini önler ve validium zincirinin güvenlik garantisini artırır. -Bu "doğruluk kanıtları", ZK-SNARK'lar (Sıfır Bilgi Öz ve Etkileşimli Olmayan Bilgi Argümanı) ya da ZK-STARK'lar (Sıfır Bilgi Ölçeklenebilir Şeffaf Bilgi Argümanı) şeklinde olabilir. [Sıfır bilgi kanıtları](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) hakkında daha fazla bilgi. +Bu "doğruluk kanıtları", ZK-SNARK'lar (Sıfır Bilgi Öz ve Etkileşimli Olmayan Bilgi Argümanı) ya da ZK-STARK'lar (Sıfır Bilgi Ölçeklenebilir Şeffaf Bilgi Argümanı) şeklinde olabilir. [Sıfır bilgili ispatlar](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) hakkında daha fazla bilgi. -Validium kullanıcılarına ait fonlar, Ethereum üzerinde akıllı bir sözleşme ile kontrol edilir. Validiumlar, ZK toplamaları gibi neredeyse anında para çekme olanağı sunar; para çekme talebinin geçerlilik kanıtı ana ağda doğrulandıktan sonra, kullanıcılar işlemin [Merkle kanıtını](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) sağlayarak para çekebilirler. Merkle kanıtı, kullanıcının para çekme işleminin doğrulanmış bir işlem grubuna dahil edildiğini doğrulayarak zincir üstü sözleşmenin para çekme işlemini yapmasına olanak tanır. +Validium kullanıcılarına ait fonlar, Ethereum üzerinde akıllı bir sözleşme ile kontrol edilir. Validium'lar, ZK-toplamaları gibi neredeyse anında para çekme olanağı sunar; bir para çekme talebi için geçerlilik kanıtı Ana Ağ'da doğrulandıktan sonra, kullanıcılar [Merkle kanıtları](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) sağlayarak fonlarını çekebilirler. Merkle kanıtı, kullanıcının para çekme işleminin doğrulanmış bir işlem grubuna dahil edildiğini doğrulayarak zincir üstü sözleşmenin para çekme işlemini yapmasına olanak tanır. Ancak validium kullanıcıları fonlarını dondurabilir ve çekme işlemlerini kısıtlayabilir. Validium zincirindeki veri kullanılabilirliğini yönetenler, kullanıcılardan zincir dışı durum verilerini saklarsa bu durum meydana gelebilir. Kullanıcılar, işlem verilerine erişimleri olmadan fonların sahipliğini kanıtlamak ve para çekme işlemlerini gerçekleştirmek için gereken Merkle kanıtını hesaplayamazlar. @@ -27,9 +27,9 @@ Validium'lar ve ZK toplamaları arasındaki en büyük fark, veri kullanılabili Validium'lar, mevcut Ethereum zinciri üzerine inşa edilmiş ölçeklendirme protokolleridir. İşlemleri zincir dışında yürütmesine rağmen bir validium zinciri, aşağıdakiler de dahil olmak üzere Ana Ağ'da dağıtılan bir dizi akıllı sözleşme tarafından yönetilir: -1. **Doğrulayıcı sözleşmesi**: Doğrulayıcı sözleşmesi, durum güncellemeleri yapılırken validium operatörü tarafından sunulan kanıtların geçerliliğini doğrular. Bu doğrulama, zincir dışı işlemlerin doğruluğunu tasdik eden doğruluk kanıtlarını ve zincir dışı işlem verilerinin varlığını doğrulayan veri kullanılabilirliği kanıtlarını içerir. +1. **Doğrulayıcı sözleşmesi**: Doğrulayıcı sözleşmesi, durum güncellemeleri yapılırken validium operatörü tarafından sunulan kanıtların geçerliliğini doğrular. Bu, zincir dışı işlemlerin doğruluğunu tasdik eden geçerlilik kanıtlarını ve zincir dışı işlem verilerinin varlığını doğrulayan veri kullanılabilirliği kanıtlarını içerir. -2. **Ana sözleşme **: Ana sözleşme, blok üreticileri tarafından sunulan durum taahhütlerini (Merkle köklerini) depolar ve doğruluk kanıtı zincir üzerinde doğrulandıktan sonra validium'un durumunu günceller. Bu sözleşme, aynı zamanda validium zincirine para yatırma ve çekme işlemlerini de gerçekleştirir. +2. **Ana sözleşme**: Ana sözleşme, blok üreticileri tarafından sunulan durum taahhütlerini (Merkle köklerini) depolar ve bir geçerlilik kanıtı zincir üstünde doğrulandıktan sonra validium'un durumunu günceller. Bu sözleşme, aynı zamanda validium zincirine para yatırma ve çekme işlemlerini de gerçekleştirir. Validium'lar, aşağıdaki konularda Ethereum ana zincirine bağımlıdır: @@ -39,7 +39,7 @@ Validium üzerinde gerçekleştirilen işlemler, bir üst incir geçerliliklerin ### Güvenlik {#security} -Uzlaşma katmanı görevi gören Ethereum, validium üzerindeki durum geçişlerinin geçerliliğini de garanti eder. Validium zincirinde yürütülen zincir dışı işlemler, Ethereum üzerinde bir akıllı sözleşme aracılığıyla doğrulanır. +Uzlaşma katmanı görevi gören Ethereum, validium üzerindeki durum geçişlerinin geçerliliğini de garanti eder. Validium zincirinde yürütülen zincir dışı işlemler, temel Ethereum katmanındaki bir akıllı sözleşme aracılığıyla doğrulanır. Zincir üstü doğrulayıcı sözleşmesi kanıtı geçersiz bulursa işlemler reddedilir. Bu da, operatörlerin validium'un durumunu güncellemeden önce Ethereum protokolü tarafından uygulanan geçerlilik koşullarının karşılanması gerektiği anlamına gelir. @@ -47,7 +47,7 @@ Zincir üstü doğrulayıcı sözleşmesi kanıtı geçersiz bulursa işlemler r ### İşlemler {#transactions} -Kullanıcılar, validium zincirinde işlemleri yürütmekten sorumlu bir düğüm olan operatöre işlemleri gönderir. Validium'ların bazıları, zinciri yürütmek için tek bir operatör kullanabilir veya dönüşümlü operatörler için bir [hisse ispatı (PoS)](/developers/docs/consensus-mechanisms/pos/) mekanizmasına güvenebilir. +Kullanıcılar, validium zincirinde işlemleri yürütmekten sorumlu bir düğüm olan operatöre işlemleri gönderir. Bazı validium'lar zinciri yürütmek için tek bir operatör kullanabilir veya operatörleri döndürmek için [hisse ispatı (PoS)](/developers/docs/consensus-mechanisms/pos/) mekanizmasına güvenebilir. Operatör, işlemleri bir yığın halinde toplar ve kanıtlanmak üzere bir kanıtlama devresine gönderir. Kanıtlama devresi, işlem yığınını (ve diğer ilgili verileri) girdi olarak kabul eder ve işlemlerin doğru şekilde gerçekleştirildiğini doğrulayan bir doğruluk kanıtı sunar. @@ -65,17 +65,17 @@ Bir validium kullanıcısı, fonları Ana Ağ'a geri çekmek için bir çekme i Validium protokolü, sansür karşıtı bir mekanizma olarak kullanıcıların operatöre başvurmadan doğrudan validium sözleşmesinden çekilmelerine olanak tanır. Bu durumda, kullanıcıların doğrulayıcı sözleşmesine hesabın durum köküne dahil edildiğini gösteren bir Merkle kanıtı sunması gerekir. Kanıt kabul edilirse, kullanıcı fonlarını validium'dan çıkarmak için ana sözleşmenin çekme işlevini çağırabilir. -### Toplu gönderme {#batch-submission} +### Toplu gönderim {#batch-submission} Operatör, toplu işlemler gerçekleştirdikten sonra ilişkili doğruluk kanıtını doğrulayıcı sözleşmesine gönderir ve ana sözleşmeye yeni bir durum kökü önerir. Kanıt geçerliyse, ana sözleşme validium'un durumunu günceller ve partideki işlemlerin sonucunu nihai hale getirir. -Bir ZK toplamasının aksine, validium'daki blok üreticilerinin işlem partileri (yalnızca blok başlıkları) için işlem verilerini yayımlamaları gerekmez. Bu da validium'u, ana Ethereum zincirindeki durum verilerini `calldata` olarak yayımlayan "hibrit" ölçeklendirme protokollerinin (yani [katman 2](/layer-2/)) aksine tamamen zincir dışı bir ölçekleme protokolü yapar. +Bir ZK toplamasının aksine, validium'daki blok üreticilerinin işlem partileri (yalnızca blok başlıkları) için işlem verilerini yayımlamaları gerekmez. Bu, ana Ethereum zincirinde blob verileri, `calldata` veya her ikisinin bir kombinasyonunu kullanarak durum verilerini yayımlayan "hibrit" ölçeklendirme protokollerinin (yani, [katman 2](/layer-2/)) aksine, validium'u tamamen zincir dışı bir ölçeklendirme protokolü yapar. -### Veri uygunluğu {#data-availability} +### Veri kullanılabilirliği {#data-availability} -Validium operatörleri, belirtildiği gibi Ethereum Ana Ağı'nın tüm işlem verilerinin depoladığı bir zincir dışı veri kullanılabilirliği modeli ile çalışır. Validium'un zincir üstündeki verilerinin kapladığı düşük alan, ölçeklenebilirliği artırır (verim, Ethereum'un veri işleme kapasitesiyle sınırlı değildir) ve kullanıcı ücretlerini azaltır (`calldata` yayımlama maliyeti daha düşüktür). +Belirtildiği gibi, validium'lar, operatörlerin tüm işlem verilerini Ethereum Ana Ağı'nın dışında sakladığı zincir dışı bir veri kullanılabilirliği modeli kullanır. Validium'un düşük zincir üstü veri kaplama alanı, ölçeklenebilirliği artırır (verim, Ethereum'un veri işleme kapasitesiyle sınırlı değildir) ve kullanıcı ücretlerini azaltır (zincir üstünde veri yayımlama maliyeti daha düşüktür). -Ancak zincir dışı veri kullanılabilirliği bir sorun teşkil eder: Merkle kanıtları oluşturmak veya doğrulamak için gerekli olan veriler kullanılamayabilir. Operatörlerin kötü niyetli davranması durumunda kullanıcılar zincir üstündeki sözleşmeden fon çekemeyebilir. +Ancak zincir dışı veri kullanılabilirliği bir sorun teşkil eder: Merkle kanıtları oluşturmak veya doğrulamak için gerekli olan veriler kullanılamayabilir. Bu, operatörlerin kötü niyetli davranması durumunda kullanıcıların zincir üstü sözleşmeden fon çekemeyebileceği anlamına gelir. Çeşitli validium çözümleri, bu sorunu durum verilerinin tutulduğu depolamayı merkeziyetsizleştirerek çözmeyi amaçlar. Bu, blok üreticilerini zincir dışı verileri depolamaktan ve istek üzerine kullanıcılara sunmaktan sorumlu "veri kullanılabilirliği yöneticilerine" veri göndermeye zorlamayı içerir. @@ -87,7 +87,7 @@ Validium'lar, veri kullanılabilirliği yönetimine yaklaşımları açısından Bazı validium çözümleri, zincir dışı verilerin kullanılabilirliğini garanti altına almak için durumun kopyalarını depolamak ve veri kullanılabilirliği kanıtı sağlamak üzere toplu olarak veri kullanılabilirliği kurulu (DAC) olarak da bilinen bir grup güvenilir kuruluşu kullanır. DAC'lerin uygulanması daha kolaydır ve üyelik düşük olduğu için daha az koordinasyon gerektirir. -Bununla birlikte kullanıcılar, gerektiğinde (örneğin, Merkle kanıtları oluşturmak için) verileri kullanılabilir hale getirmesi için DAC'ye güvenmek zorundadır. Veri kullanılabilirliği kurullarının üyelerinin sonrasında zincir dışı verileri saklayabilen [kötü niyetli bir aktör tarafından ele geçirilmesi](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) olasılığı vardır. +Bununla birlikte kullanıcılar, gerektiğinde (örneğin, Merkle kanıtları oluşturmak için) verileri kullanılabilir hale getirmesi için DAC'ye güvenmek zorundadır. Veri kullanılabilirliği kurullarının üyelerinin, daha sonra zincir dışı verileri alıkoyabilecek [kötü niyetli bir aktör tarafından ele geçirilme](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) olasılığı vardır. [Validium'lardaki veri kullanılabilirliği kurulları hakkında daha fazla bilgi](https://medium.com/starkware/data-availability-e5564c416424). @@ -97,33 +97,33 @@ Diğer validium'lar, katılımcıların rollerini üstlenmeden önce jetonları Teminatlı bir veri kullanılabilirliği şemasında, gerekli kilidi sağlayan herkes zincir dışı verileri tutmakla görevlendirilebilir. Bu, uygun veri kullanılabilirliği yöneticileri havuzunu genişleterek veri kullanılabilirliği kurullarını (DAC'ler) etkileyen merkezileşmeyi azaltır. Daha da önemlisi, bu yaklaşım, validium'da çevrimdışı verileri güvence altına almak için güvenilir taraflar atamaktan çok daha güvenli olan kötü amaçlı faaliyetleri önlemek için kripto ekonomik teşviklere dayanır. -[Validium'larda teminatlı veri kullanılabilirliği konusunda daha fazla bilgi](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf). +[Validium'larda teminatlı veri kullanılabilirliği hakkında daha fazla bilgi](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf). ## İstemler ve validium {#volitions-and-validium} Validium birçok avantaj sunsa da bunları elde ederken başka şeylerden vazgeçmeniz gerekir (en önemlisi, veri kullanılabilirliğidir). Birçok ölçeklendirme çözümünde olduğu gibi validiumlar da belirli kullanım durumlarına uygundur ve istemler işte bu nedenle oluşturulmuştur. -İstemler, ZK toplamaları ile validium'ları bir araya getirerek kullanıcıların bu iki ölçeklendirme çözümü arasında geçişler yapmasını sağlar. İstemler sayesinde kullanıcılar, belirli işlemler için validium'un zincir dışı veri kullanılabilirliğinden yararlanabilirken gerektiğinde zincir içi veri kullanılabilirliği çözümlerine (zk toplamaları) geçme özgürlüğünü de korur. Bu, kullanıcılara aslında kendi özel durumlarına göre neyi tercih edip neyden vazgeçeceklerini tercih etme özgürlüğü verir. +İstemler, ZK toplamaları ile validium'ları bir araya getirerek kullanıcıların bu iki ölçeklendirme çözümü arasında geçişler yapmasını sağlar. İstemler sayesinde kullanıcılar, belirli işlemler için validium'un zincir dışı veri kullanılabilirliğinden yararlanabilirken gerektiğinde zincir içi veri kullanılabilirliği çözümlerine (ZK-toplama) geçme özgürlüğünü de korur. Bu, kullanıcılara aslında kendi özel durumlarına göre neyi tercih edip neyden vazgeçeceklerini tercih etme özgürlüğü verir. Merkeziyetsiz bir borsa (DEX), yüksek miktarlı işlemler için validium'un ölçeklenebilir ve özel altyapısını kullanmayı tercih edebilir. Ayrıca ZK toplamalarının daha yüksek güvenlik garantilerini ve güven gerektirmezliğini isteyen kullanıcılar için ZK toplamaları da kullanabilir. ## Validium'lar ve EVM uyumluluğu {#validiums-and-evm-compatibility} -ZK toplamaları gibi validium'lar da en çok jeton takasları ve ödemeler gibi basit uygulamalar için uygundur. Sıfır bilgili ispat kullanan bir devrede [EVM](/developers/docs/evm/) talimatlarını kanıtlamanın önemli yükü göz önüne alındığında, validium'lar arasında genel hesaplamayı ve akıllı sözleşme yürütmeyi desteklemek zordur. +ZK toplamaları gibi validium'lar da en çok jeton takasları ve ödemeler gibi basit uygulamalar için uygundur. Bir sıfır bilgili ispat devresinde [EVM](/developers/docs/evm/) talimatlarını kanıtlamanın getirdiği önemli ek yük göz önüne alındığında, validium'lar arasında genel hesaplamayı ve akıllı sözleşme yürütmeyi desteklemek zordur. Bazı validium projeleri, EVM uyumlu dilleri (örn. Solidity, Vyper) verimli kanıtlama için optimize edilmiş özel bayt kodu oluşturmak üzere derleyerek bu sorunu aşmaya çalışır. Bu yaklaşımın dezavantajlarından biri, yeni sıfır bilgili ispat dostu VM'lerin önemli EVM işlem kodlarını desteklememe olasılığı ve aynı zamanda geliştiricilerin en iyi deneyim için doğrudan üst düzey dilde yazmaları gerekliliğidir. Bu da, daha fazla sorun yaratır: geliştiricileri tamamen yeni bir geliştirme yığınıyla uygulamalar oluşturmaya zorlar ve mevcut Ethereum altyapısıyla uyumluluğu bozar. -Ancak bazı ekipler, ZK ispatlı devreler için mevcut EVM işlem kodlarını optimize etmeye çalışıyor. Bu, program yürütmenin doğruluğunu doğrulamak için kanıtlar üreten EVM uyumlu bir VM olan sıfır bilgili bir Ethereum Sanal Makinası'nın (zkEVM) geliştirilmesiyle sonuçlanacaktır. Validium zincirleri zkEVM sayesinde akıllı sözleşmeleri zincir dışında yürütebilir ve Ethereum üzerinde zincir dışı bir hesaplamayı (yeniden yürütmek zorunda kalmadan) doğrulamak için doğruluk kanıtları sunabilir. +Ancak bazı ekipler, ZK ispatlı devreler için mevcut EVM işlem kodlarını optimize etmeye çalışıyor. Bu, program yürütmenin doğruluğunu doğrulamak için kanıtlar üreten EVM uyumlu bir VM olan sıfır bilgili bir Ethereum Sanal Makinası'nın (zkEVM) geliştirilmesiyle sonuçlanacaktır. zkEVM ile validium zincirleri, akıllı sözleşmeleri zincir dışında yürütebilir ve Ethereum üzerinde bir zincir dışı hesaplamayı (yeniden yürütmek zorunda kalmadan) doğrulamak için geçerlilik kanıtları sunabilir. [zkEVM'ler hakkında daha fazla bilgi](https://www.alchemy.com/overviews/zkevm). -## Validium'lar Ethereum'u nasıl ölçeklendirir? {#scaling-ethereum-with-validiums} +## Validium'lar Ethereum'u nasıl ölçeklendirir? Ethereum'u validium'larla ölçeklendirme {#scaling-ethereum-with-validiums} -### 1. Zincir dışında veri depolama {#off-chain-data-storage} +### 1. Zincir dışı veri depolama {#offchain-data-storage} -İyimser toplamalar ve ZK toplamaları gibi katman 2 ölçeklendirme projeleri, bazı işlem verilerini L1'de yayımlayarak saf zincir dışında ölçeklendirme protokollerinin (örneğin [Plazma](/developers/docs/scaling/plasma/)) sonsuz ölçeklenebilirliğini güvenlik için takas ederler. Bu da toplamaların ölçeklenebilirlik özelliklerinin Ethereum Ana Ağı üzerindeki veri bant genişliği ile sınırlı olduğu anlamına gelir ([veri parçalama](/roadmap/danksharding/) tam da bu nedenle Ethereum'un veri depolama kapasitesini geliştirmeyi önerir). +İyimser toplamalar ve ZK-toplamalar gibi Katman 2 ölçeklendirme projeleri, L1'de bazı işlem verilerini yayımlayarak, saf zincir dışı ölçeklendirme protokollerinin (ör. [Plazma](/developers/docs/scaling/plasma/)) sonsuz ölçeklenebilirliğini güvenlikle takas eder. Ancak bu, toplamaların ölçeklenebilirlik özelliklerinin Ethereum Ana Ağı'ndaki veri bant genişliğiyle sınırlı olduğu anlamına gelir (bu nedenle [veri parçalama](/roadmap/danksharding/), Ethereum'un veri depolama kapasitesini iyileştirmeyi önerir). -Validium'lar, tüm işlem verilerini zincir dışında tutarak ve sadece durum güncellemelerini ana Ethereum zincirine aktarmak için durum taahhütlerini (ve doğruluk kanıtlarını) göndererek ölçeklenebilirliğe ulaşır. Bununla birlikte doğruluk kanıtlarının varlığı, validium'lara Plazma ve [yan zincirler](/developers/docs/scaling/sidechains/) dahil olmak üzere diğer saf zincir dışı ölçeklendirme çözümlerinden daha yüksek güvenlik garantileri sağlar. Validium tasarımları, Ethereum'un zincir dışı işlemleri doğrulamadan önce işlemesi gereken veri miktarını azaltarak Ana Ağ'da verimi büyük ölçüde artırır. +Validium'lar, tüm işlem verilerini zincir dışında tutarak ve durum güncellemelerini ana Ethereum zincirine aktarırken yalnızca durum taahhütlerini (ve geçerlilik kanıtlarını) göndererek ölçeklenebilirlik sağlar. Ancak geçerlilik kanıtlarının varlığı, validium'lara Plazma ve [yan zincirler](/developers/docs/scaling/sidechains/) de dâhil olmak üzere diğer saf zincir dışı ölçeklendirme çözümlerinden daha yüksek güvenlik garantileri verir. Validium tasarımları, Ethereum'un zincir dışı işlemleri doğrulamadan önce işlemesi gereken veri miktarını azaltarak Ana Ağ'da verimi büyük ölçüde artırır. ### 2. Özyinelemeli kanıtlar {#recursive-proofs} @@ -133,33 +133,34 @@ Genellikle, validium operatörünün doğrulama için Ethereum'a sunduğu her do ## Validium'un artıları ve eksileri {#pros-and-cons-of-validium} -| Artıları | Eksileri | -| ------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Doğruluk kanıtları, zincir dışı işlemlerin bütünlüğünü şart koşar ve operatörlerin geçersiz durum güncellemelerini sonuçlandırmasını engeller. | Doğruluk kanıtları üretmek özel donanım gerektirir ve bu durum, merkezileştirme açısından risk teşkil eder. | -| Kullanıcılar için sermaye verimliliğini artırır (fonları Ethereum'a geri çekmede gecikme olmaz) | Akıllı sözleşmeler/genel hesaplamalar için sınırlı destek; geliştirme için özel diller gereklidir. | -| Yüksek değere sahip uygulamalarda kullanılan sahtecilik kanıtı tabanlı sistemler gibi belirli ekonomik saldırılara karşı savunmasız değillerdir. | ZK kanıtları oluşturmak için gereken yüksek hesaplama gücü; düşük verimli uygulamalar için uygun maliyetli değildir. | -| Ethereum Ana Ağı'na calldata göndermeyerek kullanıcılar için gaz ücretlerini düşürür. | Öznel kesinlik süresi (bir ZK kanıtı oluşturmak 10-30 dakika alır) daha yavaştır ancak uyuşmazlık süresi gecikmesi olmadığı için tam kesinliğe daha hızlı ulaşır. | -| İşlem gizliliğini ve ölçeklenebilirliği ön planda tutan alım satım ya da blokzincir oyunları gibi belirli kullanım durumları için uygundur. | Merkle sahiplik kanıtlarının oluşturulması, zincir dışı verilerin her zaman kullanılabilir olmasını gerektirdiğinden kullanıcıların fon çekmeleri engellenebilir. | -| Zincir dışında veri kullanılabilirliği, daha yüksek düzeyde verim sağlar ve ölçeklenebilirliği artırır. | Güvenlik modeli, tamamen kriptografik güvenlik mekanizmalarına dayanan ZK toplamalarının aksine, güven varsayımlarına ve kriptoekonomik teşviklere dayanır. | +| Artıları | Eksileri | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Geçerlilik kanıtları, zincir dışı işlemlerin bütünlüğünü zorunlu kılar ve operatörlerin geçersiz durum güncellemelerini sonuçlandırmasını engeller. | Doğruluk kanıtları üretmek özel donanım gerektirir ve bu durum, merkezileştirme açısından risk teşkil eder. | +| Kullanıcılar için sermaye verimliliğini artırır (fonları Ethereum'a geri çekmede gecikme olmaz) | Akıllı sözleşmeler/genel hesaplamalar için sınırlı destek; geliştirme için özel diller gereklidir. | +| Yüksek değere sahip uygulamalarda kullanılan sahtecilik kanıtı tabanlı sistemler gibi belirli ekonomik saldırılara karşı savunmasız değillerdir. | ZK kanıtları oluşturmak için gereken yüksek hesaplama gücü; düşük verimli uygulamalar için uygun maliyetli değildir. | +| Ethereum Ana Ağı'na calldata göndermeyerek kullanıcılar için gaz ücretlerini düşürür. | Öznel kesinlik süresi (bir ZK kanıtı oluşturmak 10-30 dakika alır) daha yavaştır ancak uyuşmazlık süresi gecikmesi olmadığı için tam kesinliğe daha hızlı ulaşır. | +| İşlem gizliliğini ve ölçeklenebilirliği ön planda tutan alım satım ya da blokzincir oyunları gibi belirli kullanım durumları için uygundur. | Merkle sahiplik kanıtlarının oluşturulması, zincir dışı verilerin her zaman kullanılabilir olmasını gerektirdiğinden kullanıcıların fon çekmeleri engellenebilir. | +| Zincir dışında veri kullanılabilirliği, daha yüksek düzeyde verim sağlar ve ölçeklenebilirliği artırır. | Güvenlik modeli, tamamen kriptografik güvenlik mekanizmalarına dayanan ZK toplamalarının aksine, güven varsayımlarına ve kriptoekonomik teşviklere dayanır. | -### Validium/İstemler kullanın {#use-validium-and-volitions} +### Validium/İstemleri kullanın {#use-validium-and-volitions} Merkeziyetsiz uygulamalarınıza entegre edebileceğiniz Validium ve istemlere ilişkin uygulamalar sağlayan birden çok proje mevcuttur: -**StarkWare StarkEx** - _StarkEx doğruluk kanıtlarını kullanan bir Ethereum Katman 2 (L2) ölçeklenebilirlik çözümüdür. ZK Toplamalarında ya da Validium veri kullanılabilirlik modlarında çalışabilir._ +**StarkWare StarkEx** - _StarkEx, geçerlilik kanıtlarına dayalı bir Ethereum Katman 2 (L2) ölçeklenebilirlik çözümüdür._ ZK Toplamalarında ya da Validium veri kullanılabilirlik modlarında çalışabilir._ - [Belgeler](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) - [Web sitesi](https://starkware.co/starkex/) -**Matter Labs zkPorter** - _zkPorter, zkRollup ve parçalama fikirlerini birleştirerek veri kullanılabilirliğini hibrit bir yaklaşımla ele alan bir Katman 2 ölçeklendirme protokolüdür. Her biri kendi veri kullanılabilirliği politikasına sahip, keyfi çok sayıda parçayı destekleyebilir._ +**Matter Labs zkPorter** - _zkPorter, zkRollup ve parçalama fikirlerini birleştiren hibrit bir yaklaşımla veri kullanılabilirliğini ele alan bir Katman 2 ölçeklendirme protokolüdür._ Her biri kendi veri kullanılabilirliği politikasına sahip, keyfi çok sayıda parçayı destekleyebilir._ - [Blog](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) - [Belgeler](https://docs.zksync.io/zksync-protocol/rollup/data-availability) - [Web sitesi](https://zksync.io/) -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Validium ve Katman 2 Yan Yana - Sayı No: 99](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) -- [ZK toplamaları ve Validium](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) -- [İstem ve Yükselen Veri Kullanılabilirliği spektrumu](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) -- [Toplamalar, Validium'lar ve İstemler: En Yeni Ethereum Ölçeklendirme Çözümleri Hakkında Bilgi Edinin](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) +- [Validium ve Katman 2 Karşılaştırması — Sayı No. 99](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) +- [ZK-toplamalar ve Validium karşılaştırması](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) +- [İstem ve Gelişmekte Olan Veri Kullanılabilirliği Spektrumu](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) +- [Toplamalar, Validium'lar ve İstemler: En Popüler Ethereum Ölçeklendirme Çözümleri Hakkında Bilgi Edinin](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) +- [Ethereum Toplamaları için Pratik Kılavuz](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) diff --git a/public/content/translations/tr/developers/docs/scaling/zk-rollups/index.md b/public/content/translations/tr/developers/docs/scaling/zk-rollups/index.md index 6b6e32e4ccd..38d6e73b2b6 100644 --- a/public/content/translations/tr/developers/docs/scaling/zk-rollups/index.md +++ b/public/content/translations/tr/developers/docs/scaling/zk-rollups/index.md @@ -1,52 +1,52 @@ --- -title: Sıfır-bilgi toplamaları -description: Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olan sıfır-bilgi toplamaları'na giriş. +title: "Sıfır-bilgi toplamaları" +description: "Ethereum topluluğu tarafından kullanılan bir ölçeklendirme çözümü olan sıfır-bilgi toplamaları'na giriş." lang: tr --- -Sıfır-Bilgi Toplamaları (ZK-toplamaları), hesaplamaları ve durum depolamalarını zincir dışına taşıyarak Ethereum Ana Ağı'ndaki verimi artıran katman 2 [ölçeklendirme çözümleridir](/developers/docs/scaling/). ZK-toplamaları, bir gruptaki binlerce işlemi gerçekleştirip sonrasında asgari büyüklükte bir özetini Ana Ağ'a aktarabilir. Bu özet veriler, Ethereum durumunda yapılması gereken değişiklikleri ve bu değişikliklerin doğru olduğuna dair bazı kriptografik kanıtları tanımlar. +Sıfır bilgi toplamaları (ZK-toplamaları), hesaplamayı ve durum depolamayı zincir dışına taşıyarak Ethereum Ana Ağı'ndaki iş hacmini artıran katman 2 [ölçeklendirme çözümleridir](/developers/docs/scaling/). ZK-toplamaları, bir gruptaki binlerce işlemi gerçekleştirip sonrasında asgari büyüklükte bir özetini Ana Ağ'a aktarabilir. Bu özet veriler, Ethereum durumunda yapılması gereken değişiklikleri ve bu değişikliklerin doğru olduğuna dair bazı kriptografik kanıtları tanımlar. ## Ön Koşullar {#prerequisites} -Bu sayfayı anlamak için [Ethereum ölçeklendirme](/developers/docs/scaling/) ve [katman 2](/layer-2) yazılarını okumalısın. +[Ethereum ölçeklendirme](/developers/docs/scaling/) ve [katman 2](/layer-2) hakkındaki sayfamızı okuyup anlamış olmalısınız. ## Sıfır-Bilgi Toplamaları nedir? {#what-are-zk-rollups} -**Sıfır-bilgi toplamaları (SB-toplamaları)** zincir dışında gerçekleştirilen, bir grubun içine sarmalamanmış (veya 'toplanmış') işlemlerdir. Zincir dışı hesaplamalar, blokzincire gönderilmesi gereken veri miktarını azaltır. SB-toplamaları tüm işlemleri ayrı ayrı göndermek yerine bütün işlemleri temsil eden bir özet yığını gönderir. Ayrıca değişikliklerin gerçekliğini kanıtlayan [doğruluk kanıtları](/glossary/#validity-proof) da üretirler. +**Sıfır bilgi toplamaları (ZK-toplamaları)**, zincir dışında yürütülen işlemleri gruplar halinde bir araya getirir (veya 'toplar'). Zincir dışı hesaplamalar, blokzincire gönderilmesi gereken veri miktarını azaltır. SB-toplamaları tüm işlemleri ayrı ayrı göndermek yerine bütün işlemleri temsil eden bir özet yığını gönderir. Ayrıca değişikliklerinin doğruluğunu kanıtlamak için [doğruluk kanıtları](/glossary/#validity-proof) üretirler. -ZK-toplamasının durumu, Ethereum ağına dağıtılmış bir akıllı sözleşme ile sürdürülür. Bu durumu güncellemek için ZK-toplama düğümleri doğrulama amaçlı bir doğruluk kanıtı sunmak zorundadır. Bahsedildiği üzere doğruluk kanıtı, toplama tarafından önerilen durum değişikliğinin gerçekten verilen toplu işlemin yürütülmesinin sonucu olduğuna dair kriptografik bir güvencedir. Bu, bütün işlem verilerini zincire ekleyen [iyimser toplamaların](/developers/docs/scaling/optimistic-rollups/) aksine, ZK-toplamalarında işlemlerin Ethereum üzerinde sonlandırılması için doğruluk kanıtlarının yeterli olduğu anlamına gelir. +ZK-toplamasının durumu, Ethereum ağına dağıtılmış bir akıllı sözleşme ile sürdürülür. Bu durumu güncellemek için ZK-toplama düğümleri doğrulama amaçlı bir doğruluk kanıtı sunmak zorundadır. Bahsedildiği üzere doğruluk kanıtı, toplama tarafından önerilen durum değişikliğinin gerçekten verilen toplu işlemin yürütülmesinin sonucu olduğuna dair kriptografik bir güvencedir. Bu, ZK-toplamalarının, [iyimser toplamalar](/developers/docs/scaling/optimistic-rollups/) gibi tüm işlem verilerini zincir üstünde yayımlamak yerine, Ethereum'daki işlemleri sonuçlandırmak için yalnızca doğruluk kanıtları sağlaması gerektiği anlamına gelir. -Fonları ZK-toplamasından Ethereum'a taşırken gecikme olmaz; çünkü çıkış işlemleri, ZK-toplama sözleşmesi doğruluk kanıtını doğruladıktan sonra yürütülür. Aksine, iyimser toplamalardan fon çekmek, herkesin çıkış işlemine bir [sahtecilik kanıtı](/glossary/#fraud-proof) ile itiraz etmesine olanak tanımak adına bir gecikmeye tabidir. +Fonları ZK-toplamasından Ethereum'a taşırken gecikme olmaz; çünkü çıkış işlemleri, ZK-toplama sözleşmesi doğruluk kanıtını doğruladıktan sonra yürütülür. Tersine, iyimser toplamlardan para çekme, herhangi birinin çıkış işlemine bir [sahtecilik kanıtı](/glossary/#fraud-proof) ile itiraz etmesine izin vermek için bir gecikmeye tabidir. -ZK-toplamaları, işlemleri Ethereum üzerine `calldata` olarak yazar. `calldata`, akıllı sözleşme fonksiyonlarına yapılan harici çağrılara dahil edilen verilerin depolandığı yerdir. `calldata` içindeki bilgiler, blokzincirde yayımlanır ve herkesin toplamanın durumunu bağımsız olarak yeniden yapılandırmasına olanak tanır. ZK-toplamaları işlem verilerini azaltmak için sıkıştırma teknikleri kullanır. Örneğin hesaplar adres yerine bir indeksle temsil edilir ve bu işlem 28 baytlık veri tasarrufu sağlar. Zincir üstünde veri yayımlama, toplamalar için çok masraflıdır. Bu sebeple verilerin sıkıştırılması kullanıcı ücretlerini azaltabilir. +ZK-toplamaları işlemleri Ethereum'a `calldata` olarak yazar. `calldata`, akıllı sözleşme işlevlerine yapılan harici çağrılara dahil edilen verilerin depolandığı yerdir. `calldata` içindeki bilgiler, blokzincirde yayımlanır ve herkesin toplamanın durumunu bağımsız olarak yeniden yapılandırmasına olanak tanır. ZK-toplamaları işlem verilerini azaltmak için sıkıştırma teknikleri kullanır. Örneğin hesaplar adres yerine bir indeksle temsil edilir ve bu işlem 28 baytlık veri tasarrufu sağlar. Zincir üstü veri yayımlama, toplamalar için önemli bir maliyettir, bu nedenle veri sıkıştırması kullanıcı ücretlerini azaltabilir. -## ZK-toplamaları Ethereum ile nasıl etkileşime girer? {#zk-rollups-and-ethereum} +## ZK-toplamaları Ethereum ile nasıl etkileşime girer? ZK-toplamaları ve Ethereum {#zk-rollups-and-ethereum} -Bir ZK-toplama zinciri, Ethereum blokzincirinin üzerinde çalışan ve zincir üstünde Ethereum akıllı sözleşmeleri tarafından yönetilen zincir dışı bir protokoldür. ZK-toplamaları işlemleri Ana Ağ'ın dışında gerçekleştirir, fakat zincir dışı işlem gruplarını periyodik olarak bir zincir üstü toplama sözleşmesine işler. Bu işlem kaydı, Ethereum blokzinciri gibi değişmezdir ve ZK-toplama zincirini oluşturur. +Bir ZK-toplama zinciri, Ethereum blokzincirinin üzerinde çalışan ve zincir üstü Ethereum akıllı sözleşmeleri tarafından yönetilen zincir dışı bir protokoldür. ZK-toplamaları işlemleri Ana Ağ'ın dışında gerçekleştirir, fakat zincir dışı işlem gruplarını periyodik olarak bir zincir üstü toplama sözleşmesine işler. Bu işlem kaydı, Ethereum blokzinciri gibi değişmezdir ve ZK-toplama zincirini oluşturur. ZK-toplamaların ana mimarisi şu bileşenlerden oluşur: -1. **Zincir üstündeki sözleşmeler**: Bahsedildiği üzere, ZK-toplamaları Ethereum üzerinde çalışan akıllı sözleşmeler ile kontrol edilir. Bu, toplama bloklarını depolayan, yatırımları takip eden ve durum güncellemelerini gözlemleyen ana sözleşmeyi içerir. Diğer bir zincir üstü sözleşme (doğrulayıcı sözleşmesi), blok üreticileri tarafından gönderilen sıfır bilgi kanıtlarını doğrular. Böylece Ethereum, ZK-toplaması için ana katman veya "katman 1" olarak hizmet verir. +1. **Zincir üstü sözleşmeler**: Bahsedildiği gibi, ZK-toplama protokolü, Ethereum'da çalışan akıllı sözleşmeler tarafından kontrol edilir. Bu, toplama bloklarını depolayan, yatırımları takip eden ve durum güncellemelerini gözlemleyen ana sözleşmeyi içerir. Başka bir zincir üstü sözleşme (doğrulayıcı sözleşmesi), blok üreticileri tarafından gönderilen sıfır bilgi kanıtlarını doğrular. Böylece Ethereum, ZK-toplaması için ana katman veya "katman 1" olarak hizmet verir. -2. **Zincir dışı sanal makine (VM)**: ZK-toplama protokolü Ethereum üzerinde var olsa da, işlem yürütme ve durum depolaması [EVM](/developers/docs/evm/)'den bağımsız başka bir sanal makinede gerçekleşir. Bu zincir dışı VM, ZK-toplaması üzerindeki işlemler için yürütme ortamıdır ve ZK-toplama protokolü için ikincil katman veya "katman 2" olarak hizmet verir. Ethereum Ana Ağı'nda doğrulanan doğruluk kanıtları, zincir dışı VM'deki durum geçişlerinin doğruluğunu garanti eder. +2. **Zincir dışı sanal makine (VM)**: ZK-toplama protokolü Ethereum üzerinde var olsa da, işlem yürütme ve durum depolaması, [EVM](/developers/docs/evm/)'den bağımsız ayrı bir sanal makinede gerçekleşir. Bu zincir dışı VM, ZK-toplaması üzerindeki işlemler için yürütme ortamıdır ve ZK-toplama protokolü için ikincil katman veya "katman 2" olarak hizmet verir. Ethereum Ana Ağı'nda doğrulanan doğruluk kanıtları, zincir dışı VM'deki durum geçişlerinin doğruluğunu garanti eder. -ZK-toplamaları, bağımsız çalışan ancak güvenliği Ethereum'a dayanan zincir dışı protokoller olan "hibrit ölçeklenme çözümleri"dir. Özel olarak, Ethereum ağı ZK-toplamasındaki durum güncellemelerinin doğruluğunu şart koşar ve toplamanın durumuna yapılacak her güncellemenin arkasındaki verinin kullanılabilirliğini garanti eder. Sonuç olarak ZK-toplamaları, kendi güvenlik özelliklerinden sorumlu olan [yan zincirler](/developers/docs/scaling/sidechains/) ya da Ethereum'daki işlemleri doğruluk kanıtları ile onaylayan ancak işlem verilerini başka yerde depolayan [validium'lar](/developers/docs/scaling/validium/) gibi saf zincir dışı ölçeklendirme çözümlerine göre önemli ölçüde daha güvenlidir. +ZK-toplamaları, bağımsız çalışan ancak güvenliğini Ethereum'dan alan zincir dışı protokoller olan "hibrit ölçeklendirme çözümleri"dir. Özel olarak, Ethereum ağı ZK-toplamasındaki durum güncellemelerinin doğruluğunu şart koşar ve toplamanın durumuna yapılacak her güncellemenin arkasındaki verinin kullanılabilirliğini garanti eder. Sonuç olarak ZK-toplamaları, kendi güvenlik özelliklerinden sorumlu olan [yan zincirler](/developers/docs/scaling/sidechains/) veya Ethereum'daki işlemleri doğruluk kanıtlarıyla doğrulayan ancak işlem verilerini başka bir yerde depolayan [validium'lar](/developers/docs/scaling/validium/) gibi tamamen zincir dışı ölçeklendirme çözümlerinden oldukça daha güvenlidir. ZK-toplamaları aşağıdaki hususlarda ana Ethereum protokolüne dayalıdır: -### Veri uygunluğu {#data-availability} +### Veri kullanılabilirliği {#data-availability} -ZK-toplamaları zincir dışında gerçekleşmiş her işlemin durum verisini Ethereum'da yayımlar. Bu veriyle, birey ve şirketlerin toplamanın durumunu yeniden oluşturmaları ve zinciri kendileri doğrulamaları mümkün olur. Ethereum bu veriyi ağdaki tüm kullanıcılara `calldata` olarak ulaşılabilir kılar. +ZK-toplamaları, zincir dışında işlenen her işlemin durum verilerini Ethereum'da yayımlar. Bu veriyle, birey ve şirketlerin toplamanın durumunu yeniden oluşturmaları ve zinciri kendileri doğrulamaları mümkün olur. Ethereum, bu verileri ağdaki tüm katılımcıların kullanımına `calldata` olarak sunar. -ZK-toplamalarının zincir üstünde çok da bir işlem verisi yayımlamalarına gerek yoktur; çünkü doğruluk kanıtları zaten durum geçişlerinin gerçekliğini onaylar. Yine de, veriyi zincir üstünde depolamak önemlidir. Çünkü L2 zincirinin durumunun yetkisiz, bağımsız şekilde onaylanmasını ve böylelikle herkesin toplu işlem gönderebilmesini sağlar ve kötü niyetli operatörlerin zinciri sansürlemesini ya da dondurmasını engeller. +Doğruluk kanıtları, durum geçişlerinin özgünlüğünü zaten doğruladığı için ZK-toplamalarının zincir üstünde çok fazla işlem verisi yayımlamasına gerek yoktur. Bununla birlikte, verileri zincir üstünde depolamak hala önemlidir çünkü bu, L2 zincirinin durumunun izinsiz, bağımsız olarak doğrulanmasına olanak tanır ve bu da, kötü niyetli operatörlerin zinciri sansürlemesini veya dondurmasını önleyerek herkesin işlem grupları göndermesine olanak tanır. -Zincir üstü, kullanıcıların toplamayla etkileşime geçmesi için gereklidir. Durum verisine erişim olmadan kullanıcılar hesap bakiyelerini sorgulayamaz ya da durum bilgisine (çekim işlemleri gibi) dayanan işlemleri başlatamazlar. +Kullanıcıların toplama ile etkileşime girmesi için zincir üstü gereklidir. Durum verisine erişim olmadan kullanıcılar hesap bakiyelerini sorgulayamaz ya da durum bilgisine (çekim işlemleri gibi) dayanan işlemleri başlatamazlar. ### İşlem kesinliği {#transaction-finality} Ethereum ZK-toplamaları için bir uzlaşma katmanı gibi hareket eder: K2 işlemleri ancak K1 sözleşmesi doğruluk kanıtını kabul ederse kesinleşir. Bu, her işlemin Ana Ağ'da onaylanması gerektiği için kötü niyetli operatörlerin zinciri bozması (örn. toplama fonlarını çalmak) riskini ortadan kaldırır. Ayrıca Ethereum, L1'de sonlandırıldıktan sonra kullanıcı işlemlerinin geri alınamayacağını garanti eder. -### Sansüre dayanıklılık {#censorship-resistance} +### Sansür direnci {#censorship-resistance} Çoğu ZK-toplaması, işlemleri yürüten, grupları üreten ve blokları L1'e gönderen bir "üst düğüm" (operatör) kullanır. Bu, verimliliği sağlarken sansür riskini de artırır: kötü niyetli ZK-toplaması operatörleri, işlemlerini gruplara dahil etmeyi reddederek kullanıcıları sansürleyebilir. @@ -58,37 +58,37 @@ Bir güvenlik tedbiri olarak ZK-toplamaları, operatör tarafından sansürlendi ZK-toplamasındaki kullanıcılar, işlemleri imzalar ve işleme ve sonraki gruba dahil edilmeleri için L2 operatörlerine gönderir. Bazı durumlarda operatör, sıralayıcı olarak adlandırılan merkezileşmiş bir varlıktır ve işlemleri yürütür, gruplara toplar ve L1'e gönderir. Sıralayıcı, bu sistemde L2 bloğu oluşturmaya ve ZK-toplama sözleşmesine toplama işlemleri eklemeye izinli tek varlıktır. -Diğer ZK-toplamaları [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) doğrulama setini kullanarak operatör rolüne dönebilir. Potansiyel operatörler, toplama sözleşmesine fon yatırır; her payın büyüklüğü, paydaşın bir sonraki toplama grubunu oluşturmak için seçilme şansını etkiler. Operatörün payı eğer kötü niyetli davranması halinde kesilebilir, bu da geçerli bloklar göndermeleri için onları teşvik eder. +Diğer ZK-toplamaları, bir [hisse ispatı](/developers/docs/consensus-mechanisms/pos/) doğrulayıcı seti kullanarak operatör rolünü döndürebilir. Potansiyel operatörler, toplama sözleşmesine fon yatırır; her payın büyüklüğü, paydaşın bir sonraki toplama grubunu oluşturmak için seçilme şansını etkiler. Operatörün payı eğer kötü niyetli davranması halinde kesilebilir, bu da geçerli bloklar göndermeleri için onları teşvik eder. -#### ZK-toplamaları işlem verilerini Ethereum üzerinde nasıl yayımlar? {#how-zk-rollups-publish-transaction-data-on-ethereum} +#### ZK-toplamaları Ethereum'da işlem verilerini nasıl yayınlar {#how-zk-rollups-publish-transaction-data-on-ethereum} -Anlatıldığı üzere, işlem verileri Ethereum'da `calldata` olarak yayımlanır. `calldata`, akıllı sözleşmenin içinde bulunan, bir fonksiyona argümanlar aktarmak için kullanılan ve [belleğe](/developers/docs/smart-contracts/anatomy/#memory) benzer şekilde hareket eden bir veri alanıdır. `calldata`, Ethereum'un durumunun bir parçası olarak depolanmasa da, Ethereum zincirinin [geçmiş günlüklerinin](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) bir parçası olarak zincirde kalıcı şekilde saklanır. `calldata`, Ethereum'un durumunu etkilemediği için zincir üstünde veri depolamanın ucuz bir yoludur. +Açıklandığı gibi, işlem verileri Ethereum'da `calldata` olarak yayınlanır. `calldata`, bir akıllı sözleşmede bir fonksiyona argümanlar aktarmak için kullanılan ve [belleğe](/developers/docs/smart-contracts/anatomy/#memory) benzer şekilde davranan bir veri alanıdır. `calldata`, Ethereum'un durumunun bir parçası olarak saklanmaz, Ethereum zincirinin [geçmiş günlüklerinin](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) bir parçası olarak zincir üstünde kalıcıdır. `calldata`, Ethereum'un durumunu etkilemediği için zincir üstünde veri depolamanın ucuz bir yoludur. -`calldata` anahtar sözcüğü, genellikle bir işlem tarafından çağrılan akıllı sözleşme yöntemini tanımlar ve yöntemin girdilerini ardışık bir bayt dizisi şeklinde tutar. ZK-toplamaları, sıkıştırılmış işlem verilerini zincir üzerinde yayımlamak için `calldata`'yı kullanır; toplama operatörü, toplama sözleşmesindeki gerekli fonksiyonu çağırarak yeni bir toplu işlem ekler ve sıkıştırılmış verileri fonksiyon argümanları olarak iletir. Bu, toplama ücretlerinin büyük bir kısmı işlem verilerini zincir üstünde depolamaya gittiğinden kullanıcılar için maliyetlerin azaltılmasına yardımcı olur. +`calldata` anahtar kelimesi genellikle bir işlem tarafından çağrılan akıllı sözleşme yöntemini tanımlar ve yönteme yapılan girdileri rastgele bir bayt dizisi şeklinde tutar. ZK-toplamaları sıkıştırılmış işlem verilerini zincir üstünde yayımlamak için `calldata` kullanır; toplama operatörü, toplama sözleşmesindeki gerekli işlevi çağırarak yeni bir grup ekler ve sıkıştırılmış verileri işlev argümanları olarak geçirir. Toplama ücretlerinin büyük bir kısmı işlem verilerini zincir üstünde depolamaya gittiğinden bu, kullanıcılar için maliyetlerin azaltılmasına yardımcı olur. ### Durum taahhütleri {#state-commitments} -L2 hesaplarını ve bakiyelerini içeren ZK-toplamasının durumu, [Merkle ağacı](/whitepaper/#merkle-trees) olarak temsil edilir. Merkle ağacının köküne ait (Merkle Kökü) kriptografik bir karma, zincir üstü sözleşmede depolanır, bu da toplama protokolünün ZK-toplamasının durumundaki değişiklikleri takip edebilmesini sağlar. +L2 hesaplarını ve bakiyelerini içeren ZK-toplamasının durumu, bir [Merkle ağacı](/whitepaper/#merkle-trees) olarak temsil edilir. Merkle ağacının kökünün (Merkle kökü) kriptografik bir karması zincir üstü sözleşmede saklanır ve bu da toplama protokolünün ZK-toplamasının durumundaki değişiklikleri izlemesine olanak tanır. -Toplama, yeni bir işlem grubunun yürütülmesinin ardından yeni bir duruma geçer. Durum geçişini başlatan operatörün yeni bir durum kökü hesaplaması ve zincir üstü sözleşmeye göndermesi gerekir. Grupla ilgili olan doğruluk kanıtının geçerliliği, doğrulayıcı sözleşmesi tarafından ispatlanmışsa, yeni Merkle kökü ZK-toplamasının meşru durum kökü olur. +Toplama, yeni bir işlem grubunun yürütülmesinin ardından yeni bir duruma geçer. Durum geçişini başlatan operatörün yeni bir durum kökü hesaplaması ve bunu zincir üstü sözleşmeye göndermesi gerekir. Grupla ilgili olan doğruluk kanıtının geçerliliği, doğrulayıcı sözleşmesi tarafından ispatlanmışsa, yeni Merkle kökü ZK-toplamasının meşru durum kökü olur. -ZK-toplaması operatörü, durum köklerini hesaplamak dışında, bir gruptaki tüm işlemleri içeren ve Merkle ağacının kökü olangrup kökü de oluşturur. Yeni bir grup gönderildiğinde toplama sözleşmesi grup kökünü saklar, böylece kullanıcılar bir işlemin (örneğin, bir çekme talebi) gruba dahil edildiğini kanıtlayabilir. Kullanıcıların işlem detaylarını, grup kökünü ve dahil edilme yolunu gösteren bir [Merkle kanıtı](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) sağlamaları gerekir. +ZK-toplaması operatörü, durum köklerini hesaplamak dışında, bir gruptaki tüm işlemleri içeren ve Merkle ağacının kökü olangrup kökü de oluşturur. Yeni bir grup gönderildiğinde toplama sözleşmesi grup kökünü saklar, böylece kullanıcılar bir işlemin (örneğin, bir çekme talebi) gruba dahil edildiğini kanıtlayabilir. Kullanıcıların işlem ayrıntılarını, grup kökünü ve dahil etme yolunu gösteren bir [Merkle kanıtı](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) sağlaması gerekir. ### Doğruluk kanıtları {#validity-proofs} -ZK-toplama operatörünün Ethereum L1 sözleşmesine gönderdiği yeni durum kökü, toplamanın durumundaki güncellemelerin sonucudur. Diyelim ki Alice, Bob'a 10 jeton gönderiyor, operatör sadece Alice'in bakiyesini 10 azaltır ve Bob'un bakiyesini 10 artırır. Operatör daha sonra güncellenmiş hesap verilerini karma hale getirir, toplamanın Merkle ağacını yeniden oluşturur ve yeni Merkle kökünü zincir üstünde sözleşmeye gönderir. +ZK-toplama operatörünün Ethereum L1 sözleşmesine gönderdiği yeni durum kökü, toplamanın durumundaki güncellemelerin sonucudur. Diyelim ki Alice, Bob'a 10 jeton gönderiyor, operatör sadece Alice'in bakiyesini 10 azaltır ve Bob'un bakiyesini 10 artırır. Operatör daha sonra güncellenmiş hesap verilerini karma hale getirir, toplamanın Merkle ağacını yeniden oluşturur ve yeni Merkle kökünü zincir üstü sözleşmeye gönderir. Ancak toplama sözleşmesi, operatörün önerilen durum taahhüdünü, operatör yeni Merkle kökünün toplama durumunun doğru güncellemelerinden kaynaklandığını kanıtlayana kadar otomatik olarak kabul etmez. ZK-toplama operatörü bunu, gruplanmış işlemlerin doğruluğunu onaylayan kısa bir kriptografik taahhüt olan doğruluk kanıtı üreterek yapar. -Doğruluk kanıtları, tarafların ifadenin kendisi açıklamadan ifadenin doğruluğunu kanıtlamasına olanak tanır; bu nedenle, bunlara aynı zamanda sıfır bilgili ispatlar denir. ZK-toplamaları, işlemleri Ethereum'da yeniden yürütmeye gerek olmadan zincir dışındaki durum geçişlerinin doğruluğunu onaylamak için doğruluk kanıtlarını kullanır. Bu kanıtlar, [ZK-SNARK](https://arxiv.org/abs/2202.06877) (Sıfır Bilgi Öz ve Etkileşimli Olmayan Bilgi Argümanı) veya [ZK-STARK](https://eprint.iacr.org/2018/046) (Sıfır Bilgi Ölçeklenebilir Şeffaf Bilgi Argümanı) biçiminde olabilir. +Doğruluk kanıtları, tarafların ifadenin kendisi açıklamadan ifadenin doğruluğunu kanıtlamasına olanak tanır; bu nedenle, bunlara aynı zamanda sıfır bilgili ispatlar denir. ZK-toplamaları, işlemleri Ethereum'da yeniden yürütmek zorunda kalmadan zincir dışı durum geçişlerinin doğruluğunu onaylamak için doğruluk kanıtlarını kullanır. Bu kanıtlar, bir [ZK-SNARK](https://arxiv.org/abs/2202.06877) (Sıfır Bilgi Kısa Etkileşimsiz Bilgi Argümanı) veya [ZK-STARK](https://eprint.iacr.org/2018/046) (Sıfır Bilgi Ölçeklenebilir Şeffaf Bilgi Argümanı) biçiminde olabilir. -Hem SNARK'lar hem de STARK'lar, ZK-toplamalarında zincir dışı hesaplamanın bütünlüğünün tasdik edilmesine yardımcı olur ancak her ispat türünün kendine özgü özellikleri vardır. +Her kanıt türünün kendine özgü özellikleri olmasına rağmen, hem SNARK'lar hem de STARK'lar ZK-toplamalarındaki zincir dışı hesaplamanın bütünlüğünü doğrulamaya yardımcı olur. **ZK-SNARK'lar** ZK-SNARK protokolünün çalışabilmesi için Ortak Referans Dizesi (CRS) oluşturmak şarttır: CRS, doğruluk kanıtlarını kanıtlamaya ve doğrulamaya yönelik herkese açık parametreler sağlar. Kanıtlama sisteminin güvenliği, CRS kurulumuna bağlıdır; eğer herkese açık parametreleri oluşturmak için kullanılan bilgiler kötü niyetli aktörlerin eline geçerse, bu kişiler sahte doğruluk kanıtları oluşturabilir. -Bazı ZK-toplamaları, bu sorunu çözmek için [çok taraflı hesaplama seremonisi (MPC)](https://zkproof.org/2021/06/30/setup-ceremonies/amp/) kullanarak herkese açık parametreler oluşturur; bu, ZK-SNARK devresi için herkese açık parametrelerin oluşturulduğu ve güvenilir bireylerin katıldığı bir süreçtir. Tarafların her biri, CRS'yi oluşturmak için bazı rastgele veriler ( "zararlı atık" olarak adlandırılır) sağlar ve bunları hemen yok etmeleri gerekir. +Bazı ZK-toplamaları, ZK-SNARK devresi için genel parametreler oluşturmak üzere güvenilir kişileri içeren bir [çok taraflı hesaplama töreni (MPC)](https://zkproof.org/2021/06/30/setup-ceremonies/amp/) kullanarak bu sorunu çözmeye çalışır. Tarafların her biri, CRS'yi oluşturmak için bazı rastgele veriler ( "zararlı atık" olarak adlandırılır) sağlar ve bunları hemen yok etmeleri gerekir. Güvenilen kurulumlar, CRS kurulumunun güvenliğini artırdığı için kullanılır. En az bir dürüst katılımcı kendi girdisini yok ettiği sürece, ZK-SNARK sisteminin güvenliği garanti altındadır. Ancak bu yaklaşım, sistemin güvenliğini zayıflatmamaları ve örnek rastgele verilerini silmeleri konusunda sürece dahil olan kişilere güvenmeyi gerektirir. @@ -96,15 +96,15 @@ Güven varsayımlarını bir yana bırakırsak, ZK-SNARK'lar küçük kanıt boy **ZK-STARK'lar** -ZK-SNARK'larda olduğu gibi ZKSTARK'lar da zincir dışı bilgi işlemin geçerliliğini girdileri açığa çıkarmadan kanıtlar. Bununla birlikte, ZK-STARK'lar ölçeklenebilirlikleri ve şeffaflıkları nedeniyle ZK-SNARK'lara göre daha gelişmiş olarak kabul edilir. +ZK-SNARK'lar gibi ZK-STARK'lar da girdileri açıklamadan zincir dışı hesaplamanın geçerliliğini kanıtlar. Bununla birlikte, ZK-STARK'lar ölçeklenebilirlikleri ve şeffaflıkları nedeniyle ZK-SNARK'lara göre daha gelişmiş olarak kabul edilir. ZK-STARK'lar, bir Ortak Referans Dizesinin (CRS) güvenilir kurulumu olmadan çalışabildikleri için "şeffaftır". Bunun yerine ZK-STARK'lar, kanıtları oluşturmak ve doğrulamak için parametreler oluşturmak üzere herkese açık olarak doğrulanabilir rastgeleliğe güvenir. -Doğruluk kanıtlarını kanıtlamak ve doğrulamak için gereken süreler, temel hesaplamanın karmaşıklığına göre _yarı doğrusal_ şekilde arttığından ZK-STARK'lar da daha fazla ölçeklenebilirlik sağlar. ZK-SNARK'lar sayesinde kanıtlama ve doğrulama süreleri, temel hesaplamanın boyutuna göre _doğrusal_ olarak ölçeklenir. Bu, ZK-STARK'ların büyük veri kümelerinin söz konusu olduğu durumlarda, kanıtlama ve doğrulama için ZK-SNARK'lara göre daha az zamana ihtiyaç duyduğu anlamına gelir ve bu nedenle yüksek hacimli uygulamalar için kullanışlıdır. +ZK-STARK'lar ayrıca daha fazla ölçeklenebilirlik sağlar çünkü doğruluk kanıtlarını kanıtlamak ve doğrulamak için gereken süre, temel hesaplamanın karmaşıklığına bağlı olarak _yarı doğrusal_ olarak artar. ZK-SNARK'larda, kanıtlama ve doğrulama süreleri, temel hesaplamanın boyutuyla ilişkili olarak _doğrusal_ olarak ölçeklenir. Bu, ZK-STARK'ların büyük veri kümelerinin söz konusu olduğu durumlarda, kanıtlama ve doğrulama için ZK-SNARK'lara göre daha az zamana ihtiyaç duyduğu anlamına gelir ve bu nedenle yüksek hacimli uygulamalar için kullanışlıdır. ZK-STARK'lar ayrıca kuantum bilgisayarlarına karşı güvenlidir, oysa ZK-SNARK'ların kullanıldığı Elips Eğrisi Kriptografisi'nin (ECC) kuantum bilgisayar saldırılarına karşı savunmasız olduğuna yaygın olarak inanılmaktadır. ZK-STARK'ların dezavantajı, daha büyük ispat boyutları üretmeleridir ve bu boyutları Ethereum üzerinde doğrulamak daha pahalıdır. -#### Doğruluk kanıtları ZK-toplamalarında nasıl çalışır? {#validity-proofs-in-zk-rollups} +#### Doğruluk kanıtları ZK-toplamalarında nasıl çalışır? ZK-toplamalarında doğruluk kanıtları {#validity-proofs-in-zk-rollups} ##### Kanıt oluşturma @@ -136,13 +136,13 @@ ZK-kanıtlama devresi, tüm işlem grubunu tekrarlar ve son işlem yürütüldü Kanıtlama devresi durum güncellemelerinin doğruluğunu onayladıktan sonra, L2 operatörü hesaplanan doğruluk kanıtını L1 üzerindeki doğrulayıcı sözleşmesine gönderir. Sözleşmenin doğrulama devresi, kanıtın geçerliliğini doğrular ve kanıtın bir parçası olan genel girdileri kontrol eder: -- **Durum öncesi kök**: ZK-toplamasının L2 zincirinin son bilinen geçerli durumunu yansıtan eski durum köküdür (yani gruplanmış işlemler yürütülmeden önceki). +- **Durum öncesi kök**: ZK-toplamasının, L2 zincirinin son bilinen geçerli durumunu yansıtan eski durum köküdür (yani gruplanmış işlemler yürütülmeden önceki). -- **Durum sonrası kök**: ZK-toplamasının L2 zincirinin en yeni durumunu yansıtan yeni durum köküdür (yani gruplanmış işlemler yürütüldükten sonraki). Durum sonrası kök, kanıtlama devresindeki durum güncellemeleri uygulandıktan sonra elde edilen son köktür. +- **Durum sonrası kök**: ZK-toplamasının, L2 zincirinin en yeni durumunu yansıtan yeni durum köküdür (yani gruplanmış işlemler yürütüldükten sonraki). Durum sonrası kök, kanıtlama devresindeki durum güncellemeleri uygulandıktan sonra elde edilen son köktür. -- **Grup kökü:** Grubun, grup içindeki işlemlere _merkle_ uygulanması ve ağacın kökünün karma hale getirilmesiyle elde edilen Merkle köküdür. +- **Grup kökü**: Grubun, grup içindeki işlemlere merkle uygulanması ve ağacın kökünün karma hale getirilmesiyle elde edilen Merkle köküdür. -- **İşlem girdileri:** Gönderilen grubun bir parçası olarak yürütülen işlemlerle ilişkili verilerdir. +- **İşlem girdileri**: Gönderilen grubun bir parçası olarak yürütülen işlemlerle ilişkili veriler. Bu, ispatın devreyi karşılaması (yani, geçerli kabul etmesi) durumunda, toplamanın önceki durumdan (durum öncesi kök tarafından kriptografik olarak parmak izi alınan) yeni bir duruma (durum sonrası kök tarafından kriptografik olarak parmak izi alınan) geçiş yapmasını sağlayan bir geçerli işlemler dizisinin mevcut olduğu anlamına gelir. Durum öncesi kök, toplama sözleşmesinde depolanan kökle eşleşiyorsa ve ispat geçerli ise, toplama sözleşmesi ispattan durum sonrası kökü alır ve durum ağacını, toplamanın değişen durumunu yansıtacak şekilde günceller. @@ -152,7 +152,7 @@ Kullanıcılar, jetonları L1 zincirine dağıtılan toplamanın sözleşmesine Bekleyen yatırma kuyruğu dolmaya başlarsa, ZK-toplama operatörü yatırma işlemlerini alıp toplama sözleşmesine gönderir. Kullanıcının fonları toplamada olduğunda, işlemleri işlenmek üzere operatöre göndererek işlem yapmaya başlayabilir. Kullanıcılar, hesap verilerini karma yaparak toplama sözleşmesine göndermek ve mevcut durum kökünü doğrulamak üzere bir Merkle ispatı sağlamak suretiyle bakiyeyi toplamada doğrulayabilir. -ZK-toplamadan L1'e çekim işlemi basittir. Kullanıcı, toplamadaki varlıklarını belirtilen bir hesaba yakmak üzere göndererek çıkış işlemini başlatır. Operatör işlemi bir sonraki gruba eklerse, kullanıcı zincir üstündeki sözleşmeye bir çekme isteği gönderebilir. Bu çekme isteği aşağıdakileri içerir: +ZK-toplamadan L1'e çekim işlemi basittir. Kullanıcı, toplamadaki varlıklarını belirtilen bir hesaba yakmak üzere göndererek çıkış işlemini başlatır. Operatör işlemi bir sonraki gruba dahil ederse, kullanıcı zincir üstü sözleşmeye bir para çekme talebi gönderebilir. Bu çekme isteği aşağıdakileri içerir: - Kullanıcı işleminin bir işlem grubundaki yakma hesabına eklendiğini kanıtlayan Merkle kanıtı @@ -166,9 +166,9 @@ Toplama sözleşmesi işlem verilerini karma hale getirir, grup kökünün mevcu ## ZK-toplamaları ve EVM uyumluluğu {#zk-rollups-and-evm-compatibility} -ZK-toplamaları, iyimser toplamaların aksine [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) ile anında uyumlu değildir. Genel amaçlı EVM hesaplamalarını devrelerde kanıtlamak, (önceden açıklanan jeton transferi gibi) basit hesaplamaları kanıtlamaktan daha zordur ve daha fazla kaynak gerektirir. +İyimser toplamaların aksine, ZK-toplamaları [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) ile kolayca uyumlu değildir. Genel amaçlı EVM hesaplamalarını devrelerde kanıtlamak, (önceden açıklanan jeton transferi gibi) basit hesaplamaları kanıtlamaktan daha zordur ve daha fazla kaynak gerektirir. -Ancak [sıfır bilgi teknolojisindeki ilerlemeler](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now), EVM hesaplamalarını sıfır bilgili ispatlarla çevreleme konusuna olan ilgiyi yeniden uyandırmaktadır. Bu çabaların hedefi, program yürütmesinin doğruluğunu verimli bir şekilde doğrulayabilen bir sıfır bilgili EVM (zkEVM) uygulaması oluşturmaktır. Bir zkEVM, devrelerde kanıtlama/doğrulama için mevcut EVM işlem kodlarını yeniden oluşturarak akıllı sözleşmelerin yürütülmesine olanak tanır. +Ancak, [sıfır bilgi teknolojisindeki gelişmeler](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now), EVM hesaplamasını sıfır bilgi kanıtlarına sarmalamaya yönelik ilgiyi yeniden alevlendiriyor. Bu çabaların hedefi, program yürütmesinin doğruluğunu verimli bir şekilde doğrulayabilen bir sıfır bilgili EVM (zkEVM) uygulaması oluşturmaktır. Bir zkEVM, devrelerde kanıtlama/doğrulama için mevcut EVM işlem kodlarını yeniden oluşturarak akıllı sözleşmelerin yürütülmesine olanak tanır. Tıpkı EVM gibi zkEVM de bazı girdilerde hesaplama yapıldıktan sonra durumlar arasında geçiş yapar. Aradaki fark, zkEVM'nin ayrıca programın yürütmesinin her adımının doğruluğunu onaylamak için sıfır bilgili ispatlar oluşturmasıdır. Doğruluk kanıtları, VM'nin durumunu (bellek, yığın, depolama) etkileyen işlemlerin doğruluğunu ve işlemin kendisini (yani işlem doğru işlem kodlarını çağırıp bunları doğru şekilde yürüttü mü?) doğrulayabilir. @@ -178,21 +178,21 @@ Geliştiricilerin sıfır bilgili ispatların ölçeklenebilirlik ve güvenlik g Kullanıcıların ZK-toplamalarında işlemler için ödedikleri ücret, Ethereum Ana Ağı'ndaki gibi gaz ücretine bağlıdır. Ancak gaz ücretleri L2'de farklı şekilde işler ve aşağıdaki maliyetlerden etkilenir: -1. **Durum yazma:** Ethereum'un durumuna yazmanın (örneğin, Ethereum blokzincirinde işlem göndermek) sabit bir maliyeti vardır. ZK-toplamaları, işlemleri gruplayarak ve sabit maliyetleri birden fazla kullanıcıya yayarak bu maliyeti azaltır. +1. **Durum yazma**: Ethereum'un durumuna yazmanın (yani Ethereum blokzincirinde bir işlem göndermenin) sabit bir maliyeti vardır. ZK-toplamaları, işlemleri gruplayarak ve sabit maliyetleri birden fazla kullanıcıya yayarak bu maliyeti azaltır. -2. **Veri yayımı: **ZK-toplamaları, her işlem için durum verilerini Ethereum'a `calldata` olarak yayımlar. `calldata` maliyetleri şu anda [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) tarafından belirlenmektedir ve maliyet, sırasıyla sıfır olmayan baytlar için 16 gaz ve sıfır baytlar için 4 gaz `calldata` olarak belirlenmiştir. Her işlemde ödenen maliyet, işlemi zincir üstünde yayımlamak için ne kadar `calldata` gerektiğine göre değişir. +2. **Veri yayımlama**: ZK-toplamaları, her işlem için durum verilerini Ethereum'a `calldata` olarak yayımlar. `calldata` maliyetleri şu anda, sırasıyla sıfır olmayan baytlar için 16 gaz ve sıfır baytlar için 4 gaz `calldata` maliyeti öngören [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) tarafından yönetilmektedir. Her işlemde ödenen maliyet, onun için ne kadar `calldata`'nın zincir üstünde yayımlanması gerektiğine göre etkilenir. -3. **L2 operatör ücretleri**: Bu, Ethereum Ana Ağındaki [işlem "öncelik ücretleri (bahşişler)"](/developers/docs/gas/#how-are-gas-fees-calculated) gibi işlem gerçekleştirirken ortaya çıkan hesaplama maliyetleri karşılığında toplama operatörüne ödenen miktarı ifade eder. +3. **L2 operatör ücretleri**: Bu, Ethereum Ana Ağı'ndaki [işlem "öncelik ücretlerine (bahşişler)"](/developers/docs/gas/#how-are-gas-fees-calculated) benzer şekilde, işlemleri işlerken ortaya çıkan hesaplama maliyetlerinin telafisi olarak toplama operatörüne ödenen tutardır. -4. **Kanıt üretimi ve doğrulaması:** ZK-toplama operatörleri, işlem grupları için doğruluk kanıtları üretmek zorundadır ve bu, yüksek kaynak gerektiren bir işlemdir. Ana Ağ'daki sıfır bilgili ispatları doğrulamanın da gaz maliyeti (~ 500.000 gaz) vardır. +4. **Kanıt üretimi ve doğrulaması**: ZK-toplama operatörleri, işlem grupları için doğruluk kanıtları üretmek zorundadır ve bu, yüksek kaynak gerektiren bir işlemdir. Ana Ağ'daki sıfır bilgili ispatları doğrulamanın da gaz maliyeti (~ 500.000 gaz) vardır. -ZK-toplamaları, işlemleri gruplamanın yanı sıra işlem verilerini sıkıştırarak da kullanıcılar için ücretleri azaltır. Ethereum ZK-toplamalarını kullanmanın maliyeti hakkında gerçek zamanlı bir genel bakışa [buradan](https://l2fees.info/) ulaşabilirsiniz. +ZK-toplamaları, işlemleri gruplamanın yanı sıra işlem verilerini sıkıştırarak da kullanıcılar için ücretleri azaltır. Ethereum ZK-toplamalarını kullanmanın ne kadara mal olduğuna dair [gerçek zamanlı bir genel bakışı görebilirsiniz](https://l2fees.info/). -## ZK-toplamaları Ethereum'u nasıl ölçeklendirir? {#scaling-ethereum-with-zk-rollups} +## ZK-toplamaları Ethereum'u nasıl ölçeklendirir? ZK-toplamaları ile Ethereum'u ölçeklendirme {#scaling-ethereum-with-zk-rollups} -### İşlem verilerinin sıkıştırılması {#transaction-data-compression} +### İşlem verisi sıkıştırma {#transaction-data-compression} -ZK-toplamaları, Ethereum'un temel katmanındaki işlem gücünü artırarak işlem hesaplamalarını zincir dışına çıkarır ancak ölçeklendirme için gerçek artış, işlem verilerini sıkıştırmadan gelir. Ethereum'un [blok boyutu](/developers/docs/blocks/#block-size), her bloğun taşıyabileceği veriyi ve dolayısıyla işlenen işlem sayısını sınırlar. ZK-toplamaları, işlemle ilgili verileri sıkıştırarak her blokta işlenen işlem sayısını önemli ölçüde artırır. +ZK-toplamaları, hesaplamayı zincir dışına taşıyarak Ethereum'un temel katmanındaki iş hacmini artırır, ancak ölçeklendirme için asıl destek, işlem verilerinin sıkıştırılmasından gelir. Ethereum'un [blok boyutu](/developers/docs/blocks/#block-size), her bloğun tutabileceği veri miktarını ve dolayısıyla blok başına işlenen işlem sayısını sınırlar. ZK-toplamaları, işlemle ilgili verileri sıkıştırarak her blokta işlenen işlem sayısını önemli ölçüde artırır. ZK-toplamaları, her bir işlemi doğrulamak için gereken tüm veriyi göndermek zorunda olmadıklarından işlem verilerini iyimser toplamalara göre daha iyi sıkıştırabilir. Sadece toplamadaki hesapların ve bakiyelerin son durumunu yeniden oluşturabilmek için gerekli olan minimal veriyi göndermeleri gerekir. @@ -206,15 +206,15 @@ Güncel olarak, doğruluk kanıtları bloktan bloğa temelinde oluşturur ve do ### ZK-toplamalarının artıları ve eksileri {#zk-rollups-pros-and-cons} -| Artıları | Eksileri | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Doğruluk kanıtları, zincir dışı işlemlerin doğruluğundan emin olur ve operatörlerin geçersiz durum işlemleri yürütmesine engel olur. | Programlama ve doğruluk kanıtlarıyla ilgili olan masraflar azımsanamayacak kadar fazladır ve bunlar, toplama kullanıcıları için ücretleri artırabilir. | -| Doğruluk kanıtları L1'de doğrulandığında, durum güncellemeleri de onaylandığı için daha hızlı işlem kesinliği sunar. | EVM uyumlu ZK-toplamaları geliştirmek, sıfır-bilgi teknolojisinin karmaşıklığı sebebiyle zordur. | -| Güvenlik konusunda [iyimser toplamalar](/developers/docs/scaling/optimistic-rollups/#optimistic-pros-and-cons)da olduğu gibi teşvik edilen aktörlerin dürüstlüğüne değil, güven gerektirmez kriptografik mekanizmalara dayanır. | Doğruluk kanıtlarının üretilmesi özelleştirilmiş donanım gerektirdiğinden zincirin birkaç tarafça merkezi şekilde kontrol edilmesini teşvik edebilir. | -| L1'de zincir dışındaki durumu kurtarmak için gerekli olan veriyi depolar, bu da güvenliği, sansüre karşı direnci ve merkeziyetsizliği garanti eder. | Merkezi operatörler (sıralayıcılar) işlem sırasını etkileyebilir. | -| Kullanıcılar daha iyi sermaye verimliliğinden faydalanabilir ve L2'den gecikme olmadan fon çekebilir. | Donanım gereksinimleri, zinciri gelişim göstermeye zorlayan katılımcıların sayısında azalmaya sebep olarak kötü niyetli operatörlerin toplamanın durumunu dondurması ve kullanıcıları sansürlemesi riskini artırır. | -| Canlılık varsayımlarına bağımlı değildir ve kullanıcıların fonlarını koruyabilmek için zinciri doğrulamaları gerekmez. | Bazı kanıtlama sistemleri (örn. ZK-SNARK) güvenilir bir kurulum gerektirir. Bu kurulum yanlış ele alınırsa ZK-toplamasının güvenlik modelinden taviz verilmesine yol açabilir. | -| Veri sıkıştırmanın daha yiyi olması, Ethereum'da `calldata` yayımlama masraflarını azaltabilir ve kullanıcılar için toplama ücretlerini minimize edebilir. | | +| Artıları | Eksileri | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Doğruluk kanıtları, zincir dışı işlemlerin doğruluğunu sağlar ve operatörlerin geçersiz durum geçişleri yürütmesini engeller. | Programlama ve doğruluk kanıtlarıyla ilgili olan masraflar azımsanamayacak kadar fazladır ve bunlar, toplama kullanıcıları için ücretleri artırabilir. | +| Doğruluk kanıtları L1'de doğrulandığında, durum güncellemeleri de onaylandığı için daha hızlı işlem kesinliği sunar. | EVM uyumlu ZK-toplamaları geliştirmek, sıfır-bilgi teknolojisinin karmaşıklığı sebebiyle zordur. | +| [İyimser toplamalarda](/developers/docs/scaling/optimistic-rollups/#optimistic-pros-and-cons) olduğu gibi teşvik edilmiş aktörlerin dürüstlüğüne değil, güvenlik için güvene dayalı olmayan kriptografik mekanizmalara dayanır. | Doğruluk kanıtlarının üretilmesi özelleştirilmiş donanım gerektirdiğinden zincirin birkaç tarafça merkezi şekilde kontrol edilmesini teşvik edebilir. | +| Zincir dışı durumu kurtarmak için gereken verileri L1'de depolar, bu da güvenliği, sansür direncini ve merkeziyetsizliği garanti eder. | Merkezi operatörler (sıralayıcılar) işlem sırasını etkileyebilir. | +| Kullanıcılar daha iyi sermaye verimliliğinden faydalanabilir ve L2'den gecikme olmadan fon çekebilir. | Donanım gereksinimleri, zinciri gelişim göstermeye zorlayan katılımcıların sayısında azalmaya sebep olarak kötü niyetli operatörlerin toplamanın durumunu dondurması ve kullanıcıları sansürlemesi riskini artırır. | +| Canlılık varsayımlarına bağımlı değildir ve kullanıcıların fonlarını koruyabilmek için zinciri doğrulamaları gerekmez. | Bazı kanıtlama sistemleri (örn. ZK-SNARK) güvenilir bir kurulum gerektirir. Bu kurulum yanlış ele alınırsa ZK-toplamasının güvenlik modelinden taviz verilmesine yol açabilir. | +| Daha iyi veri sıkıştırma, Ethereum'da `calldata` yayımlama maliyetlerini düşürmeye ve kullanıcılar için toplama ücretlerini en aza indirmeye yardımcı olabilir. | | ### ZK-toplamalarının görsel açıklaması {#zk-video} @@ -222,32 +222,36 @@ Finematics'in ZK-toplaması hakkındaki açıklamasını izleyin: -## zkEVM üzerinde kimler çalışıyor? {#zkevm-projects} +## zkEVM üzerinde kimler çalışıyor? zkEVM projeleri {#zkevm-projects} Şunlar zkEVM'ler üzerinde çalışan projeler arasındadır: -- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVM, EVM uyumlu bir ZK toplaması ve Ethereum blokları için doğruluk kanıtları oluşturma mekanizması geliştirmek amacıyla Ethereum Foundation tarafından fonlanan bir projedir._ +- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVM, EVM uyumlu bir ZK-toplaması ve Ethereum blokları için doğruluk kanıtları oluşturmaya yönelik bir mekanizma geliştirmek için Ethereum Foundation tarafından finanse edilen bir projedir._ -- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _Ethereum ana ağında, sıfır bilgili ispat doğrulamaları içeren akıllış sözleşmeler dahil olmak üzere Ethereum işlemlerini şeffaf bir şekilde yürüten sıfır bilgili bir Ethereum Sanal Makinası (zkEVM) üzerinde çalışan, merkezi olmayan bir ZK Toplamasıdır._ +- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _sıfır bilgi kanıtı doğrulamaları olan akıllı sözleşmeler de dahil olmak üzere Ethereum işlemlerini şeffaf bir şekilde yürüten, sıfır bilgili bir Ethereum Sanal Makinesi (zkEVM) üzerinde çalışan, Ethereum ana ağında merkeziyetsiz bir ZK Toplamasıdır._ -- **[Scroll](https://scroll.io/blog/zkEVM)** - _Scroll, Ethereum için yerel bir zkEVM Katman 2 Çözümü üretmek üzerine çalışan, teknoloji odaklı bir şirkettir._ +- **[Scroll](https://scroll.io/blog/zkEVM)** - _Scroll, Ethereum için yerel bir zkEVM Katman 2 Çözümü oluşturmaya çalışan, teknoloji odaklı bir şirkettir._ -- **[Taiko](https://taiko.xyz)** - _Taiko; merkeziyetsiz, Ethereum eşdeğeri bir ZK toplamasıdır (bir [Tip 1 ZK-EVM](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))._ +- **[Taiko](https://taiko.xyz)** - _Taiko, merkeziyetsiz, Ethereum'a eşdeğer bir ZK-toplamasıdır ([Tip 1 ZK-EVM](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))._ -- **[ZKsync](https://docs.zksync.io/)** - _ZKsync Era, Matter Labs tarafından geliştirilen ve kendi zkEVM'si ile desteklenen EVM uyumlu bir ZK Toplamasıdır._ +- **[ZKsync](https://docs.zksync.io/)** - _ZKsync Era, Matter Labs tarafından oluşturulan ve kendi zkEVM'i tarafından desteklenen EVM uyumlu bir ZK Toplamasıdır._ -- **[Starknet](https://starkware.co/starknet/)** _Starknet, StarkWare tarafından geliştirilen, EVM uyumlu bir katman 2 ölçeklendirme çözümüdür._ +- **[Starknet](https://starkware.co/starknet/)** - _StarkNet, StarkWare tarafından oluşturulmuş EVM uyumlu bir katman 2 ölçeklendirme çözümüdür._ -- **[Morph](https://www.morphl2.io/)** - _Morph, sıfır bilgi kanıtlarından faydalanarak Katman 2 durum itirazı sorununu çözmeye yönelik bir hibrit toplama ölçeklendirme çözümüdür._ +- **[Morph](https://www.morphl2.io/)** - _Morph, Katman 2 durum sınaması sorununu ele almak için zk-kanıtı kullanan hibrit bir toplama ölçeklendirme çözümüdür._ -## ZK-toplamaları üzerine daha fazla kaynak {#further-reading-on-zk-rollups} +- **[Linea](https://linea.build)** - _Linea, Consensys tarafından oluşturulmuş, Ethereum ekosistemiyle tam uyumlu, Ethereum'a eşdeğer bir zkEVM Katman 2'dir._ -- [Sıfır-Bilgi Toplamaları nedir?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) -- [Sıfır-Bilgi Toplamaları nedir?](https://alchemy.com/blog/zero-knowledge-rollups) +## ZK-toplamaları hakkında daha fazla bilgi {#further-reading-on-zk-rollups} + +- [Sıfır Bilgi Toplamaları Nedir?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) +- [Sıfır bilgi toplamaları nedir?](https://alchemy.com/blog/zero-knowledge-rollups) +- [Ethereum Toplamaları için Pratik Rehber](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) - [STARK'lar ve SNARK'lar](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) - [zkEVM nedir?](https://www.alchemy.com/overviews/zkevm) -- [ZK-EVM türleri: Ethereum eşdeğeri, EVM eşdeğeri, Tip 1, Tip 4 ve diğer şifreli sözcükler](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) -- [zkEVM'ye giriş](https://hackmd.io/@yezhang/S1_KMMbGt) -- [Müthiş zkEVM kaynakları](https://github.com/LuozhuZhang/awesome-zkevm) -- [Yakın planda ZK-SNARK'lar](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html) -- [SNARK'lar nasıl mümkündür?](https://vitalik.eth.limo/general/2021/01/26/snarks.html) +- [ZK-EVM türleri: Ethereum eşdeğeri, EVM eşdeğeri, Tip 1, Tip 4 ve diğer şifreli popüler sözcükler](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) +- [zkEVM'e Giriş](https://hackmd.io/@yezhang/S1_KMMbGt) +- [ZK-EVM L2'ler nedir?](https://linea.mirror.xyz/qD18IaQ4BROn_Y40EBMTUTdJHYghUtdECscSWyMvm8M) +- [Harika zkEVM kaynakları](https://github.com/LuozhuZhang/awesome-zkevm) +- [ZK-SNARK'ların iç yüzü](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html) +- [SNARK'lar nasıl mümkün oldu?](https://vitalik.eth.limo/general/2021/01/26/snarks.html) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/anatomy/index.md b/public/content/translations/tr/developers/docs/smart-contracts/anatomy/index.md index 4cc356e111d..1dd6aa68454 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/anatomy/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/anatomy/index.md @@ -1,39 +1,39 @@ --- -title: Akıllı sözleşmelerin anatomisi -description: Akıllı bir sözleşmenin anatomisine derinlemesine bir bakış - fonksiyonlar, veriler ve değişkenler. +title: "Akıllı sözleşmelerin anatomisi" +description: "Akıllı bir sözleşmenin anatomisine derinlemesine bir bakış - fonksiyonlar, veriler ve değişkenler." lang: tr --- Bir akıllı sözleşme Ethereum üzerindeki bir adreste çalışan bir programdır. Bir işlem alındığında yürütülebilen fonksiyonlar ve verilerden oluşurlar. Burada bir akıllı sözleşmenin nelerden oluştuğu hakkında genel bir bakış bulunmaktadır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -İlk olarak [akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkında okuduğunuzdan emin olun. Bu belge, hâlihazırda JavaScript veya Python gibi programlama dillerine aşina olduğunuzu varsayar. +Önce [akıllı sözleşmeler](/developers/docs/smart-contracts/) hakkında bilgi edindiğinizden emin olun. Bu belge, hâlihazırda JavaScript veya Python gibi programlama dillerine aşina olduğunuzu varsayar. -## Veriler {#data} +## Veri {#data} -Her sözleşme verisi bir lokasyona atanmalıdır: ya `storage` ya da `memory`. Bir akıllı sözleşmede depolamayı değiştirmek pahalıdır, bundan dolayı verinizin nerede yaşayacağını düşünmelisiniz. +Herhangi bir sözleşme verisi bir konuma atanmalıdır: ya `storage` ya da `memory`. Bir akıllı sözleşmede depolamayı değiştirmek pahalıdır, bundan dolayı verinizin nerede yaşayacağını düşünmelisiniz. ### Depolama {#storage} Kalıcı veriden depolama olarak bahsedilir ve durum değişkenleri tarafından temsil edilir. Bu değerler kalıcı olarak blok zincirinde depolanır. Sözleşmenin derlendiğinde blok zincirinde ne kadar depolama ihtiyacı duyacağını takip edebilmesi için türünü deklare etmelisiniz. ```solidity -// Solidity example +// Solidity örneği contract SimpleStorage { - uint storedData; // State variable + uint storedData; // Durum değişkeni // ... } ``` ```python -# Vyper example +# Vyper örneği storedData: int128 ``` -Hâlihazırda nesne odaklı dillerde programlama yaptıysanız, büyük ihtimalle çoğu türe aşinasınızdır. Ancak eğer Ethereum geliştirme konusunda acemiyseniz `address` türünü pek görmemişsinizdir. +Hâlihazırda nesne odaklı dillerde programlama yaptıysanız, büyük ihtimalle çoğu türe aşinasınızdır. Ancak, Ethereum geliştirmede yeniyseniz `address` sizin için yeni olmalıdır. -Bir `address` türü 20 bayt veya 160 bite eşit olan bir Ethereum adresi tutabilir. Önünde 0x olan onaltılık gösterim şeklinde döndürür. +Bir `address` türü, 20 bayt veya 160 bite eşdeğer bir Ethereum adresi tutabilir. Önünde 0x olan onaltılık gösterim şeklinde döndürür. Diğer türler: @@ -42,21 +42,21 @@ Diğer türler: - sabit noktalı sayılar - sabit boyutlu bayt dizileri - dinamik olarak boyutlandırılmış bayt dizileri -- Rasyonel ve tam sayı sabitleri -- Metin değişmezleri -- Değişmez onaltılıklar -- Sıralamalar +- rasyonel ve tam sayı değişmezleri +- metin değişmezleri +- onaltılık değişmezler +- enum'lar Daha fazla açıklama için belgelere göz atın: -- [Vyper türlerini gör](https://vyper.readthedocs.io/en/v0.1.0-beta.6/types.html#value-types) -- [Solidity türlerini gör](https://solidity.readthedocs.io/en/latest/types.html#value-types) +- [Vyper türlerini görün](https://docs.vyperlang.org/en/v0.1.0-beta.6/types.html#value-types) +- [Solidity türlerini görün](https://docs.soliditylang.org/en/latest/types.html#value-types) ### Bellek {#memory} Sadece bir sözleşme fonksiyonunun yürütümü esnasında depolanan değerlere bellek değişkenleri denir. Bunlar blok zincirinde kalıcı şekilde depolanmadıkları için kullanımları çok daha ucuzdur. -[Solidity belgelerinden](https://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html?highlight=memory#storage-memory-and-the-stack) EVM'nin nasıl veri depoladığıyla (Depolama, Bellek ve Yığın) ilgili daha fazla bilgi edinin. +EVM'nin verileri nasıl depoladığı (Depolama, Bellek ve Yığın) hakkında daha fazla bilgiyi [Solidity belgelerinden](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#storage-memory-and-the-stack) edinin. ### Ortam değişkenleri {#environment-variables} @@ -64,9 +64,9 @@ Sözleşmenizde tanımladığınız değişkenlere ek olarak, bazı özel global Örnekler: -| **Özellik** | **Durum değişkeni** | **Açıklama** | -| ----------------- | ------------------- | ---------------------------------- | -| `block.timestamp` | uint256 | Mevcut blok dönemi zaman damgası | +| **Özellik** | **Durum değişkeni** | **Açıklama** | +| ----------------- | ------------------- | ----------------------------------------------------- | +| `block.timestamp` | uint256 | Mevcut blok dönemi zaman damgası | | `msg.sender` | adres | Mesajın göndericisi (mevcut çağrı) | ## Fonksiyonlar {#functions} @@ -75,37 +75,37 @@ En basit şekilde, fonksiyonlar gelen işlemlere yanıt olarak bilgi alabilir ve İki tip fonksiyon çağrısı bulunur: -- `internal` – bunlar bir EVM çağrısı oluşturmazlar - - Internal fonksiyonlar ve durum değişkenleri sadece içten erişilebilir (yani mevcut sözleşmeden veya ondan türemiş sözleşmelerden) -- `external` – bunlar bir EVM çağrısı oluştururlar - - External fonksiyonlar sözleşme arayüzünün bir parçasıdır, bu da diğer sözleşmelerden ve işlemler aracılığıyla çağrılabilecekleri anlamına gelir. Bir external fonksiyon olan `f` içten çağrılamaz (yani `f()` çalışmaz ama `this.f()` çalışır). +- `internal` – bunlar bir EVM çağrısı oluşturmaz + - Dahili fonksiyonlara ve durum değişkenlerine yalnızca dahili olarak erişilebilir (yani mevcut sözleşmenin içinden veya ondan türetilen sözleşmelerden) +- `external` – bunlar bir EVM çağrısı oluşturur + - External fonksiyonlar sözleşme arayüzünün bir parçasıdır, bu da diğer sözleşmelerden ve işlemler aracılığıyla çağrılabilecekleri anlamına gelir. Harici bir `f` fonksiyonu dahili olarak çağrılamaz (yani `f()` çalışmaz, ancak `this.f()` çalışır). Ayrıca `public` veya `private` olabilirler -- `public` fonksiyonları sözleşmenin içinden veya mesajlar aracılığıyla çağrılabilirler -- `private` fonksiyonları sadece tanımlandıkları sözleşmede mevcutturlar ve türetilmiş sözleşmelerde olmazlar +- `public` fonksiyonlar, sözleşme içinden dahili olarak veya mesajlar aracılığıyla harici olarak çağrılabilir +- `private` fonksiyonlar yalnızca tanımlandıkları sözleşme için görünürdür ve türetilmiş sözleşmelerde görünmezler Hem fonksiyonlar hem de durum değişkenleri public veya private yapılabilir Burada bir sözleşmedeki bir durum değişkenini güncellemek için bir fonksiyon bulunmaktadır: ```solidity -// Solidity example +// Solidity örneği function update_name(string value) public { dapp_name = value; } ``` -- `string` türünün `value` parametresi müteakip fonksiyona geçirilir: `update_name` -- `public` olarak deklare edilir, bu da herkesin ona erişebileceği anlamına gelir -- `view` olarak deklare edilmez, yani sözleşme durumunu değiştirebilir +- `string` türündeki `value` parametresi, `update_name` fonksiyonuna geçirilir +- `public` olarak bildirilmiştir, yani herkes erişebilir +- `view` olarak bildirilmemiştir, bu nedenle sözleşme durumunu değiştirebilir -### Fonksiyonları görüntüleme {#view-functions} +### Görünüm fonksiyonları {#view-functions} Bu fonksiyonlar sözleşmenin verisinin durumunu değiştirmemeye söz verirler. Yaygın örnekler "alıcı" fonksiyonlardır – örnek olarak bunu bir kullanıcının bakiyesini almak için kullanabilirsiniz. ```solidity -// Solidity example +// Solidity örneği function balanceOf(address _owner) public view returns (uint256 _balance) { return ownerPizzaCount[_owner]; } @@ -123,33 +123,33 @@ def readName() -> string: Durumu değiştirme olarak sayılan şeyler: 1. Değişkenlikleri belirtmek için yazma. -2. [Olaylar yayınlama](https://solidity.readthedocs.io/en/v0.7.0/contracts.html#events). -3. [Başka sözleşmeler oluşturma](https://solidity.readthedocs.io/en/v0.7.0/control-structures.html#creating-contracts). -4. Müteakip komutun kullanımı, `selfdestruct`. +2. [Olayları yayma](https://docs.soliditylang.org/en/v0.7.0/contracts.html#events). +3. [Diğer sözleşmeleri oluşturma](https://docs.soliditylang.org/en/v0.7.0/control-structures.html#creating-contracts). +4. `selfdestruct` kullanma. 5. Çağrılar aracılığıyla ether gönderme. -6. İşareti `view` ya da `pure` olmayan herhangi bir fonksiyonu çağırma. +6. `view` veya `pure` olarak işaretlenmemiş herhangi bir fonksiyonu çağırma. 7. Alt düzey çağrıları kullanma. 8. Belirli işlem kodları içeren satır içi tümleşkeler kullanma. -### Yapıcı fonksiyonları {#constructor-functions} +### Yapıcı fonksiyonlar {#constructor-functions} -`constructor` fonksiyonları sadece sözleşme ilk dağıtılığında tek sefer yürütülür. Birçok sınıf odaklı programlama dilinde olan `constructor` gibi, bu fonksiyonlar genellikle durum değişkenlerini belirtilmiş değerlere ilkler. +`constructor` fonksiyonları yalnızca sözleşme ilk kez dağıtıldığında bir kez yürütülür. Birçok sınıf tabanlı programlama dilindeki `constructor` gibi, bu fonksiyonlar da genellikle durum değişkenlerini belirtilen değerlere başlatır. ```solidity -// Solidity example -// Initializes the contract's data, setting the `owner` -// to the address of the contract creator. +// Solidity örneği +// Sözleşmenin verilerini başlatır, `owner`'ı +// sözleşmeyi oluşturanın adresine ayarlar. constructor() public { - // All smart contracts rely on external transactions to trigger its functions. - // `msg` is a global variable that includes relevant data on the given transaction, - // such as the address of the sender and the ETH value included in the transaction. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + // Tüm akıllı sözleşmeler, fonksiyonlarını tetiklemek için harici işlemlere güvenir. + // `msg`, gönderenin adresi ve işlemde yer alan ETH değeri gibi + // belirli bir işlemle ilgili verileri içeren genel bir değişkendir. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties owner = msg.sender; } ``` ```python -# Vyper example +# Vyper örneği @external def __init__(_beneficiary: address, _bidding_time: uint256): @@ -167,7 +167,7 @@ Sözleşmenizde tanımladığınız değişkenler ve fonksiyonlara ek olarak, ba Bunlar sözleşmelerin başka hesaplara ETH göndermesini sağlar. -## Fonksiyonları yazma {#writing-functions} +## Fonksiyon yazma {#writing-functions} Fonksiyonunuz şunlara ihtiyaç duyar: @@ -180,26 +180,26 @@ Fonksiyonunuz şunlara ihtiyaç duyar: pragma solidity >=0.4.0 <=0.6.0; contract ExampleDapp { - string dapp_name; // state variable + string dapp_name; // durum değişkeni - // Called when the contract is deployed and initializes the value + // Sözleşme dağıtıldığında çağrılır ve değeri başlatır constructor() public { dapp_name = "My Example dapp"; } - // Get Function + // Get Fonksiyonu function read_name() public view returns(string) { return dapp_name; } - // Set Function + // Set Fonksiyonu function update_name(string value) public { dapp_name = value; } } ``` -Tam bir sözleşme bu şekilde gözükebilir. Burada `constructor` fonksiyonu `dapp_name` değişkeni için bir başlangıç değeri sağlıyor. +Tam bir sözleşme bu şekilde gözükebilir. Burada `constructor` fonksiyonu, `dapp_name` değişkeni için bir başlangıç değeri sağlar. ## Olaylar ve günlükler {#events-and-logs} @@ -207,39 +207,39 @@ Olaylar, akıllı sözleşmelerinizin ön yüzünüz ya da diğer abonelik uygul ## Açıklamalı örnekler {#annotated-examples} -Bunlar Solidity ile yazılmış bazı örneklerdir. Eğer kodlarla oynamak isterseniz, onlarla [Remix](http://remix.ethereum.org) içinde etkileşime geçebilirsiniz. +Bunlar Solidity ile yazılmış bazı örneklerdir. Kodla oynamak isterseniz, [Remix](http://remix.ethereum.org) üzerinde onlarla etkileşime girebilirsiniz. ### Merhaba dünya {#hello-world} ```solidity -// Specifies the version of Solidity, using semantic versioning. -// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +// Anlamsal sürüm oluşturmayı kullanarak Solidity sürümünü belirtir. +// Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma pragma solidity ^0.5.10; -// Defines a contract named `HelloWorld`. -// A contract is a collection of functions and data (its state). -// Once deployed, a contract resides at a specific address on the Ethereum blockchain. -// Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +// `HelloWorld` adında bir sözleşme tanımlar. +// Bir sözleşme, fonksiyonlar ve verilerden (durumundan) oluşan bir koleksiyondur. +// Dağıtıldıktan sonra, bir sözleşme Ethereum blokzincirinde belirli bir adreste bulunur. +// Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html contract HelloWorld { - // Declares a state variable `message` of type `string`. - // State variables are variables whose values are permanently stored in contract storage. - // The keyword `public` makes variables accessible from outside a contract - // and creates a function that other contracts or clients can call to access the value. + // `string` türünde bir `message` durum değişkeni bildirir. + // Durum değişkenleri, değerleri kalıcı olarak sözleşme depolama alanında saklanan değişkenlerdir. + // `public` anahtar kelimesi, değişkenleri bir sözleşmenin dışından erişilebilir hale getirir + // ve diğer sözleşmelerin veya istemcilerin değere erişmek için çağırabileceği bir fonksiyon oluşturur. string public message; - // Similar to many class-based object-oriented languages, a constructor is - // a special function that is only executed upon contract creation. - // Constructors are used to initialize the contract's data. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + // Birçok sınıf tabanlı nesne yönelimli dilde olduğu gibi, bir yapıcı + // yalnızca sözleşme oluşturulduğunda yürütülen özel bir fonksiyondur. + // Yapıcılar, sözleşmenin verilerini başlatmak için kullanılır. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors constructor(string memory initMessage) public { - // Accepts a string argument `initMessage` and sets the value - // into the contract's `message` storage variable). + // Bir `initMessage` dize bağımsız değişkenini kabul eder ve değeri + // sözleşmenin `message` depolama değişkenine ayarlar). message = initMessage; } - // A public function that accepts a string argument - // and updates the `message` storage variable. + // Bir dize bağımsız değişkenini kabul eden + // ve `message` depolama değişkenini güncelleyen genel bir fonksiyon. function update(string memory newMessage) public { message = newMessage; } @@ -252,58 +252,58 @@ contract HelloWorld { pragma solidity ^0.5.10; contract Token { - // An `address` is comparable to an email address - it's used to identify an account on Ethereum. - // Addresses can represent a smart contract or an external (user) accounts. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#address + // Bir `address` bir e-posta adresine benzer; Ethereum'da bir hesabı tanımlamak için kullanılır. + // Adresler bir akıllı sözleşmeyi veya harici (kullanıcı) hesapları temsil edebilir. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/types.html#address address public owner; - // A `mapping` is essentially a hash table data structure. - // This `mapping` assigns an unsigned integer (the token balance) to an address (the token holder). - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types + // Bir `mapping` aslında bir karma tablo veri yapısıdır. + // Bu `mapping`, işaretsiz bir tam sayıyı (jeton bakiyesi) bir adrese (jeton sahibi) atar. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types mapping (address => uint) public balances; - // Events allow for logging of activity on the blockchain. - // Ethereum clients can listen for events in order to react to contract state changes. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events + // Olaylar, blokzincirindeki etkinliğin günlüğe kaydedilmesine olanak tanır. + // Ethereum istemcileri, sözleşme durumu değişikliklerine tepki vermek için olayları dinleyebilir. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events event Transfer(address from, address to, uint amount); - // Initializes the contract's data, setting the `owner` - // to the address of the contract creator. + // Sözleşmenin verilerini başlatır, `owner`'ı + // sözleşmeyi oluşturanın adresine ayarlar. constructor() public { - // All smart contracts rely on external transactions to trigger its functions. - // `msg` is a global variable that includes relevant data on the given transaction, - // such as the address of the sender and the ETH value included in the transaction. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + // Tüm akıllı sözleşmeler, fonksiyonlarını tetiklemek için harici işlemlere güvenir. + // `msg`, gönderenin adresi ve işlemde yer alan ETH değeri gibi + // belirli bir işlemle ilgili verileri içeren genel bir değişkendir. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties owner = msg.sender; } - // Creates an amount of new tokens and sends them to an address. + // Yeni jetonlar oluşturur ve bunları bir adrese gönderir. function mint(address receiver, uint amount) public { - // `require` is a control structure used to enforce certain conditions. - // If a `require` statement evaluates to `false`, an exception is triggered, - // which reverts all changes made to the state during the current call. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + // `require`, belirli koşulları zorlamak için kullanılan bir kontrol yapısıdır. + // Bir `require` ifadesi `false` olarak değerlendirilirse, bir istisna tetiklenir, + // bu da mevcut çağrı sırasında durumda yapılan tüm değişiklikleri geri alır. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions - // Only the contract owner can call this function - require(msg.sender == owner, "You are not the owner."); + // Bu fonksiyonu yalnızca sözleşme sahibi çağırabilir + require(msg.sender == owner, "Sahip siz değilsiniz."); - // Enforces a maximum amount of tokens - require(amount < 1e60, "Maximum issuance exceeded"); + // Maksimum jeton miktarını zorlar + require(amount < 1e60, "Maksimum ihraç aşıldı"); - // Increases the balance of `receiver` by `amount` + // `receiver` bakiyesini `amount` kadar artırır balances[receiver] += amount; } - // Sends an amount of existing tokens from any caller to an address. + // Herhangi bir çağırandan bir adrese mevcut jeton miktarını gönderir. function transfer(address receiver, uint amount) public { - // The sender must have enough tokens to send - require(amount <= balances[msg.sender], "Insufficient balance."); + // Gönderenin göndermek için yeterli jetonu olmalıdır + require(amount <= balances[msg.sender], "Yetersiz bakiye."); - // Adjusts token balances of the two addresses + // İki adresin jeton bakiyelerini ayarlar balances[msg.sender] -= amount; balances[receiver] += amount; - // Emits the event defined earlier + // Daha önce tanımlanan olayı yayar emit Transfer(msg.sender, receiver, amount); } } @@ -314,74 +314,74 @@ contract Token { ```solidity pragma solidity ^0.5.10; -// Imports symbols from other files into the current contract. -// In this case, a series of helper contracts from OpenZeppelin. -// Learn more: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#importing-other-source-files +// Diğer dosyalardan sembolleri mevcut sözleşmeye aktarır. +// Bu durumda, OpenZeppelin'den bir dizi yardımcı sözleşme. +// Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#importing-other-source-files import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "../node_modules/@openzeppelin/contracts/introspection/ERC165.sol"; import "../node_modules/@openzeppelin/contracts/math/SafeMath.sol"; -// The `is` keyword is used to inherit functions and keywords from external contracts. -// In this case, `CryptoPizza` inherits from the `IERC721` and `ERC165` contracts. -// Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#inheritance +// `is` anahtar kelimesi, harici sözleşmelerden fonksiyonları ve anahtar kelimeleri miras almak için kullanılır. +// Bu durumda `CryptoPizza`, `IERC721` ve `ERC165` sözleşmelerinden miras alır. +// Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#inheritance contract CryptoPizza is IERC721, ERC165 { - // Uses OpenZeppelin's SafeMath library to perform arithmetic operations safely. - // Learn more: https://docs.openzeppelin.com/contracts/2.x/api/math#SafeMath + // Aritmetik işlemleri güvenli bir şekilde gerçekleştirmek için OpenZeppelin'in SafeMath kütüphanesini kullanır. + // Daha fazlasını öğrenin: https://docs.openzeppelin.com/contracts/2.x/api/math#SafeMath using SafeMath for uint256; - // Constant state variables in Solidity are similar to other languages - // but you must assign from an expression which is constant at compile time. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constant-state-variables + // Solidity'deki sabit durum değişkenleri diğer dillere benzer + // ancak derleme zamanında sabit olan bir ifadeden atama yapmanız gerekir. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constant-state-variables uint256 constant dnaDigits = 10; uint256 constant dnaModulus = 10 ** dnaDigits; bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; - // Struct types let you define your own type - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#structs + // Struct türleri kendi türünüzü tanımlamanızı sağlar + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/types.html#structs struct Pizza { string name; uint256 dna; } - // Creates an empty array of Pizza structs + // Pizza yapılarından oluşan boş bir dizi oluşturur Pizza[] public pizzas; - // Mapping from pizza ID to its owner's address + // Pizza kimliğinden sahibinin adresine eşleme mapping(uint256 => address) public pizzaToOwner; - // Mapping from owner's address to number of owned token + // Sahibin adresinden sahip olunan jeton sayısına eşleme mapping(address => uint256) public ownerPizzaCount; - // Mapping from token ID to approved address + // Jeton kimliğinden onaylanmış adrese eşleme mapping(uint256 => address) pizzaApprovals; - // You can nest mappings, this example maps owner to operator approvals + // Eşlemeleri iç içe kullanabilirsiniz, bu örnek sahibi operatör onaylarıyla eşler mapping(address => mapping(address => bool)) private operatorApprovals; - // Internal function to create a random Pizza from string (name) and DNA + // Dizeden (ad) ve DNA'dan rastgele bir Pizza oluşturmak için dahili fonksiyon function _createPizza(string memory _name, uint256 _dna) - // The `internal` keyword means this function is only visible - // within this contract and contracts that derive this contract - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#visibility-and-getters + // `internal` anahtar kelimesi, bu fonksiyonun yalnızca + // bu sözleşme ve bu sözleşmeyi türeten sözleşmeler içinde görünür olduğu anlamına gelir + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#visibility-and-getters internal - // `isUnique` is a function modifier that checks if the pizza already exists - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html#function-modifiers + // `isUnique`, pizzanın zaten var olup olmadığını kontrol eden bir fonksiyon değiştiricisidir + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html#function-modifiers isUnique(_name, _dna) { - // Adds Pizza to array of Pizzas and get id + // Pizza'yı Pizza dizisine ekler ve kimliği alır uint256 id = SafeMath.sub(pizzas.push(Pizza(_name, _dna)), 1); - // Checks that Pizza owner is the same as current user - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + // Pizza sahibinin mevcut kullanıcıyla aynı olup olmadığını kontrol eder + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions - // note that address(0) is the zero address, - // indicating that pizza[id] is not yet allocated to a particular user. + // address(0)'ın sıfır adresi olduğunu unutmayın, + // pizza[id]'nin henüz belirli bir kullanıcıya atanmadığını gösterir. assert(pizzaToOwner[id] == address(0)); - // Maps the Pizza to the owner + // Pizza'yı sahibine eşler pizzaToOwner[id] = msg.sender; ownerPizzaCount[msg.sender] = SafeMath.add( ownerPizzaCount[msg.sender], @@ -389,38 +389,38 @@ contract CryptoPizza is IERC721, ERC165 { ); } - // Creates a random Pizza from string (name) + // Dizeden (ad) rastgele bir Pizza oluşturur function createRandomPizza(string memory _name) public { uint256 randDna = generateRandomDna(_name, msg.sender); _createPizza(_name, randDna); } - // Generates random DNA from string (name) and address of the owner (creator) + // Dizeden (ad) ve sahibinin adresinden (oluşturan) rastgele DNA oluşturur function generateRandomDna(string memory _str, address _owner) public - // Functions marked as `pure` promise not to read from or modify the state - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#pure-functions + // `pure` olarak işaretlenmiş fonksiyonlar durumu okumama veya değiştirmeme sözü verir + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#pure-functions pure returns (uint256) { - // Generates random uint from string (name) + address (owner) + // Dizeden (ad) + adresten (sahip) rastgele uint oluşturur uint256 rand = uint256(keccak256(abi.encodePacked(_str))) + uint256(_owner); rand = rand % dnaModulus; return rand; } - // Returns array of Pizzas found by owner + // Sahibe göre bulunan Pizza dizisini döndürür function getPizzasByOwner(address _owner) public - // Functions marked as `view` promise not to modify state - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#view-functions + // `view` olarak işaretlenmiş fonksiyonlar durumu değiştirmeme sözü verir + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#view-functions view returns (uint256[] memory) { - // Uses the `memory` storage location to store values only for the - // lifecycle of this function call. - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/introduction-to-smart-contracts.html#storage-memory-and-the-stack + // Değerleri yalnızca bu fonksiyon çağrısının + // yaşam döngüsü için saklamak üzere `memory` depolama konumunu kullanır. + // Daha fazlasını öğrenin: https://solidity.readthedocs.io/en/v0.5.10/introduction-to-smart-contracts.html#storage-memory-and-the-stack uint256[] memory result = new uint256[](ownerPizzaCount[_owner]); uint256 counter = 0; for (uint256 i = 0; i < pizzas.length; i++) { @@ -432,28 +432,28 @@ contract CryptoPizza is IERC721, ERC165 { return result; } - // Transfers Pizza and ownership to other address + // Pizza'yı ve sahipliğini başka bir adrese aktarır function transferFrom(address _from, address _to, uint256 _pizzaId) public { - require(_from != address(0) && _to != address(0), "Invalid address."); - require(_exists(_pizzaId), "Pizza does not exist."); - require(_from != _to, "Cannot transfer to the same address."); - require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); + require(_from != address(0) && _to != address(0), "Geçersiz adres."); + require(_exists(_pizzaId), "Pizza mevcut değil."); + require(_from != _to, "Aynı adrese transfer yapılamaz."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Adres onaylı değil."); ownerPizzaCount[_to] = SafeMath.add(ownerPizzaCount[_to], 1); ownerPizzaCount[_from] = SafeMath.sub(ownerPizzaCount[_from], 1); pizzaToOwner[_pizzaId] = _to; - // Emits event defined in the imported IERC721 contract + // İçe aktarılan IERC721 sözleşmesinde tanımlanan olayı yayar emit Transfer(_from, _to, _pizzaId); _clearApproval(_to, _pizzaId); } /** - * Safely transfers the ownership of a given token ID to another address - * If the target address is a contract, it must implement `onERC721Received`, - * which is called upon a safe transfer, and return the magic value + * Belirli bir jeton kimliğinin sahipliğini başka bir adrese güvenli bir şekilde aktarır + * Hedef adres bir sözleşme ise `onERC721Received` uygulamalıdır, + * bu, güvenli bir aktarım üzerine çağrılır ve sihirli değeri döndürür * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; - * otherwise, the transfer is reverted. + * aksi takdirde, aktarım geri alınır. */ function safeTransferFrom(address from, address to, uint256 pizzaId) public @@ -463,11 +463,11 @@ contract CryptoPizza is IERC721, ERC165 { } /** - * Safely transfers the ownership of a given token ID to another address - * If the target address is a contract, it must implement `onERC721Received`, - * which is called upon a safe transfer, and return the magic value + * Belirli bir jeton kimliğinin sahipliğini başka bir adrese güvenli bir şekilde aktarır + * Hedef adres bir sözleşme ise `onERC721Received` uygulamalıdır, + * bu, güvenli bir aktarım üzerine çağrılır ve sihirli değeri döndürür * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; - * otherwise, the transfer is reverted. + * aksi takdirde, aktarım geri alınır. */ function safeTransferFrom( address from, @@ -476,12 +476,12 @@ contract CryptoPizza is IERC721, ERC165 { bytes memory _data ) public { this.transferFrom(from, to, pizzaId); - require(_checkOnERC721Received(from, to, pizzaId, _data), "Must implement onERC721Received."); + require(_checkOnERC721Received(from, to, pizzaId, _data), "onERC721Received uygulanmalıdır."); } /** - * Internal function to invoke `onERC721Received` on a target address - * The call is not executed if the target address is not a contract + * Hedef bir adreste `onERC721Received`'i çağırmak için dahili fonksiyon + * Hedef adres bir sözleşme değilse çağrı yürütülmez */ function _checkOnERC721Received( address from, @@ -502,13 +502,13 @@ contract CryptoPizza is IERC721, ERC165 { return (retval == _ERC721_RECEIVED); } - // Burns a Pizza - destroys Token completely - // The `external` function modifier means this function is - // part of the contract interface and other contracts can call it + // Bir Pizza'yı yakar - Jetonu tamamen yok eder + // `external` fonksiyon değiştiricisi, bu fonksiyonun + // sözleşme arayüzünün bir parçası olduğu ve diğer sözleşmelerin onu çağırabileceği anlamına gelir function burn(uint256 _pizzaId) external { - require(msg.sender != address(0), "Invalid address."); - require(_exists(_pizzaId), "Pizza does not exist."); - require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); + require(msg.sender != address(0), "Geçersiz adres."); + require(_exists(_pizzaId), "Pizza mevcut değil."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Adres onaylı değil."); ownerPizzaCount[msg.sender] = SafeMath.sub( ownerPizzaCount[msg.sender], @@ -517,58 +517,58 @@ contract CryptoPizza is IERC721, ERC165 { pizzaToOwner[_pizzaId] = address(0); } - // Returns count of Pizzas by address + // Adrese göre Pizza sayısını döndürür function balanceOf(address _owner) public view returns (uint256 _balance) { return ownerPizzaCount[_owner]; } - // Returns owner of the Pizza found by id + // Kimliğe göre bulunan Pizza'nın sahibini döndürür function ownerOf(uint256 _pizzaId) public view returns (address _owner) { address owner = pizzaToOwner[_pizzaId]; - require(owner != address(0), "Invalid Pizza ID."); + require(owner != address(0), "Geçersiz Pizza Kimliği."); return owner; } - // Approves other address to transfer ownership of Pizza + // Pizza sahipliğini devretmek için başka bir adresi onaylar function approve(address _to, uint256 _pizzaId) public { - require(msg.sender == pizzaToOwner[_pizzaId], "Must be the Pizza owner."); + require(msg.sender == pizzaToOwner[_pizzaId], "Pizza sahibi olmalısınız."); pizzaApprovals[_pizzaId] = _to; emit Approval(msg.sender, _to, _pizzaId); } - // Returns approved address for specific Pizza + // Belirli Pizza için onaylanmış adresi döndürür function getApproved(uint256 _pizzaId) public view returns (address operator) { - require(_exists(_pizzaId), "Pizza does not exist."); + require(_exists(_pizzaId), "Pizza mevcut değil."); return pizzaApprovals[_pizzaId]; } /** - * Private function to clear current approval of a given token ID - * Reverts if the given address is not indeed the owner of the token + * Belirli bir jeton kimliğinin mevcut onayını temizlemek için özel fonksiyon + * Verilen adres gerçekten jetonun sahibi değilse geri alınır */ function _clearApproval(address owner, uint256 _pizzaId) private { - require(pizzaToOwner[_pizzaId] == owner, "Must be pizza owner."); - require(_exists(_pizzaId), "Pizza does not exist."); + require(pizzaToOwner[_pizzaId] == owner, "Pizza sahibi olmalısınız."); + require(_exists(_pizzaId), "Pizza mevcut değil."); if (pizzaApprovals[_pizzaId] != address(0)) { pizzaApprovals[_pizzaId] = address(0); } } /* - * Sets or unsets the approval of a given operator - * An operator is allowed to transfer all tokens of the sender on their behalf + * Belirli bir operatörün onayını ayarlar veya kaldırır + * Bir operatörün, gönderenin tüm jetonlarını kendi adına transfer etmesine izin verilir */ function setApprovalForAll(address to, bool approved) public { - require(to != msg.sender, "Cannot approve own address"); + require(to != msg.sender, "Kendi adresinizi onaylayamazsınız"); operatorApprovals[msg.sender][to] = approved; emit ApprovalForAll(msg.sender, to, approved); } - // Tells whether an operator is approved by a given owner + // Bir operatörün belirli bir sahip tarafından onaylanıp onaylanmadığını söyler function isApprovedForAll(address owner, address operator) public view @@ -577,27 +577,27 @@ contract CryptoPizza is IERC721, ERC165 { return operatorApprovals[owner][operator]; } - // Takes ownership of Pizza - only for approved users + // Pizza'nın sahipliğini alır - yalnızca onaylı kullanıcılar için function takeOwnership(uint256 _pizzaId) public { - require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Adres onaylı değil."); address owner = this.ownerOf(_pizzaId); this.transferFrom(owner, msg.sender, _pizzaId); } - // Checks if Pizza exists + // Pizza'nın var olup olmadığını kontrol eder function _exists(uint256 pizzaId) internal view returns (bool) { address owner = pizzaToOwner[pizzaId]; return owner != address(0); } - // Checks if address is owner or is approved to transfer Pizza + // Adresin sahip olup olmadığını veya Pizza'yı transfer etme yetkisi olup olmadığını kontrol eder function _isApprovedOrOwner(address spender, uint256 pizzaId) internal view returns (bool) { address owner = pizzaToOwner[pizzaId]; - // Disable solium check because of + // Solium kontrolünü devre dışı bırak, çünkü // https://github.com/duaraghav8/Solium/issues/175 // solium-disable-next-line operator-whitespace return (spender == owner || @@ -605,7 +605,7 @@ contract CryptoPizza is IERC721, ERC165 { this.isApprovedForAll(owner, spender)); } - // Check if Pizza is unique and doesn't exist yet + // Pizza'nın benzersiz olup olmadığını ve henüz mevcut olup olmadığını kontrol edin modifier isUnique(string memory _name, uint256 _dna) { bool result = true; for (uint256 i = 0; i < pizzas.length; i++) { @@ -617,19 +617,18 @@ contract CryptoPizza is IERC721, ERC165 { result = false; } } - require(result, "Pizza with such name already exists."); + require(result, "Bu isimde bir pizza zaten var."); _; } - // Returns whether the target address is a contract + // Hedef adresin bir sözleşme olup olmadığını döndürür function isContract(address account) internal view returns (bool) { uint256 size; - // Currently there is no better way to check if there is a contract in an address - // than to check the size of the code at that address. + // Şu anda bir adreste sözleşme olup olmadığını kontrol etmenin, o adresteki kodun boyutunu kontrol etmekten daha iyi bir yolu yoktur. // Bunun nasıl çalıştığı hakkında daha fazla ayrıntı için // bkz. https://ethereum.stackexchange.com/a/14016/36603. - // Serenity sürümünden önce bunu tekrar kontrol edin, - // çünkü o zaman tüm adresler sözleşme olacaktır. + // TODO Serenity sürümünden önce bunu tekrar kontrol edin, çünkü o zaman tüm adresler + // sözleşme olacak. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(account) @@ -639,20 +638,20 @@ contract CryptoPizza is IERC721, ERC165 { } ``` -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} Akıllı sözleşmelere daha detaylı bir genel bakış için Solidity ve Vyper'ın belgelerine bakın: -- [Solidity](https://solidity.readthedocs.io/) -- [Vyper](https://vyper.readthedocs.io/) +- [Solidity](https://docs.soliditylang.org/) +- [Vyper](https://docs.vyperlang.org/en/stable/) -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [Akıllı sözleşmeler](/developers/docs/smart-contracts/) - [Ethereum Sanal Makinesi](/developers/docs/evm/) ## İlgili öğreticiler {#related-tutorials} -- [Sözleşme boyut limitiyle savaşmak için sözleşmelerin boyutunu azaltma](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _– Akıllı sözleşmenizin boyutunu küçültmek için bazı pratik ipuçları._ -- [Olaylar ile akıllı sözleşmelerden veri kaydetme](/developers/tutorials/logging-events-smart-contracts/) _– Akıllı sözleşme olaylarına ve onları veri kaydetmek için nasıl kullanabileceğinize bir giriş._ -- [Solidity ile başka sözleşmelerle etkileşime geçmek](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– Mevcut bir sözleşmeden nasıl bir akıllı sözleşme dağıtılır ve etkileşime geçilir._ +- [Sözleşme boyutu limitiyle mücadele etmek için sözleşmeleri küçültme](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _– Akıllı sözleşmenizin boyutunu küçültmek için bazı pratik ipuçları._ +- [Akıllı sözleşmelerden olaylarla veri günlüğü tutma](/developers/tutorials/logging-events-smart-contracts/) _– Akıllı sözleşme olaylarına ve bunları veri günlüğü tutmak için nasıl kullanabileceğinize bir giriş._ +- [Solidity'den diğer sözleşmelerle etkileşim kurma](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– Mevcut bir sözleşmeden bir akıllı sözleşmenin nasıl dağıtılacağı ve onunla nasıl etkileşim kurulacağı._ diff --git a/public/content/translations/tr/developers/docs/smart-contracts/compiling/index.md b/public/content/translations/tr/developers/docs/smart-contracts/compiling/index.md index 05c4f842fe5..3def1c7d694 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/compiling/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/compiling/index.md @@ -1,33 +1,33 @@ --- -title: Akıllı sözleşmeleri derlemek -description: Neden akıllı sözleşmeleri derlemeniz gerektiği ve derlemenin aslen ne yaptığı hakkında bir açıklama. +title: "Akıllı sözleşmeleri derlemek" +description: "Neden akıllı sözleşmeleri derlemeniz gerektiği ve derlemenin aslen ne yaptığı hakkında bir açıklama." lang: tr incomplete: true --- Web uygulamanızın ve Ethereum sanal makinesinin (EVM) sözleşmenizi anlayabilmesi için onu derlemeniz gerekir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Derleme hakkında okumadan önce [akıllı sözleşmelere](/developers/docs/smart-contracts/) girişimizi ve [Ethereum sanal makinesini](/developers/docs/evm/) okumanız faydalı olabilir. +Derleme hakkında okumadan önce [akıllı sözleşmelere](/developers/docs/smart-contracts/) giriş yazımızı ve [ethereum sanal makinesini](/developers/docs/evm/) okumanız faydalı olabilir. ## EVM {#the-evm} -[EVM](/developers/docs/evm/)'nin sözleşmenizi çalıştırabilmesini istiyorsanız sözleşmeniz **bytecode** biçiminde olmalıdır. Derleme şunu: +[EVM](/developers/docs/evm/)'nin sözleşmenizi çalıştırabilmesi için **bayt kodu** biçiminde olması gerekir. Derleme şunu: ```solidity pragma solidity 0.4.24; contract Greeter { - function greet() public constant returns (string) { + function greet() public view returns (string memory) { return "Hello"; } } ``` -**şuna dönüştürür:** +**şuna:** ``` PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900 @@ -39,11 +39,11 @@ Bunlara **işlem kodları** denir. EVM işlem kodları, Ethereum Sanal Makinesi' ## Web uygulamaları {#web-applications} -Derleyici ayrıca uygulamanızın sözleşmeyi anlaması ve sözleşmenin fonksiyonlarını çağırması için gerek duyduğunuz **Uygulama İkili Arayüzünü (ABI)** de oluşturacaktır. +Derleyici ayrıca, uygulamanızın sözleşmeyi anlayıp işlevlerini çağırabilmesi için gereken **Uygulama İkili Arayüzünü (ABI)** de üretir. ABI, dağıtılmış sözleşmeyi ve onun akıllı sözleşme fonksiyonlarını tanımlayan bir JSON dosyasıdır. Bu web2 ve web3 arasındaki açığı kapamaya yardımcı olur -Bir [JavaScript istemci kütüphanesi](/developers/docs/apis/javascript/) web uygulamanızın arayüzünde akıllı sözleşmeyi çağırabilmeniz için **ABI** okuyacaktır. +Bir [JavaScript istemci kütüphanesi](/developers/docs/apis/javascript/), web uygulamanızın arayüzünde akıllı sözleşmenizi çağırmanız için **ABI**'yi okur. Aşağıda ERC-20 token sözleşmesinin ABI'si bulunuyor. Bir ERC-20, Ethereum üzerinde takas edebileceğiniz bir tokendir. @@ -272,11 +272,11 @@ Aşağıda ERC-20 token sözleşmesinin ABI'si bulunuyor. Bir ERC-20, Ethereum ] ``` -## daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [ABI şartnamesi](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _– Solidity_ +- [ABI belirtimi](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _– Solidity_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} - [JavaScript istemci kütüphaneleri](/developers/docs/apis/javascript/) - [Ethereum sanal makinesi](/developers/docs/evm/) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/composability/index.md b/public/content/translations/tr/developers/docs/smart-contracts/composability/index.md index a04f586e308..c10707b02f5 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/composability/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/composability/index.md @@ -1,13 +1,13 @@ --- -title: Akıllı sözleşme birleştirilebilirliği -description: +title: "Akıllı sözleşme birleştirilebilirliği" +description: "Akıllı sözleşmelerin, mevcut bileşenleri yeniden kullanarak karmaşık merkeziyetsiz uygulamalar oluşturmak için Lego blokları gibi nasıl birleştirilebileceğini öğrenin." lang: tr incomplete: true --- ## Kısa bir giriş {#a-brief-introduction} -Akıllı sözleşmeler Ethereum üzerinde herkese açıktır ve açık API'ler olarak düşünülebilirler. Bir dapp geliştiricisi olmak için kendi akıllı sözleşmenizi yazmanız gerekmez, sadece onlarla nasıl etkileşime geçebileceğinizi bilmelisiniz. Örneğin, bir merkeziyetsiz borsa olan [Uniswap](https://uniswap.exchange/swap)'ın mevcut akıllı sözleşmelerini uygulamanızdaki tüm token değişim mantığını idare etmek için kullanabilirsiniz: Sıfırdan başlamanız gerekmez. Onların [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) ve [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) sözleşmelerine göz atın. +Akıllı sözleşmeler Ethereum üzerinde herkese açıktır ve açık API'ler olarak düşünülebilirler. Bir dapp geliştiricisi olmak için kendi akıllı sözleşmenizi yazmanız gerekmez, sadece onlarla nasıl etkileşime geçebileceğinizi bilmelisiniz. Örneğin, uygulamanızdaki tüm jeton takas mantığını yönetmek için merkeziyetsiz bir borsa olan [Uniswap](https://uniswap.exchange/swap)'in mevcut akıllı sözleşmelerini kullanabilirsiniz – sıfırdan başlamanız gerekmez. [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) ve [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) sözleşmelerinden bazılarına göz atın. ## Birleştirilebilirlik nedir? {#what-is-composability} @@ -23,17 +23,17 @@ Ethereum akıllı sözleşmeleri, genel API'ler gibidir, bu nedenle herkes sözl **2. Otonomi**: Birleştirilebilir bileşenler bağımsız olarak çalışabilmelidir. Ethereum'daki her akıllı sözleşme kendi kendini yürütür ve sistemin diğer bölümlerine güvenmeden çalışabilir. -**3. Keşfedilebilirlik**: Geliştiriciler, genel kullanıma açık değilse, harici sözleşmeler arayamaz veya yazılım kitaplıklarını uygulamalara entegre edemezler. Tasarım gereği, akıllı sözleşmeler açık kaynaklıdır; herkes bir akıllı sözleşme çağırabilir veya bir kod tabanını çatallayabilir. +**3. Keşfedilebilirlik**: Geliştiriciler, kamuya açık olmadıkları takdirde harici sözleşmeleri çağıramaz veya yazılım kütüphanelerini uygulamalara entegre edemezler. Tasarım gereği, akıllı sözleşmeler açık kaynaklıdır; herkes bir akıllı sözleşme çağırabilir veya bir kod tabanını çatallayabilir. ## Birleştirilebilirliğin faydaları {#benefits-of-composability} ### Daha kısa geliştirme döngüsü {#shorter-development-cycle} -Birleştirilebilirlik, geliştiricilerin [dapps](/apps/#what-are-dapps) oluştururken yapması gereken işi azaltır. [Naval Ravikant'ın dediği gibi:](https://twitter.com/naval/status/1444366754650656770) "Açık kaynak, her problemin bir kez çözülmesi gerektiği anlamına gelir." +Birleştirilebilirlik, geliştiricilerin [merkeziyetsiz uygulamalar](/apps/#what-are-dapps) oluştururken yapması gereken işi azaltır. [Naval Ravikant'ın belirttiği gibi:](https://twitter.com/naval/status/1444366754650656770) "Açık kaynak, her sorunun bir kez çözülmesi gerektiği anlamına gelir." Bir sorunu çözen akıllı bir sözleşme varsa, diğer geliştiriciler onu yeniden kullanabilir, böylece aynı sorunu çözmeleri gerekmez. Bu şekilde, geliştiriciler mevcut yazılım kitaplıklarını alabilir ve yeni dapp'ler oluşturmak için ekstra işlevsellik ekleyebilir. -### Daha fazla yenilik {#greater-innovation} +### Daha fazla inovasyon {#greater-innovation} Birleştirilebilirlik, yenilikçiliği ve denemeyi teşvik eder çünkü geliştiriciler, istenen sonuçları oluşturmak için açık kaynak kodunu yeniden kullanmakta, değiştirmekte, çoğaltmakta veya entegre etmekte özgürdür. Sonuç olarak, geliştirme ekipleri temel işlevlere daha az zaman harcar ve yeni özellikleri denemeye daha fazla zaman ayırabilir. @@ -43,34 +43,34 @@ Ethereum ekosisteminin bileşenleri arasındaki birlikte çalışabilirlik, kull Birlikte çalışabilirliğin faydalarını göstermek için arbitraj ticaretinden bir örnek kullanacağız: -Bir token `A borsasında` `B borsasından` daha yüksek işlem görüyorsa, kâr etmek için fiyat farkından yararlanabilirsiniz. Ancak, bunu yalnızca işlemi mümkün kılmak için yeterli sermayeniz varsa yapabilir (yani, `B borsasından ` tokeni satın alıp `A borsasında` satabilirsiniz). +Bir jeton `A borsası`nda `B borsası`ndan daha yüksek işlem görüyorsa, kâr etmek için fiyat farkından yararlanabilirsiniz. Ancak, bunu yalnızca işlemi finanse edecek yeterli sermayeniz varsa yapabilirsiniz (yani, jetonu `B borsası`ndan satın alıp `A borsası`nda satmak). -Alım satımı karşılamak için yeterli paranızın olmadığı bir senaryoda, anlık kredi ideal olabilir. [Hızlı krediler](/defi/#flash-loans) oldukça tekniktir, ancak temel fikir, varlıkları (teminatsız) ödünç alabilmeniz ve _bir_ işlem içinde aynı şekilde iade edebilmenizdir. +Alım satımı karşılamak için yeterli paranızın olmadığı bir senaryoda, anlık kredi ideal olabilir. [Flaş krediler](/defi/#flash-loans) oldukça tekniktir, ancak temel fikir, varlıkları (teminatsız) ödünç alabilmeniz ve aynı varlıkları _tek_ bir işlem içinde iade edebilmenizdir. -İlk örneğimize geri dönersek, bir arbitraj tüccarı, büyük bir flash kredi alabilir, `B borsası`ndan token satın alabilir, bunları `A borsası`nda satabilir, sermayeyi + faizi geri ödeyebilir ve aynı işlem içinde kârı tutabilir. Bu karmaşık mantık, çağrıları birden fazla sözleşmeye birleştirmeyi gerektirir; bu, akıllı sözleşmelerin birlikte çalışabilirliği olmasaydı mümkün olmazdı. +İlk örneğimize dönecek olursak; bir arbitraj yatırımcısı, aynı işlem içerisinde, büyük miktarda flaş kredi alabilir, `B borsası`ndan jeton satın alabilir, bunları `A borsası`nda satabilir, anaparayı + faizi geri ödeyebilir ve kârı elinde tutabilir. Bu karmaşık mantık, çağrıları birden fazla sözleşmeye birleştirmeyi gerektirir; bu, akıllı sözleşmelerin birlikte çalışabilirliği olmasaydı mümkün olmazdı. ## Ethereum'da birleştirilebilirlik örnekleri {#composability-in-ethereum} -### Token takasları {#token-swaps} +### Jeton takasları {#token-swaps} İşlemlerin ETH'de ödenmesini gerektiren bir dapp oluşturursanız, token takas mantığını entegre ederek kullanıcıların diğer ERC-20 tokenlerinde ödeme yapmasına izin verebilirsiniz. Sözleşme çağrılan işlevi yürütmeden önce kod, kullanıcının tokenini otomatik olarak ETH'ye dönüştürür. -### Yönetim {#governance} +### Yönetişim {#governance} -Bir [DAO](/dao/) için ısmarlama yönetim sistemleri oluşturmak pahalı ve zaman alıcı olabilir. Bunun yerine, hızlı bir şekilde bir yönetişim çerçevesi oluşturmak üzere DAO'nuzu başlatmak için [Aragon İstemcisi](https://client.aragon.org/) gibi açık kaynaklı bir yönetişim araç seti kullanabilirsiniz. +Bir [DAO](/dao/) için özel yönetişim sistemleri oluşturmak pahalı ve zaman alıcı olabilir. Bunun yerine, DAO'nuzu başlatmak ve hızlı bir şekilde bir yönetişim çerçevesi oluşturmak için [Aragon Client](https://client.aragon.org/) gibi açık kaynaklı bir yönetişim araç setini kullanabilirsiniz. ### Kimlik yönetimi {#identity-management} -Özel bir kimlik doğrulama sistemi oluşturmak veya merkezi sağlayıcılara güvenmek yerine, kullanıcılar için kimlik doğrulamayı yönetmek için merkezi olmayan kimlik (DID) araçlarını entegre edebilirsiniz. Bir örnek, kullanıcıların kimliklerini bir Ethereum cüzdanıyla doğrulamasını sağlayan "Ethereum ile oturum açma" işlevi sunan açık kaynaklı bir araç seti olan [SpruceID](https://www.spruceid.com/)'dir. +Özel bir kimlik doğrulama sistemi oluşturmak veya merkezi sağlayıcılara güvenmek yerine, kullanıcılar için kimlik doğrulamayı yönetmek için merkezi olmayan kimlik (DID) araçlarını entegre edebilirsiniz. Buna bir örnek, kullanıcıların bir Ethereum cüzdanı ile kimliklerini doğrulamasına olanak tanıyan "Ethereum ile Oturum Aç" işlevini sunan açık kaynaklı bir araç seti olan [SpruceID](https://www.spruceid.com/)'dir. ## İlgili öğreticiler {#related-tutorials} -- [create-eth-app ile merkeziyetsiz uygulama ön yüz geliştirmeye bir adım önde başlayın](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _– Popüler akıllı sözleşmelerle uygulamalar oluşturmak için create-eth-app kullanımına genel bir bakış._ +- [create-eth-app ile merkeziyetsiz uygulama ön yüz geliştirmeye bir adım önde başlayın](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _– Popüler akıllı sözleşmelerle kullanıma hazır uygulamalar oluşturmak için create-eth-app'in nasıl kullanılacağına dair genel bir bakış._ -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve ekleyin!_ +_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ -- [Birleştirilebilirlik Yeniliktir](https://future.a16z.com/how-composability-unlocks-crypto-and-everything-else/) -- [Web3 İçin Birleştirilebilirlik Neden Önemlidir](https://hackernoon.com/why-composability-matters-for-web3) -- [Birleştirilebilirlik nedir?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.) +- [Birleştirilebilirlik İnovasyondur](https://a16zcrypto.com/posts/article/how-composability-unlocks-crypto-and-everything-else/) +- [Web3 İçin Birleştirilebilirlik Neden Önemlidir?](https://hackernoon.com/why-composability-matters-for-web3) +- [Birleştirilebilirlik Nedir?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/deploying/index.md b/public/content/translations/tr/developers/docs/smart-contracts/deploying/index.md index f01b3076c9c..2de1c5b7b90 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/deploying/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/deploying/index.md @@ -1,6 +1,6 @@ --- -title: Akıllı kontratları dağıtmak -description: +title: "Akıllı kontratları dağıtmak" +description: "Akıllı sözleşmelerin ön koşullar, araçlar ve dağıtım adımları da dahil olmak üzere Ethereum ağlarına nasıl dağıtılacağını öğrenin." lang: tr --- @@ -8,74 +8,74 @@ Ethereum ağının kullanıcılarının akıllı sözleşmenizi kullanabilmeleri Bir akıllı sözleşmeyi dağıtmak için, bir alıcı belirtmeden akıllı sözleşmenin derlenmiş kodunu içeren bir Ethereum işlemi göndermeniz yeterlidir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Akıllı sözleşme dağıtmadan önce [Ethereum ağlarını](/developers/docs/networks/), [işlemlerini](/developers/docs/transactions/) ve [akıllı sözleşmelerin anatomisini](/developers/docs/smart-contracts/anatomy/) anlamalısınız. +Akıllı sözleşmeleri dağıtmadan önce [Ethereum ağlarını](/developers/docs/networks/), [işlemleri](/developers/docs/transactions/) ve [akıllı sözleşmelerin anatomisini](/developers/docs/smart-contracts/anatomy/) anlamanız gerekir. -Blokzincirde depolanmasından dolayı bir sözleşmeyi dağıtmanın da ether (ETH) maliyeti olmasından dolayı Ethereum'daki [gaz ve ücretlere](/developers/docs/gas/) de aşina olmalısınız. +Sözleşmeler blokzincirde saklandığı için bir sözleşmeyi dağıtmak ether (ETH) maliyetine sahiptir, bu nedenle Ethereum'daki [gaz ve ücretler](/developers/docs/gas/) hakkında bilgi sahibi olmalısınız. -Son olarak, sözleşmenizi dağıtmadan önce onu derlemeniz gerekir, bu yüzden [akıllı sözleşmeleri derleme](/developers/docs/smart-contracts/compiling/) hakkında bilgi edinmeyi de unutmayın. +Son olarak, sözleşmenizi dağıtmadan önce derlemeniz gerekir, bu nedenle [akıllı sözleşmeleri derleme](/developers/docs/smart-contracts/compiling/) hakkında okuduğunuzdan emin olun. ## Bir akıllı sözleşme nasıl dağıtılır {#how-to-deploy-a-smart-contract} -### İhtiyacınız olanlar {#what-youll-need} +### İhtiyaç duyacaklarınız {#what-youll-need} -- Sözleşmenizin bit kodu - bu, [derleme](/developers/docs/smart-contracts/compiling/) aracılığıyla oluşturulur +- Sözleşmenizin bit kodu – bu, [derleme](/developers/docs/smart-contracts/compiling/) yoluyla oluşturulur - Gaz için ETH - gaz limitinizi diğer işlemler gibi ayarlayacağınız için sözleşme dağıtımının basit bir ETH aktarımından çok daha fazla gaz gerektirdiğini unutmayın - bir dağıtım komut dosyası veya eklentisi -- kendinizinkini çalıştırarak, herkese açık bir düğüme bağlanarak veya [düğüm hizmeti](/developers/docs/nodes-and-clients/nodes-as-a-service/) kullanan API anahtarı aracılığıyla bir [Ethereum düğümüne](/developers/docs/nodes-and-clients/) erişim +- Kendi düğümünüzü çalıştırarak, halka açık bir düğüme bağlanarak veya bir [düğüm hizmeti](/developers/docs/nodes-and-clients/nodes-as-a-service/) kullanarak bir API anahtarı aracılığıyla bir [Ethereum düğümüne](/developers/docs/nodes-and-clients/) erişim -### Bir akıllı sözleşme dağıtmanın aşamaları {#steps-to-deploy} +### Bir akıllı sözleşmeyi dağıtma adımları {#steps-to-deploy} -İlgili spesifik adımlar, söz konusu geliştirme çerçevesine bağımlı olacaktır. Örneğin [Hardhat'in sözleşme dağıtımıyla ilgili dokümanlarını](https://hardhat.org/docs/tutorial/deploying) ya da [Foundry'nin akıllı sözleşme onaylama ve dağıtma dokümanlarını](https://book.getfoundry.sh/forge/deploying) inceleyebilirsiniz. Dağıtma işlemi gerçekleştiğinde, sözleşmeniz aynı diğer [hesaplar](/developers/docs/accounts/) gibi bir Ethereum adresine sahip olacak ve [kaynak kodu doğrulama araçlarıyla](/developers/docs/smart-contracts/verifying/#source-code-verification-tools) doğrulanabilecektir. +İlgili spesifik adımlar, söz konusu geliştirme çerçevesine bağımlı olacaktır. Örneğin, [Hardhat'in sözleşmelerinizi dağıtma hakkındaki dokümanlarına](https://hardhat.org/docs/tutorial/deploying) veya [Foundry'nin bir akıllı sözleşmeyi dağıtma ve doğrulama hakkındaki dokümanlarına](https://book.getfoundry.sh/forge/deploying) göz atabilirsiniz. Dağıtıldıktan sonra sözleşmeniz, diğer [hesaplar](/developers/docs/accounts/) gibi bir Ethereum adresine sahip olacak ve [kaynak kodu doğrulama araçları](/developers/docs/smart-contracts/verifying/#source-code-verification-tools) kullanılarak doğrulanabilecektir. ## İlgili araçlar {#related-tools} -**Remix - _Remix IDE Ethereum'a benzer blok zincirleri için akıllı sözleşme geliştirme, dağıtımı ve yönetimi sağlar_** +**Remix - _Remix IDE, Ethereum benzeri blokzincirler için akıllı sözleşmelerin geliştirilmesine, dağıtılmasına ve yönetilmesine olanak tanır_** - [Remix](https://remix.ethereum.org) -**Tenderly - _Akıllı sözleşmeleri geliştirmek, test etmek, izlemek ve yönetmek için hata ayıklama, gözlemlenebilirlik ve altyapı temel taşları sağlayan bir Web3 geliştirme platformu_** +**Tenderly - _Akıllı sözleşmeleri geliştirmek, test etmek, izlemek ve işletmek için hata ayıklama, gözlemlenebilirlik ve altyapı yapı taşları sağlayan Web3 geliştirme platformu_** - [tenderly.co](https://tenderly.co/) -- [Belgeler](https://docs.tenderly.co/) +- [Dokümanlar](https://docs.tenderly.co/) - [GitHub](https://github.com/Tenderly) - [Discord](https://discord.gg/eCWjuvt) -**Hardhat - _Ethereum yazılımınızı derlemeniz, dağıtmanız, test etmeniz ve hatalarından arındırmanız için bir geliştirme ortamı_** +**Hardhat - _Ethereum yazılımınızı derlemek, dağıtmak, test etmek ve hatalarını ayıklamak için bir geliştirme ortamı_** - [hardhat.org](https://hardhat.org/getting-started/) -- [Sözleşme dağıtımı üzerine belgeler](https://hardhat.org/docs/tutorial/deploying) +- [Sözleşmelerinizi dağıtma üzerine dokümanlar](https://hardhat.org/docs/tutorial/deploying) - [GitHub](https://github.com/nomiclabs/hardhat) - [Discord](https://discord.com/invite/TETZs2KK4k) -**thirdweb - _Tek bir komut kullanarak herhangi bir sözleşmeyi Ethereum Sanal Makinesi uyumlu herhangi bir zincire kolayca dağıtın_** +**thirdweb - _Tek bir komut kullanarak herhangi bir sözleşmeyi, Ethereum Sanal Makinesi uyumlu herhangi bir zincire kolayca dağıtın_** - [Dokümanlar](https://portal.thirdweb.com/deploy/) **Crossmint - _Akıllı sözleşmeleri dağıtmak, kredi kartı ödemelerini ve zincirler arası ödemeleri mümkün kılmak ve API'leri kullanarak NFT oluşturmak, dağıtmak, satmak, depolamak ve düzenlemek amaçlı kurumsal bir Web3 geliştirme platformudur._** - [crossmint.com](https://www.crossmint.com) -- [Dokümanlar](https://docs.crossmint.com) +- [Dokümantasyon](https://docs.crossmint.com) - [Discord](https://discord.com/invite/crossmint) - [Blog](https://blog.crossmint.com) ## İlgili öğreticiler {#related-tutorials} -- [İlk akıllı sözleşmenizi dağıtma](/developers/tutorials/deploying-your-first-smart-contract/) _– Bir Ethereum test ağı üzerinde ilk akıllı sözleşmenizi dağıtmaya ilişkin tanıtım._ -- [Merhaba Dünya | akıllı sözleşme öğreticisi](/developers/tutorials/hello-world-smart-contract/) _– Ethereum üzerinde basit bir akıllı sözleşme oluşturmak & dağıtmak için takibi kolay bir öğretici._ -- [Solidity ile başka sözleşmelerle etkileşime geçmek](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– Mevcut bir sözleşmeden nasıl bir akıllı sözleşme dağıtılır ve etkileşime geçilir._ -- [Sözleşme boyutunuzu azaltma](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _- Sözleşmenizin boyutunu azaltarak limitin altında tutma ve gaz tasarrufu yapma_ +- [İlk akıllı sözleşmenizi dağıtma](/developers/tutorials/deploying-your-first-smart-contract/) _– Bir Ethereum test ağı üzerinde ilk akıllı sözleşmenizi dağıtmaya giriş._ +- [Merhaba Dünya | akıllı sözleşme öğreticisi](/developers/tutorials/hello-world-smart-contract/) _– Ethereum'da temel bir akıllı sözleşme oluşturmak ve dağıtmak için takip etmesi kolay bir öğretici._ +- [Solidity'den diğer sözleşmelerle etkileşim kurma](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– Mevcut bir sözleşmeden bir akıllı sözleşmenin nasıl dağıtılacağı ve onunla nasıl etkileşim kurulacağı._ +- [Sözleşme boyutunu nasıl küçültebilirsiniz](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _- Sözleşmenizin boyutunu sınırın altında tutmak ve gazdan tasarruf etmek için nasıl küçülteceğiniz_ -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [https://docs.openzeppelin.com/learn/deploying-and-interacting](https://docs.openzeppelin.com/learn/deploying-and-interacting) - _OpenZeppelin_ -- [Hardhat ile yaptığınız sözleşmeleri dağıtma](https://hardhat.org/docs/tutorial/deploying) - _Nomic Labs_ +- [Hardhat ile sözleşmelerinizi dağıtma](https://hardhat.org/docs/tutorial/deploying) - _Nomic Labs_ -_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve ekleyin!_ +_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ -## İlgili konular {#related-topics} +## Alakalı başlıklar {#related-topics} -- [Geliştirici çerçeveleri](/developers/docs/frameworks/) +- [Geliştirme çerçeveleri](/developers/docs/frameworks/) - [Bir Ethereum düğümü çalıştırın](/developers/docs/nodes-and-clients/run-a-node/) - [Hizmet olarak düğümler](/developers/docs/nodes-and-clients/nodes-as-a-service) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/formal-verification/index.md b/public/content/translations/tr/developers/docs/smart-contracts/formal-verification/index.md index 4a6a5f19f99..5233753d3f9 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/formal-verification/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/formal-verification/index.md @@ -1,12 +1,12 @@ --- -title: Akıllı sözleşmelerin resmi doğrulaması -description: Ethereum akıllı sözleşmelerinin resmi doğrulamasına genel bir bakış +title: "Akıllı sözleşmelerin resmi doğrulaması" +description: "Ethereum akıllı sözleşmelerinin resmi doğrulamasına genel bir bakış" lang: tr --- -[Akıllı sözleşmeler](/developers/docs/smart-contracts/), yeni kullanım durumları sunan ve kullanıcılar için değer kilidini açan merkeziyetsiz, güvensiz ve güçlü uygulamalar oluşturmayı mümkün kılıyor. Akıllı sözleşmeler büyük miktarlarda değer işlediğinden güvenlik, geliştiriciler için kritik bir husustur. +[Akıllı sözleşmeler](/developers/docs/smart-contracts/), yeni kullanım durumları sunan ve kullanıcılar için değerin kilidini açan, merkeziyetsiz, güvene dayalı olmayan ve sağlam uygulamalar oluşturmayı mümkün kılıyor. Akıllı sözleşmeler büyük miktarlarda değer işlediğinden güvenlik, geliştiriciler için kritik bir husustur. -Resmi doğrulama, [akıllı sözleşme güvenliğini](/developers/docs/smart-contracts/security/) iyileştirme konusunda önerilen tekniklerden biridir. Programları belirlemek, tasarlamak ve doğrulamak için [resmi yöntemler](https://www.brookings.edu/techstream/formal-methods-as-a-path-toward-better-cybersecurity/) kullanan resmi doğrulama, kritik donanım ve yazılım sistemlerinin doğruluğunun sağlanması amacıyla yıllardır kullanılmaktadır. +Resmi doğrulama, [akıllı sözleşme güvenliğini](/developers/docs/smart-contracts/security/) iyileştirmek için önerilen tekniklerden biridir. Programları belirtmek, tasarlamak ve doğrulamak için [resmi yöntemler](https://www.brookings.edu/techstream/formal-methods-as-a-path-toward-better-cybersecurity/) kullanan resmi doğrulama, kritik donanım ve yazılım sistemlerinin doğruluğunu sağlamak amacıyla yıllardır kullanılmaktadır. Resmi doğrulama, akıllı sözleşmelerde uygulandığında bir sözleşmenin iş mantığının önceden tanımlanmış bir özelliği karşıladığını kanıtlayabilir. Resmi doğrulama, test etme gibi sözleşme kodunun doğruluğunu değerlendiren diğer yöntemlerle karşılaştırıldığında, bir akıllı sözleşmenin fonksiyonel olarak doğru olduğunu garanti etme noktasında daha güçlüdür. @@ -18,23 +18,23 @@ Sistemin (bu durumda akıllı sözleşme) öngörülen davranışları, resmi mo ### Resmi model nedir? {#what-is-a-formal-model} -Bilgisayar bilimlerinde [resmi model](https://en.wikipedia.org/wiki/Model_of_computation) bilgi işleme sürecin matematiksel açıklamasıdır. Programlar, matematiksel işlevler (denklemler) halinde soyutlanırken model, bir girdi verildiğinde fonksiyonlara verilen çıktıların nasıl işlendiğini açıklar. +Bilgisayar biliminde [resmi bir model](https://en.wikipedia.org/wiki/Model_of_computation), bir hesaplama sürecinin matematiksel bir açıklamasıdır. Programlar, matematiksel işlevler (denklemler) halinde soyutlanırken model, bir girdi verildiğinde fonksiyonlara verilen çıktıların nasıl işlendiğini açıklar. -Resmi modeller, bir programın davranış analizinin nasıl değerlendirilebileceğine ilişkin soyutlama düzeyini sunar. Resmi modellerin varlığı, ilgili modelin arzulanan niteliklerini açıklayan _resmi spesifikasyonun_ oluşturulmasına olanak sağlar. +Resmi modeller, bir programın davranış analizinin nasıl değerlendirilebileceğine ilişkin soyutlama düzeyini sunar. Resmi modellerin varlığı, söz konusu modelin istenen özelliklerini tanımlayan bir _resmi spesifikasyonun_ oluşturulmasına olanak tanır. Akıllı sözleşmelerin resmi doğrulama modellemelerinde farklı teknikler kullanılmaktadır. Örneğin, bazı modeller bir akıllı sözleşmenin yüksek düzey davranışını anlamak için kullanılır. Bu modelleme teknikleri akıllı sözleşmelere, onları girdileri kabul eden ve bu girdilere dayanan hesaplamaları yürüten sistemler olarak gören kara kutu görünümü uygular. Yüksek düzey modeller, akıllı sözleşmeler ile dışarıdan sahip olunan hesaplar (EOA'lar), sözleşme hesapları ve blokzincir çevresi gibi dış aracılar arasındaki ilişkiye odaklanır. Bunun gibi modeller, belirli kullanıcı etkileşimlerine cevaben bir sözleşmenin nasıl davranacağını belirleyen özellikleri tanımlamak açısından kullanışlıdır. -Diğer resmi modeller, bunun aksine bir akıllı sözleşmenin düşük düzey davranışına odaklanır. Üst düzey modeller bir sözleşmenin işlevselliği hakkında akıl yürütmeye yardımcı olabilirken, uygulamanın iç işleyişi ile ilgili ayrıntıları yakalamakta bazen başarısız olabilirler. Düşük düzeyli modeller, program analizine beyaz kutu bakışı uygular ve sözleşmenin yürütülmesiyle ilgili özellikleri anlamak için program izleri ve [kontrol akım grafikleri](https://en.wikipedia.org/wiki/Control-flow_graph) gibi akıllı sözleşme uygulamalarının daha düşük düzeyli gösterimlerine dayanır. +Diğer resmi modeller, bunun aksine bir akıllı sözleşmenin düşük düzey davranışına odaklanır. Üst düzey modeller bir sözleşmenin işlevselliği hakkında akıl yürütmeye yardımcı olabilirken, uygulamanın iç işleyişi ile ilgili ayrıntıları yakalamakta bazen başarısız olabilirler. Düşük seviyeli modeller, program analizine bir beyaz kutu görünümü uygular ve bir sözleşmenin yürütülmesiyle ilgili özellikler hakkında akıl yürütmek için program izleri ve [kontrol akış grafileri](https://en.wikipedia.org/wiki/Control-flow_graph) gibi akıllı sözleşme uygulamalarının daha düşük seviyeli temsillerine dayanır. -Düşük düzeyli modeller, bir akıllı sözleşmenin Ethereum'un yürütme ortamındaki (örneğin [EVM](/developers/docs/evm/)) fiili yürütülmesini temsil ettiğinden ideal olarak kabul edilir. Düşük düzeyli modelleme teknikleri, özellikle akıllı sözleşmelerde kritik güvenlik özelliklerini tesis ederken ve olası güvenlik açıklarını tespit ederken kullanışlıdır. +Düşük seviyeli modeller, bir akıllı sözleşmenin Ethereum'un yürütme ortamındaki (yani [EVM](/developers/docs/evm/)) gerçek yürütülmesini temsil ettikleri için ideal kabul edilirler. Düşük düzeyli modelleme teknikleri, özellikle akıllı sözleşmelerde kritik güvenlik özelliklerini tesis ederken ve olası güvenlik açıklarını tespit ederken kullanışlıdır. ### Resmi spesifikasyon nedir? {#what-is-a-formal-specification} Spesifikasyon, basitçe anlatmak gerekirse belirli bir sistemin karşılaması gereken bir teknik gerekliliktir. Spesifikasyon, programlamada bir programın yürütülmesi hakkındaki genel fikirleri (örneğin programın ne yapması gerektiği) temsil eder. -Akıllı sözleşmeler bağlamında resmi spesifikasyonlar, _özellikleri_ (bir sözleşmenin karşılaması gereken gerekliliklerin resmi açıklamaları) ifade eder. Bu gibi özellikler ''değişmezler'' olarak nitelendirilir ve bir sözleşmenin hiçbir istisna olmadan her olası koşul altında doğru kalmak zorunda olan yürütülmesi hakkındaki mantıklı savları temsil eder. +Akıllı sözleşmeler bağlamında, resmi spesifikasyonlar _özelliklere_ atıfta bulunur — bir sözleşmenin karşılaması gereken gereksinimlerin resmi açıklamaları. Bu gibi özellikler ''değişmezler'' olarak nitelendirilir ve bir sözleşmenin hiçbir istisna olmadan her olası koşul altında doğru kalmak zorunda olan yürütülmesi hakkındaki mantıklı savları temsil eder. Böylelikle resmi spesifikasyonu, akıllı sözleşmenin amaçlanan yürütmesini açıklayan resmi bir dilde yazılmış ifadeler toplamı olarak düşünebiliriz. Spesifikasyonlar, bir sözleşmenin özelliklerini ele alır ve sözleşmenin farklı koşullar altında nasıl davranması gerektiğini tanımlar. Resmi doğrulamanın amacı, akıllı sözleşmenin bu özellikleri (değişmezleri) taşıyıp taşımadığına ve bu özelliklerin yürütme esnasında ihlal edilip edilmediğine karar vermektir. @@ -44,55 +44,55 @@ Resmi spesifikasyonlar, akıllı sözleşmelerin güvenli uygulamalarını geli Resmi spesifikasyonlar, program yürütülmesinin doğruluğu hakkında matematiksel gerekçelendirmeyi mümkün kılar. Resmi modellerde olduğu gibi resmi spesifikasyonlar da sözleşme uygulamasının ya yüksek düzey özelliklerini ya da düşük düzey davranışını yakalar. -Resmi spesifikasyonlar, bir programın özellikleri hakkında resmi gerekçelendirmeye olanak tanıyan [program mantığı](https://en.wikipedia.org/wiki/Logic_programming) öğeleri kullanılarak türetilir. Program mantığı, bir programın beklenen davranışını açıklayan (matematik dilinde) resmi kurallara sahiptir. [Ulaşılabilirlik mantığı](https://en.wikipedia.org/wiki/Reachability_problem), [zamansal mantık](https://en.wikipedia.org/wiki/Temporal_logic) ve [Hoare mantığı](https://en.wikipedia.org/wiki/Hoare_logic) dahil olmak üzere resmi spesifikasyonlar oluştururken çeşitli program mantıkları kullanılır. +Resmi spesifikasyonlar, bir programın özellikleri hakkında resmi akıl yürütmeye olanak tanıyan [program mantığı](https://en.wikipedia.org/wiki/Logic_programming) öğeleri kullanılarak türetilir. Program mantığı, bir programın beklenen davranışını açıklayan (matematik dilinde) resmi kurallara sahiptir. Resmi spesifikasyonlar oluşturulurken, [erişilebilirlik mantığı](https://en.wikipedia.org/wiki/Reachability_problem), [zamansal mantık](https://en.wikipedia.org/wiki/Temporal_logic) ve [Hoare mantığı](https://en.wikipedia.org/wiki/Hoare_logic) da dahil olmak üzere çeşitli program mantıkları kullanılır. -Akıllı sözleşmelere yönelik resmi spesifikasyonlar, geniş bağlamda **yüksek düzeyli** veya **düşük düzeyli** spesifikasyonlar olarak sınıflandırılabilir. Spesifikasyon hangi kategoriye ait olursa olsun analiz edilen sistemin özelliğini yeterli ve açık biçimde tarif etmelidir. +Akıllı sözleşmeler için resmi spesifikasyonlar genel olarak **yüksek seviyeli** veya **düşük seviyeli** spesifikasyonlar olarak sınıflandırılabilir. Spesifikasyon hangi kategoriye ait olursa olsun analiz edilen sistemin özelliğini yeterli ve açık biçimde tarif etmelidir. -### Yüksek düzeyli spesifikasyonlar {#high-level-specifications} +### Yüksek seviyeli spesifikasyonlar {#high-level-specifications} -İsminden de anlaşılacağı gibi, yüksek düzeyli bir spesifikasyon ("model yönelimli spesifikasyon" olarak da adlandırılır), bir programın üst düzey davranışını tanımlar. Yüksek düzeyli spesifikasyonlar, bir akıllı sözleşmeyi, FSM modeli için resmi özellikleri tanımlamak amacıyla kullanılan zamansal mantıkla işlemler gerçekleştirerek durumlar arasında geçiş yapabilen bir [sonlu durum makinesi](https://en.wikipedia.org/wiki/Finite-state_machine) (FSM) olarak modeller. +İsminden de anlaşılacağı gibi, yüksek düzeyli bir spesifikasyon ("model yönelimli spesifikasyon" olarak da adlandırılır), bir programın üst düzey davranışını tanımlar. Yüksek seviyeli spesifikasyonlar bir akıllı sözleşmeyi [sonlu durum makinesi](https://en.wikipedia.org/wiki/Finite-state_machine) (FSM) olarak modeller. Bu makine, FSM modeli için resmi özellikleri tanımlamak amacıyla zamansal mantık kullanılarak yapılan işlemler aracılığıyla durumlar arasında geçiş yapabilir. -[Zamansal mantıklar](https://en.wikipedia.org/wiki/Temporal_logic), "zaman açısından nitelendirilen önermeler hakkında akıl yürütme kurallarıdır (ör: "Ben _her zaman_ açım" veya "Ben _sonunda_ acıkacağım")." Resmi doğrulama uygulandığında, zamansal mantıklar, durum makineleri olarak modellenen sistemlerin doğru davranışı hakkındaki savları belirtmek için kullanılır. Spesifik olarak bir zamansal mantık, bir akıllı sözleşmenin gelecekte olabileceği durumları ve durumlar arasında nasıl geçiş yaptığını açıklar. +[Zamansal mantıklar](https://en.wikipedia.org/wiki/Temporal_logic), "zaman açısından nitelendirilen önermeler hakkında akıl yürütme kurallarıdır (örneğin, "Ben _her zaman_ açım" veya "Ben _eninde sonunda_ acıkacağım")." Resmi doğrulama uygulandığında, zamansal mantıklar, durum makineleri olarak modellenen sistemlerin doğru davranışı hakkındaki savları belirtmek için kullanılır. Spesifik olarak bir zamansal mantık, bir akıllı sözleşmenin gelecekte olabileceği durumları ve durumlar arasında nasıl geçiş yaptığını açıklar. -Yüksek düzeyli spesifikasyonlar genellikle akıllı sözleşmeler için iki kritik geçici özelliği yakalar: **güvenlik** ve **canlılık**. Güvenlik özellikleri, “asla kötü bir şey olmaz” düşüncesini temsil eder ve genellikle değişmezliği ifade eder. Bir güvenlik özelliği [kördüğümden](https://www.techtarget.com/whatis/definition/deadlock) kurtuluş gibi genel yazılım gereksinimleri belirleyebilir veya sözleşmeler için alana özel özellikleri ifade edebilir (örneğin fonksiyonlar için erişim kontrolünde değişmezler, durum değişkenlerinin geçerli değerleri veya jeton transferleri için koşullar). +Yüksek seviyeli spesifikasyonlar, akıllı sözleşmeler için genellikle iki kritik zamansal özelliği yakalar: **güvenlik** ve **canlılık**. Güvenlik özellikleri, “asla kötü bir şey olmaz” düşüncesini temsil eder ve genellikle değişmezliği ifade eder. Bir güvenlik özelliği, [kilitlenmeden](https://www.techtarget.com/whatis/definition/deadlock) arınmışlık gibi genel yazılım gereksinimlerini tanımlayabilir veya sözleşmeler için alana özgü özellikleri ifade edebilir (ör. işlevler için erişim denetimindeki değişmezler, durum değişkenlerinin kabul edilebilir değerleri veya token transferleri için koşullar). -ERC-20 jeton sözleşmelerinde `transfer()` veya `transferFrom()` fonksiyonlarının kullanım koşullarını kapsayan bu güvenlik gereksinimini örnek olarak alabilirsiniz: _"Göndericinin bakiyesi asla gönderilmek istenen jeton miktarından az olamaz."_. Bir sözleşme değişmezinin doğal dille yapılan bu açıklaması, resmi (matematiksel) bir spesifikasyona çevrilebilir ve bunun geçerliliği de sonrasında katı bir biçimde kontrol edilebilir. +Örneğin, ERC-20 token sözleşmelerinde `transfer()` veya `transferFrom()` kullanım koşullarını kapsayan şu güvenlik gereksinimini ele alalım: _“Bir göndericinin bakiyesi, gönderilmesi talep edilen token miktarından asla daha düşük olamaz.”_. Bir sözleşme değişmezinin doğal dille yapılan bu açıklaması, resmi (matematiksel) bir spesifikasyona çevrilebilir ve bunun geçerliliği de sonrasında katı bir biçimde kontrol edilebilir. -Canlılık özellikleri "iyi bir şeyin nihayetinde gerçekleştiğini" ileri sürer ve bir sözleşmenin farklı durumlardan geçme kabiliyeti ile ilgilidir. Canlılık özelliğine örnek olarak, bir sözleşmenin kullanıcılarına isteğe bağlı olarak bakiyelerini transfer etme kabiliyeti anlamına gelen "likidite" verilebilir. Bu özelliğin ihlal edilmesi durumunda kullanıcılar tıpkı [Parity cüzdanı olayında](https://www.cnbc.com/2017/11/08/accidental-bug-may-have-frozen-280-worth-of-ether-on-parity-wallet.html) olduğu gibi sözleşmede saklanan varlıklarını çekemezler. +Canlılık özellikleri "iyi bir şeyin nihayetinde gerçekleştiğini" ileri sürer ve bir sözleşmenin farklı durumlardan geçme kabiliyeti ile ilgilidir. Canlılık özelliğine örnek olarak, bir sözleşmenin kullanıcılarına isteğe bağlı olarak bakiyelerini transfer etme kabiliyeti anlamına gelen "likidite" verilebilir. Bu özellik ihlal edilirse, [Parity cüzdan olayında](https://www.cnbc.com/2017/11/08/accidental-bug-may-have-frozen-280-worth-of-ether-on-parity-wallet.html) olduğu gibi, kullanıcılar sözleşmede saklanan varlıkları çekemez hale gelir. -### Düşük düzeyli spesifikasyonlar {#low-level-specifications} +### Düşük seviyeli spesifikasyonlar {#low-level-specifications} Yüksek düzeyli spesifikasyonlar, sonlu durum sözleşme modelini bir başlangıç noktası olarak alır ve bu modelin arzulanan özelliklerini açıklar. Tam tersi şekilde düşük düzeyli spesifikasyonlar (''özellik odaklı spesifikasyonlar'' da denir) sıklıkla programları (akıllı sözleşmeler) matematiksel fonksiyonlardan oluşan bir koleksiyon içeren sistemler olarak modeller ve bu sistemlerin doğru davranışlarını açıklar. -Basitleştirmek gerekirse, düşük düzeyli spesifikasyonlar _program izlerini_ analiz eder ve bu izlerin üzerinden akıllı sözleşme özelliklerini tanımlamaya çabalar. İzler, bir akıllı sözleşmenin durumunu değiştiren fonksiyon yürütme dizilerini ifade eder ve dolayısıyla düşük düzeyli spesifikasyonlar, bir sözleşmenin dahili yürütme gerekliliklerinin belirtilmesine yardımcı olur. +Daha basit bir ifadeyle, düşük seviyeli spesifikasyonlar _program izlerini_ analiz eder ve bu izler üzerinden bir akıllı sözleşmenin özelliklerini tanımlamaya çalışır. İzler, bir akıllı sözleşmenin durumunu değiştiren fonksiyon yürütme dizilerini ifade eder ve dolayısıyla düşük düzeyli spesifikasyonlar, bir sözleşmenin dahili yürütme gerekliliklerinin belirtilmesine yardımcı olur. Düşük düzeyli resmi spesifikasyonlar Hoare tarzı özellikler veya yürütme yolundaki değişmezler olarak verilebilir. ### Hoare tarzı özellikler {#hoare-style-properties} -[Hoare Mantığı](https://en.wikipedia.org/wiki/Hoare_logic), akıllı sözleşmeleri de kapsayan programların doğruluğu hakkında resmi bir gerekçelendirme kural sınıfı sağlar. Hoare-tarzı bir özellik, Hoare üçlüsü tarafından temsil edilir `{P}c{Q}`, burada `c` bir programdır ve `P` ile `Q` da `c` (yani program) durumuna yönelik ifadelerdir, resmi olarak sırayla _ön koşullar_ ve _art koşullar_ olarak tanımlanmışlardır. +[Hoare Mantığı](https://en.wikipedia.org/wiki/Hoare_logic), akıllı sözleşmeler de dahil olmak üzere programların doğruluğu hakkında akıl yürütmek için bir dizi resmi kural sağlar. Bir Hoare tarzı özellik, bir Hoare üçlüsü olan `{P}c{Q}` ile temsil edilir. Burada `c` bir programdır, `P` ve `Q` ise `c`'nin (yani programın) durumu üzerindeki yüklemlerdir ve sırasıyla _ön koşullar_ ve _son koşullar_ olarak resmi şekilde tanımlanırlar. -Bir ön koşul, bir fonksiyonun doğru yürütülmesi için gerekli koşulları açıklayan bir ifadedir; bu sözleşmeyi çağıran kullanıcılar bu gerekliliği karşılamak zorundadır. Bir art koşul ise doğru biçimde yürütülmesi şartıyla bir fonksiyonun tesis ettiği koşulu açıklayan bir ifadedir; kullanıcılar, fonksiyona çağrı sonrası bu koşulun doğru olmasını bekler. Hoare mantığındaki bir _değişmez_, fonksiyonun yürütülmesi ile korunan bir ifadedir (örneğin, değişmez). +Bir ön koşul, bir fonksiyonun doğru yürütülmesi için gerekli koşulları açıklayan bir ifadedir; bu sözleşmeyi çağıran kullanıcılar bu gerekliliği karşılamak zorundadır. Bir art koşul ise doğru biçimde yürütülmesi şartıyla bir fonksiyonun tesis ettiği koşulu açıklayan bir ifadedir; kullanıcılar, fonksiyona çağrı sonrası bu koşulun doğru olmasını bekler. Hoare mantığında bir _değişmez_, bir işlevin yürütülmesiyle korunan bir yüklemdir (yani değişmez). -Hoare-tarzı spesifikasyonlar, _kısmi doğruluğu_ ya da _tam doğruluğu_ garanti eder. Ön koşulun fonksiyon yürütülmeden önce doğru olması durumunda sözleşme fonksiyonunun uygulaması "kısmen doğrudur", yürütmenin sonlanması durumunda ise art koşul da doğrudur. Bir ön koşulun fonksiyonun yürütülmesi öncesinde doğru olması halinde tam doğruluk kanıtı elde edilmiş olur, yürütmenin sonlandırılması garantidir ve sonlandığında art koşul da doğru olur. +Hoare tarzı spesifikasyonlar, _kısmi doğruluğu_ veya _tam doğruluğu_ garanti edebilir. Ön koşulun fonksiyon yürütülmeden önce doğru olması durumunda sözleşme fonksiyonunun uygulaması "kısmen doğrudur", yürütmenin sonlanması durumunda ise art koşul da doğrudur. Bir ön koşulun fonksiyonun yürütülmesi öncesinde doğru olması halinde tam doğruluk kanıtı elde edilmiş olur, yürütmenin sonlandırılması garantidir ve sonlandığında art koşul da doğru olur. Tam doğruluk kanıtı elde etmek, bazı yürütmelerin sonlanmadan önce gecikebileceği ya da hiç sonlanmayabileceği için zordur. Bununla birlikte, yürütmenin sona erip ermediği sorusu tartışmalı bir nokta olabilir, çünkü Ethereum'un gaz mekanizması sonsuz program döngülerini önler (yürütme ya başarılı bir şekilde ya da "gaz yeterli değil" hatası nedeniyle sona erer). Hoare mantığı kullanılarak oluşturulan akıllı sözleşme spesifikasyonları, bir sözleşmedeki fonksiyonların ve döngülerin yürütülmesi için tanımlanmış ön koşullara, art koşullara ve değişmezlere sahiptir. Ön koşullar sıklıkla fonksiyona hatalı girdi yapılması olasılığını beraberinde getirirken art koşullar da bu girdilere yönelik istenen yanıtları açıklar (örneğin, belirli bir istisna atılması). Bu sebepten, Hoare tarzı özellikler sözleşme uygulamalarının doğruluğunu sağlama konusunda etkilidir. -Çoğu resmi doğrulama taslağı, fonksiyonların anlamsal doğruluğunu kanıtlamak için Hoare tarzı spesifikasyonlar kullanır. Hoare tarzı özelliklerin (savlar olarak) Solidity'deki `require` ve `assert` ifadeleri kullanılarak sözleşme koduna doğrudan eklenmesi mümkündür. +Çoğu resmi doğrulama taslağı, fonksiyonların anlamsal doğruluğunu kanıtlamak için Hoare tarzı spesifikasyonlar kullanır. Hoare tarzı özelliklerin (savlar olarak) Solidity'deki `require` ve `assert` ifadeleri kullanılarak doğrudan sözleşme koduna eklenmesi de mümkündür. -`assert` güvenlik için gerekli art koşulu belirlerken `require` ifadeleri ise bir ön koşulu veya değişmezi açıklar ve sıklıkla kullanıcı girdilerini doğrulamak amacıyla kullanılır. Örneğin; fonksiyonlar için düzgün erişim kontrolü (bir güvenlik özelliği örneği), `require` ifadesinin çağıran hesabın kimliği üzerinde bir ön koşul kontrolü olarak kullanılmasıyla elde edilebilir. Benzer biçimde sözleşmedeki durum değişkenlerinin izin verilen değişmezleri (örneğin dolaşımdaki toplam jeton sayısı), fonksiyon yürütmesinin ardından sözleşme durumunu onaylamak için `assert` ifadesi kullanılarak ihlalden korunabilir. +`require` ifadeleri bir ön koşulu veya değişmezi ifade eder ve genellikle kullanıcı girdilerini doğrulamak için kullanılırken, `assert` güvenlik için gerekli bir son koşulu yakalar. Örneğin, işlevler için uygun erişim kontrolü (bir güvenlik özelliği örneği), çağıran hesabın kimliği üzerinde bir ön koşul denetimi olarak `require` kullanılarak sağlanabilir. Benzer şekilde, bir sözleşmedeki durum değişkenlerinin izin verilen değerleri üzerindeki bir değişmez (örneğin, dolaşımdaki toplam token sayısı), işlevin yürütülmesinden sonra sözleşmenin durumunu doğrulamak için `assert` kullanılarak ihlal edilmekten korunabilir. -### İz düzeyinde özellikler {#trace-level-properties} +### İzleme seviyesi özellikleri {#trace-level-properties} İz tabanlı spesifikasyonlar, bir sözleşmeye farklı durumlar arasında geçiş yaptıran işlemleri ve bu işlemler arasındaki ilişkileri açıklar. Daha önce açıklandığı üzere izler, sözleşmenin durumunu belirli bir şekilde değiştiren işlem dizileridir. -Bu yaklaşım, akıllı sözleşmeleri, durum geçiş sistemleri modeli olarak ele alır ve bazı önceden tanımlanmış durumlarla (durum değişkenleri ile tanımlanan) birlikte önceden tanımlanmış geçişler kümesiyle (sözleşme işlevleri ile tanımlanan) birlikte çalışır. Ayrıca, bir sözleşmenin işlemsel anlamını açıklamak için bir programın yürütme akışının grafiksel bir gösterimi olan [kontrol akış grafiği (CFG)](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/) sıkça kullanılır. Burada her iz, kontrol akış grafiğinde bir yol olarak gösterilir. +Bu yaklaşım, akıllı sözleşmeleri, durum geçiş sistemleri modeli olarak ele alır ve bazı önceden tanımlanmış durumlarla (durum değişkenleri ile tanımlanan) birlikte önceden tanımlanmış geçişler kümesiyle (sözleşme işlevleri ile tanımlanan) birlikte çalışır. Ayrıca, bir programın yürütme akışının grafiksel bir temsili olan [kontrol akış grafiği](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/) (CFG), bir sözleşmenin operasyonel semantiğini tanımlamak için sıklıkla kullanılır. Burada her iz, kontrol akış grafiğinde bir yol olarak gösterilir. İz düzeyinde spesifikasyonlar, öncelikli olarak akıllı sözleşmelerde dahili yürütme desenlerini anlamak için kullanılır. İz düzeyinde spesifikasyonlar oluşturarak bir akıllı sözleşme için kabul edilebilir yürütme yollarını (örneğin durum geçişleri) ileri süreriz. Sembolik yürütme gibi teknikler kullanarak yürütmenin, resmi modelde tanımlanmamış hiçbir yolu asla takip etmeyeceğini resmi olarak doğrulayabiliriz. -İz düzeyinde özellikleri açıklamak için bazı herkese açık işlevlere sahip [DAO](/dao/) sözleşmeleri örneğini kullanalım. Burada, DAO sözleşmesinin kullanıcıların şu işlemleri gerçekleştirmesine izin verdiğini varsayıyoruz: +İzleme seviyesi özelliklerini tanımlamak için, halka açık bazı işlevlere sahip bir [DAO](/dao/) sözleşmesi örneğini kullanalım. Burada, DAO sözleşmesinin kullanıcıların şu işlemleri gerçekleştirmesine izin verdiğini varsayıyoruz: - Fon yatırma @@ -100,27 +100,27 @@ Bu yaklaşım, akıllı sözleşmeleri, durum geçiş sistemleri modeli olarak e - Bir teklife oy vermezlerse geri ödeme talebinde bulunma -İz düzeyinde özelliklere örnek olarak _"fon yatırmamış kullanıcıların bir teklife oy verememesi"_ ya da _"bir teklife oy vermemiş kullanıcıların her zaman para iadesi talep edebilmesi"_ verilebilir. Her iki özellik de tercih edilen yürütme sıralamalarını belirtir (oy verme, fon yatırma işleminden _önce_ ve bir iade talebi, bir teklife oy verdikten _sonra_ gerçekleşemez). +Örnek izleme seviyesi özellikleri şunlar olabilir: _"fon yatırmayan kullanıcılar bir teklifte oy kullanamaz"_ veya _"bir teklifte oy kullanmayan kullanıcılar her zaman geri ödeme talep edebilmelidir"_. Her iki özellik de tercih edilen yürütme sıralamalarını belirtir (oylama fon yatırmadan _önce_ gerçekleşemez ve geri ödeme talebi bir teklife oy verdikten _sonra_ gerçekleşemez). -## Akıllı sözleşmelerin resmi doğrulamasına yönelik teknikler {#formal-verification-techniques} +## Akıllı sözleşmelerin resmi doğrulaması için teknikler {#formal-verification-techniques} -### Model kontrolü {#model-checking} +### Model denetimi {#model-checking} Model kontrolü, bir algoritmanın resmi bir akıllı sözleşme modelini spesifikasyonu ile karşılaştırarak kontrol ettiği bir resmi doğrulama tekniğidir. Model kontrolünde, izin verilen sözleşme durumlarındaki özellikler zamansal mantık kullanılarak açıklanırken akıllı sözleşmeler sıklıkla durum geçiş sistemleri olarak gösterilir. -Model kontrolü, bir sistemin soyut matematiksel gösteriminin (örneğin bir sözleşme) oluşturulmasını ve bu sistemin özelliklerinin [önermeli mantığı](https://www.baeldung.com/cs/propositional-logic) temel alan formülleri kullanarak ifade edilmesini gerektirir. Bu, başka bir deyişle matematiksel bir modelin belirli bir formülü karşıladığını kanıtlamak adına model kontrol algoritmasının görevini basitleştirir. +Model denetimi, bir sistemin (yani bir sözleşmenin) soyut bir matematiksel temsilini oluşturmayı ve bu sistemin özelliklerini [önermeler mantığına](https://www.baeldung.com/cs/propositional-logic) dayanan formüller kullanarak ifade etmeyi gerektirir. Bu, başka bir deyişle matematiksel bir modelin belirli bir formülü karşıladığını kanıtlamak adına model kontrol algoritmasının görevini basitleştirir. -Resmi doğrulamada model kontrolü, öncelikli olarak bir sözleşmenin zaman içindeki davranışını açıklayan zamansal mantığı değerlendirmek için kullanılır. Akıllı sözleşmelerin zamansal özellikleri arasında daha önce açıkladığımız _güvenlik_ ve _canlılık_ yer alır. +Resmi doğrulamada model kontrolü, öncelikli olarak bir sözleşmenin zaman içindeki davranışını açıklayan zamansal mantığı değerlendirmek için kullanılır. Akıllı sözleşmelerin zamansal özellikleri, daha önce açıkladığımız _güvenlik_ ve _canlılığı_ içerir. -Örneğin, erişim kontrolüne ilişkin bir güvenlik özelliği (_Yalnızca sözleşme sahibinin `selfdestruct` çağrısı yapabilmesi gibi_) resmi mantıkla yazılabilir. Bunun ardından model kontrol algoritması, sözleşmenin bu resmi spesifikasyonu karşıladığını doğrulayabilir. +Örneğin, erişim kontrolüyle ilgili bir güvenlik özelliği (ör. _Sadece sözleşmenin sahibi `selfdestruct` işlevini çağırabilir_) resmi mantıkla yazılabilir. Bunun ardından model kontrol algoritması, sözleşmenin bu resmi spesifikasyonu karşıladığını doğrulayabilir. Model kontrolü, bir akıllı sözleşmenin tüm olası durumlarını oluşturmayı ve özellik ihlali ile sonuçlanan ulaşılabilir durumları bulmaya çalışmayı içeren durum alan keşfini kullanır. Ancak bu, durum sayısının sonsuz olmasına (''durum patlama sorunu'' olarak da bilinir) yol açabilir ve dolayısıyla model kontrolü yapanlar, akıllı sözleşmelerin etkili analizini yapmayı mümkün kılan soyutlama tekniklerine güvenirler. -### Varsayım kanıtlama {#theorem-proving} +### Teorem kanıtlama {#theorem-proving} Varsayım kanıtlama, akıllı sözleşmeleri de içeren programların doğruluğunu matematiksel olarak gerekçelendirmeye yönelik bir yöntemdir. Bir sözleşmenin sistem modelini ve spesifikasyonlarını matematiksel formüllere (mantık ifadeleri) dönüştürmeyi içerir. -Varsayım kanıtlamanın amacı, bu ifadeler arasındaki mantıksal eşdeğerliği doğrulamaktır. "Mantıksal eşdeğerlik" ("mantıksal iki yönlü bağıntı" olarak da adlandırılır), ilk ifadenin _yalnızca ve yalnızca_ ikinci ifade doğru ise doğru olduğu iki durum arasındaki bir ilişki türüdür. +Varsayım kanıtlamanın amacı, bu ifadeler arasındaki mantıksal eşdeğerliği doğrulamaktır. “Mantıksal denklik” (aynı zamanda “mantıksal iki yönlü gerektirme” olarak da adlandırılır), iki ifade arasında, ilk ifadenin _ancak ve ancak_ ikinci ifade doğruysa doğru olduğu bir ilişki türüdür. Sözleşmenin modeli ve özelliği hakkındaki ifadeler arasında bulunması gereken ilişki (mantıksal eşdeğerlik), kanıtlanabilir bir ifade (varsayım olarak anılır) olarak formüle edilir. Otomatikleştirilmiş varsayım kanıtlayıcısı, resmi bir çıkarım sistemi kullanarak varsayımın doğruluğunu kanıtlayabilir. Bir başka deyişle varsayım kanıtlayıcısı, akıllı sözleşme modelinin spesifikasyonlarıyla bire bir uyumlu olduğunu kesin olarak kanıtlayabilir. @@ -130,13 +130,13 @@ Bunun bir sonucu olarak, varsayım kanıtlayıcısına doğruluk kanıtlarına e ### Sembolik yürütme {#symbolic-execution} -Sembolik yürütme, fonksiyonların _somut değerler_ (örneğin, `x == 5`) yerine _sembolik değerler_ (örneğin `x > 5`) kullanarak bir yürütüldüğü akıllı sözleşme analiz yöntemidir. Bir resmi doğrulama tekniği olarak sembolik yürütme, sözleşme kodunda bulunan iz düzeyinde özellikleri anlamak amacıyla kullanılır. +Sembolik yürütme, bir akıllı sözleşmeyi _somut değerler_ (ör. `x == 5`) yerine _sembolik değerler_ (ör. `x > 5`) kullanarak işlevleri yürüterek analiz etme yöntemidir. Bir resmi doğrulama tekniği olarak sembolik yürütme, sözleşme kodunda bulunan iz düzeyinde özellikleri anlamak amacıyla kullanılır. -Sembolik yürütme, bir yürütme izini sembolik girdi değerleri üzerinde matematiksel bir formül olarak gösterir ve buna aynı zamanda _yol belirteci_ de denir. Bir yol belirtecinin "karşılanabilir" olup olmadığını (yani, formülü karşılayabilecek bir değer olup olmadığını) kontrol etmek için [SMT çözücüsü](https://en.wikipedia.org/wiki/Satisfiability_modulo_theories) kullanılır. Güvenlik açığı bulunan bir yol karşılanabilir nitelikteyse, SMT çözücüsü yürütmeyi tetikleyerek o yola doğru yönlendiren somut bir değer üretecektir. +Sembolik yürütme, bir yürütme izini sembolik girdi değerleri üzerinde matematiksel bir formül olarak temsil eder, buna başka bir deyişle _yol yüklemi_ denir. Bir [SMT çözücü](https://en.wikipedia.org/wiki/Satisfiability_modulo_theories), bir yol yükleminin "karşılanabilir" olup olmadığını (yani, formülü karşılayabilecek bir değer olup olmadığını) kontrol etmek için kullanılır. Güvenlik açığı bulunan bir yol karşılanabilir nitelikteyse, SMT çözücüsü yürütmeyi tetikleyerek o yola doğru yönlendiren somut bir değer üretecektir. -Bir akıllı sözleşmenin fonksiyonunun bir `uint` değerini (`x`) girdi olarak aldığını ve `x` değeri `5`'ten büyük ve aynı zamanda `10`'dan küçük olduğunda eski haline döndürdüğünü düşünün. Normal bir test prosedürü kullanarak hatayı tetikleyen bir `x` değeri bulmak için gerçekten hata tetikleyen bir girdiyi bulma garantisi olmadan onlarca (veya daha fazla) test durumu çalıştırmak gerekebilir. +Bir akıllı sözleşmenin işlevinin girdi olarak bir `uint` değeri (`x`) aldığını ve `x` `5`'ten büyük ve aynı zamanda `10`'dan küçük olduğunda işlemi geri aldığını varsayalım. Normal bir test prosedürü kullanarak hatayı tetikleyen bir `x` değeri bulmak, hata tetikleyen bir girdiyi gerçekten bulma güvencesi olmadan düzinelerce (veya daha fazla) test senaryosunu çalıştırmayı gerektirir. -Bunun aksine, sembolik bir yürütme aracı ile fonksiyon şu sembolik değerle yürütülürdü: `X > 5 ∧ X < 10` (yani, `x` 5'ten büyük VE `x` 10'dan küçük). Daha sonra ilişkili yol ifadesi `x = X > 5 ∧ X < 10` bir SMT çözücüsüne çözmesi için verilirdi. Belirli bir değerin `x = X > 5 ∧ X < 10` formülünü karşılaması halinde, SMT çözücüsü bunu hesaplar; örneğin çözücü, `x` için bir değer olarak `7` verebilir. +Tersine, sembolik bir yürütme aracı, işlevi şu sembolik değerle yürütür: `X > 5 ∧ X < 10` (yani, `x`, 5'ten büyük VE `x`, 10'dan küçük). İlişkili yol yüklemi olan `x = X > 5 ∧ X < 10` daha sonra çözülmesi için bir SMT çözücüsüne verilir. Belirli bir değer `x = X > 5 ∧ X < 10` formülünü karşılarsa, SMT çözücü bunu hesaplar—örneğin, çözücü `x` için bir değer olarak `7` üretebilir. Bu, sembolik yürütmenin bir programın girdilerine dayanması ve ulaşılabilir tüm durumları keşfetmek için araştırılacak girdi kümesinin potansiyel olarak sonsuz olması nedeniyle hala bir tür test yöntemidir. Ancak örnekte gösterildiği gibi sembolik yürütme, özellik ihlallerini tetikleyen girdileri bulmaya yönelik düzenli testlere kıyasla daha verimlidir. @@ -152,25 +152,26 @@ function safe_add(uint x, uint y) returns(uint z){ require(z>=y); return z; +} ``` -Tamsayı taşması ile sonuçlanan bir yürütme izinin şu formülü sağlaması gerekir: `z = x + y VE (z >= x) VE (z >= y) VE (z < x VEYA z < y)`. Böyle bir formülün çözülmesi pek olası değildir, bu nedenle `safe_add` fonksiyonunun asla taşmadığına dair bir matematiksel kanıt görevi görür. +Bir tamsayı taşmasıyla sonuçlanan bir yürütme izinin şu formülü sağlaması gerekir: `z = x + y AND (z >= x) AND (z >= y) AND (z < x OR z < y)` Böyle bir formülün çözülmesi olası değildir, bu nedenle `safe_add` işlevinin asla taşmayacağına dair matematiksel bir kanıt görevi görür. -### Akıllı sözleşmeler için neden resmi doğrulama kullanılmalı? {#benefits-of-formal-verification} +### Akıllı sözleşmeler için neden resmi doğrulama kullanılmalı? Resmi doğrulamanın faydaları {#benefits-of-formal-verification} -#### Güvenilirlik gereksinimi {#need-for-reliability} +#### Güvenilirlik ihtiyacı {#need-for-reliability} -Hata yapması sonucunda ölüm, yaralanma veya maddi yıkım gibi tahrip edici sonuçlara sebep olabilecek hayati öneme sahip sistemlerin doğruluğunun değerlendirmesinde resmi doğrulama kullanılır. Akıllı sözleşmeler, basit hataların [kullanıcılar için geri döndürülemez kayıplara yol açacağı](https://www.freecodecamp.org/news/a-hacker-stole-31m-of-ether-how-it-happened-and-what-it-means-for-ethereum-9e5dc29e33ce/amp/), çok büyük miktarda değeri kontrol eden yüksek değerli uygulamalardır. Ancak bir sözleşmeyi dağıtımdan önce resmi olarak doğrulamak, blok zincir üzerinde çalıştığında arzu edildiği gibi işlem göreceğine yönelik garantiyi güçlendirecektir. +Hata yapması sonucunda ölüm, yaralanma veya maddi yıkım gibi tahrip edici sonuçlara sebep olabilecek hayati öneme sahip sistemlerin doğruluğunun değerlendirmesinde resmi doğrulama kullanılır. Akıllı sözleşmeler, çok büyük miktarda değeri kontrol eden yüksek değerli uygulamalardır ve tasarımdaki basit hatalar [kullanıcılar için geri döndürülemez kayıplara](https://www.freecodecamp.org/news/a-hacker-stole-31m-of-ether-how-it-happened-and-what-it-means-for-ethereum-9e5dc29e33ce/amp/) yol açabilir. Ancak bir sözleşmeyi dağıtımdan önce resmi olarak doğrulamak, blok zincir üzerinde çalıştığında arzu edildiği gibi işlem göreceğine yönelik garantiyi güçlendirecektir. Güvenilirlik, her bir akıllı sözleşmede, özellikle de kodu değiştirilemez olarak dağıtılmış Ethereum Sanal Makinesi'nde (EVM) yüksek düzeyde arzu edilen bir niteliktir. Şu anda erişilemeyen piyasaya sürülme sonrası yükseltmelerle sözleşmelerin güvenilirliğini garanti etme ihtiyacı, resmi doğrulamayı gerekli kılar. Resmi doğrulama, denetimciler ve test edenlerin gözünden kaçabilecek tamsayı taşma ve yetersizliği, yeniden giriş ve düşük gaz optimizasyonları gibi dolambaçlı sorunları algılayabilir. -#### Fonksiyonel doğruluğun kanıtlanması {#prove-functional-correctness} +#### İşlevsel doğruluğu kanıtlama {#prove-functional-correctness} Program test etme, bir akıllı sözleşmenin bazı gereklilikleri karşıladığını kanıtlamanın en yaygın yöntemidir. Bu süreç, işlemesi beklenen bir veri örneği ile sözleşmenin yürütülmesini ve davranışının incelenmesini içerir. Sözleşmenin örnek veri için beklenen sonuçları vermesi durumunda geliştiriciler, doğruluğuna ilişkin nesnel kanıta sahip olmuş olur. -Ancak bu yaklaşım, örneğin içinde yer almayan girdi değerleri için doğru yürütmeyi kanıtlayamaz. Bundan dolayı bir sözleşmeyi test etmek hataları (örneğin yürütme sırasında bazı kod yollarının arzu edilen sonuçları vermemesi) algılamaya yardımcı olabilir ancak **kesin olarak hatasız olduğunu kanıtlayamaz**. +Ancak bu yaklaşım, örneğin içinde yer almayan girdi değerleri için doğru yürütmeyi kanıtlayamaz. Bu nedenle, bir sözleşmeyi test etmek hataları tespit etmeye yardımcı olabilir (yani, bazı kod yolları yürütme sırasında istenen sonuçları döndürmezse), ancak **hataların olmadığını kesin olarak kanıtlayamaz**. -Bunun aksine resmi doğrulama, sözleşme _hiç_ yürütülmeden akıllı sözleşmenin sınırlı bir yürütme aralığı için gereklilikleri karşıladığını resmi olarak kanıtlayabilir. Bunun için doğru sözleşme davranışlarını net olarak açıklayan resmi bir spesifikasyon oluşturulmasına ve sözleşme sistemi için resmi bir (matematiksel) model geliştirilmesine ihtiyaç vardır. Sonrasında, sözleşme modeli ve spesifikasyonu arasındaki tutarlılığı denetlemek için resmi kanıt prosedürünü izleyebiliriz. +Tersine, resmi doğrulama, bir akıllı sözleşmenin, sözleşmeyi hiç çalıştırmadan _sonsuz_ bir yürütme aralığı için gereksinimleri karşıladığını resmi olarak kanıtlayabilir. Bunun için doğru sözleşme davranışlarını net olarak açıklayan resmi bir spesifikasyon oluşturulmasına ve sözleşme sistemi için resmi bir (matematiksel) model geliştirilmesine ihtiyaç vardır. Sonrasında, sözleşme modeli ve spesifikasyonu arasındaki tutarlılığı denetlemek için resmi kanıt prosedürünü izleyebiliriz. Resmi doğrulama sayesinde bir sözleşmenin iş mantığının gereklilikleri karşılayıp karşılamadığını doğrulama sorusu, kanıtlanabilen veya aksi ispatlanabilen matematiksel bir önerme niteliği kazanır. Bir önermeyi resmi olarak kanıtlayarak sınırsız sayıda test durumunu sınırlı sayıda adımla doğrulayabiliriz. Bu bağlamda resmi doğrulamanın bir sözleşmenin bir spesifikasyona göre işlevsel olarak doğruluğunu kanıtlama konusunda başarılı olma olasılığı daha yüksektir. @@ -182,7 +183,7 @@ Akıllı sözleşmeler, (en azından, belirli bir ölçüde) her iki gerekliliğ ### Daha hızlı geliştirme döngüsü {#faster-development-cycle} -Model kontrolü ve sembolik yürütme gibi resmi doğrulama teknikleri, genellikle akıllı sözleşme kodunun sıradan analizinden (test etme ve denetim sırasında uygulanan) daha etkilidir. Bunun nedeni, resmi doğrulamanın savları test etmek için somut değer kullanmanın aksine ("ya kullanıcı 5 ether çekmek isterse?") sembolik değerlere ("ya kullanıcı _n_ sayıda ether çekmek isterse?") bağlı olmasıdır. +Model kontrolü ve sembolik yürütme gibi resmi doğrulama teknikleri, genellikle akıllı sözleşme kodunun sıradan analizinden (test etme ve denetim sırasında uygulanan) daha etkilidir. Bunun nedeni, resmi doğrulamanın savları test etmek için sembolik değerlere dayanmasıdır ("ya bir kullanıcı _n_ ether çekmeye çalışırsa?") bağlı olmasıdır. Sembolik girdi değişkenleri somut değerlerin birçok sınıfını içerebileceğinden resmi doğrulama yaklaşımları daha kısa zaman dilimlerinde daha fazla kod kapsamı vaat eder. Resmi doğrulama, etkin biçimde kullanıldığında geliştiriciler için geliştirme döngüsünü hızlandırabilir. @@ -190,13 +191,13 @@ Resmi doğrulama ayrıca, masraflı tasarım hatalarını azaltarak merkeziyetsi ## Resmi doğrulamanın dezavantajları {#drawbacks-of-formal-verification} -### El emeği maliyeti {#cost-of-manual-labor} +### Manuel işçilik maliyeti {#cost-of-manual-labor} Resmi doğrulama, özellikle doğruluk kanıtlarını elde etmede insanın kanıtlayıcıya rehberlik ettiği yarı otomatik doğrulama ciddi miktarda el emeği gerektirir. Daha da ötesi, resmi spesifikasyon oluşturmak yüksek düzey beceri gerektiren karmaşık bir faaliyettir. Bu faktörler (çaba ve beceri), test etme ve denetleme gibi sıradan sözleşme doğruluğu belirleme yöntemlerine kıyasla resmi doğrulamayı daha zorlayıcı ve masraflı hale getirir. Yine de akıllı sözleşme uygulamalarında yapılan hataların maliyeti göz önüne alındığında tam doğrulama denetiminin maliyetini ödemek daha makuldür. -### Yalancı negatifler {#false-negatives} +### Yanlış negatifler {#false-negatives} Resmi doğrulama, yalnızca akıllı sözleşmenin yürütmesinin resmi spesifikasyon ile eşleşip eşleşmediğini denetleyebilir. Bu bakımdan, spesifikasyonun akıllı sözleşmenin beklenen davranışlarını doğru şekilde açıkladığından emin olmak önemlidir. @@ -206,78 +207,78 @@ Spesifikasyonlar kötü yazılmışsa, özellik ihlalleri (güvenlik açığı b Resmi doğrulamada bir dizi performans sorunu ile karşılaşılır. Örneğin, model kontrolü ve sembolik kontrol sırasında karşılaşılan, sırasıyla durum ve yol patlama sorunları doğrulama prosedürlerini etkileyebilir. Ayrıca resmi doğrulama araçları, alt katmanlarında sıklıkla SMT çözücülerini ve diğer kısıtlama çözücülerini kullanır ve bu çözücüler işlemsel açıdan yoğun süreçlere dayalıdır. -Buna ek olarak, program asla sonlanmayabileceğinden program doğrulayıcılarının bir özelliğin (mantıksal formül olarak belirtilen) karşılanabilip karşılanamayacağını ("[karar verilebilirlik sorunu](https://en.wikipedia.org/wiki/Decision_problem)") belirlemesi her zaman mümkün değildir. Bundan ötürü iyi belirtilmiş olsa bile bir sözleşme için bazı özellikleri kanıtlamak imkânsız olabilir. +Ayrıca, bir program asla sonlanmayabileceğinden, program doğrulayıcılarının bir özelliğin (mantıksal bir formül olarak tanımlanan) karşılanıp karşılanamayacağını belirlemesi her zaman mümkün değildir ("[karar verilebilirlik sorunu](https://en.wikipedia.org/wiki/Decision_problem)"). Bundan ötürü iyi belirtilmiş olsa bile bir sözleşme için bazı özellikleri kanıtlamak imkânsız olabilir. ## Ethereum akıllı sözleşmeleri için resmi doğrulama araçları {#formal-verification-tools} -### Resmi spesifikasyonlar oluşturmaya yönelik spesifikasyon dilleri {#specification-languages} +### Resmi spesifikasyonlar oluşturmak için spesifikasyon dilleri {#specification-languages} -**Eylem**: _*Eylem, depolama spesifikasyonlarının, ön/art koşulların ve sözleşme değişmezlerinin spesifikasyonuna olanak tanır. Ayrıca, araç takımı Coq, SMT çözücüleri veya hevm üzerinden birçok özelliği kanıtlayabilen kanıt arka uçlarına sahiptir.** +**Act**: __Act; depolama güncellemelerinin, ön/son koşulların ve sözleşme değişmezlerinin spesifikasyonuna olanak tanır. Ayrıca, araç takımı Coq, SMT çözücüleri veya hevm üzerinden birçok özelliği kanıtlayabilen kanıt arka uçlarına sahiptir.__ - [GitHub](https://github.com/ethereum/act) -- [Belgeler](https://ethereum.github.io/act/) +- [Belgeler](https://github.com/argotorg/act) -**Scribble** - _*Scribble, Scribble spesifikasyon dili içindeki kod açıklamalarını spesifikasyonu kontrol eden somut savlara dönüştürür.** +**Scribble** - __Scribble, Scribble spesifikasyon dilindeki kod ek açıklamalarını, spesifikasyonu kontrol eden somut savlara dönüştürür.__ - [Belgeler](https://docs.scribble.codes/) -**Dafny** - _*Dafny, kodun doğruluğunu gerekçelendirme ve kanıtlama konusunda yüksek düzeyli açıklamalara dayanan, doğrulama için hazır bir programlama dilidir.** +**Dafny** - __Dafny, kodun doğruluğu hakkında akıl yürütmek ve kanıtlamak için üst düzey ek açıklamalara dayanan, doğrulamaya hazır bir programlama dilidir.__ - [GitHub](https://github.com/dafny-lang/dafny) -### Doğruluk kontrolü için program doğrulayıcıları {#program-verifiers} +### Doğruluğu kontrol etmek için program doğrulayıcıları {#program-verifiers} -**Certora Prover** - _Certora Prover, akıllı sözleşmelerde kod doğruluğunu kontrol etmeye yarayan otomatik bir resmi doğrulama aracıdır. Spesifikasyonlar, özellik ihlallerinin tespit edilmesi için statik analiz ve kısıt çözümleme kombinasyonu kullanılarak CVL (Certora Doğrulama Dili) dilinde yazılır._ +**Certora Prover** - _Certora Prover, akıllı sözleşmelerde kod doğruluğunu kontrol etmek için kullanılan otomatik bir resmi doğrulama aracıdır. Spesifikasyonlar, özellik ihlallerinin statik analiz ve kısıt çözme kombinasyonu kullanılarak tespit edildiği CVL (Certora Doğrulama Dili) ile yazılır._ - [Web sitesi](https://www.certora.com/) - [Belgeler](https://docs.certora.com/en/latest/index.html) -**Solidity SMTChecker** - _*Solidity'nin SMTChecker'ı, SMT (Karşılanabilirlik Modüler Teorileri) ve Horn çözümlemesine dayalı yerleşik bir model denetleyicisidir. Derleme sırasında bir sözleşmenin kaynak kodunun spesifikasyonlarla uyumlu olduğunu onaylar ve güvenlik özelliklerinin ihlallerini statik olarak kontrol eder.** +**Solidity SMTChecker** - __Solidity’nin SMTChecker'ı, SMT (Teorilere Göre Karşılanabilirlik) ve Horn çözümlemesine dayalı yerleşik bir model denetleyicisidir. Derleme sırasında bir sözleşmenin kaynak kodunun spesifikasyonlarla uyumlu olduğunu onaylar ve güvenlik özelliklerinin ihlallerini statik olarak kontrol eder.__ - [GitHub](https://github.com/ethereum/solidity) -**solc-verify** - _*solc-verify, Solidity derleyicisinin açıklamaları ve modüler program doğrulamasını kullanarak Solidity kodu üzerinde otomatik resmi doğrulama yapabilen genişletilmiş bir sürümüdür.** +**solc-verify** - __solc-verify, ek açıklamaları ve modüler program doğrulamasını kullanarak Solidity kodu üzerinde otomatik resmi doğrulama gerçekleştirebilen Solidity derleyicisinin genişletilmiş bir sürümüdür.__ - [GitHub](https://github.com/SRI-CSL/solidity) -**KEVM** - _*KEVM, Ethereum Sanal Makinesi'nin (EVM) K çerçevesinde yazılmış resmi bir semantiğidir. KEVM, yürütülebilir özelliktedir ve ulaşılabilirlik mantığını kullanarak özellikle ilgili belirli savları kanıtlayabilir.** +**KEVM** - __KEVM, K çerçevesinde yazılmış Ethereum Sanal Makinesi'nin (EVM) resmi bir semantiğidir. KEVM, yürütülebilir özelliktedir ve ulaşılabilirlik mantığını kullanarak özellikle ilgili belirli savları kanıtlayabilir.__ - [GitHub](https://github.com/runtimeverification/evm-semantics) - [Belgeler](https://jellopaper.org/) -### Varsayım kanıtlama için mantıksal çerçeveler {#theorem-provers} +### Teorem kanıtlama için mantıksal çerçeveler {#theorem-provers} -**Isabelle** - _Isabelle/HOL, matematik formüllerinin resmi bir dilde ifade edilmesine olanak tanıyan ve bu formülleri kanıtlamaya yarayan araçlar sağlayan bir kanıt asistanıdır. Ana uygulama, matematiksel kanıtların ve özellikle bilgisayar donanımının veya yazılımının doğruluğunu ve bilgisayar dilleri ve protokollerinin özelliklerini kanıtlamayı içeren resmi doğrulamanın resmileştirilmesidir._ +**Isabelle** - _Isabelle/HOL, matematiksel formüllerin resmi bir dilde ifade edilmesini sağlayan ve bu formülleri kanıtlamak için araçlar sunan bir kanıt yardımcısıdır. Ana uygulama, matematiksel kanıtların ve özellikle bilgisayar donanımının veya yazılımının doğruluğunu ve bilgisayar dilleri ve protokollerinin özelliklerini kanıtlamayı içeren resmi doğrulamanın resmileştirilmesidir._ - [GitHub](https://github.com/isabelle-prover) - [Belgeler](https://isabelle.in.tum.de/documentation.html) -**Coq** - _Coq, varsayımları kullanarak programları tanımlamanıza ve doğruluğun makine denetimli kanıtlarını interaktif şekilde oluşturmanıza olanak tanıyan bir interaktif varsayım kanıtlayıcısıdır._ +**Rocq** - _Rocq, teoremleri kullanarak programları tanımlamanıza ve doğruluğun makine tarafından kontrol edilen kanıtlarını etkileşimli olarak oluşturmanıza olanak tanıyan etkileşimli bir teorem kanıtlayıcısıdır._ -- [GitHub](https://github.com/coq/coq) -- [Belgeler](https://coq.github.io/doc/v8.13/refman/index.html) +- [GitHub](https://github.com/rocq-prover/rocq) +- [Belgeler](https://rocq-prover.org/docs) -### Akıllı sözleşmelerdeki güvenlik açığı modellerinin tespit edilmesine yarayan sembolik yürütme tabanlı araçlar {#symbolic-execution-tools} +### Akıllı sözleşmelerde savunmasız kalıpları tespit etmek için sembolik yürütme tabanlı araçlar {#symbolic-execution-tools} -**Manticore** - _*EVM bit kodu analizi için sembolik yürütmeye dayalı bir analiz aracıdır*.* +**Manticore** - __Sembolik yürütmeye dayalı bir EVM bayt kodu analiz aracıdır.__ - [GitHub](https://github.com/trailofbits/manticore) - [Belgeler](https://github.com/trailofbits/manticore/wiki) -**hevm** - _*hevm, EVM bit kodu için bir sembolik yürütme motoru ve eşdeğerlik denetimcisidir.** +**hevm** - __hevm, EVM bayt kodu için bir sembolik yürütme motoru ve denklik denetleyicisidir.__ - [GitHub](https://github.com/dapphub/dapptools/tree/master/src/hevm) -**Mythril** - _Ethereum akıllı sözleşmelerindeki güvenlik açıklarını tespit etmeye yarayan birsembolik yürütme aracıdır._ +**Mythril** - _Ethereum akıllı sözleşmelerindeki güvenlik açıklarını tespit etmek için sembolik bir yürütme aracıdır_ - [GitHub](https://github.com/ConsenSys/mythril-classic) - [Belgeler](https://mythril-classic.readthedocs.io/en/develop/) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Akıllı Sözleşmelerin Resmi Doğrulaması Nasıl Çalışır?](https://runtimeverification.com/blog/how-formal-verification-of-smart-contracts-works/) -- [Resmi Doğrulama, Akıllı Sözleşmelerin Kusursuz Olmasını Nasıl Sağlar?](https://media.consensys.net/how-formal-verification-can-ensure-flawless-smart-contracts-cbda8ad99bd1) -- [Ethereum Ekosistemindeki Resmi Doğrulama Projelerine Genel Bakış](https://github.com/leonardoalt/ethereum_formal_verification_overview) +- [Resmi Doğrulama Kusursuz Akıllı Sözleşmeleri Nasıl Sağlayabilir?](https://media.consensys.net/how-formal-verification-can-ensure-flawless-smart-contracts-cbda8ad99bd1) +- [Ethereum Ekosistemindeki Resmi Doğrulama Projelerine Genel Bir Bakış](https://github.com/leonardoalt/ethereum_formal_verification_overview) - [Ethereum 2.0 Para Yatırma Akıllı Sözleşmesinin Uçtan Uca Resmi Doğrulaması](https://runtimeverification.com/blog/end-to-end-formal-verification-of-ethereum-2-0-deposit-smart-contract/) -- [Dünyanın En Popüler Akıllı Sözleşmesinin Resmi Olarak Doğrulanması](https://www.zellic.io/blog/formal-verification-weth) +- [Dünyanın En Popüler Akıllı Sözleşmesini Resmi Olarak Doğrulama](https://www.zellic.io/blog/formal-verification-weth) - [SMTChecker ve Resmi Doğrulama](https://docs.soliditylang.org/en/v0.8.15/smtchecker.html) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/index.md b/public/content/translations/tr/developers/docs/smart-contracts/index.md index fecde4cba3e..530d59b5e96 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/index.md @@ -1,6 +1,6 @@ --- -title: Akıllı sözleşmelere giriş -description: Akıllı sözleşmelerin benzersiz özelliklerine ve kısıtlamalarına odaklanan genel bir bakış. +title: "Akıllı sözleşmelere giriş" +description: "Akıllı sözleşmelerin benzersiz özelliklerine ve kısıtlamalarına odaklanan genel bir bakış." lang: tr --- @@ -12,18 +12,18 @@ Akıllı sözleşmeler bir tür [Ethereum hesabıdır](/developers/docs/accounts ## Ön Koşullar {#prerequisites} -Yeni başlıyorsanız veya daha az teknik bir giriş arıyorsanız, [akıllı sözleşmelere girişimizi](/smart-contracts/) öneririz. +Yeni başlıyorsanız veya daha az teknik bir giriş arıyorsanız, [akıllı sözleşmelere giriş](/smart-contracts/) yazımızı öneririz. -Akıllı sözleşmelerin dünyasına atlamadan önce [hesaplar](/developers/docs/accounts/), [işlemler](/developers/docs/transactions/) ve [Ethereum Sanal Makinesi](/developers/docs/evm/) hakkında yeterince bilgi sahibi olduğunuzdan emin olun. +Akıllı sözleşmeler dünyasına dalmadan önce [hesaplar](/developers/docs/accounts/), [işlemler](/developers/docs/transactions/) ve [ethereum sanal makinesi](/developers/docs/evm/) hakkında bilgi edindiğinizden emin olun. ## Dijital bir otomat {#a-digital-vending-machine} -[Nick Szabo](https://unenumerated.blogspot.com/)'nun açıkladığı gibi, bir akıllı sözleşme için en iyi metafor, muhtemelen bir otomattır. Doğru girdilerle, belli bir çıktı garanti edilir. +[Nick Szabo'nun da](https://unenumerated.blogspot.com/) belirttiği gibi, bir akıllı sözleşme için en iyi metafor belki de bir otomattır. Doğru girdilerle, belli bir çıktı garanti edilir. Otomattan bir atıştırmalık almak için: ``` -money + snack selection = snack dispensed +para + atıştırmalık seçimi = atıştırmalık verildi ``` Bu mantık otomatın içine programlanmıştır. @@ -35,28 +35,28 @@ pragma solidity 0.8.7; contract VendingMachine { - // Declare state variables of the contract + // Sözleşmenin durum değişkenlerini bildirin address public owner; mapping (address => uint) public cupcakeBalances; - // When 'VendingMachine' contract is deployed: - // 1. set the deploying address as the owner of the contract - // 2. set the deployed smart contract's cupcake balance to 100 + // 'VendingMachine' sözleşmesi dağıtıldığında: + // 1. dağıtan adresi sözleşmenin sahibi olarak ayarlayın + // 2. dağıtılan akıllı sözleşmenin kek bakiyesini 100'e ayarlayın constructor() { owner = msg.sender; cupcakeBalances[address(this)] = 100; } - // Allow the owner to increase the smart contract's cupcake balance + // Sahibin akıllı sözleşmenin kek bakiyesini artırmasına izin verin function refill(uint amount) public { - require(msg.sender == owner, "Only the owner can refill."); + require(msg.sender == owner, "Yalnızca sahibi yeniden doldurabilir."); cupcakeBalances[address(this)] += amount; } - // Allow anyone to purchase cupcakes + // Herkesin kek satın almasına izin verin function purchase(uint amount) public payable { - require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake"); - require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase"); + require(msg.value >= amount * 1 ether, "Kek başına en az 1 ETH ödemelisiniz"); + require(cupcakeBalances[address(this)] >= amount, "Bu satın alımı tamamlamak için stokta yeterli kek yok"); cupcakeBalances[address(this)] -= amount; cupcakeBalances[msg.sender] += amount; } @@ -65,9 +65,9 @@ contract VendingMachine { Bir otomatın bir kasiyere olan ihtiyacı yok etmesi gibi, akıllı sözleşmeler de birçok endüstrideki aracıların yerini alabilir. -## İzne dayalı olmama {#permissionless} +## İzin gerektirmeyen {#permissionless} -Herkes bir akıllı sözleşme yazabilir ve onu ağa dağıtabilir. Sadece bir [akıllı sözleşme dilinde](/developers/docs/smart-contracts/languages/) kod yazmayı öğrenmeniz ve sözleşmenizi dağıtmaya yetecek kadar ETH sahibi olmanız gerekir. Bir akıllı sözleşmenin dağıtılması, teknik olarak bir işlem olduğundan basit bir ETH transferi için gaz ödediğiniz gibi bunun için de [gaz](/developers/docs/gas/) ödemeniz gerekir. Ancak akıllı sözleşme dağıtımının gaz masrafı çok daha fazladır. +Herkes bir akıllı sözleşme yazabilir ve onu ağa dağıtabilir. Tek yapmanız gereken bir [akıllı sözleşme dilinde](/developers/docs/smart-contracts/languages/) kod yazmayı öğrenmek ve sözleşmenizi dağıtmak için yeterli ETH'ye sahip olmaktır. Bir akıllı sözleşmenin dağıtılması teknik olarak bir işlem olduğundan, basit bir ETH transferi için gaz ödediğiniz gibi bunun için de [gaz](/developers/docs/gas/) ödemeniz gerekir. Ancak akıllı sözleşme dağıtımının gaz masrafı çok daha fazladır. Ethereum, akıllı sözleşme yazmak için geliştirici dostu dillere sahiptir: @@ -76,35 +76,35 @@ Ethereum, akıllı sözleşme yazmak için geliştirici dostu dillere sahiptir: [Diller hakkında daha fazlası](/developers/docs/smart-contracts/languages/) -Ancak, Ethereum sanal makinesinin sözleşmeyi yorumlayabilmesi ve depolayabilmesi için dağıtılmadan önce derlenmeleri gerekir. [Derleme üzerine daha fazla bilgi](/developers/docs/smart-contracts/compiling/) +Ancak, Ethereum sanal makinesinin sözleşmeyi yorumlayabilmesi ve depolayabilmesi için dağıtılmadan önce derlenmeleri gerekir. [Derleme hakkında daha fazlası](/developers/docs/smart-contracts/compiling/) ## Birleştirilebilirlik {#composability} Akıllı sözleşmeler Ethereum üzerinde herkese açıktır ve açık API'ler olarak düşünülebilirler. Bu, kendi akıllı sözleşmenizde başka akıllı sözleşmeleri çağırarak olanakları büyük ölçüde genişletebileceğiniz anlamına gelir. Sözleşmeler, başka sözleşmeleri bile dağıtabilir. -[Akıllı sözleşme birleştirilebilirliği](/developers/docs/smart-contracts/composability/) hakkında fazlasını öğrenin. +[Akıllı sözleşme birleştirilebilirliği](/developers/docs/smart-contracts/composability/) hakkında daha fazla bilgi edinin. -## Kısıtlamalar {#limitations} +## Sınırlamalar {#limitations} -Akıllı sözleşmeler, zincir dışındaki kaynaklardan veri çekemedikleri için kendi başlarına ''gerçek dünya'' olayları hakkında bilgi toplayamaz. Dolayısıyla gerçek dünyada gerçekleşen olaylara yanıt veremezler. Bu, tasarımlarının bir gereğidir. Dış bilgiye bağımlı olmak, güvenlik ve merkeziyetsizlik için önemli olan mutabakatı riske atabilir. +Akıllı sözleşmeler, zincir dışı kaynaklardan veri çekemedikleri için tek başlarına "gerçek dünya" olayları hakkında bilgi toplayamazlar. Dolayısıyla gerçek dünyada gerçekleşen olaylara yanıt veremezler. Bu, tasarımlarının bir gereğidir. Dış bilgiye bağımlı olmak, güvenlik ve merkeziyetsizlik için önemli olan mutabakatı riske atabilir. -Ancak blokzincir uygulamaları için zincir dışından edinilen verileri kullanabilmek önemlidir. Çözüm ise zincir dışından edinilen verileri sentezleyip akıllı sözleşmeler için kullanılabilir hale getiren araçlar olan [kâhinlerdir](/developers/docs/oracles/). +Ancak blokzincir uygulamaları için zincir dışından edinilen verileri kullanabilmek önemlidir. Çözüm, zincir dışı verileri alıp akıllı sözleşmeler için kullanılabilir hale getiren araçlar olan [kâhinlerdir](/developers/docs/oracles/). -Akıllı sözleşmelerin diğer bir kısıtlaması ise maksimum sözleşme boyutudur. Bir akıllı sözleşme maksimum 24 KB olabilir: Aksi takdirde sahip olduğu gaz tükenir. Bu, [Elmas Deseni](https://eips.ethereum.org/EIPS/eip-2535) kullanılarak aşılabilir. +Akıllı sözleşmelerin diğer bir kısıtlaması ise maksimum sözleşme boyutudur. Bir akıllı sözleşme maksimum 24 KB olabilir: Aksi takdirde sahip olduğu gaz tükenir. Bu, [Elmas Modeli (The Diamond Pattern)](https://eips.ethereum.org/EIPS/eip-2535) kullanılarak aşılabilir. -## Çoklu imza sözleşmeleri {#multisig} +## Çoklu imzalı (Multisig) sözleşmeler {#multisig} -Çoklu imza sözleşmeleri, bir işlemi gerçekleştirmek için birden fazla geçerli imza gerektiren akıllı sözleşme hesaplarıdır. Bu, önemli miktarda ether veya diğer tokenleri tutan sözleşmeler için tek başarısızlık noktalarından kaçınmak için çok kullanışlıdır. Çoklu imzalar, ayrıca sözleşme yürütme ve anahtar yönetimi sorumluluğunu birden fazla taraf arasında bölüştürür ve tek bir özel anahtarın geri dönüşü olmayan fon kaybına yol açmasını önler. Bu nedenlerle, basit DAO yönetişimi için çoklu imza sözleşmeleri kullanılabilir. Çoklu imzalar, yürütmek için M olası kabul edilebilir imzadan (burada N ≤ M ve M > 1 olduğunda) N imza gerektirir. `N = 3, M = 5` ve `N = 4, M = 7` yaygın olarak kullanılır. 4/7 çoklu imza, olası yedi geçerli imzadan dördünü gerektirir. Bu, üç imza kaybolsa bile fonların geri alınabileceği anlamına gelir. Bu durumda, sözleşmenin uygulanabilmesi için anahtar sahiplerinin çoğunluğunun kabul etmesi ve imzalaması gerektiği anlamına da gelir. +Çoklu imza sözleşmeleri, bir işlemi gerçekleştirmek için birden fazla geçerli imza gerektiren akıllı sözleşme hesaplarıdır. Bu, önemli miktarda ether veya diğer tokenleri tutan sözleşmeler için tek başarısızlık noktalarından kaçınmak için çok kullanışlıdır. Çoklu imzalar, ayrıca sözleşme yürütme ve anahtar yönetimi sorumluluğunu birden fazla taraf arasında bölüştürür ve tek bir özel anahtarın geri dönüşü olmayan fon kaybına yol açmasını önler. Bu nedenlerle, basit DAO yönetişimi için çoklu imza sözleşmeleri kullanılabilir. Çoklu imzalar, yürütülmek için M olası kabul edilebilir imza arasından N imza gerektirir (burada N ≤ M ve M > 1). `N = 3, M = 5` ve `N = 4, M = 7` yaygın olarak kullanılır. 4/7 çoklu imza, olası yedi geçerli imzadan dördünü gerektirir. Bu, üç imza kaybolsa bile fonların geri alınabileceği anlamına gelir. Bu durumda, sözleşmenin uygulanabilmesi için anahtar sahiplerinin çoğunluğunun kabul etmesi ve imzalaması gerektiği anlamına da gelir. ## Akıllı sözleşme kaynakları {#smart-contract-resources} -**OpenZeppelin Kontratları -** **_Güvenli akıllı sözleşme geliştirme kütüphanesidir._** +**OpenZeppelin Contracts -** **_Güvenli akıllı sözleşme geliştirme kütüphanesi._** - [openzeppelin.com/contracts/](https://openzeppelin.com/contracts/) - [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts) - [Topluluk Forumu](https://forum.openzeppelin.com/c/general/16) -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} - [Coinbase: Akıllı sözleşme nedir?](https://www.coinbase.com/learn/crypto-basics/what-is-a-smart-contract) - [Chainlink: Akıllı sözleşme nedir?](https://chain.link/education/smart-contracts) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/languages/index.md b/public/content/translations/tr/developers/docs/smart-contracts/languages/index.md index 1ece0c4904c..7d4315e6dd7 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/languages/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/languages/index.md @@ -1,23 +1,23 @@ --- -title: Akıllı sözleşme dilleri -description: 'İki ana akıllı sözleşme diline genel bir bakış ve karşılaştırma: Solidity ve Vyper.' +title: "Akıllı sözleşme dilleri" +description: "İki ana akıllı sözleşme diline genel bir bakış ve karşılaştırma: Solidity ve Vyper." lang: tr --- -Ethereum'un harika yönlerinden birisi, akıllı sözleşmelerin nispeten geliştirici dostu dillerle yazılabilmesidir. Eğer Python veya herhangi bir [süslü ayraç dilinde](https://wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages) deneyimliyseniz, benzer söz dizimi olan bir dil bulabilirsiniz. +Ethereum'un harika yönlerinden birisi, akıllı sözleşmelerin nispeten geliştirici dostu dillerle yazılabilmesidir. Python'da veya herhangi bir [süslü parantezli dilde](https://wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages) deneyimliyseniz, söz dizimi tanıdık olan bir dil bulabilirsiniz. En aktif ve sürdürülen iki dil ise şunlardır: - Solidity - Vyper -Remix IDE, hem Solidity hem de Vyper'da sözleşme oluşturmak ve test etmeye yönelik kapsamlı bir geliştirme ortamı sağlar. Kodlamaya başlamak için [Remix IDE'nin tarayıcı içi sürümünü deneyin](https://remix.ethereum.org). +Remix IDE, hem Solidity hem de Vyper'da sözleşme oluşturmak ve test etmeye yönelik kapsamlı bir geliştirme ortamı sağlar. [Kodlamaya başlamak için tarayıcı içi Remix IDE'yi deneyin](https://remix.ethereum.org). -Daha deneyimli geliştiricilerin [Ethereum Sanal Makinesi](/developers/docs/evm/) için orta seviye bir dil olan Yul ya da Yul'un bir eklentisi olan Yul+'ı kullanması uygun olur. +Daha deneyimli geliştiriciler [Ethereum Sanal Makinesi](/developers/docs/evm/) için bir ara dil olan Yul'u veya Yul'un bir uzantısı olan Yul+'ı kullanmak isteyebilirler. Eğer meraklıysanız ve hâlâ ağır geliştirme altında olan yeni dilleri test etmeye yardımcı olmak istiyorsanız, daha başlangıç aşamasında ve yakın zamanda ortaya çıkmış bir akıllı sözleşme dili olan Fe'yi deneyebilirsiniz. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} Programlama dilleri, özellikle JavaScript veya Python hakkında önceden bilgiye sahip olmak akıllı sözleşme dillerindeki farklılıkları bir mantığa oturtabilmenize yardımcı olur. Ayrıca dil karşılaştırmalarında çok derine dalmadan önce akıllı sözleşmeleri konsept olarak anlamanızı öneriyoruz. [Akıllı sözleşmelere giriş](/developers/docs/smart-contracts/). @@ -33,13 +33,13 @@ Programlama dilleri, özellikle JavaScript veya Python hakkında önceden bilgiy ### Önemli bağlantılar {#important-links} -- [Belgeler](https://docs.soliditylang.org/en/latest/) +- [Dokümantasyon](https://docs.soliditylang.org/en/latest/) - [Solidity Dil Portalı](https://soliditylang.org/) -- [Örnekle Solidity](https://docs.soliditylang.org/en/latest/solidity-by-example.html) +- [Örneklerle Solidity](https://docs.soliditylang.org/en/latest/solidity-by-example.html) - [GitHub](https://github.com/ethereum/solidity/) -- [Solidity Matrix Chatroom](https://matrix.to/#/#ethereum_solidity:gitter.im) ile köprülenmiş [Solidity Gitter Chatroom](https://gitter.im/ethereum/solidity) +- [Solidity Matrix Sohbet Odasına](https://matrix.to/#/#ethereum_solidity:gitter.im) köprülenmiş [Solidity Gitter Sohbet Odası](https://gitter.im/ethereum/solidity) - [Kopya Kağıdı](https://reference.auditless.com/cheatsheet) -- [Solidity Bloğu](https://blog.soliditylang.org/) +- [Solidity Blogu](https://blog.soliditylang.org/) - [Solidity Twitter](https://twitter.com/solidity_lang) ### Örnek sözleşme {#example-contract} @@ -49,33 +49,33 @@ Programlama dilleri, özellikle JavaScript veya Python hakkında önceden bilgiy pragma solidity >= 0.7.0; contract Coin { - // The keyword "public" makes variables - // accessible from other contracts + // "public" anahtar kelimesi, değişkenleri + // diğer sözleşmelerden erişilebilir kılar address public minter; mapping (address => uint) public balances; - // Events allow clients to react to specific - // contract changes you declare + // Olaylar, istemcilerin bildirdiğiniz belirli + // sözleşme değişikliklerine tepki vermesine olanak tanır event Sent(address from, address to, uint amount); - // Constructor code is only run when the contract - // is created + // Yapıcı kod yalnızca sözleşme + // oluşturulduğunda çalışır constructor() { minter = msg.sender; } - // Sends an amount of newly created coins to an address - // Can only be called by the contract creator + // Yeni oluşturulan coin'lerden bir miktarını bir adrese gönderir + // Yalnızca sözleşme yaratıcısı tarafından çağrılabilir function mint(address receiver, uint amount) public { require(msg.sender == minter); require(amount < 1e60); balances[receiver] += amount; } - // Sends an amount of existing coins - // from any caller to an address + // Herhangi bir çağırandan bir adrese + // mevcut coin miktarını gönderir function send(address receiver, uint amount) public { - require(amount <= balances[msg.sender], "Insufficient balance."); + require(amount <= balances[msg.sender], "Yetersiz bakiye."); balances[msg.sender] -= amount; balances[receiver] += amount; emit Sent(msg.sender, receiver, amount); @@ -83,7 +83,7 @@ contract Coin { } ``` -Bu örnek size Solidity sözleşme söz dizimi hakkında bir fikir verecektir. Fonksiyonlar ve değişkenler hakkında daha detaylı bir açıklama için [belgelere bakın](https://docs.soliditylang.org/en/latest/contracts.html). +Bu örnek size Solidity sözleşme söz dizimi hakkında bir fikir verecektir. Fonksiyonların ve değişkenlerin daha ayrıntılı bir açıklaması için [belgelere bakın](https://docs.soliditylang.org/en/latest/contracts.html). ## Vyper {#vyper} @@ -101,110 +101,124 @@ Bu örnek size Solidity sözleşme söz dizimi hakkında bir fikir verecektir. F - Sonsuz uzunlukta döngüler - İkili sabit noktalar -Daha fazla bilgi için [Vyper mantığını okuyun](https://vyper.readthedocs.io/en/latest/index.html). +Daha fazla bilgi için [Vyper gerekçesini okuyun](https://vyper.readthedocs.io/en/latest/index.html). ### Önemli bağlantılar {#important-links-1} -- [Belgeler](https://vyper.readthedocs.io) -- [Örnekle Vyper](https://vyper.readthedocs.io/en/latest/vyper-by-example.html) +- [Dokümantasyon](https://vyper.readthedocs.io) +- [Örneklerle Vyper](https://vyper.readthedocs.io/en/latest/vyper-by-example.html) - [Örneklerle Daha Fazla Vyper](https://vyper-by-example.org/) - [GitHub](https://github.com/vyperlang/vyper) - [Vyper topluluğu Discord sohbeti](https://discord.gg/SdvKC79cJk) - [Kopya Kağıdı](https://reference.auditless.com/cheatsheet) - [Vyper için akıllı sözleşme geliştirme çerçeveleri ve araçları](/developers/docs/programming-languages/python/) -- [VyperPunk - Vyper akıllı sözleşmelerini güvenli kılmayı ve hacklemeyi öğrenin](https://github.com/SupremacyTeam/VyperPunk) -- [Geliştirme için Vyper Hub](https://github.com/zcor/vyper-dev) -- [Vyper en başarılı akıllı sözleşme örnekleri](https://github.com/pynchmeister/vyper-greatest-hits/tree/main/contracts) -- [Harika Vyper düzenlenmiş kaynakları](https://github.com/spadebuilders/awesome-vyper) +- [VyperPunk - Vyper akıllı sözleşmelerini güvenli hale getirmeyi ve hacklemeyi öğrenin](https://github.com/SupremacyTeam/VyperPunk) +- [Geliştirme için Vyper Merkezi](https://github.com/zcor/vyper-dev) +- [En popüler Vyper akıllı sözleşme örnekleri](https://github.com/pynchmeister/vyper-greatest-hits/tree/main/contracts) +- [Harika Vyper derlenmiş kaynakları](https://github.com/spadebuilders/awesome-vyper) ### Örnek {#example} ```python -# Open Auction +# Açık Artırma + +# Açık artırma parametreleri + +# Lehtar, en yüksek teklifi verenden para alır -# Auction params -# Beneficiary receives money from the highest bidder beneficiary: public(address) auctionStart: public(uint256) auctionEnd: public(uint256) -# Current state of auction +# Açık artırmanın mevcut durumu + highestBidder: public(address) highestBid: public(uint256) -# Set to true at the end, disallows any change +# Sonunda true olarak ayarlanır, herhangi bir değişikliğe izin vermez + ended: public(bool) -# Keep track of refunded bids so we can follow the withdraw pattern +# Geri çekme modelini takip edebilmek için iade edilen teklifleri takip edin + pendingReturns: public(HashMap[address, uint256]) -# Create a simple auction with `_bidding_time` -# seconds bidding time on behalf of the -# beneficiary address `_beneficiary`. +# Lehtar adresi `_beneficiary` adına `_bidding_time` + +# saniyelik teklif süresi ile basit bir açık artırma oluşturun. + @external def __init__(_beneficiary: address, _bidding_time: uint256): self.beneficiary = _beneficiary self.auctionStart = block.timestamp self.auctionEnd = self.auctionStart + _bidding_time -# Bid on the auction with the value sent -# together with this transaction. -# The value will only be refunded if the -# auction is not won. +# Bu işlemle birlikte gönderilen değerle + +# açık artırmaya teklif verin. + +# Değer yalnızca açık artırma + +# kazanılmazsa iade edilecektir. + @external @payable def bid(): - # Check if bidding period is over. + # Teklif verme süresinin bitip bitmediğini kontrol edin. assert block.timestamp < self.auctionEnd - # Check if bid is high enough + # Teklifin yeterince yüksek olup olmadığını kontrol edin assert msg.value > self.highestBid - # Track the refund for the previous high bidder + # Önceki en yüksek teklif verenin iadesini takip edin self.pendingReturns[self.highestBidder] += self.highestBid - # Track new high bid + # Yeni yüksek teklifi takip edin self.highestBidder = msg.sender self.highestBid = msg.value -# Withdraw a previously refunded bid. The withdraw pattern is -# used here to avoid a security issue. If refunds were directly -# sent as part of bid(), a malicious bidding contract could block -# those refunds and thus block new higher bids from coming in. +# Önceden iade edilmiş bir teklifi geri çekin. Geri çekme modeli + +# burada bir güvenlik sorununu önlemek için kullanılır. Geri ödemeler doğrudan + +# bid()'in bir parçası olarak gönderilirse, kötü niyetli bir teklif sözleşmesi bu + +# geri ödemeleri engelleyebilir ve dolayısıyla yeni daha yüksek tekliflerin gelmesini engelleyebilir. + @external def withdraw(): pending_amount: uint256 = self.pendingReturns[msg.sender] self.pendingReturns[msg.sender] = 0 send(msg.sender, pending_amount) -# End the auction and send the highest bid -# to the beneficiary. +# Açık artırmayı sonlandırın ve en yüksek teklifi + +# lehtara gönderin. + @external def endAuction(): - # It is a good guideline to structure functions that interact - # with other contracts (i.e., they call functions or send ether) - # into three phases: - # 1. checking conditions - # 2. performing actions (potentially changing conditions) - # 3. interacting with other contracts - # If these phases are mixed up, the other contract could call - # back into the current contract and modify the state or cause - # effects (ether payout) to be performed multiple times. - # If functions called internally include interaction with external - # contracts, they also have to be considered interaction with - # external contracts. - - # 1. Conditions - # Check if auction endtime has been reached + # Diğer sözleşmelerle etkileşim kuran (yani fonksiyonları çağıran veya ether gönderen) + # fonksiyonları üç aşamada yapılandırmak iyi bir kılavuzdur: + # 1. koşulları kontrol etme + # 2. eylemleri gerçekleştirme (koşulları potansiyel olarak değiştirme) + # 3. diğer sözleşmelerle etkileşim kurma + # Bu aşamalar karıştırılırsa, diğer sözleşme mevcut sözleşmeye + # geri çağrı yapabilir ve durumu değiştirebilir veya etkilerin (ether ödemesi) + # birden çok kez gerçekleştirilmesine neden olabilir. + # Dahili olarak çağrılan fonksiyonlar harici sözleşmelerle etkileşim içeriyorsa, + # bunlar da harici sözleşmelerle etkileşim olarak kabul edilmelidir. + + # 1. Koşullar + # Açık artırma bitiş zamanına ulaşılıp ulaşılmadığını kontrol edin assert block.timestamp >= self.auctionEnd - # Check if this function has already been called + # Bu fonksiyonun daha önce çağrılıp çağrılmadığını kontrol edin assert not self.ended - # 2. Effects + # 2. Etkiler self.ended = True - # 3. Interaction + # 3. Etkileşim send(self.beneficiary, self.highestBid) ``` -Bu örnek size Vyper sözleşme söz dizimi hakkında bir fikir verecektir. Fonksiyonlar ve değişkenler hakkında daha detaylı bir açıklama için [belgelere bakın](https://vyper.readthedocs.io/en/latest/vyper-by-example.html#simple-open-auction). +Bu örnek size Vyper sözleşme söz dizimi hakkında bir fikir verecektir. Fonksiyonların ve değişkenlerin daha ayrıntılı bir açıklaması için [belgelere bakın](https://vyper.readthedocs.io/en/latest/vyper-by-example.html#simple-open-auction). ## Yul ve Yul+ {#yul} @@ -213,24 +227,24 @@ Eğer Ethereum'da yeniyseniz ve akıllı sözleşme dilleriyle henüz herhangi b **Yul** - Ethereum için orta seviye dil. -- [EVM](/developers/docs/evm) ve Ethereum öğeleri barındıran bir WebAssembly olan [Ewasm](https://github.com/ewasm) platformlarını destekler ve iki platformun da yaygın ve kullanılabilir bir paydası olacak şekilde dizayn edilmiştir. +- [EVM](/developers/docs/evm) ve Ethereum aromalı bir WebAssembly olan [Ewasm](https://github.com/ewasm)'ı destekler ve her iki platformun da kullanılabilir ortak paydası olacak şekilde tasarlanmıştır. - EVM ve Ewasm platformlarına eşit derece katkı sağlayabilecek yüksek seviye optimizasyon aşamaları için iyi bir hedeftir. **Yul+** - Yüksek derecede verimli bir alt düzey Yul eklentisi. -- Aslen bir [iyimser toplama](/developers/docs/scaling/optimistic-rollups/) sözleşmesi için dizayn edilmiştir. +- Başlangıçta bir [iyimser toplama](/developers/docs/scaling/optimistic-rollups/) sözleşmesi için tasarlanmıştır. - Yul+, Yul'a yeni özellikler ekleyen deneysel bir yükseltme tasarısı olarak görülebilir. ### Önemli bağlantılar {#important-links-2} -- [Yul Belgeleri](https://docs.soliditylang.org/en/latest/yul.html) -- [Yul+ Belgeleri](https://github.com/fuellabs/yulp) -- [Yul+ Giriş Gönderisi](https://medium.com/@fuellabs/introducing-yul-a-new-low-level-language-for-ethereum-aa64ce89512f) +- [Yul Dokümantasyonu](https://docs.soliditylang.org/en/latest/yul.html) +- [Yul+ Dokümantasyonu](https://github.com/fuellabs/yulp) +- [Yul+ Tanıtım Yazısı](https://medium.com/@fuellabs/introducing-yul-a-new-low-level-language-for-ethereum-aa64ce89512f) ### Örnek sözleşme {#example-contract-2} -Aşağıdaki basit örnek bir üs fonksiyonu uygular. `solc --strict-assembly --bin input.yul` ile derlenebilir. Örnek input.yul dosyasında depolanmalıdır. +Aşağıdaki basit örnek bir üs fonksiyonu uygular. `solc --strict-assembly --bin input.yul` kullanılarak derlenebilir. Örnek input.yul dosyasında depolanmalıdır. ``` { @@ -251,7 +265,7 @@ Aşağıdaki basit örnek bir üs fonksiyonu uygular. `solc --strict-assembly -- } ``` -Hâlihazırda akıllı sözleşmeler konusunda deneyimliyseniz, [buradan](https://solidity.readthedocs.io/en/latest/yul.html#complete-erc20-example) Yul'daki tam bir ERC20 uygulamasına ulaşabilirsiniz. +Akıllı sözleşmeler konusunda zaten deneyimliyseniz, Yul'da tam bir ERC20 uygulamasını [burada](https://solidity.readthedocs.io/en/latest/yul.html#complete-erc20-example) bulabilirsiniz. ## Fe {#fe} @@ -291,7 +305,7 @@ contract GuestBook: ``` -## Seçim yapmak {#how-to-choose} +## Nasıl seçilir {#how-to-choose} Her diğer programlama dilinde olduğu gibi, kişisel tercihlerin yanı sıra çoğunlukla doğru iş için doğru aracı seçmekle de ilgilidir. @@ -299,7 +313,7 @@ Eğer dillerden herhangi birini denemediyseniz burada akılda tutulabilecek birk ### Solidity'nin harika olan tarafı nedir? {#solidity-advantages} -- Eğer acemiyseniz, birçok öğretici ve öğrenim aracı bulunmaktadır. Bunun hakkında daha fazlasına [Kodlayarak Öğren](/developers/learning-tools/) bölümünden ulaşabilirsiniz. +- Eğer acemiyseniz, birçok öğretici ve öğrenim aracı bulunmaktadır. Bununla ilgili daha fazlasını [Kodlayarak Öğrenme](/developers/learning-tools/) bölümünde görebilirsiniz. - İyi geliştirici araçları bulunur. - Solidity büyük bir geliştirici topluluğuna sahiptir, bu da sorularınıza büyük ihtimalle hızlıca cevaplar bulabileceğiniz anlamına gelir. @@ -316,9 +330,9 @@ Eğer dillerden herhangi birini denemediyseniz burada akılda tutulabilecek birk ## Dil karşılaştırmaları {#language-comparisons} -Temel söz dizimi, sözleşme yaşam döngüsü, arayüzler, operatörler, veri yapıları, fonksiyonlar, kontrol akışı ve daha fazlasının karşılaştırmaları için [Auditless tarafından hazırlanan kopya kağıdına](https://reference.auditless.com/cheatsheet/) bakabilirsiniz +Temel söz dizimi, sözleşme yaşam döngüsü, arayüzler, operatörler, veri yapıları, fonksiyonlar, kontrol akışı ve daha fazlasının karşılaştırmaları için Auditless tarafından hazırlanan bu [kopya kağıdına](https://reference.auditless.com/cheatsheet/) göz atın. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [OpenZeppelin'den Solidity Sözleşmeleri Kütüphanesi](https://docs.openzeppelin.com/contracts/5.x/) -- [Örnekle Solidity](https://solidity-by-example.org) +- [OpenZeppelin tarafından Solidity Sözleşmeleri Kütüphanesi](https://docs.openzeppelin.com/contracts/5.x/) +- [Örneklerle Solidity](https://solidity-by-example.org) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/libraries/index.md b/public/content/translations/tr/developers/docs/smart-contracts/libraries/index.md index 2f2f7c8021d..70a15dbbe48 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/libraries/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/libraries/index.md @@ -1,26 +1,26 @@ --- -title: Akıllı sözleşme kütüphaneleri -description: +title: "Akıllı sözleşme kütüphaneleri" +description: "Ethereum geliştirme projelerinizi hızlandırmak için yeniden kullanılabilir akıllı sözleşme kütüphanelerini ve yapı taşlarını keşfedin." lang: tr --- Projenizdeki her akıllı sözleşmeyi sıfırdan yazmanız gerekmez. Projenize yeniden kullanılabilir yapı taşları sağlayarak her şeyi sıfırdan yapmanıza gerek bırakmayacak birçok açık kaynak akıllı sözleşme kütüphanesi bulunmaktadır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Akıllı sözleşme kütüphanelerine dalmadan önce, bir akıllı sözleşmenin yapısı hakkında derin bir anlayışa sahip olmanız iyi olur. Henüz buna sahip değilseniz [akıllı sözleşme anatomisine](/developers/docs/smart-contracts/anatomy/) gidin. +Akıllı sözleşme kütüphanelerine dalmadan önce, bir akıllı sözleşmenin yapısı hakkında derin bir anlayışa sahip olmanız iyi olur. Henüz yapmadıysanız [akıllı sözleşme anatomisi](/developers/docs/smart-contracts/anatomy/) sayfasına gidin. -## Kütüphanenin içindekiler {#whats-in-a-library} +## Bir kütüphanede neler var? {#whats-in-a-library} Genelde akıllı sözleşme kütüphanelerinde iki tür yapı taşı bulunur: sözleşmelerinize ekleyebileceğiniz yeniden kullanılabilir davranışlar ve çeşitli standartların uygulamaları. ### Davranışlar {#behaviors} -Büyük ihtimalle, akıllı sözleşmeler yazarken bir sözleşmede korunan işlemler gerçekleştirmek için bir _yönetici_ adresi atamak veya beklenmeyen bir sıkıntı esnasında acil bir _duraklatma_ düğmesi eklemek gibi benzer kalıpları sürekli yazıp durduğunuzu göreceksiniz. +Akıllı sözleşmeler yazarken, bir sözleşmede korumalı işlemleri gerçekleştirmek için bir _admin_ adresi atamak veya beklenmedik bir sorun durumunda acil bir _duraklatma_ düğmesi eklemek gibi benzer kalıpları tekrar tekrar yazdığınızı fark etme olasılığınız yüksektir. -Akıllı sözleşme kütüphaneleri, genellikle bu davranışların yeniden kullanılabilir uygulamalarını Solidity'de [kütüphane](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries) veya [kalıtım](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance) olarak saklarlar. +Akıllı sözleşme kütüphaneleri genellikle bu davranışların yeniden kullanılabilir uygulamalarını Solidity'de [kütüphaneler](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries) olarak veya [kalıtım](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance) yoluyla sağlar. -[OpenZeppelin Contracts kütüphanesinden](https://github.com/OpenZeppelin/openzeppelin-contracts) alınmış, [`Ownable` sözleşmesinin](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol) basitleştirilmiş hâli örnek olarak aşağıda sunulmuştur. Bu sözleşme, bir adresi bir sözleşmenin sahipliğine atar ve bir yönteme erişimi sadece adresin sahibiyle sınırlamak için bir niteleyici sağlar. +Örnek olarak, [OpenZeppelin Contracts kütüphanesinden](https://github.com/OpenZeppelin/openzeppelin-contracts) alınan ve bir adresi bir sözleşmenin sahibi olarak belirleyen ve bir yönteme erişimi yalnızca o sahiple kısıtlamak için bir değiştirici sağlayan [`Ownable` sözleşmesinin](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol) basitleştirilmiş bir sürümü aşağıdadır. ```solidity contract Ownable { @@ -31,41 +31,41 @@ contract Ownable { } modifier onlyOwner() { - require(owner == msg.sender, "Ownable: caller is not the owner"); + require(owner == msg.sender, "Ownable: çağıran kişi sahip değil"); _; } } ``` -Sözleşmenizde bunun gibi bir yapı taşı kullanmak istiyorsanız, ilk olarak onu içeri aktarmanız, sonrasında ise kendi sözleşmelerinizi onun üzerinden yapılandırmanız gerekir. Bu, temel `Ownable` sözleşmesinden sağlanan niteleyiciyi kendi ilşevlerinizi güvenli hâle getirmek için kullanmanıza izin verecektir. +Sözleşmenizde bunun gibi bir yapı taşı kullanmak istiyorsanız, ilk olarak onu içeri aktarmanız, sonrasında ise kendi sözleşmelerinizi onun üzerinden yapılandırmanız gerekir. Bu, kendi işlevlerinizi güvence altına almak için temel `Ownable` sözleşmesi tarafından sağlanan değiştiriciyi kullanmanıza olanak tanır. ```solidity -import ".../Ownable.sol"; // Path to the imported library +import ".../Ownable.sol"; // İçe aktarılan kütüphanenin yolu contract MyContract is Ownable { - // The following function can only be called by the owner + // Aşağıdaki işlev yalnızca sahip tarafından çağrılabilir function secured() onlyOwner public { msg.sender.transfer(1 ether); } } ``` -[SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) ya da [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html) de diğer ünlü örnekler arasındadır. Bunlar, dil tarafından sağlanmayan taşma kontrollü aritmetik fonksiyonlar sağlayan kütüphanelerdir (temel sözleşme yerine). Ana aritmetik işlemler yerine sözleşmenizi feci sonuçlar oluşturan taşmalardan korumak için bu kütüphanelerden birini kullanmak iyi bir yöntemdir! +Diğer bir popüler örnek [SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) veya [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html)'tir. Bunlar, dil tarafından sağlanmayan taşma kontrollü aritmetik fonksiyonlar sağlayan kütüphanelerdir (temel sözleşme yerine). Ana aritmetik işlemler yerine sözleşmenizi feci sonuçlar oluşturan taşmalardan korumak için bu kütüphanelerden birini kullanmak iyi bir yöntemdir! ### Standartlar {#standards} -[Birleştirilebilirliği ve birlikte çalışabilirliği](/developers/docs/smart-contracts/composability/) kolaylaştırmak için, Ethereum topluluğu **ERC** denilen birtakım standartlar belirlemiştir. Bunlar hakkında daha fazlasını [standartlar](/developers/docs/standards/) kısmında okuyabilirsiniz. +[Oluşturulabilirliği ve birlikte çalışabilirliği](/developers/docs/smart-contracts/composability/) kolaylaştırmak için Ethereum topluluğu, **ERC'ler** şeklinde çeşitli standartlar tanımlamıştır. Bunlar hakkında daha fazlasını [standartlar](/developers/docs/standards/) bölümünde okuyabilirsiniz. -Sözleşmelerinize bir ERC dahil ederken, kendi başınıza dağıtmaktansa standart uygulamalar aramak iyi bir fikirdir. Birçok akıllı sözleşme kütüphanesi en popüler ERC'ler için uygulamalar içerir. Örnek olarak, her yerde yaygın olan [ERC20 değiştirilebilir token standartı](/developers/tutorials/understand-the-erc-20-token-smart-contract/) [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md), [DappSys](https://github.com/dapphub/ds-token/) ve [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc20)'de bulunabilir. Ek olarak, bazı ERC'ler yerleşik olarak kurallı uygulamalar sağlarlar. +Sözleşmelerinize bir ERC dahil ederken, kendi başınıza dağıtmaktansa standart uygulamalar aramak iyi bir fikirdir. Birçok akıllı sözleşme kütüphanesi en popüler ERC'ler için uygulamalar içerir. Örneğin, yaygın olan [ERC20 değiştirilebilir jeton standardı](/developers/tutorials/understand-the-erc-20-token-smart-contract/) [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md), [DappSys](https://github.com/dapphub/ds-token) ve [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc20) kütüphanelerinde bulunabilir. Ek olarak, bazı ERC'ler yerleşik olarak kurallı uygulamalar sağlarlar. -Bazı ERC'lerin yekpare değil, başka ERC'lerin ekleri olduğunu söylemek gerekir. Örneğin [ERC2612](https://eips.ethereum.org/EIPS/eip-2612), kullanılabilirliğini geliştirmek için ERC20'ye bir eklenti ekler. +Bazı ERC'lerin yekpare değil, başka ERC'lerin ekleri olduğunu söylemek gerekir. Örneğin, [ERC2612](https://eips.ethereum.org/EIPS/eip-2612) kullanılabilirliğini artırmak için ERC20'ye bir uzantı ekler. -## Kütüphane ekleme {#how-to} +## Kütüphane nasıl eklenir {#how-to} -Her zaman dahil ettiğiniz kütüphanenin belgelerinde bulunan, projenin nasıl dahil edileceğine dair özel yönergelere başvurun. Birçok Solidity sözleşme kütüphanesi `npm` kullanılarak paketlenmiştir, bu yüzden onları sadece `npm install` ile indirebilirsiniz. Sözleşmeleri [derlemeye](/developers/docs/smart-contracts/compiling/) yarayan birçok araç, akıllı sözleşme kütüphaneleri için `node_modules` klasörünüze bakacaktır, bu yüzden aşağıdakileri yapabilirsiniz: +Her zaman dahil ettiğiniz kütüphanenin belgelerinde bulunan, projenin nasıl dahil edileceğine dair özel yönergelere başvurun. Birçok Solidity sözleşme kütüphanesi `npm` kullanılarak paketlenir, bu yüzden onları `npm install` komutuyla kurabilirsiniz. Sözleşmeleri [derlemek](/developers/docs/smart-contracts/compiling/) için kullanılan çoğu araç, akıllı sözleşme kütüphaneleri için `node_modules` klasörünüze bakar, bu yüzden aşağıdakileri yapabilirsiniz: ```solidity -// This will load the @openzeppelin/contracts library from your node_modules +// Bu, @openzeppelin/contracts kütüphanesini node_modules klasörünüzden yükleyecektir import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; contract MyNFT is ERC721 { @@ -73,13 +73,13 @@ contract MyNFT is ERC721 { } ``` -Kullandığınız yola bakmaksızın, bir kütüphane dahil ederken, her zaman gözünüz [dil](/developers/docs/smart-contracts/languages/) sürümünün üzerinde olsun. Misal, eğer sözleşmelerinizi Solidity 0.5'te yazıyorsanız Solidity 0.6 için olan bir kütüphaneyi kullanamazsınız. +Kullandığınız yöntem ne olursa olsun, bir kütüphane eklerken her zaman [dil](/developers/docs/smart-contracts/languages/) sürümüne dikkat edin. Misal, eğer sözleşmelerinizi Solidity 0.5'te yazıyorsanız Solidity 0.6 için olan bir kütüphaneyi kullanamazsınız. -## Ne zaman kullanmalı {#when-to-use} +## Ne zaman kullanılır {#when-to-use} Projeniz için bir akıllı sözleşme kütüphanesi kullanmanın birçok yararı vardır. İlk ve en önemlisi, kendiniz kodlamanızdansa size kullanıma hazır, sisteminize dahil edebileceğiniz yapı taşları sunarak zamandan tasarruf etmenizi sağlar. -Güvenlik ayrıca büyük bir artısıdır. Açık kaynak akıllı sözleşme kütüphaneleri sık sık ciddi ölçüde denetlenir. Birçok projenin onlara dayandığı ele alındığında, onların sürekli teftiş altında tutulması topluluk tarafından güçlü bir teşvik bulmaktadır. Uygulama kodunda hatalar bulmak, yeniden kullanılabilir sözleşme kütüphanelerinden çok daha yaygındır. Bazı kütüphaneler, ek güvenlik için [dış denetimlerden](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits) de geçer. +Güvenlik ayrıca büyük bir artısıdır. Açık kaynak akıllı sözleşme kütüphaneleri sık sık ciddi ölçüde denetlenir. Birçok projenin onlara dayandığı ele alındığında, onların sürekli teftiş altında tutulması topluluk tarafından güçlü bir teşvik bulmaktadır. Uygulama kodunda hatalar bulmak, yeniden kullanılabilir sözleşme kütüphanelerinden çok daha yaygındır. Bazı kütüphaneler ek güvenlik için [harici denetimlerden](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits) de geçer. Ancak, akıllı sözleşme kütüphanelerini kullanmak aşina olmadığınız kodu projenize dahil etme riskini de beraberinde getirir. Bir sözleşmeyi aktarmak ve projenize doğrudan dahil etmek çekici gelebilir, ancak o sözleşmenin ne yaptığı hakkında iyi bir anlayışa sahip olmadan, farkında olmadan sisteminizde beklenmeyen davranışlara bağlı olarak bir soruna neden olabilirsiniz. Her zaman dahil ettiğiniz kodun belgelerini okuduğunuzdan emin olun ve kodu projenizin bir parçası yapmadan önce gözden geçirin! @@ -87,31 +87,31 @@ Son olarak, bir kütüphaneyi dahil edip etmeyeceğinize karar verirken, onun ge ## İlgili araçlar {#related-tools} -**OpenZeppelin Contracts -** **_Güvenli akıllı sözleşme geliştirme için en popüler kütüphanedir._** +**OpenZeppelin Contracts -** **_Güvenli akıllı sözleşme geliştirme için en popüler kütüphane._** -- [Belgeler](https://docs.openzeppelin.com/contracts/) +- [Dokümantasyon](https://docs.openzeppelin.com/contracts/) - [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts) - [Topluluk Forumu](https://forum.openzeppelin.com/c/general/16) -**DappSys -** **_Akıllı sözleşmeler için güvenli, basit ve esnek yapılı yapı taşlarıdır._** +**DappSys -** **_Akıllı sözleşmeler için güvenli, basit, esnek yapı taşları._** -- [Belgeler](https://dappsys.readthedocs.io/) +- [Dokümantasyon](https://dappsys.readthedocs.io/) - [GitHub](https://github.com/dapphub/dappsys) -**HQ20 -** **_Gerçek dünya için çok özellikli dağıtılmış uygulamalar inşa etmenize yardımcı olacak; sözleşmeleri, kütüphaneleri ve örnekleri olan bir Solidity projesi._** +**HQ20 -** **_Gerçek dünya için tam özellikli dağıtık uygulamalar oluşturmanıza yardımcı olacak sözleşmeler, kütüphaneler ve örnekler içeren bir Solidity projesi._** - [GitHub](https://github.com/HQ20/contracts) **thirdweb Solidity SDK -** **_Özel akıllı sözleşmeleri verimli bir şekilde oluşturmak için gereken araçları sağlar_** -- [Dokümanlar](https://portal.thirdweb.com/contracts/build/overview) +- [Dokümantasyon](https://portal.thirdweb.com/contracts/build/overview) - [GitHub](https://github.com/thirdweb-dev/contracts) -## İlgili eğitimler {#related-tutorials} +## İlgili öğreticiler {#related-tutorials} -- [Ethereum geliştiricilerinin güvenlik konusunda dikkat etmesi gereken hususlar](/developers/docs/smart-contracts/security/) _– Akıllı sözleşme oluşturma sırasında, kütüphane kullanımı da dahil olmak üzere güvenlik konusunda dikkat edilmesi gereken hususlar hakkında bir öğretici._ -- [ERC-20 jeton akıllı sözleşmesini anlamak](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _-Birden fazla kütüphane tarafından sağlanan, ERC20 standardı hakkında bir öğretici._ +- [Ethereum geliştiricileri için güvenlik konuları](/developers/docs/smart-contracts/security/) _– Kütüphane kullanımı da dahil olmak üzere akıllı sözleşmeler oluştururken dikkat edilmesi gereken güvenlik konuları üzerine bir öğretici._ +- [ERC-20 jeton akıllı sözleşmesini anlama](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _-Birden fazla kütüphane tarafından sağlanan ERC20 standardı hakkında bir öğretici._ -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -_Size yardımcı olan bir topluluk kaynağı biliyor musunuz? Bu sayfayı düzenleyin ve ekleyin!_ +_Size yardımcı olan bir topluluk kaynağı mı biliyorsunuz? Bu sayfayı düzenleyin ve onu ekleyin!_ diff --git a/public/content/translations/tr/developers/docs/smart-contracts/naming/index.md b/public/content/translations/tr/developers/docs/smart-contracts/naming/index.md new file mode 100644 index 00000000000..a066bd9b452 --- /dev/null +++ b/public/content/translations/tr/developers/docs/smart-contracts/naming/index.md @@ -0,0 +1,101 @@ +--- +title: "Akıllı sözleşmeleri adlandırma" +description: "ENS ile Ethereum akıllı sözleşmelerini adlandırmak için en iyi uygulamalar" +lang: tr +--- + +Akıllı sözleşmeler, Ethereum'un merkeziyetsiz altyapısının temel taşıdır ve otonom uygulamaları ve protokolleri mümkün kılar. Ancak sözleşme yetenekleri geliştikçe bile, kullanıcılar ve geliştiriciler bu sözleşmeleri tanımlamak ve referans göstermek için hâlâ ham onaltılık adreslere güvenmektedir. + +[Ethereum İsim Servisi (ENS)](https://ens.domains/) ile akıllı sözleşmeleri adlandırmak, onaltılık sözleşme adreslerini ortadan kaldırarak kullanıcı deneyimini iyileştirir ve adres zehirlenmesi ve sahtekarlık saldırıları gibi saldırılardan kaynaklanan riski azaltır. Bu kılavuz, akıllı sözleşmeleri adlandırmanın neden önemli olduğunu, nasıl uygulanabileceğini ve süreci basitleştirmek ve geliştiricilerin bu uygulamayı benimsemesine yardımcı olmak için [Enscribe](https://www.enscribe.xyz) gibi mevcut araçları açıklamaktadır. + +## Akıllı sözleşmeler neden adlandırılmalı? {#why-name-contracts} + +### İnsan tarafından okunabilir tanımlayıcılar {#human-readable-identifiers} + +Geliştiriciler ve kullanıcılar, `0x8f8e...f9e3` gibi anlaşılmaz sözleşme adresleriyle etkileşime girmek yerine, `v2.myapp.eth` gibi insanlar tarafından okunabilir isimleri kullanabilirler. Bu, akıllı sözleşme etkileşimlerini basitleştirir. + +Bu, Ethereum adresleri için merkeziyetsiz bir adlandırma hizmeti sağlayan [Ethereum İsim Servisi](https://ens.domains/) tarafından mümkün kılınmıştır. Bu durum, Alan Adı Servisi'nin (DNS) internet kullanıcılarının `104.18.176.152` gibi bir IP adresi yerine ethereum.org gibi bir isim kullanarak ağ adreslerine erişmesini sağlamasına benzer. + +### Geliştirilmiş güvenlik ve güven {#improved-security-and-trust} + +Adlandırılmış sözleşmeler, yanlış adrese yapılan yanlış işlemleri azaltmaya yardımcı olur. Ayrıca kullanıcıların belirli uygulamalara veya markalara bağlı sözleşmeleri tanımlamasına yardımcı olurlar. Bu, özellikle isimler `uniswap.eth` gibi tanınmış üst alan adlarına eklendiğinde bir itibar güveni katmanı ekler. + +Ethereum adreslerinin 42 karakter uzunluğunda olması nedeniyle, kullanıcıların adreslerdeki birkaç karakterin değiştirildiği küçük değişiklikleri fark etmeleri çok zordur. Örneğin `0x58068646C148E313CB414E85d2Fe89dDc3426870` gibi bir adres, cüzdanlar gibi kullanıcıya yönelik uygulamalar tarafından normalde `0x580...870` olarak kısaltılır. Bir kullanıcının birkaç karakterin değiştirildiği kötü niyetli bir adresi fark etmesi pek olası değildir. + +Bu tür bir teknik, kullanıcıların doğru adresle etkileşime girdiklerine veya para gönderdiklerine inanmaya yönlendirildiği, ancak aslında adresin yalnızca doğru adrese benzediği, ancak aynı olmadığı adres sahtekarlığı ve zehirlenme saldırılarında kullanılır. + +Cüzdanlar ve sözleşmeler için ENS adları bu tür saldırılara karşı koruma sağlar. DNS sahtekarlığı saldırıları gibi, ENS sahtekarlığı saldırıları da barındırılabilir, ancak bir kullanıcının onaltılık bir adresteki küçük bir değişikliği fark etmektense bir ENS adındaki yazım hatasını fark etmesi daha olasıdır. + +### Cüzdanlar ve gezginler için daha iyi kullanıcı deneyimi {#better-ux} + +Bir akıllı sözleşme bir ENS adı ile yapılandırıldığında, cüzdanlar ve blokzincir gezginleri gibi uygulamaların, onaltılık adresler yerine akıllı sözleşmeler için ENS adlarını görüntülemesi mümkündür. Bu, kullanıcılar için önemli bir kullanıcı deneyimi (UX) iyileştirmesi sağlar. + +Örneğin, Uniswap gibi bir uygulama ile etkileşime girerken, kullanıcılar genellikle etkileşimde bulundukları uygulamanın `uniswap.org` web sitesinde barındırıldığını görürler, ancak Uniswap akıllı sözleşmelerini ENS ile adlandırmadıysa onlara onaltılık bir sözleşme adresi sunulur. Sözleşme adlandırılmışsa, bunun yerine çok daha kullanışlı olan `v4.contracts.uniswap.eth`'i görebilirler. + +## Dağıtımda adlandırma ve dağıtım sonrası adlandırma {#when-to-name} + +Akıllı sözleşmelerin adlandırılabileceği iki nokta vardır: + +- **Dağıtım zamanında**: sözleşme dağıtılırken ona bir ENS adı atamak. +- **Dağıtımdan sonra**: mevcut bir sözleşme adresini yeni bir ENS adına eşlemek. + +Her iki yaklaşım da ENS kayıtları oluşturabilmek ve ayarlayabilmek için bir ENS alan adına sahip veya yönetici erişimine sahip olmayı gerektirir. + +## Sözleşmeler için ENS adlandırması nasıl çalışır? {#how-ens-naming-works} + +ENS adları zincir üstünde saklanır ve ENS çözümleyicileri aracılığıyla Ethereum adreslerine çözümlenir. Bir akıllı sözleşmeyi adlandırmak için: + +1. Bir üst ENS alan adını (ör. `myapp.eth`) kaydedin veya kontrol edin +2. Bir alt alan adı oluşturun (ör. `v1.myapp.eth`) +3. Alt alan adının `address` kaydını sözleşme adresine ayarlayın +4. Adın adresi aracılığıyla bulunabilmesi için sözleşmenin ters kaydını ENS'e ayarlayın + +ENS adları hiyerarşiktir ve sınırsız sayıda alt adı destekler. Bu kayıtları ayarlamak genellikle ENS kayıt defteri ve genel çözümleyici sözleşmeleriyle etkileşime girmeyi içerir. + +## Sözleşmeleri adlandırma araçları {#tools} + +Akıllı sözleşmeleri adlandırmak için iki yaklaşım vardır. Ya bazı manuel adımlarla [ENS Uygulamasını](https://app.ens.domains) kullanmak ya da [Enscribe](https://www.enscribe.xyz) kullanmak. Bunlar aşağıda özetlenmiştir. + +### Manuel ENS kurulumu {#manual-ens-setup} + +[ENS Uygulamasını](https://app.ens.domains) kullanarak, geliştiriciler manuel olarak alt adlar oluşturabilir ve ileri adres kayıtlarını ayarlayabilirler. Ancak, ENS uygulaması aracılığıyla ad için ters kaydı ayarlayarak bir akıllı sözleşme için birincil bir ad ayarlayamazlar. [ENS belgelerinde](https://docs.ens.domains/web/naming-contracts/) yer alan manuel adımlar atılmalıdır. + +### Enscribe {#enscribe} + +[Enscribe](https://www.enscribe.xyz), ENS ile akıllı sözleşme adlandırmayı basitleştirir ve kullanıcıların akıllı sözleşmelere olan güvenini artırır. Şunları sağlar: + +- **Atomik dağıtım ve adlandırma**: Yeni bir sözleşme dağıtırken bir ENS adı atayın +- **Dağıtım sonrası adlandırma**: Önceden dağıtılmış sözleşmelere adlar ekleyin +- **Çoklu zincir desteği**: ENS'nin desteklendiği Ethereum ve L2 ağlarında çalışır +- **Sözleşme doğrulama verileri**: Kullanıcıların güvenini artırmak için birden çok kaynaktan çekilen sözleşme doğrulama verilerini içerir + +Enscribe, kullanıcılar tarafından sağlanan ENS adlarını veya kullanıcının bir ENS adı yoksa kendi alan adlarını destekler. + +Akıllı sözleşmeleri adlandırmaya ve görüntülemeye başlamak için [Enscribe Uygulamasına](https://app.enscribe.xyz) erişebilirsiniz. + +## En iyi uygulamalar {#best-practices} + +- Sözleşme yükseltmelerini şeffaf hale getirmek için `v1.myapp.eth` gibi **açık, sürümlenmiş adlar kullanın** +- Cüzdanlar ve blokzincir gezginleri gibi uygulamalarda görünürlük için sözleşmeleri ENS adlarına bağlamak amacıyla **ters kayıtları ayarlayın**. +- Sahiplikteki kazara değişiklikleri önlemek istiyorsanız **süre sonlarını yakından izleyin** +- Kullanıcıların, adlandırılmış sözleşmenin beklendiği gibi davrandığına güvenebilmesi için **sözleşme kaynağını doğrulayın** + +## Riskler {#risks} + +Akıllı sözleşmeleri adlandırmak, Ethereum kullanıcıları için önemli faydalar sağlar, ancak ENS alan adı sahipleri yönetimleri konusunda dikkatli olmalıdır. Önemli riskler şunları içerir: + +- **Süre sonu**: Tıpkı DNS adları gibi, ENS adları kayıtları da sınırlı sürelidir. Bu nedenle, sahiplerin alan adlarının son kullanma tarihlerini izlemeleri ve süreleri dolmadan çok önce yenilemeleri hayati önem taşır. Hem ENS Uygulaması hem de Enscribe, son kullanma tarihi yaklaştığında alan adı sahipleri için görsel göstergeler sağlar. +- **Sahiplik değişikliği**: ENS kayıtları Ethereum'da değiştirilemez jetonlar olarak temsil edilir; burada belirli bir `.eth` alan adının sahibi, ilişkili değiştirilemez jetonu elinde bulundurur. Bu nedenle, farklı bir hesap bu değiştirilemez jetonun sahipliğini alırsa, yeni sahip uygun gördüğü şekilde herhangi bir ENS kaydını değiştirebilir. + +Bu tür riskleri azaltmak için, `.eth` 2. seviye alan adlarının (2LD) sahip hesabı, sözleşme adlandırmasını yönetmek için oluşturulan alt alan adlarına sahip çoklu imzalı bir cüzdan aracılığıyla güvence altına alınmalıdır. Bu şekilde, alt alan adı düzeyinde sahiplikte herhangi bir kazara veya kötü niyetli değişiklik olması durumunda, bunlar 2LD sahibi tarafından geçersiz kılınabilir. + +## Sözleşme adlandırmanın geleceği {#future} + +Tıpkı alan adlarının web'de IP adreslerinin yerini alması gibi, sözleşme adlandırma da merkeziyetsiz uygulama geliştirme için en iyi uygulama haline geliyor. Cüzdanlar, gezginler ve gösterge panoları gibi daha fazla altyapı, sözleşmeler için ENS çözümlemesini entegre ettikçe, adlandırılmış sözleşmeler ekosistem genelinde güvenliği artıracak ve hataları azaltacaktır. + +Akıllı sözleşmeleri tanımayı ve üzerinde mantık yürütmeyi kolaylaştırarak, adlandırma, Ethereum'daki kullanıcılar ve uygulamalar arasındaki boşluğu kapatmaya yardımcı olur, hem güvenliği hem de kullanıcılar için kullanıcı deneyimini iyileştirir. + +## Daha fazla kaynak {#further-reading} + +- [ENS ile Akıllı Sözleşmeleri Adlandırma](https://docs.ens.domains/web/naming-contracts/) +- [Enscribe ile Akıllı Sözleşmeleri Adlandırma](https://www.enscribe.xyz/docs). diff --git a/public/content/translations/tr/developers/docs/smart-contracts/security/index.md b/public/content/translations/tr/developers/docs/smart-contracts/security/index.md index 302da679740..fc756ab30cb 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/security/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/security/index.md @@ -1,6 +1,6 @@ --- -title: Akıllı sözleşme güvenliği -description: Güvenli Ethereum akıllı sözleşmeleri oluşturma yönergelerine genel bakış +title: "Akıllı sözleşme güvenliği" +description: "Güvenli Ethereum akıllı sözleşmeleri oluşturma yönergelerine genel bakış" lang: tr --- @@ -8,19 +8,19 @@ Akıllı sözleşmeler son derece esnektir ve blokzincirlere dağıtılan kod te Ethereum gibi halka açık blokzincirler, akıllı sözleşmelerin güvenliğini sağlama sorununu daha da karmaşık hale getirir. Dağıtılmış sözleşme kodu _genellikle_ güvenlik açıklarını kapatmak için değiştirilemez, ayrıca akıllı sözleşmelerden çalınan varlıkların takibi aşırı derecede zordur ve çoğunlukla değiştirilemezlik kaynaklı olarak geri alınamaz. -Rakamlar değişkenlik gösterse de, akıllı sözleşmelerdeki güvenlik açıklarından kaynaklı kaybedilen veya çalınan toplam değerin miktarının 1 milyar doları rahatlıkla aştığı tahmin edilmektedir. Bu, [DAO hacki](https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/) (3.6 milyon ETH çalınmıştır; değeri, günümüz fiyatlarıyla 1 milyar doların üzerindedir), [Parity çoklu imza cüzdanı hacki](https://www.coindesk.com/markets/2017/07/19/30-million-ether-reported-stolen-due-to-parity-wallet-breach) (Hackerlara 30 milyon dolar kaybedilmiştir), [Parity donmuş cüzdan sorunu](https://www.theguardian.com/technology/2017/nov/08/cryptocurrency-300m-dollars-stolen-bug-ether) (300 milyon dolardan fazla ETH sonsuza kadar kilitlenmiştir) gibi yüksek profilli olayları içerir. +Rakamlar değişkenlik gösterse de, akıllı sözleşmelerdeki güvenlik açıklarından kaynaklı kaybedilen veya çalınan toplam değerin miktarının 1 milyar doları rahatlıkla aştığı tahmin edilmektedir. Buna [DAO hack'i](https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/) (bugünkü fiyatlarla 1 milyar doların üzerinde değere sahip 3,6 milyon ETH çalındı), [Parity çoklu imzalı cüzdan hack'i](https://www.coindesk.com/markets/2017/07/19/30-million-ether-reported-stolen-due-to-parity-wallet-breach) (bilgisayar korsanları tarafından 30 milyon dolar kaybedildi) ve [Parity donmuş cüzdan sorunu](https://www.theguardian.com/technology/2017/nov/08/cryptocurrency-300m-dollars-stolen-bug-ether) (300 milyon doların üzerinde ETH sonsuza kadar kilitlendi) gibi yüksek profilli olaylar dahildir. Sayılan sorunlar geliştiricilerin güvenli, güçlü ve sağlam akıllı sözleşmeler oluşturmaya çaba harcamasını zorunlu kılmaktadır. Akıllı sözleşme güvenliği ciddi bir iştir ve her geliştiricinin öğrenmesi gerekir. Bu kılavuz, Ethereum geliştiricilerinin güvenlik konusunda dikkat etmesi gereken hususları ele alacak ve akıllı sözleşme güvenliğini geliştirmeye yönelik kaynakları inceleyecektir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Güvenlik konusuna girmeden önce [akıllı sözleşme geliştirmenin temelleri](/developers/docs/smart-contracts/) ile aşina olduğunuzdan emin olun. +Güvenlik konusuna girmeden önce [akıllı sözleşme geliştirmenin temellerine](/developers/docs/smart-contracts/) aşina olduğunuzdan emin olun. ## Güvenli Ethereum akıllı sözleşmeleri oluşturma yönergeleri {#smart-contract-security-guidelines} -### 1. Uygun erişim kontrolleri tasarlayın {#design-proper-access-controls} +### 1. Uygun erişim denetimleri tasarlayın {#design-proper-access-controls} -Akıllı sözleşmelerde, `public` veya `external` olarak işaretlenmiş olan fonksiyonlar herhangi bir harici olarak sahiplenilmiş hesap (EOA'lar) veya sözleşme hesabı tarafından çağırılabilir. Başkalarının sözleşmeniz ile etkileşime girmesini istiyorsanız fonksiyonlar için herkese açık görülebilirliği belirtmeniz gereklidir. Ancak `private` olarak işaretlenmiş olan fonksiyonlar harici hesaplardan değil, sadece akıllı sözleşmenin içinden çağırılabilir. Her ağ katılımcısına sözleşme fonksiyonlarına erişim hakkı vermek, özellikle de hassas işlemleri herkesin yapabileceği anlamına geliyorsa (örneğin yeni jetonlar basmak) sorunlar yaratabilir. +Akıllı sözleşmelerde, `public` veya `external` olarak işaretlenmiş olan fonksiyonlar herhangi bir harici olarak sahiplenilmiş hesap (EOA'lar) veya sözleşme hesabı tarafından çağırılabilir. Başkalarının sözleşmeniz ile etkileşime girmesini istiyorsanız fonksiyonlar için herkese açık görülebilirliği belirtmeniz gereklidir. Ancak `private` olarak işaretlenmiş olan fonksiyonlar harici hesaplardan değil, sadece akıllı sözleşmenin içinden çağrılabilir. Her ağ katılımcısına sözleşme fonksiyonlarına erişim hakkı vermek, özellikle de hassas işlemleri herkesin yapabileceği anlamına geliyorsa (örneğin yeni jetonlar basmak) sorunlar yaratabilir. Akıllı sözleşme fonksiyonlarının izinsiz kullanımını engellemek için güvenli erişim kontrolleri uygulamak şarttır. Erişim kontrol mekanizmaları, bir akıllı sözleşmedeki belirli fonksiyonları kullanma olanağını sözleşmeyi yönetmekten sorumlu olan hesaplar gibi onaylı varlıklar ile sınırlar. **Sahiplenilebilir desen** ve **rol tabanlı kontrol**, akıllı sözleşmelerde erişim kontrolü uygulamaya yönelik iki kullanışlı desendir: @@ -40,9 +40,9 @@ Güvenli erişim kontrolü uygulamaya yönelik diğer bir yaklaşım ise sözle Erişim kontrolü için çoklu imza kullanmak, hedef sözleşme üzerinde yapılacak eylemlerin birden fazla tarafın iznini gerektirmesi nedeniyle ekstra bir güvenlik katmanı sağlar. Bu, özellikle sahiplenilebilir desenin kullanılması zorunluysa kullanışlıdır, çünkü bir saldırganın veya içeriden kötü niyetli birinin hassas sözleşme fonksiyonlarını kötü amaçlar için manipüle etmesini daha da zorlaştırır. -### 2. Sözleşme operasyonlarını korumak için require(), assert() ve revert() ifadelerini kullanın {#use-require-assert-revert} +### 2. Sözleşme operasyonlarını korumak için `require()`, `assert()` ve `revert()` ifadelerini kullanın {#use-require-assert-revert} -Belirtildiği gibi, akıllı sözleşmenizdeki herkese açık fonksiyonları blokzincire dağıtıldıktan sonra herkes çağırabilir. Harici hesapların bir sözleşme ile nasıl etkileşime geçeceğini önceden bilemeyeceğiniz için dağıtmadan önce sorunlu işlemlere karşı dahili önlemleri uygulamaya koymak idealdir. Akıllı sözleşmelerde yürütmenin bazı gereklilikleri başarıyla karşılayamadığı durumlarda istisnaları tetiklemek ve durum değişikliklerini geri almak için doğru davranışları `require()`, `assert()`, ve `revert()` ifadelerini kullanarak uygulatabilirsiniz. +Belirtildiği gibi, akıllı sözleşmenizdeki herkese açık fonksiyonları blokzincire dağıtıldıktan sonra herkes çağırabilir. Harici hesapların bir sözleşme ile nasıl etkileşime geçeceğini önceden bilemeyeceğiniz için dağıtmadan önce sorunlu işlemlere karşı dahili önlemleri uygulamaya koymak idealdir. Akıllı sözleşmelerde yürütmenin bazı gereklilikleri başarıyla karşılayamadığı durumlarda istisnaları tetiklemek ve durum değişikliklerini geri almak için doğru davranışları `require()`, `assert()` ve `revert()` ifadelerini kullanarak uygulatabilirsiniz. **`require()`**: `require`, fonksiyonların başlangıcında tanımlanır ve önceden belirlenmiş koşulların çağrılan fonksiyon yürütülmeden önce karşılanmasını sağlar. Bir `require` ifadesi, bir fonksiyona devam etmeden önce kullanıcı girdilerini doğrulamak, durum değişkenlerini kontrol etmek veya çağıran hesabın kimliğini doğrulamak için kullanılabilir. @@ -58,8 +58,8 @@ contract VendingMachine { error Unauthorized(); function buy(uint amount) public payable { if (amount > msg.value / 2 ether) - revert("Not enough Ether provided."); - // Perform the purchase. + revert("Yeterli Ether sağlanmadı."); + // Satın alma işlemini gerçekleştirin. } function withdraw() public { if (msg.sender != owner) @@ -70,19 +70,19 @@ contract VendingMachine { } ``` -### 3. Akıllı sözleşmeleri test edin ve kod doğruluğunu onaylayın {#test-smart-contracts-and-verify-code-correctness} +### 3. Akıllı sözleşmeleri test edin ve kodun doğruluğunu onaylayın {#test-smart-contracts-and-verify-code-correctness} -[Ethereum Sanal Makinası](/developers/docs/evm/)'nda çalışan kodun değiştirilemezliği, akıllı sözleşmelerin geliştirme aşamasında daha yüksek seviyede bir kalite kontrole ihtiyaç duyduğunu gösterir. Sözleşmeyi kapsamlı bir şekilde test etmek ve beklenmeyen bir sonuç olup olmadığını görmek için gözlemlemek, güvenliği büyük oranda artırır ve uzun vadede kullanıcılarınızı korur. +[Ethereum Sanal Makinesi'nde](/developers/docs/evm/) çalışan kodun değiştirilemezliği, akıllı sözleşmelerin geliştirme aşamasında daha yüksek seviyede bir kalite değerlendirmesi gerektirdiği anlamına gelir. Sözleşmeyi kapsamlı bir şekilde test etmek ve beklenmeyen bir sonuç olup olmadığını görmek için gözlemlemek, güvenliği büyük oranda artırır ve uzun vadede kullanıcılarınızı korur. -Sık kullanılan yöntem, sözleşmenin kullanıcılardan alması beklenen taklit verileri kullanarak küçük birim testleri yazmaktır. [Birim testi yapmak](/developers/docs/smart-contracts/testing/#unit-testing), bazı fonksiyonların çalışıp çalışmadığını test etmek ve bir akıllı sözleşmenin beklendiği gibi çalıştığından emin olmak açısından kullanışlıdır. +Sık kullanılan yöntem, sözleşmenin kullanıcılardan alması beklenen taklit verileri kullanarak küçük birim testleri yazmaktır. [Birim testi](/developers/docs/smart-contracts/testing/#unit-testing) yapmak, bazı fonksiyonların çalışıp çalışmadığını test etmek ve bir akıllı sözleşmenin beklendiği gibi çalıştığından emin olmak açısından kullanışlıdır. İzole şekilde kullanıldığında birim testi yapmak maalesef akıllı sözleşme güvenliğini geliştirmekte minimal seviyede etkilidir. Bir birim testi, bir fonksiyonun taklit veriler için düzgün şekilde yürütüldüğünü kanıtlayabilse de, birim testleri sadece yazılan testler kadar etkilidir. Bu, akıllı sözleşmenizin güvenliğine zarar verebilecek eksik uç durumlarını ve güvenlik açıklarını tespit etmeyi zorlaştırır. -Birim testini [statik ve dinamik analiz](/developers/docs/smart-contracts/testing/#static-dynamic-analysis) kullanarak özellik tabanlı test ile birleştirmek daha doğru bir yaklaşımdır. Statik analiz, ulaşılabilir program durumlarını ve yürütme yollarını analiz etmek için [kontrol akış grafikleri](https://en.wikipedia.org/wiki/Control-flow_graph) ve [soyut söz dizimi ağaçları](https://deepsource.io/glossary/ast/) gibi düşük seviye gösterimlere dayanır. Bu arada, [akıllı sözleşme bulanıklaştırma](https://www.cyfrin.io/blog/smart-contract-fuzzing-and-invariants-testing-foundry) gibi dinamik analiz teknikleri, sözleşme kodunu rastgele giriş değerleriyle yürüterek güvenlik özelliklerini ihlal eden işlemleri tespit eder. +Birim testini [statik ve dinamik analiz](/developers/docs/smart-contracts/testing/#static-dynamic-analysis) kullanarak özellik tabanlı test ile birleştirmek daha doğru bir yaklaşımdır. Statik analiz, ulaşılabilir program durumlarını ve yürütme yollarını analiz etmek için [kontrol akış grafikleri](https://en.wikipedia.org/wiki/Control-flow_graph) ve [soyut söz dizimi ağaçları](https://deepsource.io/glossary/ast/) gibi düşük seviyeli gösterimlere dayanır. Bu arada, [akıllı sözleşme bulanıklaştırma (fuzzing)](https://www.cyfrin.io/blog/smart-contract-fuzzing-and-invariants-testing-foundry) gibi dinamik analiz teknikleri, sözleşme kodunu rastgele giriş değerleriyle yürüterek güvenlik özelliklerini ihlal eden işlemleri tespit eder. [Resmi doğrulama](/developers/docs/smart-contracts/formal-verification), akıllı sözleşmelerdeki güvenlik özelliklerini doğrulamaya yönelik başka bir tekniktir. Sıradan testlerin aksine, resmi doğrulama bir akıllı sözleşmede hata bulunmadığını kesin bir şekilde kanıtlayabilir. Bu, istenen güvenlik özelliklerini belirleyen bir resmi spesifikasyon oluşturarak ve sözleşmelerin resmi bir modelinin bu spesifikasyona uyduğu kanıtlanarak gerçekleştirilir. -### 4. Kodunuz için bağımsız bir inceleme yapılmasını talep edin {#get-independent-code-reviews} +### 4. Kodunuzun bağımsız bir şekilde gözden geçirilmesini isteyin {#get-independent-code-reviews} Sözleşmenizi test ettikten sonra başkalarından herhangi bir güvenlik sorunu için kaynak koduna bakmalarını istemek doğru olur. Test etmek, bir akıllı sözleşmedeki her hatayı ortaya çıkarmayacaktır, ancak bağımsız bir inceleme yaptırmak güvenlik açıklarının tespit edilmesi ihtimalini artırır. @@ -99,7 +99,7 @@ Bununla birlikte, denetimleri sihirli değnek gibi görmemelisiniz. Akıllı sö Bir hata ödülü programı oluşturmak, harici kod incelemelerinin uygulamaya koymaya yönelik başka bir yaklaşımdır. Hata ödülü, bir uygulamada güvenlik açığı bulan kişilere (genelde beyaz şapkalı hackerlar) verilen para cinsinden bir ödüldür. -Düzgün şekilde kullanıldığında, hata ödülleri hacker topluluğunun üyelerine kodunuzda kritik hatalar bulunup bulunmadığını incelemeleri için bir teşvik sunar. Bunun gerçek hayattaki örneklerinden biri, Ethereum üzerinde çalışan bir [Katman 2](/layer-2/) protokolü olan [Optimism](https://www.optimism.io/) üzerinde bir saldırganın sınırsız miktarda Ether yaratabilmesine olanak tanıyan "sınırsız para hatası"dır. Neyse ki bir beyaz şapkalı hacker [hatayı bulmuş](https://www.saurik.com/optimism.html) ve takıma bildirmiş, [bu süreçte de büyük bir ödeme almıştır](https://cryptoslate.com/critical-bug-in-ethereum-l2-optimism-2m-bounty-paid/). +Düzgün şekilde kullanıldığında, hata ödülleri hacker topluluğunun üyelerine kodunuzda kritik hatalar bulunup bulunmadığını incelemeleri için bir teşvik sunar. Bunun gerçek hayattaki örneklerinden biri, Ethereum üzerinde çalışan bir [Katman 2](/layer-2/) protokolü olan [Optimism](https://www.optimism.io/) üzerinde bir saldırganın sınırsız miktarda ether yaratabilmesine olanak tanıyan "sınırsız para hatası"dır. Neyse ki, beyaz şapkalı bir bilgisayar korsanı [kusuru keşfetti](https://www.saurik.com/optimism.html) ve ekibe bildirdi, [bu süreçte büyük bir ödeme kazandı](https://cryptoslate.com/critical-bug-in-ethereum-l2-optimism-2m-bounty-paid/). Bir hata ödülü programının ödemesini ilgili fonların miktarı ile orantılı bir şekilde ayarlamak kullanışlı bir stratejidir. “[Hata ödülünü ölçeklendirme](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)” olarak tanımlanan bu yaklaşım, kişilerin güvenlik açıklarını istismar etmek yerine sorumlu şekilde bildirmesi için parasal teşvikler sağlar. @@ -113,7 +113,7 @@ Denetimlerin ve hata ödüllerinin varlığı, yüksek kalitede kod yazma soruml - Çekme isteklerinin en az bir bağımsız denetçisi olduğundan emin olun; bir projede tek başınıza çalışıyorsanız, başka geliştiriciler bulmayı ve kod incelemesi alışverişinde bulunmayı düşünün -- Akıllı sözleşmeleri test etmek, derlemek ve dağıtmak için bir [geliştirme ortamı](/developers/docs/frameworks/) kullanın +- Akıllı sözleşmeleri test etmek, derlemek, dağıtmak için bir [geliştirme ortamı](/developers/docs/frameworks/) kullanın - Kodunuzu [Cyfrin Aderyn](https://github.com/Cyfrin/aderyn), Mythril ve Slither gibi temel kod analiz araçlarından geçirin. İdeal olarak, bunu her çekme isteği birleştirmesinden önce yapmalı ve çıktılardaki farkları karşılaştırmalısınız @@ -121,7 +121,7 @@ Denetimlerin ve hata ödüllerinin varlığı, yüksek kalitede kod yazma soruml - Kodunuzu düzgün biçimde belgelendirin ([NatSpec](https://solidity.readthedocs.io/en/develop/natspec-format.html) kullanın) ve sözleşme yapısı hakkındaki detayları anlaşılabilir bir dille açıklayın. Bu, başkalarının sizin kodunuzu denetlemesini ve incelemesini kolaylaştıracaktır. -### 6. Güçlü olağanüstü durum kurtarma planları uygulayın {#implement-disaster-recovery-plans} +### 6. Sağlam felaket kurtarma planları uygulayın {#implement-disaster-recovery-plans} Güvenli erişim kontrolleri tasarlamak, fonksiyon değiştiricileri uygulamak ve diğer öneriler, akıllı sözleşme güvenliğini artırabilir ancak kötü niyetli saldırıların gerçekleşme ihtimalini sıfıra indirgeyemez. Güvenli akıllı sözleşmeler oluşturmak, "başarısızlığa hazırlanmayı" ve saldırılara karşı etkili bir şekilde cevap vermek için bir geri dönüş planına sahip olmayı gerektirir. Düzgün bir olağanüstü durum kurtarma planı, aşağıdaki bileşenlerin bazılarını ya da hepsini kapsar: @@ -129,15 +129,15 @@ Güvenli erişim kontrolleri tasarlamak, fonksiyon değiştiricileri uygulamak v Ethereum akıllı sözleşmeleri varsayılan olarak değiştirilemez olsa da, yükseltme desenleri kullanılarak bir dereceye kadar değiştirilebilirliğe ulaşmak mümkündür. Kritik bir hatanın eski sözleşmenizi kullanılamaz hale getirdiği ve yeni bir mantık dağıtmanın en makul seçenek olduğu durumlarda sözleşmeleri yükseltmek gereklidir. -Sözleşme yükseltme mekanizmaları farklı şekilde çalışsa da, "vekil deseni" akıllı sözleşmeleri yükseltmeye yönelik daha popüler yaklaşımlardan biridir. [Vekil desenleri](https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern) bir uygulamanın durumunu ve mantığını _iki_ sözleşme arasında böler. İlk sözleşme ('vekil sözleşmesi' adı verilir) durum değişkenlerini depolar (örneğin kullanıcı bakiyeleri), ikinci sözleşme ise ('mantık sözleşmesi' adı verilir) sözleşme fonksiyonlarını yürütmek için gereken kodu tutar. +Sözleşme yükseltme mekanizmaları farklı şekilde çalışsa da, "vekil deseni" akıllı sözleşmeleri yükseltmeye yönelik daha popüler yaklaşımlardan biridir. [Proxy desenleri](https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern), bir uygulamanın durumunu ve mantığını _iki_ sözleşme arasında böler. İlk sözleşme ('vekil sözleşmesi' adı verilir) durum değişkenlerini depolar (örneğin kullanıcı bakiyeleri), ikinci sözleşme ise ('mantık sözleşmesi' adı verilir) sözleşme fonksiyonlarını yürütmek için gereken kodu tutar. -Hesaplar, tüm fonksiyon çağrılarını [`delegatecall()`](https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html?highlight=delegatecall#delegatecall-callcode-and-libraries) düşük seviye çağrısı kullanarak mantık sözleşmesine ileten vekil sözleşmesi ile etkileşime geçer. Sıradan bir mesaj çağrısının aksine `delegatecall()`, mantık sözleşmesinin adresinde çalışan kodun çağıran sözleşme bağlamında yürütülmesini sağlar. Bu, mantık sözleşmesinin her zaman vekilin depolamasına yazacağı (kendi depolaması yerine) ve `msg.sender` ile `msg.value` değerlerinin orijinal halinin korunacağı anlamına gelir. +Hesaplar, tüm fonksiyon çağrılarını [`delegatecall()`](https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html?highlight=delegatecall#delegatecall-callcode-and-libraries) düşük seviyeli çağrısını kullanarak mantık sözleşmesine gönderen proxy sözleşmesiyle etkileşime girer. Sıradan bir mesaj çağrısının aksine `delegatecall()`, mantık sözleşmesinin adresinde çalışan kodun çağıran sözleşme bağlamında yürütülmesini sağlar. Bu, mantık sözleşmesinin her zaman vekilin depolamasına yazacağı (kendi depolaması yerine) ve `msg.sender` ile `msg.value` değerlerinin orijinal halinin korunacağı anlamına gelir. Mantık sözleşmesine çağrılar devretmek için adresinin vekil sözleşmesinin depolamasında depolanması gerekir. Dolayısıyla sözleşmenin mantığını yükseltme, sadece başka bir mantık sözleşmesi dağıtmaktan ve yeni adresi vekil sözleşmesinde depolamaktan ibarettir. Vekil sözleşmesine sonraki çağrılar otomatik olarak yeni mantık sözleşmesine yönlendirildiği için kodu gerçekten değiştirmeden sözleşmeyi "yükseltmiş" olursunuz. -[Sözleşme yükseltme hakkında daha fazla ayrıntı](/developers/docs/smart-contracts/upgrading/). +[Sözleşmeleri yükseltme hakkında daha fazlası](/developers/docs/smart-contracts/upgrading/). -#### Acil durdurmalar {#emergency-stops} +#### Acil durum durdurmaları {#emergency-stops} Belirtildiği gibi, bir akıllı sözleşmedeki tüm hataları geniş çaplı denetim ve test yoluyla bulmak mümkün olmayabilir. Dağıtım sonrası kodunuzda bir güvenlik açığı ortaya çıkarsa, sözleşme adresinde çalışan kodu değiştiremeyeceğiniz için bu açığı kapatmak imkansızdır. Ayrıca yükseltme mekanizmalarını (örneğin vekil desenleri) uygulamak zaman alabilir (genelde farklı taraflardan onay alınması gerekir), bu da saldırganlara daha fazla zarar vermek için daha fazla zaman tanır. @@ -147,12 +147,12 @@ Nükleer seçenek ise bir sözleşmede güvenlik açığı bulunan fonksiyonlara 2. Yürütülürken Boole değişkenine başvuran fonksiyonlar. Bu fonksiyonlar, akıllı sözleşme durdurulmamışsa erişilebilir durumdadır ve acil durdurma özelliği tetiklendiğinde erişilemez hale gelir. -3. Acil durdurma fonksiyonuna erişimi olan, Boole değişkenini `true` yapan bir varlık. Bu fonksiyona yapılan çağrılar, kötü niyetli eylemleri önlemek için güvenilir bir adres ile (örneğin sözleşme sahibi) sınırlandırılabilir. +3. Boole değişkenini `true` yapan acil durdurma fonksiyonuna erişimi olan bir varlık. Bu fonksiyona yapılan çağrılar, kötü niyetli eylemleri önlemek için güvenilir bir adres ile (örneğin sözleşme sahibi) sınırlandırılabilir. -Sözleşmenin acil durdurmayı etkinleştirmesinin ardından belirli fonksiyonlar çağrılabilir niteliğini kaybeder. Bu, seçili fonksiyonların global değişkene başvuran bir niteleyici ile paketlenmesi yoluyla gerçekleştirilir. Bu desenin sözleşmelerdeki bir uygulamasını açıklayan [bir örneği](https://github.com/fravoll/solidity-patterns/blob/master/EmergencyStop/EmergencyStop.sol) aşağıda bulabilirsiniz: +Sözleşmenin acil durdurmayı etkinleştirmesinin ardından belirli fonksiyonlar çağrılabilir niteliğini kaybeder. Bu, seçili fonksiyonların global değişkene başvuran bir niteleyici ile paketlenmesi yoluyla gerçekleştirilir. Aşağıda, bu desenin sözleşmelerdeki bir uygulamasını açıklayan [bir örnek](https://github.com/fravoll/solidity-patterns/blob/master/EmergencyStop/EmergencyStop.sol) bulunmaktadır: ```solidity -// This code has not been professionally audited and makes no promises about safety or correctness. Use at your own risk. +// Bu kod profesyonel olarak denetlenmemiştir ve güvenlik veya doğruluk konusunda hiçbir vaatte bulunmaz. Riski size aittir. contract EmergencyStop { @@ -169,7 +169,7 @@ contract EmergencyStop { } modifier onlyAuthorized { - // Check for authorization of msg.sender here + // msg.sender'ın yetkisini burada kontrol edin _; } @@ -182,11 +182,11 @@ contract EmergencyStop { } function deposit() public payable stoppedInEmergency { - // Deposit logic happening here + // Para yatırma mantığı burada işliyor } function emergencyWithdraw() public onlyWhenStopped { - // Emergency withdraw happening here + // Acil para çekme burada işliyor } } ``` @@ -195,7 +195,7 @@ Bu örnek, acil durdurmaların temel özelliklerini göstermektedir: - `isStopped`, başlangıçta `false` olan ve sözleşme acil durum moduna geçtiğinde değişerek `true` olan bir Boole değeridir. -- `onlyWhenStopped` ve `stoppedInEmergency` fonksiyon niteleyicileri, `isStopped` değişkenini kontrol eder. `stoppedInEmergency`, sözleşmenin güvenlik açığı olduğunda (örneğin `deposit()`) erişilemez olması gereken fonksiyonları kontrol etmek için kullanılır. Basitçe ifade etmek gerekirse, bu fonksiyonlara yapılan çağrılar geri döndürülür. +- `onlyWhenStopped` ve `stoppedInEmergency` fonksiyon niteleyicileri, `isStopped` değişkenini kontrol eder. `stoppedInEmergency`, sözleşmenin güvenlik açığı olduğunda (örneğin, `deposit()`) erişilemez olması gereken fonksiyonları kontrol etmek için kullanılır. Basitçe ifade etmek gerekirse, bu fonksiyonlara yapılan çağrılar geri döndürülür. `onlyWhenStopped`, sadece bir acil durum esnasında çağrılabilir olması gereken fonksiyonlar (örneğin `emergencyWithdraw()`) için kullanılır. Bu tarz fonksiyonlar durumun çözüme kavuşturulmasına yardımcı olabilir ve bundan dolayı "yasaklı fonksiyonlar" listesinden çıkarılmıştır. @@ -213,13 +213,13 @@ Ayrıca, sözleşmelerinizle biri etkileşimde bulunduğunda otomatik olarak uya Ana akıllı sözleşmelerin kontrolünü topluluk üyelerine devretmek suretiyle uygulamanızı merkeziyetsizleştirmeyi düşünebilirsiniz. Bu durumda akıllı sözleşme sistemi, topluluk üyelerinin yönetimsel eylemleri zincir üstünde yönetişim sistemi aracılığıyla onaylayabilmesine olanak tanıyan bir yönetişim modülü içerecektir. Örneğin, bir vekil sözleşmenin yeni bir uygulamaya yükseltilmesi teklifi, jeton sahipleri tarafından oylanabilir. -Merkezi olmayan yönetişim, özellikle geliştiricilerin ve son kullanıcıların çıkarlarını uyumlu hale getirdiği için faydalı olabilir. Yine de, akıllı sözleşme yönetişim mekanizmaları yanlış uygulandığında yeni riskleri beraberinde getirebilir. Saldırganın bir [flash loan](/defi/#flash-loans) (hızlı kredi) alarak büyük miktarda oy hakkı (elindeki jeton sayısıyla ölçülen) elde etmesi ve kötü niyetli bir teklifi kabul ettirmesi makul bir senaryo olabilir. +Merkezi olmayan yönetişim, özellikle geliştiricilerin ve son kullanıcıların çıkarlarını uyumlu hale getirdiği için faydalı olabilir. Yine de, akıllı sözleşme yönetişim mekanizmaları yanlış uygulandığında yeni riskleri beraberinde getirebilir. Saldırganın bir [hızlı kredi](/defi/#flash-loans) alarak büyük miktarda oy hakkı (elindeki jeton sayısıyla ölçülen) elde etmesi ve kötü niyetli bir teklifi kabul ettirmesi makul bir senaryo olabilir. -Zincir üstünde yönetişimle ilgili sorunları önlemenin bir yolu, bir [zaman kilidi](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/) kullanmaktır. Zaman kilidi, bir akıllı sözleşmenin belirli bir süre geçene kadar belirli eylemleri gerçekleştirmesini engeller. Diğer stratejiler arasında her bir jetona ne kadar süreyle kilitlendiğine dayalı olarak bir "oylama ağırlığı" atama veya bir adresin oy gücünü mevcut blok yerine geçmişteki bir dönemde (örneğin, geçmişteki 2-3 blok) ölçme gibi yöntemler yer alır. Her iki yöntem de oy gücünü zincir üstündeki oyları hızla etkileyecek şekilde toplama olasılığını azaltır. +Zincir üstü yönetişimle ilgili sorunları önlemenin bir yolu [zaman kilidi kullanmaktır](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/). Zaman kilidi, bir akıllı sözleşmenin belirli bir süre geçene kadar belirli eylemleri gerçekleştirmesini engeller. Diğer stratejiler arasında her bir jetona ne kadar süreyle kilitlendiğine dayalı olarak bir "oylama ağırlığı" atama veya bir adresin oy gücünü mevcut blok yerine geçmişteki bir dönemde (örneğin, geçmişteki 2-3 blok) ölçme gibi yöntemler yer alır. Her iki yöntem de oy gücünü zincir üstündeki oyları hızla etkileyecek şekilde toplama olasılığını azaltır. -[Güvenli yönetişim sistemleri tasarlama](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/), [DAO'lardaki farklı oylama mekanizmaları](https://hackernoon.com/governance-is-the-holy-grail-for-daos) ve [DeFi kullanan yaygın DAO saldırı vektörleri](https://dacian.me/dao-governance-defi-attacks) hakkında daha fazla bilgi için paylaşılan bağlantılara başvurun. +Paylaşılan bağlantılarda [güvenli yönetişim sistemleri tasarlama](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/), [DAO'larda farklı oylama mekanizmaları](https://hackernoon.com/governance-is-the-holy-grail-for-daos) ve [DeFi'den yararlanan yaygın DAO saldırı vektörleri](https://dacian.me/dao-governance-defi-attacks) hakkında daha fazla bilgi bulabilirsiniz. -### 8. Kodun karmaşıklık düzeyini minimuma indirgeyin {#reduce-code-complexity} +### 8. Koddaki karmaşıklığı en aza indirin {#reduce-code-complexity} Geleneksel yazılım geliştiricileri, yazılım tasarımına gereksiz karmaşıklık eklememeyi tavsiye eden "KISS" ("keep it simple, stupid - basit tut, aptal") prensibini iyi bilir. Bu, uzun süredir kabul gören "karmaşık sistemler karmaşık şekillerde başarısız olur" düşüncesine uygundur ve bu sistemler maliyetli hatalara daha yatkındır. @@ -227,7 +227,7 @@ Akıllı sözleşmeleri yazarken işleri basit tutmak, akıllı sözleşmelerin Başka yaygın bir tavsiye de küçük fonksiyonlar yazmak ve iş mantığını birden fazla sözleşmeye bölerek sözleşmeleri modüler tutmaktır. Basit kod yazmak, akıllı sözleşmedeki saldırı yüzeyini azaltırken genel sistem doğruluğu hakkında düşünmeyi ve olası tasarım hatalarını erken tespit etmeyi de kolaylaştırır. -### 9. Yaygın akıllı sözleşme güvenlik açıklarına karşı savunma geliştirin {#mitigate-common-smart-contract-vulnerabilities} +### 9. Yaygın akıllı sözleşme güvenlik açıklarına karşı savunun {#mitigate-common-smart-contract-vulnerabilities} #### Yeniden giriş {#reentrancy} @@ -235,10 +235,10 @@ Ethereum Sanal Makinesi, eş zamanlılığa izin vermez; yani bir mesaj çağrı Çoğunlukla zararsız olsa da, kontrol akışını güvenilmeyen sözleşmelere aktarmak yeniden giriş gibi problemlere yok açabilir. Yeniden giriş saldırısı, kötü niyetli bir sözleşmenin güvenlik açığı bulunan bir sözleşmeye asıl fonksiyonun çağrısı tamamlanmadan geri çağrı yapması durumunda gerçekleşir. Bu tür bir saldırı en iyi şekilde örnek vererek açıklanabilir. -Herhangi bir kişinin Ether yatırmasına ve çekmesine izin veren basit bir akıllı sözleşme ('Victim') düşünün: +Herhangi bir kişinin ether yatırmasına ve çekmesine izin veren basit bir akıllı sözleşme ('Victim') düşünün: ```solidity -// This contract is vulnerable. Do not use in production +// Bu sözleşme savunmasızdır. Üretimde kullanmayın contract Victim { mapping (address => uint256) public balances; @@ -264,7 +264,7 @@ Bu sözleşme, kullanıcıların sözleşmeye önceden yatırılmış olan ETH'y `Victim` sözleşmesindeki `withdraw()` fonksiyonu, "kontroller-etkileşimler-etkiler" desenini takip eder. Yürütme için gerekli koşulların sağlanıp sağlanmadığını (yani kullanıcının pozitif bir ETH bakiyesi olup olmadığını) _kontrol eder_ ve işlemin _etkilerini_ uygulamadan önce (yani kullanıcının bakiyesini düşürmek) çağıranın adresine ETH göndererek _etkileşimi_ gerçekleştirir. -Eğer `withdraw()` bir dışarıdan sahip olunan hesap (EOA) tarafından çağrılırsa, fonksiyon beklenildiği gibi çalışır: `msg.sender.call.value()` çağırana ETH gönderir. Ancak `msg.sender`, `withdraw()` çağrısı yapan bir akıllı sözleşme hesabı ise, `msg.sender.call.value()` kullanarak fon gönderildiğinde aynı zamanda o adreste depolanan kod da çalışacaktır. +Eğer `withdraw()` bir dışarıdan yönetilen hesaptan (EOA) çağrılırsa, fonksiyon beklenildiği gibi çalışır: `msg.sender.call.value()` çağırana ETH gönderir. Ancak `msg.sender`, `withdraw()` çağrısı yapan bir akıllı sözleşme hesabı ise, `msg.sender.call.value()` kullanarak fon gönderildiğinde aynı zamanda o adreste depolanan kod da çalışacaktır. Sözleşme adresinde dağıtılan kodun şu olduğunu hayal edin: @@ -289,26 +289,26 @@ Bu sözleşme üç şey yapmak üzere tasarlanmıştır: 2. Victim sözleşmesine 1 ETH yatırmak 3. Akıllı sözleşmede depolanan 1 ETH'yi çekmek -Burada, gelen `msg.sender.call.value` tarafından bırakılan gaz miktarı 40.000'den fazla ise `Attacker`'ın `Victim`'deki `withdraw()` fonksiyonunu tekrar çağıran başka bir fonksiyonu olması hariç yanlış hiçbir şey yoktur. Bu, `Attacker`'a `Victim`'e yeniden girebilme ve ilk `withdraw` çağrısı tamamlanmadan _önce_ daha fazla fon çekebilme olanağı sağlar. Bu döngü şöyle görünür: +Burada, gelen `msg.sender.call.value` tarafından bırakılan gaz miktarı 40.000'den fazla ise `Attacker`'ın `Victim`'deki `withdraw()` fonksiyonunu tekrar çağıran başka bir fonksiyonu olması hariç yanlış hiçbir şey yoktur. Bu, `Attacker`'a `Victim`'e yeniden girebilme ve ilk `withdraw` çağrısı tamamlanmadan önce daha fazla fon çekebilme olanağı sağlar. Bu döngü şöyle görünür: ```solidity -- Attacker's EOA calls `Attacker.beginAttack()` with 1 ETH -- `Attacker.beginAttack()` deposits 1 ETH into `Victim` -- `Attacker` calls `withdraw() in `Victim` -- `Victim` checks `Attacker`’s balance (1 ETH) -- `Victim` sends 1 ETH to `Attacker` (which triggers the default function) -- `Attacker` calls `Victim.withdraw()` again (note that `Victim` hasn’t reduced `Attacker`’s balance from the first withdrawal) -- `Victim` checks `Attacker`’s balance (which is still 1 ETH because it hasn’t applied the effects of the first call) -- `Victim` sends 1 ETH to `Attacker` (which triggers the default function and allows `Attacker` to reenter the `withdraw` function) -- The process repeats until `Attacker` runs out of gas, at which point `msg.sender.call.value` returns without triggering additional withdrawals -- `Victim` finally applies the results of the first transaction (and subsequent ones) to its state, so `Attacker`’s balance is set to 0 +- Saldırganın EOA'sı 1 ETH ile `Attacker.beginAttack()` fonksiyonunu çağırır +- `Attacker.beginAttack()` `Victim`e 1 ETH yatırır +- `Attacker`, `Victim`deki `withdraw()` fonksiyonunu çağırır +- `Victim`, `Attacker`'ın bakiyesini kontrol eder (1 ETH) +- `Victim`, `Attacker`'a 1 ETH gönderir (bu da varsayılan fonksiyonu tetikler) +- `Attacker`, `Victim.withdraw()`'ı tekrar çağırır (not: `Victim`, `Attacker`'ın bakiyesini ilk çekimden sonra henüz düşürmedi) +- `Victim`, `Attacker`'ın bakiyesini kontrol eder (ilk çağrının etkilerini uygulamadığı için hala 1 ETH) +- `Victim`, `Attacker`'a 1 ETH gönderir (bu da varsayılan fonksiyonu tetikler ve `Attacker`'ın `withdraw` fonksiyonuna yeniden girmesine izin verir) +- Bu süreç, `Attacker`'ın gas'ı bitene kadar tekrarlanır, bu noktada `msg.sender.call.value` ek para çekme işlemlerini tetiklemeden geri döner +- `Victim` son olarak ilk işlemin (ve sonrakilerin) sonuçlarını durumuna uygular, böylece `Attacker`'ın bakiyesi 0 olarak ayarlanır ``` -Özetle, çağıranın bakiyesi fonksiyonun yürütülmesi tamamlanana kadar 0'a ayarlanmadığı için sonraki çağrılar başarılı olacak ve çağıranın bakiyesini birden fazla kez çekmesine olanak tanıyacaktır. Bu tür saldırılar, [2016 DAO hack](https://www.coindesk.com/learn/understanding-the-dao-attack) olayında olduğu gibi akıllı sözleşmenin fonlarını boşaltmak için kullanılabilir. Yeniden giriş saldırıları, [yeniden giriş suistimallerinin herkese açık listesi](https://github.com/pcaversaccio/reentrancy-attacks) içinde gösterildiği gibi bugün hala akıllı sözleşmeler için ciddi bir sorundur. +Özetle, çağıranın bakiyesi fonksiyonun yürütülmesi tamamlanana kadar 0'a ayarlanmadığı için sonraki çağrılar başarılı olacak ve çağıranın bakiyesini birden fazla kez çekmesine olanak tanıyacaktır. Bu tür saldırılar, [2016 DAO hack](https://www.coindesk.com/learn/understanding-the-dao-attack) olayında olduğu gibi bir akıllı sözleşmenin fonlarını boşaltmak için kullanılabilir. Yeniden giriş saldırıları, [yeniden giriş istismarlarının herkese açık listesi](https://github.com/pcaversaccio/reentrancy-attacks) içinde gösterildiği gibi bugün hala akıllı sözleşmeler için ciddi bir sorundur. ##### Yeniden giriş saldırılarını engelleme -Yeniden girişle başa çıkmak için izlenebilecek bir yaklaşım, [kontroller-etkiler-etkileşimler modelini](https://docs.soliditylang.org/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern) takip etmektir. Bu model, yürütmenin, yürütme işlemine devam etmeden önce gerekli kontrolleri gerçekleştiren kodla başladığı, ardından sözleşme durumunu manipüle eden kodla devam ettiği ve son olarak diğer sözleşmeler veya EOA'larla etkileşimde bulunan kodun geldiği bir şekilde düzenlenmesini sağlar. +Yeniden girişle başa çıkmanın bir yolu, [kontroller-etkiler-etkileşimler modelini](https://docs.soliditylang.org/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern) takip etmektir. Bu model, yürütmenin, yürütme işlemine devam etmeden önce gerekli kontrolleri gerçekleştiren kodla başladığı, ardından sözleşme durumunu manipüle eden kodla devam ettiği ve son olarak diğer sözleşmeler veya EOA'larla etkileşimde bulunan kodun geldiği bir şekilde düzenlenmesini sağlar. Kontroller-etkiler-etkileşim modeli, aşağıda gösterilen `Victim` sözleşmesinin revize edilmiş bir sürümünde kullanılır: @@ -335,18 +335,18 @@ contract MutexPattern { mapping(address => uint256) public balances; modifier noReentrancy() { - require(!locked, "Blocked from reentrancy."); + require(!locked, "Yeniden giriş engellendi."); locked = true; _; locked = false; } - // This function is protected by a mutex, so reentrant calls from within `msg.sender.call` cannot call `withdraw` again. - // The `return` statement evaluates to `true` but still evaluates the `locked = false` statement in the modifier + // Bu fonksiyon bir mutex tarafından korunur, bu nedenle `msg.sender.call` içinden yapılan yeniden giriş çağrıları `withdraw` fonksiyonunu tekrar çağıramaz. + // `return` ifadesi `true` olarak değerlendirilir, ancak yine de değiştiricideki `locked = false` ifadesini değerlendirir function withdraw(uint _amount) public payable noReentrancy returns(bool) { - require(balances[msg.sender] >= _amount, "No balance to withdraw."); + require(balances[msg.sender] >= _amount, "Çekilecek bakiye yok."); balances[msg.sender] -= _amount; - bool (success, ) = msg.sender.call{value: _amount}(""); + (bool success, ) = msg.sender.call{value: _amount}(""); require(success); return true; @@ -358,27 +358,26 @@ Ayrıca fonları hesaplara gönderen bir "itme ödemeleri" sistemi yerine, kulla #### Tamsayı yetersizlikleri ve taşmaları {#integer-underflows-and-overflows} -Tamsayı taşması, bir aritmetik işlemin sonucunun kabul edilebilir değer aralığının dışına düşerek tamsayıyı temsil edilebilir en düşük değere yuvarlamasına neden olduğu zaman gerçekleşir. Örneğin bir `uint8` yalnızca 2^8-1=255'e kadar değerleri saklayabilir. `255`'ten büyük değerleri sonuç veren aritmetik işlemler taşma yapar ve tıpkı bir otomobildeki kilometre sayacı azami kilometreye (999999) ulaşınca sıfırlandığı gibi `uint`'yi `0` olarak ayarlar. +Tamsayı taşması, bir aritmetik işlemin sonucunun kabul edilebilir değer aralığının dışına düşerek tamsayıyı temsil edilebilir en düşük değere yuvarlamasına neden olduğu zaman gerçekleşir. Örneğin bir `uint8` yalnızca 2^8-1=255'e kadar değerleri saklayabilir. 255'ten büyük değerleri sonuç veren aritmetik işlemler taşma yapar ve tıpkı bir otomobildeki kilometre sayacı azami kilometreye (999999) ulaşınca sıfırlandığı gibi `uint`'yi `0` olarak ayarlar. -Tamsayı yetersizlikleri de benzer sebeplerden dolayı gerçekleşir: bir aritmetik işlemin sonuçlarının kabul edilebilir aralığın altına düşmesi. Bir `uint8` içinde `0`'ı azaltmaya çalıştığınızı düşünelim; sonuç, basit olarak temsil edilebilir maksimum değere (`255`) yuvarlanacaktır. +Tamsayı yetersizlikleri de benzer sebeplerden dolayı gerçekleşir: bir aritmetik işlemin sonuçlarının kabul edilebilir aralığın altına düşmesi. Bir `uint8` içinde 0'ı azaltmaya çalıştığınızı düşünelim; sonuç, basit olarak temsil edilebilir maksimum değere (255) yuvarlanacaktır. Hem tamsayı taşmaları hem de tamsayı yetersizlikleri, bir sözleşmenin durum değişkenlerinde beklenmedik değişimlere yol açabilir ve planlanmamış yürütmeye sebep olabilir. Bir saldırganın geçersiz bir işlem gerçekleştirmek için akıllı sözleşmedeki aritmetik taşmayı nasıl istismar edebileceğinin bir örneğini aşağıda görebilirsiniz: ``` pragma solidity ^0.7.6; -// This contract is designed to act as a time vault. -// User can deposit into this contract but cannot withdraw for at least a week. -// User can also extend the wait time beyond the 1 week waiting period. +// Bu sözleşme bir zaman kasası olarak hareket etmek için tasarlanmıştır. +// Kullanıcı bu sözleşmeye para yatırabilir ancak en az bir hafta boyunca para çekemez. +// Kullanıcı ayrıca 1 haftalık bekleme süresinin ötesine geçerek bekleme süresini uzatabilir. -/*1. Deploy TimeLock -2. Deploy Attack with address of TimeLock -3. Call Attack.attack sending 1 ether. You will immediately be able to - withdraw your ether. +/* +1. TimeLock'ı dağıtın +2. TimeLock adresini kullanarak Attack'i dağıtın +3. 1 ether göndererek Attack.attack'ı çağırın. Ether'inizi hemen çekebileceksiniz. -What happened? -Attack caused the TimeLock.lockTime to overflow and was able to withdraw -before the 1 week waiting period. +Ne oldu? +Attack, TimeLock.lockTime'ın taşmasına neden oldu ve 1 haftalık bekleme süresinden önce para çekebildi. */ contract TimeLock { @@ -395,14 +394,14 @@ contract TimeLock { } function withdraw() public { - require(balances[msg.sender] > 0, "Insufficient funds"); - require(block.timestamp > lockTime[msg.sender], "Lock time not expired"); + require(balances[msg.sender] > 0, "Yetersiz fon"); + require(block.timestamp > lockTime[msg.sender], "Kilit süresi dolmadı"); uint amount = balances[msg.sender]; balances[msg.sender] = 0; (bool sent, ) = msg.sender.call{value: amount}(""); - require(sent, "Failed to send Ether"); + require(sent, "Ether gönderilemedi"); } } @@ -418,11 +417,11 @@ contract Attack { function attack() public payable { timeLock.deposit{value: msg.value}(); /* - if t = current lock time then we need to find x such that + eğer t = mevcut kilit süresi ise, öyle bir x bulmalıyız ki x + t = 2**256 = 0 - so x = -t + yani x = -t 2**256 = type(uint).max + 1 - so x = type(uint).max + 1 - t + yani x = type(uint).max + 1 - t */ timeLock.increaseLockTime( type(uint).max + 1 - timeLock.lockTime(address(this)) @@ -438,11 +437,11 @@ Solidity derleyicisi, 0.8.0 versiyonu itibariyle tamsayı yetersizliklerini ve t #### Kâhin manipülasyonu {#oracle-manipulation} -[Kâhinler](/developers/docs/oracles/), zincir dışından bilgi edinir ve bu bilgiyi akıllı sözleşmelerin kullanımı için zincir üstünde gönderir. Kâhinler sayesinde sermaye piyasaları gibi zincir dışında sistemlerle birlikte çalışan akıllı sözleşmeler tasarlayabilir ve bu sayede uygulama alanlarını önmeli ölçüde genişletebilirsiniz. +[Kâhinler](/developers/docs/oracles/), zincir dışı bilgi toplar ve akıllı sözleşmelerin kullanması için zincir üzerine gönderir. Kâhinler sayesinde sermaye piyasaları gibi zincir dışı sistemlerle birlikte çalışan akıllı sözleşmeler tasarlayabilir ve bu sayede uygulama alanlarını önemli ölçüde genişletebilirsiniz. Ancak eğer kâhin yozlaşmışsa ve zincir üstünde yanlış bilgiler gönderiyorsa akıllı sözleşmeler, hatalara sebep olabilecek yanlış girdileri temel alarak yürütülür. Bu, bir blokzincir kâhininden gelen bilginin doğru, güncel olduğundan ve zamanında alındığından emin olma görevini ilgilendiren ''kâhin sorunu''nun temelidir. -Buna bağlı bir güvenlik endişesi de bir varlığın spot fiyatını almak için merkeziyetsiz borsa gibi zincir üstünde kâhin kullanımıdır. [Merkeziyetsiz finans (DeFi)](/defi/) sektörünün borç verme platformları, bunu genellikle bir kullanıcın ne kadar ödünç alabileceğine karar vermek için kullanıcının teminatının değerini belirlemek amacıyla yapar. +Buna bağlı bir güvenlik endişesi de bir varlığın spot fiyatını almak için merkezi borsa gibi zincir üstü bir kâhin kullanımıdır. [Merkeziyetsiz finans (DeFi)](/defi/) sektörünün borç verme platformları, bunu genellikle bir kullanıcının ne kadar ödünç alabileceğine karar vermek için kullanıcının teminatının değerini belirlemek amacıyla yapar. DEX (merkeziyetsiz borsa) fiyatları, büyük ölçüde piyasalarda pariteleri eski haline getiren arbitrajcılar sayesinde genellikle doğrudur. Ancak bu fiyatlar, özellikle zincir üstündeki kâhinin varlık fiyatlarını geçmişe dönük ticaret düzenine dayanarak hesapladığı durumlarda (ki genelde durum böyledir) manipülasyona açıktır. @@ -452,7 +451,7 @@ DEX (merkeziyetsiz borsa) fiyatları, büyük ölçüde piyasalarda pariteleri e [Kâhin manipülasyonundan kaçınmanın](https://www.cyfrin.io/blog/price-oracle-manipultion-attacks-with-examples) asgari şartı, tek hata noktalarından kaçınmak için çok sayıda kaynaktan bilgi sorgulayan bir merkeziyetsiz kâhin ağı kullanmaktır. Çoğu durumda merkeziyetsiz kâhinler, kâhin düğümlerini doğru bilgi aktarımı yapmaya teşvik etmek amacıyla onları merkezi kâhinlerden daha güvenli yapan yerleşik kripto-ekonomik teşviklere sahiptir. -Varlık fiyatları için bir zincir üstünde kâhin sorgulaması yapmayı planlıyorsanız zamana göre ağırlıklandırılmış ortalama fiyat (TWAP) mekanizmasını uygulayan bir tanesini kullanmayı göz önünde bulundurun. Bir [TWAP kâhini](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles), bir varlığın fiyatını iki farklı zaman noktasında sorgular (bunu değiştirebilirsiniz) ve elde edilen ortalamaya dayanarak spot fiyatı hesaplar. Daha uzun zaman dilimleri seçmek, yeni işlenmiş büyük emirler varlık fiyatını etkilemeyeceğinden protokolünüzü fiyat manipülasyonuna karşı korur. +Varlık fiyatları için bir zincir üstü kâhin sorgulaması yapmayı planlıyorsanız zamana göre ağırlıklandırılmış ortalama fiyat (TWAP) mekanizmasını uygulayan bir tanesini kullanmayı göz önünde bulundurun. Bir [TWAP kâhini](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles), bir varlığın fiyatını iki farklı zaman noktasında sorgular (bunu değiştirebilirsiniz) ve elde edilen ortalamaya dayanarak spot fiyatı hesaplar. Daha uzun zaman dilimleri seçmek, yeni işlenmiş büyük emirler varlık fiyatını etkilemeyeceğinden protokolünüzü fiyat manipülasyonuna karşı korur. ## Geliştiriciler için akıllı sözleşme güvenlik kaynakları {#smart-contract-security-resources-for-developers} @@ -460,23 +459,23 @@ Varlık fiyatları için bir zincir üstünde kâhin sorgulaması yapmayı planl - **[Test araçları ve kütüphaneleri](/developers/docs/smart-contracts/testing/#testing-tools-and-libraries)** - _Akıllı sözleşmeler üzerinde birim testleri, statik analiz ve dinamik analiz gerçekleştirmeye yönelik sektörel standart niteliğinde araçlar ve kütüphaneler koleksiyonu._ -- **[Resmi doğrulama araçları](/developers/docs/smart-contracts/formal-verification/#formal-verification-tools)** - _Akıllı sözleşmelerde işlevsel doğruluğu teyit etmeye ve değişmezleri kontrol etmeye yönelik araçlar._ +- **[Resmi doğrulama araçları](/developers/docs/smart-contracts/formal-verification/#formal-verification-tools)** - _Akıllı sözleşmelerde işlevsel doğruluğu ve değişmezleri kontrol etmeye yönelik araçlar._ - **[Akıllı sözleşme denetim hizmetleri](/developers/docs/smart-contracts/testing/#smart-contract-auditing-services)** - _Ethereum geliştirme projeleri için akıllı sözleşme denetim hizmetleri sağlayan organizasyonların listesi._ - **[Hata ödülü platformları](/developers/docs/smart-contracts/testing/#bug-bounty-platforms)** - _Hata ödüllerini koordine etme ve akıllı sözleşmelerdeki kritik güvenlik açıklarının sorumluluk bilinci içinde bildirilmesini ödüllendirme platformları._ -- **[Çatallanma Kontrolcüsü](https://forkchecker.hashex.org/)** - _Çatallanmış bir sözleşme ile ilgili mevcut tüm bilgileri kontrol etmeye yönelik ücretsiz bir çevrimiçi araç._ +- **[Çatal Kontrolcüsü (Fork Checker)](https://forkchecker.hashex.org/)** - _Çatallanmış bir sözleşme ile ilgili mevcut tüm bilgileri kontrol etmeye yönelik ücretsiz bir çevrimiçi araç._ -- **[ABI Şifreleyicisi](https://abi.hashex.org/)** - _Solidity sözleşme fonksiyonlarınızı ve yapıcı bağımsız değişkenlerinizi şifrelemeye yarayan ücretsiz bir çevrimiçi hizmet._ +- **[ABI Kodlayıcı (ABI Encoder)](https://abi.hashex.org/)** - _Solidity sözleşme fonksiyonlarınızı ve yapıcı bağımsız değişkenlerinizi şifrelemeye yarayan ücretsiz bir çevrimiçi hizmet._ - **[Aderyn](https://github.com/Cyfrin/aderyn)** - _Şüpheli güvenlik açıklarını belirlemek ve sorunları kolayca tüketilebilen bir markdown formatında yazdırmak için Soyut Sözdizimi Ağaçlarını (AST) tarayan Solidity Statik Analizcisi._ -### Akıllı sözleşmeleri izlemeye yarayan araçlar {#smart-contract-monitoring-tools} +### Akıllı sözleşmeleri izleme araçları {#smart-contract-monitoring-tools} -- **[Tenderly Gerçek Zamanlı Uyarı](https://tenderly.co/alerting/)** - _Akıllı sözleşmelerinizde veya cüzdanlarınızda normal olmayan veya beklenmeyen olaylar gerçekleştiğinde gerçek zamanlı bildirimler almaya yarayan bir araç._ +- **[Tenderly Gerçek Zamanlı Uyarı](https://tenderly.co/monitoring)** - _Akıllı sözleşmelerinizde veya cüzdanlarınızda normal olmayan veya beklenmeyen olaylar gerçekleştiğinde gerçek zamanlı bildirimler almaya yarayan bir araç._ -### Akıllı sözleşmelerin güvenli yönetimine yönelik araçlar {#smart-contract-administration-tools} +### Akıllı sözleşmelerin güvenli yönetimi için araçlar {#smart-contract-administration-tools} - **[Safe](https://safe.global/)** - _Ethereum üzerinde çalışan ve bir işlemi gerçekleştirmeden önce minimum sayıda kişinin onayının alınmasını gerektiren bir akıllı sözleşme cüzdanı (N'nin M'si)._ @@ -484,7 +483,7 @@ Varlık fiyatları için bir zincir üstünde kâhin sorgulaması yapmayı planl ### Akıllı sözleşme denetim hizmetleri {#smart-contract-auditing-services} -- **[ConsenSys Diligence](https://consensys.net/diligence/)** - _Blokzincir ekosistemindeki projelerin protokollerinin kullanıma hazır olmasını ve kullanıcıları korumak amacıyla oluşturulmasını sağlayan akıllı sözleşme denetim hizmeti._ +- **[ConsenSys Diligence](https://diligence.consensys.io/)** - _Blokzincir ekosistemindeki projelerin protokollerinin kullanıma hazır olmasını ve kullanıcıları korumak amacıyla oluşturulmasını sağlayan akıllı sözleşme denetim hizmeti._ - **[CertiK](https://www.certik.com/)** - _Son teknoloji ürünü resmi Doğrulama teknolojisinin akıllı sözleşmelerde ve blokzincir ağlarında kullanımına öncülük eden blokzincir güvenlik şirketi._ @@ -524,11 +523,11 @@ Varlık fiyatları için bir zincir üstünde kâhin sorgulaması yapmayı planl - **[HackenProof](https://hackenproof.com/)** - _Kripto projeleri (DeFi, Akıllı Sözleşmeler, Cüzdanlar, CEX ve dahası) için güvenlik profesyonellerinin derecelendirme hizmetleri verdikleri ve araştırmacıların alakalı, doğrulanmış hata raporları için ödeme aldıkları uzman hata ödülü platformu._ -- **[Sherlock](https://www.sherlock.xyz/)** - _İlgili hataların adil bir şekilde ödenmesini sağlamak için akıllı sözleşmeler aracılığıyla yönetilen denetçiler için ödeme yapan, akıllı sözleşme güvenliğine yönelik Web3 sigortacısı._ +- **[Sherlock](https://www.sherlock.xyz/)** - _İlgili hataların adil bir şekilde ödenmesini sağlamak için akıllı sözleşmeler aracılığıyla yönetilen denetçiler için ödeme yapan, akıllı sözleşme güvenliğine yönelik Web3 sigortacısı._ -- **[CodeHawks](https://www.codehawks.com/)** - _Denetçilerin güvenlik yarışmalarına ve mücadelelerine ve (yakında) kendi özel denetimlerine katıldıkları, rekabetçi hata ödül platformu._ +- **[CodeHawks](https://www.codehawks.com/)** - _Denetçilerin güvenlik yarışmalarına ve mücadelelerine ve (yakında) kendi özel denetimlerine katıldıkları, rekabetçi hata ödül platformu._ -### Akıllı sözleşmelerle ilgili bilinen güvenlik açıklarına ve hatalarına ilişkin yayınlar {#common-smart-contract-vulnerabilities-and-exploits} +### Bilinen akıllı sözleşme güvenlik açıkları ve istismarları yayınları {#common-smart-contract-vulnerabilities-and-exploits} - **[ConsenSys: Akıllı Sözleşmelere Yönelik Bilinen Saldırılar](https://consensysdiligence.github.io/smart-contract-best-practices/attacks/)** - _Genellikle örnek kod da içeren, en önemli sözleşme açıklarına ilişkin yeni başlayanlara yönelik açıklamalar._ @@ -536,17 +535,17 @@ Varlık fiyatları için bir zincir üstünde kâhin sorgulaması yapmayı planl - **[Rekt](https://rekt.news/)** - _Detaylı otopsi raporları ile birlikte yüksek profilli kripto hackleri ve saldırılarına ilişkin düzenli şekilde güncellenen bir yayın._ -### Akıllı sözleşme güvenliğini öğrenmeye yönelik güçlükler {#challenges-for-learning-smart-contract-security} +### Akıllı sözleşme güvenliğini öğrenmek için meydan okumalar {#challenges-for-learning-smart-contract-security} -- **[Awesome BlockSec CTF](https://github.com/blockthreat/blocksec-ctfs)** - _Blokzincir güvenlik savaş oyunlarını, meydan okumaları, [Bayrağı Kap](https://www.webopedia.com/definitions/ctf-event/amp/) yarışmalarını ve çözüm yazılarını içeren birleştirilmiş bir liste._ +- **[Harika BlockSec CTF'leri](https://github.com/blockthreat/blocksec-ctfs)** - _Blokzincir güvenliği savaş oyunları, meydan okumalar, ve [Bayrağı Yakala](https://www.webopedia.com/definitions/ctf-event/amp/) yarışmaları ve çözüm yazılarından oluşan derlenmiş bir liste._ -- **[Damn Vulnerable DeFi](https://www.damnvulnerabledefi.xyz/)** - _DeFi akıllı sözleşmelerinin ofansif güvenliğini öğrenmeye ve hata avı ile güvenlik denetimi konusunda yetenek geliştirmeye yönelik bir savaş oyunu._ +- **[Damn Vulnerable DeFi](https://www.damnvulnerabledefi.xyz/)** - _DeFi akıllı sözleşmelerinin saldırı güvenliğini öğrenmek ve hata avı ile güvenlik denetimi konusunda yetenek geliştirmeye yönelik bir savaş oyunu._ - **[Ethernaut](https://ethernaut.openzeppelin.com/)** - _Her seviyenin "hacklenmesi" gereken bir akıllı sözleşme olduğu Web3/Solidity tabanlı bir savaş oyunu._ - **[HackenProof x HackTheBox](https://app.hackthebox.com/tracks/HackenProof-Track)** - _Fantastik bir maceranın içinde geçen akıllı sözleşme bilgisayar saldırısı yarışması. Yarışmanın başarıyla tamamlanması, özel bir hata bulma programına erişim olanağı da sağlar._ -### Akıllı sözleşmeleri güvenli kılmaya yönelik en iyi uygulamalar {#smart-contract-security-best-practices} +### Akıllı sözleşmeleri güvence altına almak için en iyi uygulamalar {#smart-contract-security-best-practices} - **[ConsenSys: Ethereum Akıllı Sözleşme Güvenliği En İyi Uygulamaları](https://consensys.github.io/smart-contract-best-practices/)** - _Ethereum akıllı sözleşmelerini güvenli kılmaya yönelik kapsamlı bir yönergeler listesi._ @@ -554,22 +553,22 @@ Varlık fiyatları için bir zincir üstünde kâhin sorgulaması yapmayı planl - **[Solidity Desenleri](https://fravoll.github.io/solidity-patterns/)** - _Akıllı sözleşme programlama dili Solidity için güvenli desenlerin ve en iyi pratiklerin kullanışlı bir derlemesi._ -- **[Solidity Belgeleri: Güvenlik Konusunda Dikkat Edilmesi Gerekenler](https://docs.soliditylang.org/en/v0.8.16/security-considerations.html)** - _Solidity ile güvenli akıllı sözleşmeler yazmaya yönelik yönergeler._ +- **[Solidity Belgeleri: Güvenlik Hususları](https://docs.soliditylang.org/en/v0.8.16/security-considerations.html)** - _Solidity ile güvenli akıllı sözleşmeler yazmak için yönergeler._ - **[Akıllı Sözleşme Güvenlik Doğrulama Standardı](https://github.com/securing/SCSVS)** - _Akıllı sözleşmelerin güvenliğini geliştiriciler, mimarlar, güvenlik eleştirmenleri ve satıcılar için standart hale getiren on dört parçalı bir kontrol listesi._ -- **[Akıllı Sözleşme Güvenliğini ve Denetimini Öğrenme](https://updraft.cyfrin.io/courses/security) - _En iyi güvenlik uygulamalarını geliştirmek ve güvenlik araştırmacısı olmak isteyen akıllı sözleşme geliştiricileri için oluşturulan, akıllı sözleşme güvenliği ve denetimi kursu._ +- **[Akıllı Sözleşme Güvenliğini ve Denetimini Öğrenme](https://updraft.cyfrin.io/courses/security)** - _En iyi güvenlik uygulamalarını geliştirmek ve güvenlik araştırmacısı olmak isteyen akıllı sözleşme geliştiricileri için oluşturulan, akıllı sözleşme güvenliği ve denetimi kursu._ ### Akıllı sözleşme güvenliği üzerine öğreticiler {#tutorials-on-smart-contract-security} - [Güvenli akıllı sözleşmeler nasıl yazılır](/developers/tutorials/secure-development-workflow/) -- [Akıllı sözleşme hatalarını bulmak için Slither nasıl kullanılır?](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) +- [Akıllı sözleşme hatalarını bulmak için Slither nasıl kullanılır](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) -- [Akıllı sözleşme hataları bulmak için Manticore nasıl kullanılır](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) +- [Akıllı sözleşme hatalarını bulmak için Manticore nasıl kullanılır](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) - [Akıllı sözleşme güvenlik yönergeleri](/developers/tutorials/smart-contract-security-guidelines/) -- [Jeton sözleşmenizi isteğe bağlı jetonlarla nasıl güvenli şekilde entegre edersiniz](/developers/tutorials/token-integration-checklist/) +- [Jeton sözleşmenizi keyfi jetonlarla güvenli bir şekilde nasıl entegre edersiniz](/developers/tutorials/token-integration-checklist/) - [Cyfrin Updraft - Akıllı sözleşme güvenliği ve denetimi tam kursu](https://updraft.cyfrin.io/courses/security) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/testing/index.md b/public/content/translations/tr/developers/docs/smart-contracts/testing/index.md index bd19b926220..d3bf557ee07 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/testing/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/testing/index.md @@ -1,38 +1,38 @@ --- -title: Akıllı sözleşmeleri test etmek -description: Ethereum akıllı sözleşmelerini test etmeye yönelik tekniklere ve dikkat edilecek hususlara genel bakış. +title: "Akıllı sözleşmeleri test etmek" +description: "Ethereum akıllı sözleşmelerini test etmeye yönelik tekniklere ve dikkat edilecek hususlara genel bakış." lang: tr --- -Ethereum gibi herkese açık blokzincirler değişmez niteliktedir ve bu durum, dağıtıldıktan sonra akıllı sözleşme kodlarının değiştirilmesini zorlaştırır. "Sanal yükseltmeler" gerçekleştirmek için [sözleşme yükseltme şablonları](/developers/docs/smart-contracts/upgrading/) mevcut olsa da bunların uygulanması zordur ve toplumsal mutabakat gerektirir. Ayrıca, yükseltme bir hatayı yalnızca keşfedildikten _sonra_ düzeltebilir; güvenlik açığını önce bir saldırgan keşfederse akıllı sözleşmenin açığından yararlanabilir. +Ethereum gibi herkese açık blokzincirler değişmez niteliktedir ve bu durum, dağıtıldıktan sonra akıllı sözleşme kodlarının değiştirilmesini zorlaştırır. [Sözleşme yükseltme desenleri](/developers/docs/smart-contracts/upgrading/) ile "sanal yükseltmeler" yapmak mümkündür, ancak bunların uygulanması zordur ve sosyal mutabakat gerektirir. Ayrıca, bir yükseltme bir hatayı yalnızca keşfedildikten sonra düzeltebilir—bir saldırgan güvenlik açığını önce keşfederse akıllı sözleşmeniz bir istismar riski altındadır. -Bu yüzden, akıllı sözleşmeleri ana ağa [dağıtmadan](/developers/docs/smart-contracts/deploying/) önce test etmek [güvenlik](/developers/docs/smart-contracts/security/) açısından bir asgari gereksinimdir. Bir sözleşmeyi test etmenin ve kodunu değerlendirmenin birçok farklı tekniği vardır; burada neye ihtiyacınız olduğuna göre seçimler yaparsınız. Bununla birlikte, farklı araç ve yaklaşımlardan oluşan bir test paketi kullanmak, sözleşme kodundaki hem küçük hem de büyük güvenlik açıklarını yakalamak için idealdir. +Bu nedenlerden dolayı, Ana Ağ'a [dağıtım yapmadan](/developers/docs/smart-contracts/deploying/) önce akıllı sözleşmeleri test etmek, [güvenlik](/developers/docs/smart-contracts/security/) için asgari bir gerekliliktir. Bir sözleşmeyi test etmenin ve kodunu değerlendirmenin birçok farklı tekniği vardır; burada neye ihtiyacınız olduğuna göre seçimler yaparsınız. Bununla birlikte, farklı araç ve yaklaşımlardan oluşan bir test paketi kullanmak, sözleşme kodundaki hem küçük hem de büyük güvenlik açıklarını yakalamak için idealdir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfa, akıllı sözleşmeleri Ethereum ağına yüklemeden önce onları nasıl test edeceğinizi açıklamaktadır. [Akıllı sözleşmeler](/developers/docs/smart-contracts/) ile aşina olduğunuz varsayılır. +Bu sayfa, akıllı sözleşmeleri Ethereum ağına yüklemeden önce onları nasıl test edeceğinizi açıklamaktadır. [Akıllı sözleşmelere](/developers/docs/smart-contracts/) aşina olduğunuz varsayılır. ## Akıllı sözleşme testi nedir? {#what-is-smart-contract-testing} Akıllı sözleşme testi, sözleşmenin içerisindeki kodların beklendiği gibi çalışıp çalışmadığını doğrulama işlemidir. Test, belirli bir akıllı sözleşmenin güvenilirlik, kullanılabilirlik ve güvenlik gereksinimlerini karşılayıp karşılamadığını kontrol etmek için kullanışlıdır. -Yaklaşımlar farklılıklar gösterse de çoğu test yöntemi, akıllı sözleşmenin işlenmesi beklenen verilerin küçük bir örneğiyle birlikte yürütülmesini gerektirir. Sözleşme örnek verilerle doğru sonuçlar veriyorsa, düzgün çalıştığı varsayılır. Çoğu test aracı, bir sözleşme yürütmesinin beklenen sonuçlarla eşleşip eşleşmediğini kontrol etmek için [test senaryolarının](https://en.m.wikipedia.org/wiki/Test_case) yazılmasını ve yürütülmesini sağlayan kaynaklar sunar. +Yaklaşımlar farklılıklar gösterse de çoğu test yöntemi, akıllı sözleşmenin işlenmesi beklenen verilerin küçük bir örneğiyle birlikte yürütülmesini gerektirir. Sözleşme örnek verilerle doğru sonuçlar veriyorsa, düzgün çalıştığı varsayılır. Çoğu test aracı, bir sözleşme yürütmesinin beklenen sonuçlarla eşleşip eşleşmediğini kontrol etmek için [test senaryoları](https://en.m.wikipedia.org/wiki/Test_case) yazmak ve yürütmek için kaynaklar sağlar. -### Akıllı sözleşmeleri test etmek neden önemlidir? {#importance-of-testing-smart-contracts} +### Akıllı sözleşmeleri test etmek neden önemlidir? Akıllı sözleşmeleri test etmenin önemi {#importance-of-testing-smart-contracts} -Akıllı sözleşmeler genellikle yüksek değerli finansal varlıkları yönettiğinden, küçük programlama hataları sıklıkla [kullanıcılar için büyük kayıplara](https://rekt.news/leaderboard/) yol açabilir. Ancak titizlikle yapılan testler akıllı sözleşmelerin kodundaki kusurları ve sorunları erkenden fark etmenize ve sözleşmeyi Ana Ağa dağıtmadan önce düzeltmenize yardımcı olabilir. +Akıllı sözleşmeler genellikle yüksek değerli finansal varlıkları yönettiğinden, küçük programlama hataları [kullanıcılar için büyük kayıplara](https://rekt.news/leaderboard/) yol açabilir ve çoğu zaman da yol açar. Ancak titizlikle yapılan testler akıllı sözleşmelerin kodundaki kusurları ve sorunları erkenden fark etmenize ve sözleşmeyi Ana Ağa dağıtmadan önce düzeltmenize yardımcı olabilir. -Bir hata bulunursa sözleşmeyi yükseltmek mümkün olsa da, yükseltmeler karmaşık olduğundan yanlış şekilde ele alınırsa [hatalarla sonuçlanabilir](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/). Bir sözleşmeyi yükseltmek, değişmezlik ilkesini ortadan kaldırır ve kullanıcılara ek güven varsayımları yükler. Bu durumla karşılaşmamak ve sözleşmenizi test etmek için kapsamlı bir plan yapıp akıllı sözleşmenizin güvenlik risklerini azaltırsanız dağıtımdan sonra karmaşık mantık yükseltmelerine ihtiyacınız azalır. +Bir hata bulunduğunda bir sözleşmeyi yükseltmek mümkün olsa da, yükseltmeler karmaşıktır ve uygunsuz bir şekilde ele alınırsa [hatalarla sonuçlanabilir](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/). Bir sözleşmeyi yükseltmek, değişmezlik ilkesini ortadan kaldırır ve kullanıcılara ek güven varsayımları yükler. Bu durumla karşılaşmamak ve sözleşmenizi test etmek için kapsamlı bir plan yapıp akıllı sözleşmenizin güvenlik risklerini azaltırsanız dağıtımdan sonra karmaşık mantık yükseltmelerine ihtiyacınız azalır. -## Akıllı sözleşme test etme yöntemleri {#methods-for-testing-smart-contracts} +## Akıllı sözleşmeleri test etme yöntemleri {#methods-for-testing-smart-contracts} -Ethereum akıllı sözleşmelerini test etme yöntemleri iki genel kategori altında sınıflandırılabilir: **otomatik test** ve **manuel test**. Otomatik test ve manuel test, benzersiz avantajlar ve çeşitli artı-eksiler sunar ancak sözleşmelerinizi analiz etmek için sağlam bir plan oluşturmak istiyorsanız ikisini birlikte kullanabilirsiniz. +Ethereum akıllı sözleşmelerini test etme yöntemleri iki geniş kategoriye ayrılır: **otomatik test** ve **manuel test**. Otomatik test ve manuel test, benzersiz avantajlar ve çeşitli artı-eksiler sunar ancak sözleşmelerinizi analiz etmek için sağlam bir plan oluşturmak istiyorsanız ikisini birlikte kullanabilirsiniz. ### Otomatik test {#automated-testing} -Otomatik test, yürütme sırasındaki hatalar için akıllı sözleşme kodunu otomatik olarak kontrol eden araçlar kullanır. Otomatik testin faydası, sözleşme işlevlerinin değerlendirilmesine rehberlik eden [komut dosyalarının](https://www.techtarget.com/whatis/definition/script?amp=1) kullanımından kaynaklanır. Komut dosyası testlerinin minimum insan müdahalesi ile tekrar tekrar çalıştırılması planlanabilir, bu da otomatik testi manuel test yaklaşımlarından daha verimli bir yere koyar. +Otomatik test, yürütme sırasındaki hatalar için akıllı sözleşme kodunu otomatik olarak kontrol eden araçlar kullanır. Otomatik testin faydası, sözleşme işlevselliklerinin değerlendirilmesini yönlendirmek için [betiklerin](https://www.techtarget.com/whatis/definition/script?amp=1) kullanılmasından gelir. Komut dosyası testlerinin minimum insan müdahalesi ile tekrar tekrar çalıştırılması planlanabilir, bu da otomatik testi manuel test yaklaşımlarından daha verimli bir yere koyar. -Otomatik testler, özellikle tekrarlayan ve zaman alıcı testler söz konusu olduğunda kullanışlıdır, manuel olarak yapılması zor, insan hatasına duyarlı veya kritik sözleşme fonksiyonlarının değerlendirilmesini içerir. Ancak otomatik test araçlarının da belirli hataları gözden kaçırmak ve çok sayıda [yalancı pozitif](https://www.contrastsecurity.com/glossary/false-positive) üretmek gibi bazı dezavantajları olabilir. Bu nedenle, akıllı sözleşmeler için otomatik test ile manuel testi birlikte kullanmak idealdir. +Otomatik testler, özellikle tekrarlayan ve zaman alıcı testler söz konusu olduğunda kullanışlıdır, manuel olarak yapılması zor, insan hatasına duyarlı veya kritik sözleşme fonksiyonlarının değerlendirilmesini içerir. Ancak otomatik test araçlarının dezavantajları olabilir—belirli hataları kaçırabilir ve çok sayıda [yanlış pozitif](https://www.contrastsecurity.com/glossary/false-positive) üretebilirler. Bu nedenle, akıllı sözleşmeler için otomatik test ile manuel testi birlikte kullanmak idealdir. ### Manuel test {#manual-testing} @@ -42,7 +42,7 @@ Manuel test, farklı test senaryolarını kapsayan yazılı bir test planını t Manuel testin etkili olması için ciddi miktarda kaynak (beceri, zaman, para ve çaba) gerekir ve testleri yürütürken insan hatası nedeniyle bazı hataları gözden kaçırmak mümkündür. Ancak manuel test faydalı da olabilir; örneğin bir insan test uzmanı (örneğin bir denetçi), sezgilerini kullanarak otomatik bir test aracının kaçıracağı ekstrem durumları yakalayabilir. -## Akıllı sözleşmeler için otomatik testler {#automated-testing-for-smart-contracts} +## Akıllı sözleşmeler için otomatik test {#automated-testing-for-smart-contracts} ### Birim testi {#unit-testing-for-smart-contracts} @@ -54,9 +54,9 @@ Birim testleri, işlevlerin beklenen değerleri döndürdüğünü ve işlev yü ##### 1. Sözleşmelerinizin iş mantığını ve iş akışını anlayın -Birim testlerini yazmadan önce, bir akıllı sözleşmenin hangi işlevleri sunduğunu ve kullanıcıların bu işlevlere nasıl erişip kullanacağını bilmek yardımcı olur. Bu süreç, özellikle bir sözleşmedeki işlevlerin geçerli kullanıcı girdileri için doğru çıktıyı döndürüp döndürmediğini belirleyen [mutlu yol testlerini](https://en.m.wikipedia.org/wiki/Happy_path) çalıştırmak açısından kullanışlıdır. Bu kavramı, buradaki (kısaltılmış) [açık artırma sözleşmesi](https://docs.soliditylang.org/en/v0.8.17/solidity-by-example.html?highlight=Auction%20contract#simple-open-auction) örneğini kullanarak açıklayacağız +Birim testlerini yazmadan önce, bir akıllı sözleşmenin hangi işlevleri sunduğunu ve kullanıcıların bu işlevlere nasıl erişip kullanacağını bilmek yardımcı olur. Bu, özellikle bir sözleşmedeki işlevlerin geçerli kullanıcı girdileri için doğru çıktıyı döndürüp döndürmediğini belirleyen [mutlu yol testlerini](https://en.m.wikipedia.org/wiki/Happy_path) çalıştırmak için kullanışlıdır. Bu kavramı, [bir açık artırma sözleşmesinin](https://docs.soliditylang.org/en/v0.8.17/solidity-by-example.html?highlight=Auction%20contract#simple-open-auction) bu (kısaltılmış) örneğini kullanarak açıklayacağız -``` +```solidity constructor( uint biddingTime, address payable beneficiaryAddress @@ -108,11 +108,11 @@ function auctionEnd() external { } ``` -Bu, teklif verme döneminde teklif almak için tasarlanmış basit bir açık artırma sözleşmesidir. `highestBid` artarsa, en yüksek teklifi veren önceki kişi parasını alır; teklif süresi sona erdiğinde `beneficiary` parasını almak için sözleşmeyi çağırır. +Bu, teklif verme döneminde teklif almak için tasarlanmış basit bir açık artırma sözleşmesidir. Eğer `highestBid` artarsa, önceki en yüksek teklif veren parasını geri alır; teklif verme süresi bittiğinde, `beneficiary` parasını almak için sözleşmeyi çağırır. -Bunun gibi bir sözleşme için yapılan birim testleri, bir kullanıcının sözleşmeyle etkileşim kurarken çağırabileceği çeşitli tipteki işlevleri kapsar. Bir kullanıcının açık artırma devam ederken teklif verip veremeyeceğini (yani `bid()` çağrılarının başarılı olması) ya da bir kullanıcının mevcut `highestBid` değerinden daha yüksek bir teklif verip veremeyeceğini kontrol eden bir birim testi örnek olarak verilebilir. +Bunun gibi bir sözleşme için yapılan birim testleri, bir kullanıcının sözleşmeyle etkileşim kurarken çağırabileceği çeşitli tipteki işlevleri kapsar. Örneğin, bir kullanıcının açık artırma devam ederken teklif verip veremeyeceğini (yani `bid()` çağrılarının başarılı olup olmadığını) veya bir kullanıcının mevcut `highestBid` değerinden daha yüksek bir teklif verip veremeyeceğini kontrol eden bir birim testi olabilir. -Bir sözleşmenin operasyonel iş akışını anlamanın bir diğer faydası da yürütmenin gereksinimleri karşılayıp karşılamadığını kontrol eden birim testlerini yazmaya yardımcı olmasıdır. Örneğin açık artırma sözleşmesi, artırma sona erdiğinde (yani `auctionEndTime` değeri `block.timestamp` değerinden düşük olduğunda) kullanıcıların teklif veremeyeceğini belirtir. Bu nedenle bir geliştirici, açık artırma bittiğinde (yani, `auctionEndTime` > `block.timestamp` olduğunda) `bid()` fonksiyonuna yapılan çağrıların başarılı olup olmadığını kontrol eden bir birim testi çalıştırabilir. +Bir sözleşmenin operasyonel iş akışını anlamanın bir diğer faydası da yürütmenin gereksinimleri karşılayıp karşılamadığını kontrol eden birim testlerini yazmaya yardımcı olmasıdır. Örneğin, açık artırma sözleşmesi, açık artırma sona erdiğinde (yani `auctionEndTime` değeri `block.timestamp` değerinden düşük olduğunda) kullanıcıların teklif veremeyeceğini belirtir. Bu nedenle bir geliştirici, açık artırma bittiğinde (yani, `auctionEndTime` > `block.timestamp` olduğunda) `bid()` işlevine yapılan çağrıların başarılı olup olmadığını kontrol eden bir birim testi çalıştırabilir. ##### 2. Sözleşmenin yürütülmesiyle ilgili tüm varsayımları değerlendirin @@ -126,11 +126,11 @@ Birçok birim test şeması, savlar (bir sözleşmenin neleri yapıp neleri yapa - Teklifi kazanmayı başaramayan kullanıcılara fonları geri verilir. -**Not**: Varsayımları test etmenin diğer bir yolu ise bir sözleşmede [fonksiyon niteleyicileri](https://docs.soliditylang.org/en/v0.8.16/contracts.html#function-modifiers), özellikle de `require`, `assert`, ve `if…else` ifadelerini tetikleyen testler yazmaktır. +**Not**: Varsayımları test etmenin bir başka yolu da bir sözleşmede, özellikle `require`, `assert` ve `if…else` ifadeleri gibi [işlev değiştiricilerini](https://docs.soliditylang.org/en/v0.8.16/contracts.html#function-modifiers) tetikleyen testler yazmaktır. ##### 3. Kod kapsamını ölçün -[Kod kapsamı](https://en.m.wikipedia.org/wiki/Code_coverage), kodunuzda testler esnasında çalıştırılan dal, satır ve ifade sayısını takip eden bir test metriğidir. Testler iyi kod kapsamına sahip olmalıdır; aksi takdirde, sözleşmenin tüm testleri geçtiği ama yine de kodunda açıklar bulundurduğuna işaret eden "yalancı negatifler" alabilirsiniz. Bununla birlikte yüksek kod kapsamı kaydetmek, bir akıllı sözleşmedeki tüm ifadelerin/fonksiyonların doğruluğunun yeterince test edildiğine dair güvence sağlar. +[Kod kapsamı](https://en.m.wikipedia.org/wiki/Code_coverage), testler sırasında kodunuzda yürütülen dalların, satırların ve ifadelerin sayısını izleyen bir test metriğidir. Test edilmemiş güvenlik açıklarının riskini en aza indirmek için testlerin iyi bir kod kapsamına sahip olması gerekir. Yeterli kapsama alanı olmadan, tüm testler geçse bile sözleşmenizin güvenli olduğunu yanlış bir şekilde varsayabilirsiniz, oysa test edilmemiş kod yollarında hala güvenlik açıkları mevcuttur. Bununla birlikte yüksek kod kapsamı kaydetmek, bir akıllı sözleşmedeki tüm ifadelerin/fonksiyonların doğruluğunun yeterince test edildiğine dair güvence sağlar. ##### 4. İyi geliştirilmiş test çerçeveleri kullanın @@ -144,13 +144,13 @@ Solidity akıllı sözleşmeleri için birim testi çerçeveleri farklı dillerd - **[Remix ile birim testleri çalıştırma](https://remix-ide.readthedocs.io/en/latest/unittesting.html#write-tests)** - **[Ape ile birim testleri çalıştırma](https://docs.apeworx.io/ape/stable/userguides/testing.html)** - **[Hardhat ile birim testleri çalıştırma](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** -- **[Wake ile birim testi çalıştırma](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** +- **[Wake ile birim testleri çalıştırma](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** ### Entegrasyon testi {#integration-testing-for-smart-contracts} -Birim testi izole edilmiş sözleşme işlevlerinde hata ayıklarken, entegrasyon testleri bir akıllı sözleşmenin tüm bileşenlerini bir bütün olarak değerlendirir. Entegrasyon testi, sözleşmeler arası çağrılardan veya aynı akıllı sözleşmedeki farklı işlevler arasındaki etkileşimlerden kaynaklanan sorunları tespit edebilir. Örneğin, entegrasyon testleri [kalıtım](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance) ve bağımlılık enjeksiyonu gibi şeylerin doğru çalışıp çalışmadığını kontrol etmeye yardımcı olabilir. +Birim testi izole edilmiş sözleşme işlevlerinde hata ayıklarken, entegrasyon testleri bir akıllı sözleşmenin tüm bileşenlerini bir bütün olarak değerlendirir. Entegrasyon testi, sözleşmeler arası çağrılardan veya aynı akıllı sözleşmedeki farklı işlevler arasındaki etkileşimlerden kaynaklanan sorunları tespit edebilir. Örneğin entegrasyon testleri, [kalıtım](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance) ve bağımlılık enjeksiyonu gibi şeylerin düzgün çalışıp çalışmadığını kontrol etmeye yardımcı olabilir. -Entegrasyon testi, sözleşmenizin modüler bir mimariyi benimsemesi ya da yürütülmesi sırasında diğer zincir içi sözleşmelerle arayüz oluşturması açısından kullanışlıdır. Entegrasyon testlerini yürütmenin bir yolu, blokzincirini belirli bir yükseklikte ([Forge](https://book.getfoundry.sh/forge/fork-testing) veya [Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks) gibi bir araç kullanarak) [çatallandırmak](/glossary/#fork) ve sözleşmeniz ile dağıtılmış sözleşmeler arasındaki etkileşimleri simüle etmektir. +Entegrasyon testi, sözleşmeniz modüler bir mimari benimsiyorsa veya yürütme sırasında diğer zincir üstü sözleşmelerle arayüz oluşturuyorsa kullanışlıdır. Entegrasyon testlerini çalıştırmanın bir yolu, belirli bir yükseklikte [blokzincirini çatallamak](/glossary/#fork) ([Forge](https://book.getfoundry.sh/forge/fork-testing) veya [Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks) gibi bir araç kullanarak) ve sözleşmeniz ile dağıtılmış sözleşmeler arasındaki etkileşimleri simüle etmektir. Çatallanmış blokzincir, ana ağa benzer şekilde davranır ve ilişkili durumları ve bakiyeleri bulunan hesaplara sahiptir. Ancak yalnızca ayrıştırılmış bir yerel geliştirme ortamı olarak işlev görür, yani işlemler için gerçek Ether'e ihtiyacınız olmaz ve yaptığınız değişiklikler gerçek Ethereum ağını etkilemez. @@ -158,62 +158,62 @@ Entegrasyon testi, sözleşmenizin modüler bir mimariyi benimsemesi ya da yür Özellik tabanlı test, bir akıllı sözleşmenin tanımlanmış bir özelliği karşılayıp karşılayamadığının kontrol edildiği bir süreçtir. Özellikler, farklı senaryolarda doğru kalması beklenen bir sözleşme davranışı hakkındaki gerçekleri ortaya koyar; "Sözleşmedeki aritmetik işlemler asla taşma veya yetersizlik gösteremez" ifadesi örnek bir akıllı sözleşme özelliği olabilir. -**Statik analiz** ve **dinamik analiz**, özellik tabanlı test yürütmenin iki yaygın tekniğidir ve ikisi de bir programın kodunun (bu durumda bir akıllı sözleşme) önceden tanımlanmış bir özelliği karşıladığını doğrulayabilir. Özellik tabanlı test araçlarından bazıları, beklenen sözleşme özellikleri ile ilgili önceden tanımlanmış kurallar ile birlikte gelir ve kodu bu kurallara karşı kontrol eder, bazıları ise bir akıllı sözleşme için özel özellikler oluşturmanıza olanak tanır. +**Statik analiz** ve **dinamik analiz**, özellik tabanlı test yürütmenin iki yaygın tekniğidir ve her ikisi de bir programın kodunun (bu durumda bir akıllı sözleşme) önceden tanımlanmış bir özelliği karşıladığını doğrulayabilir. Özellik tabanlı test araçlarından bazıları, beklenen sözleşme özellikleri ile ilgili önceden tanımlanmış kurallar ile birlikte gelir ve kodu bu kurallara karşı kontrol eder, bazıları ise bir akıllı sözleşme için özel özellikler oluşturmanıza olanak tanır. #### Statik analiz {#static-analysis} Bir statik analizör, bir akıllı sözleşmenin kaynak kodunu girdi olarak alır ve sözleşmenin bir özelliği karşılayıp karşılamadığını belirten sonuçları çıktı olarak verir. Dinamik analizin aksine, statik analiz bir sözleşmenin doğruluğunu analiz etmek amacıyla yürütülmesini kapsamaz. Statik analiz bunun yerine bir akıllı sözleşmenin yürütme esnasında takip edebileceği olası tüm yolları anlamaya çalışır (yani kaynak kodun yapısını sözleşmenin yürütme esnasındaki işlemleri için ne anlama gelebileceğini belirlemek amacıyla inceler). -[Linting](https://www.perforce.com/blog/qac/what-lint-code-and-why-linting-important) ve [statik test](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis) sözleşmeler üzerinde statik analiz çalıştırmanın yaygın yöntemleridir. İkisi de derleyiciden çıktı olarak alınan [soyut söz dizimi ağaçları](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree) ve [kontrol akışı grafikleri](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/) gibi sözleşme yürütmesinin düşük seviye gösterimlerinin analiz edilmesini gerektirir. +[Linting](https://www.perforce.com/blog/qac/what-is-linting) ve [statik test](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis), sözleşmeler üzerinde statik analiz çalıştırmak için yaygın yöntemlerdir. Her ikisi de derleyici tarafından çıktılanan [soyut sözdizimi ağaçları](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree) ve [kontrol akış grafikleri](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/) gibi bir sözleşme yürütmesinin düşük seviyeli temsillerini analiz etmeyi gerektirir. Çoğu durumda, statik analiz bir sözleşmenin kodundaki güvenli olmayan yapılar, söz dizimi hataları veya kodlama standartlarının ihlalleri gibi güvenlik sorunlarını tespit etmek açısından kullanışlıdır. Ancak statik analizörler, genelde daha derin güvenlik açıklarını tespit etme konusunda güvenilmezdir ve aşırı sayıda yalancı pozitifler üretebilir. #### Dinamik analiz {#dynamic-analysis} -Dinamik analiz, herhangi bir hata izinin belirli özellikleri ihlal edip etmediğini görmek için bir akıllı sözleşmenin fonksiyonlarında sembolik girdiler (örneğin [sembolik yürütmede](https://en.m.wikipedia.org/wiki/Symbolic_execution)) veya somut girdiler (örneğin [bulandırmada](https://owasp.org/www-community/Fuzzing)) oluşturur. Bu tarz özellik tabanlı test biçimi, test durumlarının birden çok senaryoyu kapsaması ve bir programın test durumlarının oluşturulmasını işlemesi bakımından birim testlerinden farklıdır. +Dinamik analiz, herhangi bir yürütme izinin belirli özellikleri ihlal edip etmediğini görmek için akıllı sözleşme işlevlerine sembolik girdiler (ör. [sembolik yürütmede](https://en.m.wikipedia.org/wiki/Symbolic_execution)) veya somut girdiler (ör. [bulandırmada](https://owasp.org/www-community/Fuzzing)) oluşturur. Bu tarz özellik tabanlı test biçimi, test durumlarının birden çok senaryoyu kapsaması ve bir programın test durumlarının oluşturulmasını işlemesi bakımından birim testlerinden farklıdır. -[Bulandırma](https://halborn.com/what-is-fuzz-testing-fuzzing/), akıllı sözleşmelerdeki rastgele özellikleri doğrulamak için kullanılan dinamik bir analiz tekniği örneğidir. Bir bulandırıcı, tanımlı bir girdi değerinin rastgele veya hatalı biçimlendirilmiş varyasyonlarıyla birlikte hedef sözleşmedeki fonksiyonları çağırır. Akıllı sözleşme bir hata durumuna girerse (örneğin, bir savın başarısız olduğu durum), sorun işaretlenir ve yürütmeyi hassas yola sokan girdiler bir raporda gösterilir. +[Bulandırma](https://www.halborn.com/blog/post/what-is-fuzz-testing-fuzzing), akıllı sözleşmelerdeki rastgele özellikleri doğrulamak için kullanılan bir dinamik analiz tekniği örneğidir. Bir bulandırıcı, tanımlı bir girdi değerinin rastgele veya hatalı biçimlendirilmiş varyasyonlarıyla birlikte hedef sözleşmedeki fonksiyonları çağırır. Akıllı sözleşme bir hata durumuna girerse (örneğin, bir savın başarısız olduğu durum), sorun işaretlenir ve yürütmeyi hassas yola sokan girdiler bir raporda gösterilir. Beklenmeyen girdilerin yanlış işlenmesi, istenmeyen yürütmelere neden olup tehlikeli etkiler yaratabileceğinden bulanıklaştırma, akıllı sözleşmelerin girdi doğrulama mekanizmasını değerlendirmede kullanışlıdır. Bu tür özellik tabanlı testler birçok nedenden ötürü faydalı olabilir: -1. **Birçok durumu kapsayan test senaryolarını yazmak zordur.** Bir özellik testi, yalnızca bir davranış ve davranışı test etmek için bir veri aralığı tanımlamanızı gerektirir; program, tanımlanan özelliği temel alarak otomatik olarak test senaryoları oluşturur. +1. **Birçok senaryoyu kapsayacak test senaryoları yazmak zordur.** Bir özellik testi yalnızca bir davranış ve davranışı test etmek için bir veri aralığı tanımlamanızı gerektirir—program, tanımlanan özelliğe göre otomatik olarak test senaryoları oluşturur. -2. ** Test paketiniz program içindeki olası tüm yolları yeterince kapsamayabilir.** %100 kapsamla bile bazı ekstrem senaryolar gözden kaçabilir. +2. **Test paketiniz program içindeki olası tüm yolları yeterince kapsamayabilir.** %100 kapsama oranıyla bile uç durumları gözden kaçırmak mümkündür. -3. **Birim testleri, bir sözleşmenin örnek veriler için doğru şekilde yürütüldüğünü kanıtlasa da sözleşmenin örnek dışındaki girdiler için doğru şekilde yürütülüp yürütülmeyeceği bilinmez.** Özellik testleri, onaylama hatalarına neden olan yürütme izlerini bulmak için belirli bir girdi değerinin birden çok varyasyonuyla birlikte hedef sözleşmeyi yürütür. Böylelikle özellik testleri, sözleşmenin daha geniş bir giriş verileri sınıfında doğru yürütülmesini daha net bir şekilde garanti eder. +3. **Birim testleri, bir sözleşmenin örnek veriler için doğru şekilde yürütüldüğünü kanıtlar, ancak sözleşmenin örnek dışındaki girdiler için doğru şekilde yürütülüp yürütülmeyeceği bilinmemektedir.** Özellik testleri, iddia hatalarına neden olan yürütme izlerini bulmak için belirli bir girdi değerinin birden çok varyasyonuyla bir hedef sözleşmeyi yürütür. Böylelikle özellik testleri, sözleşmenin daha geniş bir giriş verileri sınıfında doğru yürütülmesini daha net bir şekilde garanti eder. -### Akıllı sözleşmelerde özellik tabanlı testleri çalıştırabilmek için yönergeler {#running-property-based-tests} +### Akıllı sözleşmelerde özellik tabanlı testleri çalıştırma yönergeleri {#running-property-based-tests} -Özellik tabanlı test çalıştırma, genellikle bir akıllı sözleşmede özelliklerin tanımlanmasıyla (ör. [tamsayı taşması](https://github.com/ConsenSys/mythril/wiki/Integer-Overflow) bulunmaması) veya doğrulamak istediğiniz özelliklerin toplanması ile başlar. Özellik testleri yazarken, programın işlem girdileri için veri üretebileceği bir değer aralığı tanımlamanız da gerekebilir. +Özellik tabanlı test çalıştırmak genellikle bir akıllı sözleşmede doğrulamak istediğiniz bir özelliği (örneğin [tamsayı taşmalarının](https://github.com/ConsenSys/mythril/wiki/Integer-Overflow) olmaması) veya özellikler koleksiyonunu tanımlamakla başlar. Özellik testleri yazarken, programın işlem girdileri için veri üretebileceği bir değer aralığı tanımlamanız da gerekebilir. Testinizi düzgün bir şekilde yapılandırdıktan sonra özellik test aracı akıllı sözleşmelerde fonksiyonlarınızı rastgele üretilmiş girdilerle yürütür. Herhangi bir sav ihlali varsa, değerlendirilmekte olan özellikleri ihlal eden somut girdi verilerini içeren bir rapor almalısınız. Farklı araçlarla özellik tabanlı testler çalıştırmaya başlamakla ilgili kılavuzlara bakabilirsiniz: -- **[Slither ile akıllı sözleşmelerin statik analizi](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither#slither)** +- **[Slither ile akıllı sözleşmelerin statik analizi](https://github.com/crytic/slither)** - **[Wake ile akıllı sözleşmelerin statik analizi](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - **[Brownie ile özellik tabanlı test](https://eth-brownie.readthedocs.io/en/stable/tests-hypothesis-property.html)** -- **[Foundry ile sözleşme bulanıklaştırma](https://book.getfoundry.sh/forge/fuzz-testing)** -- **[Echidna ile sözleşme bulanıklaştırma](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial)** -- **[Wake ile sözleşme bulanıklaştırma](https://ackeeblockchain.com/wake/docs/latest/testing-framework/fuzzing/)** -- **[Manticore ile akıllı sözleşmeleri sembolik yürütme](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore#manticore-tutorial)** -- **[Mythril ile akıllı sözleşmeleri sembolik yürütme](https://mythril-classic.readthedocs.io/en/master/tutorial.html)** +- **[Foundry ile sözleşmeleri bulandırma](https://book.getfoundry.sh/forge/fuzz-testing)** +- **[Echidna ile sözleşmeleri bulandırma](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial)** +- **[Wake ile sözleşmeleri bulandırma](https://ackeeblockchain.com/wake/docs/latest/testing-framework/fuzzing/)** +- **[Manticore ile akıllı sözleşmelerin sembolik yürütmesi](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore#manticore-tutorial)** +- **[Mythril ile akıllı sözleşmelerin sembolik yürütmesi](https://mythril-classic.readthedocs.io/en/master/tutorial.html)** ## Akıllı sözleşmeler için manuel test {#manual-testing-for-smart-contracts} Akıllı sözleşmelerin manuel olarak test edilmesi, genellikle geliştirme döngüsünün otomatik testlerden sonraki safhalarında gerçekleştirilir. Bu test biçimi, teknik gereksinimlerde belirtildiği gibi performans gösterip göstermediğini görmek için akıllı sözleşmeyi tam entegrasyonlu tek bir ürün olarak değerlendirir. -### Sözleşmeleri yerel blokzincir üzerinde test etme {#testing-on-local-blockchain} +### Sözleşmeleri yerel bir blokzincirde test etme {#testing-on-local-blockchain} Yerel geliştirme ortamında gerçekleştirilen otomatik testler, yararlı hata ayıklama bilgileri sağlayabilir, dolayısıyla akıllı sözleşmenizin bir üretim ortamında nasıl davrandığını bilmek istersiniz. Ancak Ethereum ana zincirine dağıtım yaptığınızda gaz ücretleri ortaya çıkar; ayrıca akıllı sözleşmenizde hatalar varsa siz veya kullanıcılarınız para kaybına uğrayabilir. -Sözleşmenizi yerel bir blokzincirde ([geliştirme ağı](/developers/docs/development-networks/) olarak da bilinir) test etmeye alternatif olarak ana ağda test etmeniz önerilir. Bilgisayarınızda yerel olarak Ethereum blokzincirinin bir kopyası olarak çalışan yerel blokzincir, Ethereum yürütüm katmanının davranışını simüle eder. Bu sayede, önemli bir ek yüke maruz kalmadan işlemleri bir sözleşmeyle etkileşime girecek şekilde programlayabilirsiniz. +Sözleşmenizi yerel bir blokzincirde ([geliştirme ağı](/developers/docs/development-networks/) olarak da bilinir) test etmek, Ana Ağ'da test etmeye göre önerilen bir alternatiftir. Bilgisayarınızda yerel olarak Ethereum blokzincirinin bir kopyası olarak çalışan yerel blokzincir, Ethereum yürütüm katmanının davranışını simüle eder. Bu sayede, önemli bir ek yüke maruz kalmadan işlemleri bir sözleşmeyle etkileşime girecek şekilde programlayabilirsiniz. -Sözleşmeleri yerel bir blokzincirde çalıştırmak, bir tür manuel entegrasyon testi olarak faydalı olabilir. [Akıllı sözleşmeler, yüksek seviyede birleştirilebilir](/developers/docs/smart-contracts/composability/) olduklarından mevcut protokollerle entegre etmenize olanak tanısa da, zincir üstünde bu tür karmaşık etkileşimlerin doğru sonuçları vermesini sağlamanız gerekir. +Sözleşmeleri yerel bir blokzincirde çalıştırmak, bir tür manuel entegrasyon testi olarak faydalı olabilir. [Akıllı sözleşmeler yüksek düzeyde birleştirilebilirdir](/developers/docs/smart-contracts/composability/), bu da mevcut protokollerle entegre olmanıza olanak tanır—ancak yine de bu tür karmaşık zincir üstü etkileşimlerin doğru sonuçlar ürettiğinden emin olmanız gerekir. [Geliştirme ağları hakkında daha fazla bilgi.](/developers/docs/development-networks/) -### Sözleşmeleri test ağları üzerinde test etme {#testing-contracts-on-testnets} +### Sözleşmeleri test ağlarında test etme {#testing-contracts-on-testnets} -Test ağı ya da testnet, Ethereum ana ağı ile aynı şekilde çalışır ancak bunu, gerçek değeri olmayan Ether (ETH) kullanarak yapar. Sözleşmenizi bir [test ağı](/developers/docs/networks/#ethereum-testnets) üzerine dağıtmanız, herhangi birisinin fonlarını riske atmadan sözleşmenizle (örneğin dapp ön yüzü aracılığıyla) etkileşime girebilmesi anlamına gelir. +Bir test ağı veya testnet, gerçek dünya değeri olmayan Ether (ETH) kullanması dışında tamamen Ethereum Ana Ağı gibi çalışır. Sözleşmenizi bir [test ağına](/developers/docs/networks/#ethereum-testnets) dağıtmak, herkesin fonları riske atmadan onunla (örneğin merkeziyetsiz uygulamanın ön yüzü aracılığıyla) etkileşime girebileceği anlamına gelir. Bu tip manuel testler, uygulama akışınızın kullanıcı bakış açısıyla uçtan uca değerlendirilmesi açısından kullanışlıdır. Bu aşamada beta test kullanıcıları ayrıca deneme çalıştırmaları gerçekleştirip sözleşmenin iş mantığı ve genel işlevselliği ile ilgili sorunları bildirebilir. @@ -221,27 +221,27 @@ Yerel bir blokzincirde test ettikten sonra bir test ağına dağıtım yapmak, i [Ethereum test ağları hakkında daha fazla bilgi.](/developers/docs/development-networks/#public-beacon-testchains) -## Test ile resmi doğrulama karşılaştırması {#testing-vs-formal-verification} +## Test ve Resmi Doğrulama {#testing-vs-formal-verification} -Test etme, bir sözleşmenin bazı veri girdileri için beklenen sonuçları verdiğinin doğrulanmasına yardımcı olurken, testler sırasında kullanılmayan girdiler için aynı şeyi kesin olarak kanıtlayamaz. Bu nedenle, bir akıllı sözleşmeyi test etmek, "fonksiyonel doğruluğu" güvence altına almaz (yani, bir programın _tüm_ girdi değerleri kümesi için gerektiği gibi davrandığını gösteremez). +Test etme, bir sözleşmenin bazı veri girdileri için beklenen sonuçları verdiğinin doğrulanmasına yardımcı olurken, testler sırasında kullanılmayan girdiler için aynı şeyi kesin olarak kanıtlayamaz. Bu nedenle bir akıllı sözleşmeyi test etmek, "işlevsel doğruluğu" garanti edemez (yani, bir programın _tüm_ girdi değeri kümeleri için gerektiği gibi davrandığını gösteremez). Resmi doğrulama, bir yazılımın doğruluğunu değerlendirmek için programın resmi modelinin resmi spesifikasyonla uyumlu olup olmadığını kontrol etme yaklaşımıdır. Resmi model, bir programın soyut matematiksel gösterimi olarak ifade edilirken resmi spesifikasyon ise bir programın özelliklerini tanımlar (yani, programın yürütülmesi hakkındaki mantıksal savlardır). Özellikler matematiksel terimlerle yazıldığı için bir sistemin resmi (matematiksel) modelinin bir spesifikasyonu mantıksal çıkarım kuralları kullanarak karşıladığını doğrulamak mümkün hale gelir. Bu nedenle, resmi doğrulama araçlarının bir sistemin doğruluğuna dair "matematiksel kanıt" ürettiği söylenir. -Test etmenin aksine resmi doğrulama, bir akıllı sözleşmenin yürütülmesinin _tüm_ yürütmeler için bir resmi bir spesifikasyonu karşıladığını (yani, hiçbir hatası olmadığını) doğrulamak için örnek veriyle yürütme yapmaya gerek olmadan kullanılabilir. Bu, sadece onlarca birim testi çalıştırmak için harcanan zamanı azaltmakla kalmaz, aynı zamanda gizli güvenlik açıklarını yakalama konusunda da daha etkilidir. Bununla birlikte, resmi doğrulama teknikleri uygulama zorluğu ve kullanışlılığına göre bir spektrumun farklı noktalarında yer alır. +Testin aksine, resmi doğrulama, bir akıllı sözleşme yürütmesinin _tüm_ yürütmeler için resmi bir belirtimi karşıladığını (yani, hatası olmadığını) doğrulamak için örnek verilerle yürütmeye gerek kalmadan kullanılabilir. Bu, sadece onlarca birim testi çalıştırmak için harcanan zamanı azaltmakla kalmaz, aynı zamanda gizli güvenlik açıklarını yakalama konusunda da daha etkilidir. Bununla birlikte, resmi doğrulama teknikleri uygulama zorluğu ve kullanışlılığına göre bir spektrumun farklı noktalarında yer alır. [Akıllı sözleşmeler için resmi doğrulama hakkında daha fazla bilgi.](/developers/docs/smart-contracts/formal-verification) -## Test etme ile denetleme ve hata ödüllerinin karşılaştırılması {#testing-vs-audits-bug-bounties} +## Test, Denetimler ve Hata Ödülleri {#testing-vs-audits-bug-bounties} Yukarıda belirtildiği gibi, titizlikle yapılan testler bir sözleşmede hata bulunmamasını nadiren garanti edebilir; resmi doğrulama yaklaşımları doğruluk konusunda daha güçlü güvence sağlayabilir ancak şu anda kullanımı zor ve maliyeti yüksektir. -Yine de, bağımsız bir kod incelemesi ile sözleşmenin güvenlik açıklarını yakalama olasılığınızı daha da artırabilirsiniz. [Akıllı sözleşme denetimleri](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/) ve [hata ödülleri](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7), sözleşmelerinizi başkalarına analiz ettirmek için kullanabileceğiniz iki yöntemdir. +Yine de, bağımsız bir kod incelemesi ile sözleşmenin güvenlik açıklarını yakalama olasılığınızı daha da artırabilirsiniz. [Akıllı sözleşme denetimleri](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/) ve [hata ödülleri](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7) başkalarının sözleşmelerinizi analiz etmesini sağlamanın iki yoludur. Denetimler, akıllı sözleşmelerde güvenlik açıkları ve zayıf geliştirme uygulamaları durumlarını bulma konusunda deneyimli denetçiler tarafından gerçekleştirilir. Bir denetim genellikle testin (ve muhtemelen resmi doğrulamanın) yanı sıra tüm kod tabanının manuel olarak gözden geçirilmesini içerir. -Bunun aksine hata ödül programı, genellikle akıllı sözleşmelerde bir güvenlik açığı keşfeden ve geliştiricilere açıklayan bir bireye (genellikle [beyaz şapkalı hackerlar](https://en.wikipedia.org/wiki/White_hat_(computer_security)) olarak tanımlanan) maddi bir ödül sunmayı içerir. Hata ödülleri, başkalarından akıllı sözleşmelerdeki kusurları bulmalarına yardım etmelerini içerdiğinden denetimlere benzer. +Bunun aksine, bir hata ödülü programı genellikle bir akıllı sözleşmede güvenlik açığı keşfeden ve bunu geliştiricilere ifşa eden bir kişiye (genellikle [beyaz şapkalı hackerlar](https://en.wikipedia.org/wiki/White_hat_\(computer_security\)) olarak tanımlanır) finansal bir ödül sunmayı içerir. Hata ödülleri, başkalarından akıllı sözleşmelerdeki kusurları bulmalarına yardım etmelerini içerdiğinden denetimlere benzer. En önemli fark, hata ödül programlarının daha geniş bir geliştirici/hacker topluluğuna açık olması ve özgün yetenek ve deneyime sahip etik hacker ve bağımsız güvenlik profesyonellerinden oluşan bir grubu kendine çekmesidir. Bu, esas olarak sınırlı veya dar uzmanlığa sahip ekiplere emanet edilen akıllı sözleşme denetimlerine göre bir avantaj olabilir. @@ -251,58 +251,60 @@ En önemli fark, hata ödül programlarının daha geniş bir geliştirici/hacke - **[solidity-coverage](https://github.com/sc-forks/solidity-coverage)** - _Solidity ile yazılmış akıllı sözleşmeler için kod kapsamı aracı._ -- **[Waffle](https://ethereum-waffle.readthedocs.io/en/latest/)** - _Gelişmiş akıllı sözleşme geliştirme ve test çerçevesi (ethers.js tabanlı)_. +- **[Waffle](https://ethereum-waffle.readthedocs.io/en/latest/)** - _Gelişmiş akıllı sözleşme geliştirme ve testi için çerçeve (ethers.js tabanlı)_. -- **[Remix Testleri](https://github.com/ethereum/remix-project/tree/master/libs/remix-tests)** - _Solidity akıllı sözleşmelerini test etmeye yönelik araç. Bir sözleşme için test senaryoları yazmak ve çalıştırmak amacıyla kullanılan Remix IDE "Solidity Unit Testing" eklentisi altında çalışır._ +- **[Remix Tests](https://github.com/ethereum/remix-project/tree/master/libs/remix-tests)** - _Solidity akıllı sözleşmelerini test etme aracı._ Bir sözleşme için test senaryoları yazmak ve çalıştırmak amacıyla kullanılan Remix IDE "Solidity Unit Testing" eklentisi altında çalışır._ -- **[OpenZeppelin Test Yardımcıları](https://github.com/OpenZeppelin/openzeppelin-test-helpers)** - _Ethereum akıllı sözleşme testi için sav kütüphanesi. Sözleşmelerinizin beklendiği gibi davrandığından emin olun!_ +- **[OpenZeppelin Test Helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers)** - _Ethereum akıllı sözleşme testi için iddia kütüphanesi._ Sözleşmelerinizin beklendiği gibi davrandığından emin olun!_ - **[Brownie birim test çerçevesi](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** - _Brownie, minimum kodla küçük testler yazmanıza olanak tanıyan, büyük projeler için iyi ölçeklenen ve oldukça genişletilebilir, zengin özelliklere sahip bir test çerçevesi olan Pytest'i kullanır._ -- **[Foundry Testleri](https://github.com/foundry-rs/foundry/tree/master/crates/forge)** - _Foundry, basit birim testleri, gaz optimizasyon kontrolleri ve sözleşme bulanıklaştırma gerçekleştirebilen hızlı ve esnek bir Ethereum test çerçevesi olan Forge'u barındırır._ +- **[Foundry Tests](https://github.com/foundry-rs/foundry/tree/master/crates/forge)** - _Foundry, basit birim testleri, gaz optimizasyon kontrolleri ve sözleşme bulandırması gerçekleştirebilen hızlı ve esnek bir Ethereum test çerçevesi olan Forge'u sunar._ -- **[Hardhat Testleri](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** - _Ethers.js, Mocha ve Chai tabanlı akıllı sözleşme test çerçevesi._ +- **[Hardhat Tests](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** - _Ethers.js, Mocha ve Chai tabanlı akıllı sözleşmeleri test etme çerçevesi._ -- **[ApeWorx](https://docs.apeworx.io/ape/stable/userguides/testing.html)** - _Ethereum Sanal Makinası'nı hedefleyen akıllı sözleşmeleri test etmek için Python tabanlı geliştirme ve test çerçevesi._ +- **[ApeWorx](https://docs.apeworx.io/ape/stable/userguides/testing.html)** - _Ethereum Sanal Makinesi'ni hedefleyen akıllı sözleşmeler için Python tabanlı geliştirme ve test çerçevesi._ -- **[Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** - _En iyi kullanıcı deneyimi ve performansı için pytest ve Anvil kullanan, güçlü hata ayıklama yetenekleri ve zincirler arası test desteği ile birim testi ve fuzz testine yönelik Python tabanlı bir geliştirici alanıdır._ +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** - _En iyi kullanıcı deneyimi ve performansı için pytest ve Anvil'i kullanan, güçlü hata ayıklama yetenekleri ve zincirler arası test desteği ile birim testi ve fuzz testi için Python tabanlı bir çerçeve._ ### Özellik tabanlı test araçları {#property-based-testing-tools} #### Statik analiz araçları {#static-analysis-tools} -- **[Slither](https://github.com/crytic/slither)** - _Güvenlik açıklarını bulmaya, kod kavramayı geliştirmeye ve akıllı sözleşmeler için özel analizler yazmaya yarayan Python tabanlı Solidity statik analiz çerçevesi._ +- **[Slither](https://github.com/crytic/slither)** - _Güvenlik açıklarını bulmak, kod anlaşılırlığını artırmak ve akıllı sözleşmeler için özel analizler yazmak için Python tabanlı Solidity statik analiz çerçevesi._ + +- **[Ethlint](https://ethlint.readthedocs.io/en/latest/)** - _Solidity akıllı sözleşme programlama dili için stil ve güvenlik en iyi uygulamalarını zorunlu kılan bir linter._ -- **[Ethlint](https://ethlint.readthedocs.io/en/latest/)** - _Solidity akıllı sözleşme programlama dilinin tarz ve güvenlik en iyi uygulamalarının yürütülmesini sağlamaya yarayan linter._ +- **[Cyfrin Aderyn](https://cyfrin.io/tools/aderyn)** - _Web3 akıllı sözleşme güvenliği ve geliştirmesi için özel olarak tasarlanmış Rust tabanlı statik analiz aracı._ -- **[Cyfrin Aderyn](https://cyfrin.io/tools/aderyn)** - _Web3 akıllı sözleşme güvenliği ve geliştirmesi için özel olarak tasarlanan, Rust tabanlı bir statik analiz aracıdır._ +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - _Güvenlik açığı ve kod kalitesi dedektörleri, koddan yararlı bilgiler ayıklamak için yazıcılar ve özel alt modüller yazma desteği ile Python tabanlı statik analiz çerçevesi._ -- **[Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - _Güvenlik açığı ve kod kalitesi dedektörleri, koddan yararlı bilgiler ayıklamak için yazıcılar ve özel alt modüller yazma desteği ile Python tabanlı bir statik analiz geliştirici ortamıdır._ +- **[Slippy](https://github.com/fvictorio/slippy)** - _Solidity için basit ve güçlü bir linter._ #### Dinamik analiz araçları {#dynamic-analysis-tools} -- **[Echidna](https://github.com/crytic/echidna/)** - _Akıllı sözleşmelerdeki güvenlik açıklarını özellik tabanlı testler aracılığıyla tespit etmeye yarayan hızlı sözleşme bulandırıcı._ +- **[Echidna](https://github.com/crytic/echidna/)** - _Özellik tabanlı test yoluyla akıllı sözleşmelerdeki güvenlik açıklarını tespit etmek için hızlı sözleşme bulandırıcısı._ -- **[Diligence Fuzzing](https://consensys.net/diligence/fuzzing/)** - _Akıllı sözleşme kodunda özellik ihlallerini tespit için kullanışlı, otomatikleştirilmiş bulandırma aracı._ +- **[Diligence Fuzzing](https://consensys.net/diligence/fuzzing/)** - _Akıllı sözleşme kodundaki özellik ihlallerini tespit etmek için kullanışlı otomatik bulandırma aracı._ -- **[Manticore](https://manticore.readthedocs.io/en/latest/index.html)** - _EVM bit kodunu analiz etmeye yarayan dinamik sembolik yürütme çerçevesi._ +- **[Manticore](https://manticore.readthedocs.io/en/latest/index.html)** - _EVM bayt kodunu analiz etmek için dinamik sembolik yürütme çerçevesi._ -- **[Mythril](https://github.com/ConsenSys/mythril-classic)** - _Kusur analizi, konkolik analiz ve kontrol akışı kontrolünü kullanarak sözleşme güvenlik açıklarını tespit etmeye yarayan ESM bit kodu değerlendirme aracı._ +- **[Mythril](https://github.com/ConsenSys/mythril-classic)** - _Leke analizi, konkolik analiz ve kontrol akışı denetimi kullanarak sözleşme güvenlik açıklarını tespit etmek için EVM bayt kodu değerlendirme aracı._ -- **[Diligence Scribble](https://consensys.net/diligence/scribble/)** - _Scribble, akıllı sözleşmelere özellikler eklemenize olanak tanıyan bir spesifikasyon dili ve çalışma zamanı doğrulama aracıdır. Bu özellikler sayesinde sözleşmeleri otomatik olarak Diligence Fuzzing veya MythX gibi araçlarla test edebilirsiniz._ +- **[Diligence Scribble](https://consensys.net/diligence/scribble/)** - _Scribble, akıllı sözleşmeleri Diligence Fuzzing veya MythX gibi araçlarla otomatik olarak test etmenizi sağlayan özelliklerle donatmanıza olanak tanıyan bir belirtim dili ve çalışma zamanı doğrulama aracıdır._ ## İlgili öğreticiler {#related-tutorials} -- [Farklı test ürünlerine genel bakış ve ürünlerin karşılaştırılması](/developers/tutorials/guide-to-smart-contract-security-tools/) \_ +- [Farklı test ürünlerine genel bir bakış ve karşılaştırma](/developers/tutorials/guide-to-smart-contract-security-tools/) \_ - [Akıllı sözleşmeleri test etmek için Echidna nasıl kullanılır](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) -- [Manticore kullanarak akıllı sözleşme hataları nasıl bulunur?](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) -- [Akıllı sözleşme hatalarını bulmak için Slither nasıl kullanılır?](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) -- [Solidity sözleşmeleri test etmek için nasıl taklit edilir?](/developers/tutorials/how-to-mock-solidity-contracts-for-testing/) -- [Foundry'de Solidity kullanarak birim testi çalıştırma](https://www.rareskills.io/post/foundry-testing-solidity) +- [Akıllı sözleşme hatalarını bulmak için Manticore nasıl kullanılır](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) +- [Akıllı sözleşme hatalarını bulmak için Slither nasıl kullanılır](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) +- [Test için Solidity sözleşmeleri nasıl taklit edilir](/developers/tutorials/how-to-mock-solidity-contracts-for-testing/) +- [Foundry kullanarak Solidity'de birim testleri nasıl çalıştırılır](https://www.rareskills.io/post/foundry-testing-solidity) -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Ethereum akıllı sözleşmelerini test etmeye yönelik ayrıntılı bir kılavuz](https://iamdefinitelyahuman.medium.com/an-in-depth-guide-to-testing-ethereum-smart-contracts-2e41b2770297) -- [Ethereum akıllı sözleşmeleri nasıl test edilir?](https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d) -- [MolochDAO'nun geliştiriciler için birim testi rehberi](https://github.com/MolochVentures/moloch/tree/4e786db8a4aa3158287e0935dcbc7b1e43416e38/test#moloch-testing-guide) -- [Akıllı sözleşmeleri, konunun en büyük uzmanı gibi nasıl test edersiniz?](https://forum.openzeppelin.com/t/test-smart-contracts-like-a-rockstar/1001) +- [Ethereum akıllı sözleşmelerini test etme üzerine derinlemesine bir rehber](https://iamdefinitelyahuman.medium.com/an-in-depth-guide-to-testing-ethereum-smart-contracts-2e41b2770297) +- [Ethereum akıllı sözleşmeleri nasıl test edilir](https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d) +- [Geliştiriciler için MolochDAO'nun birim test rehberi](https://github.com/MolochVentures/moloch/tree/4e786db8a4aa3158287e0935dcbc7b1e43416e38/test#moloch-testing-guide) +- [Akıllı sözleşmeler bir rock yıldızı gibi nasıl test edilir](https://forum.openzeppelin.com/t/test-smart-contracts-like-a-rockstar/1001) diff --git a/public/content/translations/tr/developers/docs/smart-contracts/upgrading/index.md b/public/content/translations/tr/developers/docs/smart-contracts/upgrading/index.md index 4db5923f0b6..8a115f1802e 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/upgrading/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/upgrading/index.md @@ -1,6 +1,6 @@ --- -title: Akıllı sözleşmeleri yükseltmek -description: Ethereum akıllı sözleşmeleri için güncelleme modellerine genel bir bakış +title: "Akıllı sözleşmeleri yükseltmek" +description: "Ethereum akıllı sözleşmeleri için güncelleme modellerine genel bir bakış" lang: tr --- @@ -10,9 +10,9 @@ Değişmezlik, akıllı sözleşmelerin güvensizliği, merkeziyestizliği ve g Ancak akıllı sözleşmeleri geliştirmeye yönelik artan araştırmalar, birkaç yükseltme modelinin kullanılmaya başlamasına neden olmuştur. Bu yükseltme modelleri geliştiricilere, (değişmezliği korurken) iş mantığını farklı sözleşmelere yerleştirerek akıllı sözleşmeleri yükseltme olanağı verir. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -[Akıllı sözleşmelere](/developers/docs/smart-contracts/), [akıllı sözleşme anatomisine](/developers/docs/smart-contracts/anatomy/) ve [Ethereum Sanal Makinesi'ne (EVM)](/developers/docs/evm/) tam anlamıyla hakim olmalısınız. Bu kılavuz aynı zamanda, okuyucuların akıllı sözleşmeleri programlama konusunu kavramış durumda olduğunu varsayar. +[Akıllı sözleşmeler](/developers/docs/smart-contracts/), [akıllı sözleşme anatomisi](/developers/docs/smart-contracts/anatomy/) ve [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) hakkında iyi bir anlayışa sahip olmalısınız. Bu kılavuz aynı zamanda, okuyucuların akıllı sözleşmeleri programlama konusunu kavramış durumda olduğunu varsayar. ## Akıllı sözleşme yükseltmesi nedir? {#what-is-a-smart-contract-upgrade} @@ -42,7 +42,7 @@ Sözleşme taşımanın son adımı, kullanıcıları yeni sözleşmeyi kullanma Sözleşme taşıma, akıllı sözleşmeleri kullanıcı etkileşimlerini kesintiye uğratmadan yükseltmeye yönelik görece basit ve güvenli bir tedbirdir. Ancak, kullanıcı depolama ve bakiyelerini yeni sözleşmeye manuel olarak taşımak zaman alıcıdır ve yüksek gaz ücretlerine sebep olabilir. -[Sözleşme taşıma hakkında daha fazla bilgi.](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) +[Sözleşme taşıma hakkında daha fazlası.](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) ### Yükseltme mekanizması 2: Veri ayırma {#data-separation} @@ -72,9 +72,9 @@ Bir vekil modelinde şunlar gerçekleşir: Vekil modellerin kullanılması için **delegatecall** fonksiyonuna hakim olmak gerekir. Basitçe ifade etmek gerekirse, `delegatecall` bir sözleşmenin başka bir sözleşmeyi çağırmasına izin veren bir işlem kodudur, gerçek kod yürütme ise çağıran sözleşme bağlamında gerçekleşir. Vekil modellerde `delegatecall` fonksiyonunu kullanmanın olası sonuçlarından biri, vekil sözleşmenin kendi depolamasını okuyup yazması ve mantık sözleşmesinde saklanan mantığı, dahili bir fonksiyonu çağırıyormuş gibi yürütmesidir. -[Solidy belgelerinden](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries): +[Solidity belgelerinden](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries): -> _Mesaj çağrısının **delegatecall** adında özel bir varyantı vardır ve bu varyant, hedef adresteki kodun, çağıran sözleşme bağlamında (yani adreste) yürütülmesi gerçeği dışında bir mesaj çağrısı ile aynıdır; `msg.sender` ve `msg.value` değerleri değişmez.__Bu, bir sözleşmenin çalışma zamanında farklı bir adresten dinamik olarak kod yükleyebilmesi anlamına gelir. Depolama, geçerli adres ve bakiye, hala çağırana başvuruda bulunur, çağrılan adresten sadece kod alınır._ +> _Mesaj çağrısının **delegatecall** adında özel bir varyantı vardır. Bu, hedef adresteki kodun çağıran sözleşmenin bağlamında (yani adresinde) yürütülmesi ve `msg.sender` ile `msg.value` değerlerinin değişmemesi dışında bir mesaj çağrısıyla aynıdır._ _Bu, bir sözleşmenin çalışma zamanında farklı bir adresten dinamik olarak kod yükleyebileceği anlamına gelir._ Depolama, geçerli adres ve bakiye, hala çağırana başvuruda bulunur, çağrılan adresten sadece kod alınır._ Vekil sözleşme, bir kullanıcı bir fonksiyonu her çağırdığında `delegatecall` çağrısı yapması gerektiğini bilir. Çünkü yerleşik bir `fallback` fonksiyonuna sahiptir. Solidity programlamada, bir fonksiyon çağrısı sözleşmede belirtilmiş olan fonksiyonlarla eşleşmediğinde [geri dönüş işlevi](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function) çalıştırılır. @@ -84,9 +84,9 @@ Vekil sözleşme, varsayılan olarak değiştirilemez ancak güncellenmiş iş m Vekil sözleşmeyi yeni bir mantık sözleşmesine yönlendirildiğinde kullanıcılar vekil sözleşmenin fonksiyonunu çağırdığında yürütülen kod değişir. Bu, kullanıcılardan yeni bir sözleşme ile etkileşime girmelerini istemeden bir sözleşmenin mantığını yükseltmemize izin verir. -Vekil modeller, sözleşme taşımayla ilgili zorlukları ortadan kaldırmasından dolayı akıllı sözleşmeleri yükseltme konusunda popüler bir yöntemdir. Ancak, vekil modelleri kullanmak çok daha karmaşıktır ve bu modeller, yanlış kullanılacak olursa [fonksiyon seçici çakışmaları](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357) gibi kritik hatalara neden olabilir. +Vekil modeller, sözleşme taşımayla ilgili zorlukları ortadan kaldırmasından dolayı akıllı sözleşmeleri yükseltme konusunda popüler bir yöntemdir. Ancak vekil modellerin kullanımı daha karmaşıktır ve yanlış kullanıldığında [işlev seçici çakışmaları](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357) gibi kritik kusurlara yol açabilir. -[Vekil modeller hakkında daha fazla bilgi](https://blog.openzeppelin.com/proxy-patterns/). +[Vekil modeller hakkında daha fazlası](https://blog.openzeppelin.com/proxy-patterns/). ### Yükseltme mekanizması 4: Strateji modeli {#strategy-pattern} @@ -94,7 +94,7 @@ Bu teknik, belirli özellikleri uygulamak için diğer programlarla arayüz olu Bu durumda ana sözleşme, temel iş mantığını içerir ancak belirli işlevleri gerçekleştirmek için diğer akıllı sözleşmeler ile ("uydu sözleşmeleri") arayüz oluşturur. Aynı zamanda bu ana sözleşme uydu sözleşmesinin farklı uygulamaları arasında geçiş yapabilir ve her uydu sözleşmesinin adresini depolar. -Yeni bir uydu sözleşmesi oluşturabilir ve ana sözleşmeyi yeni adres ile yapılandırabilirsiniz. Bu bir akıllı sözleşmeye yönelik _stratejileri_ değiştirmenize (örneğin, yeni mantık uygulamanıza) izin verir. +Yeni bir uydu sözleşmesi oluşturabilir ve ana sözleşmeyi yeni adres ile yapılandırabilirsiniz. Bu, bir akıllı sözleşme için _stratejileri_ (yani yeni mantık uygulamayı) değiştirmenize olanak tanır. Strateji modeli, daha önce tartışılan vekil model ile benzerlik taşısa da ondan farklıdır; çünkü iş mantığını kullanıcıların etkileşimde olduğu ana sözleşme tutar. Bu modeli kullanmak, bir akıllı sözleşmede ana altyapıyı etkilemeden sınırlı değişiklikler yapmaya olanak sağlar. @@ -104,7 +104,7 @@ Ana dezavantajı, bu modelin çoğunlukla küçük yükseltmeleri devreye almak Elmas modeli, vekil modelde yapılan bir iyileştirme olarak kabul edilir. Elmas modelleri, elmas vekil sözleşmesi, fonksiyon çağrılarını birden fazla mantık sözleşmesine iletebildiği için vekil modellerden farklıdır. -Elmas modelindeki mantık sözleşmeleri _yüzler_ olarak bilinir. Elmas modelini çalıştırmak için vekil sözleşmede [fonsiyon seçicileri](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector) farklı yüz adreslerine eşleyen bir eşleme oluşturmanız gerekir. +Elmas modelindeki mantık sözleşmeleri _yüzeyler_ olarak bilinir. Elmas modelinin çalışması için, vekil sözleşmede [işlev seçicilerini](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector) farklı yüzey adresleriyle eşleyen bir haritalama oluşturmanız gerekir. Bir kullanıcı bir fonksiyon çağrısı yaptığında vekil sözleşme, o fonksiyonu yürütmekten sorumlu yüzü bulmak için eşlemeyi kontrol eder. Daha sonra, `delegatecall` çağrısı yapar (geri dönüş fonksiyonunu kullanarak) ve çağrıyı uygun mantık sözleşmesine yönlendirir. @@ -114,27 +114,27 @@ Elmas yükseltmesi modelinin, geleneksel vekil yükseltme modellerine göre baz 2. Tüm akıllı sözleşmelerde (vekil modelde kullanılan mantık sözleşmeleri dahil) 24 KB'lık bir boyut limiti vardır; bu, özellikle daha çok fonksiyon gerektiren karmaşık sözleşmeler için sınırlayıcı olabilir. Elmas modeli, fonksiyonları birden çok mantık sözleşmesine bölerek bu sorunu çözmeyi kolaylaştırır. -3. Vekil modeller, erişim kontrolleri için tümünü yakalama yaklaşımını benimser. Yükseltme fonksiyonlarına erişimi olan bir varlık, _tüm_ sözleşmeyi değiştirebilir. Ancak elmas modeli, varlıkları bir akıllı sözleşme içindeki belirli işlevleri yükseltmekle kısıtlayabileceğiniz modüler bir izin yaklaşımı sağlar. +3. Vekil modeller, erişim kontrolleri için tümünü yakalama yaklaşımını benimser. Yükseltme işlevlerine erişimi olan bir varlık, sözleşmenin _tamamını_ değiştirebilir. Ancak elmas modeli, varlıkları bir akıllı sözleşme içindeki belirli işlevleri yükseltmekle kısıtlayabileceğiniz modüler bir izin yaklaşımı sağlar. -[Elmas modeli hakkında daha fazla bilgi](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w). +[Elmas modeli hakkında daha fazlası](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w). ## Akıllı sözleşmeleri yükseltmenin artıları ve eksileri {#pros-and-cons-of-upgrading-smart-contracts} -| Artıları | Eksileri | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Artıları | Eksileri | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Bir akıllı sözleşme yükseltmesi, dağıtım sonrası aşamada keşfedilen güvenlik açıklarını gidermeyi kolaylaştırabilir. | Akıllı kontratları güncellemek, kodun değişmezliği ilkesini geçersiz kılar ve bunun merkeziyetsizlik ve güvenlik açısından sonuçları olabilir. | | Geliştiriciler, mantık yükseltmelerini kullanarak merkeziyetsiz uygulamalara yeni özellikler ekleyebilir. | Kulllanıcılar, geliştiricilerin akıllı sözleşmeleri keyfi olarak değiştirmeyeceğine güvenmek durumundadır. | | Akıllı sözleşme yükseltmeleri, hatalar hızlı bir şekilde çözüldüğünden son kullanıcılar için güvenliği arttırabilir. | Akıllı sözleşmelere programlama yoluyla güncelleme işlevselliği eklemek, başka bir karmaşıklık katmanı ekler ve kritik hata olasılığını artırır. | | Akıllı sözleşme yükseltmeleri, geliştiricilere farklı özellikleri denemek ve zaman içinde merkeziyetsiz uygulamaları geliştirmek için daha fazla alan sağlar. | Akıllı sözleşmeleri yükseltme fırsatı, geliştiricilerin projeleri geliştirme aşamasında yeterli önlem almadan daha hızlı başlatmalarına teşvik edebilir. | -| | Akıllı sözleşmelerde güvensiz erişim kontrolü veya merkezileşme, kötü niyetli kişilerin yetkisiz yükseltmeler gerçekleştirmesini daha kolay hale getirebilir. | +| | Akıllı sözleşmelerde güvensiz erişim kontrolü veya merkezileşme, kötü niyetli kişilerin yetkisiz yükseltmeler gerçekleştirmesini daha kolay hale getirebilir. | -## Akıllı sözleşmeleri yükseltirken dikkat edilecek hususlar {#considerations-for-upgrading-smart-contracts} +## Akıllı sözleşmeleri yükseltirken dikkat edilmesi gerekenler {#considerations-for-upgrading-smart-contracts} 1. Özellikle vekil modeller, strateji modelleri ya da veri ayırma kullanıyorsanız, yetkisiz akıllı sözleşme güncellemelerini önlemek için güvenli erişim kontrolü/yetkilendirme mekanizmalarını kullanın. Buna örnek olarak, yükseltme işlevinin erişimini, sadece sözleşme sahibinin onu çağırmasına izin verecek şekilde kısıtlamak verilebilir. 2. Akıllı sözleşmeleri yükseltmek karmaşık bir eylemdir ve güvenlik açıklarının ortaya çıkmasını engellemek için yüksek seviyede özen gerekir. -3. Yükseltmeleri uygulama sürecini merkeziyetsizleştirerek güven varsayımlarını azaltın. Olası stratejiler arasında, güncellemeleri kontrol etmek için [çoklu-imzalı cüzdan sözleşmesi](/developers/docs/smart-contracts/#multisig) kullanmak ya da [bir DAO'nun üyelerinin](/dao/) yükseltmenin onaylanması için oy vermesini şart koşmak yer alır. +3. Yükseltmeleri uygulama sürecini merkeziyetsizleştirerek güven varsayımlarını azaltın. Olası stratejiler arasında, yükseltmeleri kontrol etmek için bir [çoklu imzalı cüzdan sözleşmesi](/developers/docs/smart-contracts/#multisig) kullanmak veya [bir DAO'nun üyelerinin](/dao/) yükseltmeyi onaylamak için oy kullanmasını zorunlu kılmak yer alır. 4. Sözleşmelerin yükseltilmesiyle alakalı maliyetlerin farkında olun. Örnek olarak, sözleşme taşıma sırasında durumu (örn. kullanıcı bakiyeleri) eski bir sözleşmeden yeni bir sözleşmeye kopyalamak için birden çok işlem ve dolayısıyla daha fazla gaz ücreti gerekebilir. @@ -147,19 +147,19 @@ Zaman kilitleri, önerilen bir değişikliğe (örn. mantık yükseltmesi ya da **OpenZeppelin Yükseltme Eklentileri - _Yükseltilebilir akıllı sözleşmelerin dağıtımını ve güvence altına alınmasını sağlayan bir araç paketi._** - [GitHub](https://github.com/OpenZeppelin/openzeppelin-upgrades) -- [Dokümanlar](https://docs.openzeppelin.com/upgrades) +- [Belgeler](https://docs.openzeppelin.com/upgrades) -## Sunumlar {#tutorials} +## Eğitimler {#tutorials} -- [Akıllı Sözleşmelerinizi Yükseltme | YouTube Öğreticisi](https://www.youtube.com/watch?v=bdXJmWajZRY), Patrick Collins -- [Ethereum Akıllı Sözleşme Taşıma Öğreticisi](https://medium.com/coinmonks/ethereum-smart-contract-migration-13f6f12539bd), Austin Griffith -- [UUPS vekil modelini kullanarak akıllı sözleşmeleri yükseltme](https://blog.logrocket.com/author/praneshas/), Pranesh A.S -- [Web3 Öğreticisi: OpenZeppelin kullanarak yükseltilebilir akıllı sözleşme (vekil) yazın](https://dev.to/yakult/tutorial-write-upgradeable-smart-contract-proxy-contract-with-openzeppelin-1916), fangjun.eth +- [Akıllı Sözleşmelerinizi Yükseltme | YouTube Eğitimi](https://www.youtube.com/watch?v=bdXJmWajZRY) - Patrick Collins +- [Ethereum Akıllı Sözleşme Taşıma Eğitimi](https://medium.com/coinmonks/ethereum-smart-contract-migration-13f6f12539bd) - Austin Griffith +- [Akıllı sözleşmeleri yükseltmek için UUPS vekil modelini kullanma](https://blog.logrocket.com/author/praneshas/) - Pranesh A.S +- [Web3 Eğitimi: OpenZeppelin kullanarak yükseltilebilir akıllı sözleşme (vekil) yazma](https://dev.to/yakult/tutorial-write-upgradeable-smart-contract-proxy-contract-with-openzeppelin-1916) - fangjun.eth -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [Akıllı Sözleşme Yükseltmelerinin Durumu](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/), Santiago Palladino -- [Solidity akıllı sözleşmelerini yükseltmenin çeşitli yolları](https://cryptomarketpool.com/multiple-ways-to-upgrade-a-solidity-smart-contract/) - Crypto Market Pool blog +- [Akıllı Sözleşme Yükseltmelerinin Durumu](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/) - Santiago Palladino +- [Bir Solidity akıllı sözleşmesini yükseltmenin birden çok yolu](https://cryptomarketpool.com/multiple-ways-to-upgrade-a-solidity-smart-contract/) - Crypto Market Pool blogu - [Öğrenin: Akıllı Sözleşmeleri Yükseltme](https://docs.openzeppelin.com/learn/upgrading-smart-contracts) - OpenZeppelin Belgeleri -- [Solidity Sözleşmelerinin Yükseltilebilirliğine Yönelik Vekil Modeller: Şeffaf ile UPPS Vekil Karşılaştırması](https://mirror.xyz/0xB38709B8198d147cc9Ff9C133838a044d78B064B/M7oTptQkBGXxox-tk9VJjL66E1V8BUF0GF79MMK4YG0), Naveen Sahu -- [Elmas Yükseltmeleri Nasıl Çalışır?](https://dev.to/mudgen/how-diamond-upgrades-work-417j), Nick Mudge +- [Solidity Sözleşmelerinin Yükseltilebilirliği İçin Vekil Modelleri: Şeffaf ve UUPS Vekilleri Karşılaştırması](https://mirror.xyz/0xB38709B8198d147cc9Ff9C133838a044d78B064B/M7oTptQkBGXxox-tk9VJjL66E1V8BUF0GF79MMK4YG0) - Naveen Sahu +- [Elmas Yükseltmeleri Nasıl Çalışır?](https://dev.to/mudgen/how-diamond-upgrades-work-417j) - Nick Mudge diff --git a/public/content/translations/tr/developers/docs/smart-contracts/verifying/index.md b/public/content/translations/tr/developers/docs/smart-contracts/verifying/index.md index 8d31b3e9546..f7ba1f2e91e 100644 --- a/public/content/translations/tr/developers/docs/smart-contracts/verifying/index.md +++ b/public/content/translations/tr/developers/docs/smart-contracts/verifying/index.md @@ -1,16 +1,16 @@ --- -title: Akıllı sözleşmeleri doğrulamak -description: Ethereum akıllı sözleşmeleri için kaynak kodu doğrulamasına genel bakış +title: "Akıllı sözleşmeleri doğrulamak" +description: "Ethereum akıllı sözleşmeleri için kaynak kodu doğrulamasına genel bakış" lang: tr --- [Akıllı sözleşmeler](/developers/docs/smart-contracts/) "güven gerektirmez" nitelikte tasarlanmışlardır, yani kullanıcıların bir sözleşme ile etkileşime geçmeden önce üçüncü şahıslara (örn. geliştiriciler ve şirketler) güvenmelerine gerek yoktur. Güven gerektirmezliğin bir ön koşulu olarak kullanıcılar ve diğer geliştiriciler, bir akıllı sözleşmenin kaynak kodunu doğrulayabilmelidir. Kaynak kodu doğrulaması, kullanıcılara ve geliştiricilere yayımlanmış sözleşme kodunun Ethereum blokzinciri üzerindeki sözleşme adresinde çalışan kod ile aynı kod olduğunu garanti eder. -"Kaynak kodu doğrulaması" ile "[resmi doğrulama](/developers/docs/smart-contracts/formal-verification/)" arasındaki farkı anlamak önemlidir. Aşağıda ayrıntılı olarak açıklanacak olan kaynak kodu doğrulaması, bir akıllı sözleşmenin üst seviye bir dildeki (örn. Solidity) belirli bir kaynak kodunun, sözleşme adresinde yürütülecek bayt koduyla aynı derlendiğinin doğrulanması anlamına gelir. Ancak resmi doğrulama, akıllı sözleşmenin doğruluğunun teyit edilmesini, yani sözleşmenin beklendiği gibi davranmasını açıklar. Bağlama göre değişse de, sözleşme doğrulaması genelde kaynak kodu doğrulaması anlamına gelir. +"Kaynak kodu doğrulaması" ile "[resmi doğrulama](/developers/docs/smart-contracts/formal-verification/)" arasındaki ayrımı yapmak önemlidir. Aşağıda ayrıntılı olarak açıklanacak olan kaynak kodu doğrulaması, bir akıllı sözleşmenin üst düzey bir dildeki (ör. Solidity) belirli kaynak kodunun, sözleşme adresinde yürütülecek olan aynı bit koduna derlendiğinin doğrulanması anlamına gelir. Ancak resmi doğrulama, akıllı sözleşmenin doğruluğunun teyit edilmesini, yani sözleşmenin beklendiği gibi davranmasını açıklar. Bağlama göre değişse de, sözleşme doğrulaması genelde kaynak kodu doğrulaması anlamına gelir. ## Kaynak kodu doğrulaması nedir? {#what-is-source-code-verification} -Geliştiriciler, bir akıllı sözleşmeyi [Ethereum Sanal Makinesi'ne (EVM)](/developers/docs/evm/) dağıtmadan önce, [sözleşmenin Solidity'de](/developers/docs/smart-contracts/languages/) veya başka bir yüksek seviye programlama dilinde yazılan talimatları olan kaynak kodunu bit koduna [derler](/developers/docs/smart-contracts/compiling/). Ethereum Sanal Makinesi yüksek seviye talimatları yorumlayamayacağı için kaynak kodunu bit koduna (yani düşük seviye, makine talimatları) derlemek, sözleşme mantığını Ethereum Sanal Makinesi'nde yürütmek için şarttır. +Bir akıllı sözleşmeyi [Ethereum Sanal Makinesi (EVM)](/developers/docs/evm/) üzerinde dağıtmadan önce, geliştiriciler sözleşmenin kaynak kodunu ([Solidity](/developers/docs/smart-contracts/languages/) veya başka bir üst düzey programlama dilinde yazılmış talimatları) [derleyerek](/developers/docs/smart-contracts/compiling/) bit koduna dönüştürür. Ethereum Sanal Makinesi yüksek seviye talimatları yorumlayamayacağı için kaynak kodunu bit koduna (yani düşük seviye, makine talimatları) derlemek, sözleşme mantığını Ethereum Sanal Makinesi'nde yürütmek için şarttır. Kaynak kodu doğrulaması, sözleşme oluşturma sırasında farklılıkları ortaya çıkarmak için kullanmak üzere sözleşmenin kaynak kodu ile derlenmiş bit kodunu karşılaştırmaktır. Akıllı sözleşmeleri doğrulamak, reklamı yapılan sözleşme kodu blokzincirde çalışmakta olandan farklı olabileceği için önemlidir. @@ -20,17 +20,17 @@ Akıllı sözleşme doğrulaması, bir sözleşmenin yazıldığı yüksek seviy Kaynak kodunun, yorumlar ve değişken adları gibi derlenmiş bit kodunu etkilemeyen bazı bölümleri vardır. Bu, farklı değişken adları ve farklı yorumları olan iki kaynak kodunun aynı sözleşmeyi doğrulayabileceği anlamına gelir. Bu sayede, kötü niyetli bir kişi kaynak kodunun içine aldatıcı yorumlar ekleyip ya da yanlış yönlendiren değişken adları verip sözleşmenin orijinal kaynak kodundan farklı bir kaynak koduyla doğrulanmasını sağlayabilir. -Bit koduna, kaynak koduyla tamamen aynı olmak ve derleme bilgileri için bir _parmak izi_ görevi görmek üzere _kriptografik garanti_ olarak hizmet edecek ekstra veriler iliştirerek bunu önlemek mümkündür. Gerekli bilgiler, [Solidity'nin sözleşme meta verileri](https://docs.soliditylang.org/en/v0.8.15/metadata.html) içinde bulunabilir ve bu dosyanın karması sözleşmenin bit koduna iliştirilmiştir. Bunu, [metadata playground](https://playground.sourcify.dev) üzerinde iş başında görebilirsiniz. +Bunu, kaynak kodunun doğruluğu için _kriptografik bir güvence_ ve derleme bilgilerinin _parmak izi_ olarak hizmet etmesi amacıyla bit koduna ek veri ekleyerek önlemek mümkündür. Gerekli bilgiler [Solidity'nin sözleşme meta verilerinde](https://docs.soliditylang.org/en/v0.8.15/metadata.html) bulunur ve bu dosyanın karması, bir sözleşmenin bit koduna eklenir. Bunu [meta veri oyun alanında](https://playground.sourcify.dev) çalışırken görebilirsiniz Meta veri dosyası, sözleşmenin derlemesiyle ilgili kaynak kodları ve bu kodların karmalarını da içeren bilgiler barındırır. Yani bir derleme ayarı ya da kaynak dosyalarında bir bayt bile değişse, meta veri dosyası da değişecektir. Sonuç olarak, bit koduna iliştirilmiş olan meta veri dosyasının karması da değişir. Bir sözleşmenin bit kodu + iliştirilmiş meta veri karması verilen kaynak kodu ve derleme ayarlarıyla eşleşiyorsa, bunun orijinal derlemede kullanılan kaynak koduyla tamamen aynı olduğundan ve tek bir baytın bile farklı olmadığından emin olabiliriz. -Meta veri karmasından yararlanan bu tür doğrulamaya **"[tam doğrulama](https://docs.sourcify.dev/docs/full-vs-partial-match/)"** ("mükemmel doğrulama") adı verilir. Meta veri karmaları eşleşmiyorsa ya da doğrulamada dikkate alınmıyorsa buna, şu anda sözleşmeleri doğrulamanın daha yaygın yolu olan "kısmi eşleşme" denir. Tam doğrulama olmadan doğrulanmış kaynak kodun içinde görünmeyecek [kötü niyetli kod eklemek](https://samczsun.com/hiding-in-plain-sight/) mümkündür. Çoğu geliştirici tam doğrulamadan haberdar değildir ve derlemelerinin meta veri dosyasını tutmaz; bu yüzden kısmi doğrulama şimdiye kadar sözleşmeleri doğrulamada kullanılan genel geçer yöntem olmuştur. +Meta veri karmasından yararlanan bu tür doğrulamaya **"[tam doğrulama](https://docs.sourcify.dev/docs/full-vs-partial-match/)"** (ayrıca "mükemmel doğrulama") adı verilir. Meta veri karmaları eşleşmiyorsa ya da doğrulamada dikkate alınmıyorsa buna, şu anda sözleşmeleri doğrulamanın daha yaygın yolu olan "kısmi eşleşme" denir. Tam doğrulama olmadan, doğrulanmış kaynak kodunda görünmeyecek [kötü niyetli kod eklemek](https://samczsun.com/hiding-in-plain-sight/) mümkündür. Çoğu geliştirici tam doğrulamadan haberdar değildir ve derlemelerinin meta veri dosyasını tutmaz; bu yüzden kısmi doğrulama şimdiye kadar sözleşmeleri doğrulamada kullanılan genel geçer yöntem olmuştur. ## Kaynak kodu doğrulaması neden önemlidir? {#importance-of-source-code-verification} -### Güven gerektirmezlik {#trustlessness} +### Güven Gerektirmeme {#trustlessness} -Güven gerektirmezlik, tartışmasız olarak akıllı sözleşmelerin ve [merkeziyetsiz uygulamalarınn (dapp'ler)](/developers/docs/dapps/) sunduğu en büyük vaattir. Akıllı sözleşmeler "değiştirilemez" niteliktedir; bir sözleşme, yalnızca dağıtım sırasında kodda tanımlanmış olan iş mantığını uygular. Bu, geliştiricilerin ve işletmelerin Ethereum'da dağıtıldıktan sonra bir sözleşmenin kodunun üzerinde oynama yapamayacakları anlamına gelir. +Güven gerektirmeme, tartışmasız bir şekilde akıllı sözleşmelerin ve [merkeziyetsiz uygulamaların (dapp'ler)](/developers/docs/dapps/) en büyük önermesidir. Akıllı sözleşmeler "değiştirilemez" niteliktedir; bir sözleşme, yalnızca dağıtım sırasında kodda tanımlanmış olan iş mantığını uygular. Bu, geliştiricilerin ve işletmelerin Ethereum'da dağıtıldıktan sonra bir sözleşmenin kodunun üzerinde oynama yapamayacakları anlamına gelir. Bir sözleşmenin güven gerektirmez olması için sözleşme kodunun bağımsız doğrulamaya açık olması gerekir. Her akıllı sözleşmenin derlenmiş bit kodu blokzincirde herkese açık bir şekilde mevcut olsa da, hem geliştiriciler hem de kullanıcılar için alt düzey dilin anlaşılması zordur. @@ -40,15 +40,15 @@ Kaynak kodu doğrulama araçları, bir akıllı sözleşmenin kaynak kodunun der ### Kullanıcı Güvenliği {#user-safety} -Akıllı sözleşmeler söz konusu olduğunda ortadaki para miktarı oldukça yüksektir. Bu, daha yüksek güvenlik garantileri ve kullanmadan önce akıllı sözleşmenin mantığının doğrulanmasını gerektirir. Sorun şu ki, ahlaki endişelere sahip olmayan bazı geliştiriciler akıllı sözleşmelerin içine kötü niyetli kod ekleyerek kullanıcıları kandırabilirler. Doğrulama yapılmadığında kötü niyetli akıllı sözleşmelerin [arka kapıları](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts) olabilir ve tartışmalı erişim kontrol mekanizmaları, kötüye kullanılabilir zayıflıklar ve kullanıcının güvenliğini tehlikeye atan diğer şeyler fark edilemez. +Akıllı sözleşmeler söz konusu olduğunda ortadaki para miktarı oldukça yüksektir. Bu, daha yüksek güvenlik garantileri ve kullanmadan önce akıllı sözleşmenin mantığının doğrulanmasını gerektirir. Sorun şu ki, ahlaki endişelere sahip olmayan bazı geliştiriciler akıllı sözleşmelerin içine kötü niyetli kod ekleyerek kullanıcıları kandırabilirler. Doğrulama olmadan, kötü niyetli akıllı sözleşmelerin [arka kapıları](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), tartışmalı erişim kontrol mekanizmaları, istismar edilebilir güvenlik açıkları ve kullanıcı güvenliğini tehlikeye atacak fark edilmeyecek başka şeyler olabilir. Bir akıllı sözleşmenin kaynak kod dosyalarının yayımlanması, denetçiler gibi konuyla ilgili olanların sözleşmeyi potansiyel saldırı vektörleri açısından değerlendirmesini daha kolay hale getirir. Bir akıllı sözleşmeyi birden fazla tarafın doğrulaması sayesinde kullanıcılar daha güçlü güvencelere sahip olur. -## Ethereum akıllı sözleşmelerinde kaynak kodu doğrulaması {#source-code-verification-for-ethereum-smart-contracts} +## Ethereum akıllı sözleşmeleri için kaynak kodu nasıl doğrulanır {#source-code-verification-for-ethereum-smart-contracts} -[Ethereum'da bir akıllı sözleşmeyi dağıtma](/developers/docs/smart-contracts/deploying/), özel bir adrese veri yüklü (derlenmiş bit kodu) bir işlemi göndermeyi gerektirir. Veri yükü, kaynak kodu ve işlemdeki veri yüküne eklenmiş sözleşme örneğinin [yapıcı bağımsız değişkenleri](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) ile oluşturulur. Derleme belirleyicidir, yani aynı kaynak dosyaları ve derleme ayarları (örn. derleyici sürümü, optimize edici) kullanılırsa, hep aynı çıktıyı (yani sözleşme bit kodu) verir. +[Ethereum'da bir akıllı sözleşmeyi dağıtmak](/developers/docs/smart-contracts/deploying/), özel bir adrese veri yükü (derlenmiş bit kodu) olan bir işlem göndermeyi gerektirir. Veri yükü, kaynak kodunun derlenmesiyle ve sözleşme örneğinin [yapıcı argümanlarının](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) işlemdeki veri yüküne eklenmesiyle oluşturulur. Derleme deterministiktir, yani aynı kaynak dosyaları ve derleme ayarları (ör. derleyici sürümü, iyileştirici) kullanılırsa, her zaman aynı çıktıyı (yani sözleşme bit kodunu) üretir. -![Akıllı sözleşme kod doğrulamasını gösteren bir şema](./source-code-verification.png) +![Akıllı sözleşme kaynak kodu doğrulamasını gösteren bir şema](./source-code-verification.png) Akıllı sözleşmeyi doğrulamanın temel adımları aşağıdaki gibidir: @@ -62,7 +62,7 @@ Akıllı sözleşmeyi doğrulamanın temel adımları aşağıdaki gibidir: 5. Ek olarak, bit kodu eşleşmesi sonundaki meta veri karmaları eşleşiyorsa tam eşleşme söz konusu olur. -Bunun, doğrulamanın basitleştirilmiş bir açıklaması olduğunu ve bununla çalışmayan [değişmez değişkenlere](https://docs.sourcify.dev/docs/immutables/) sahip olmak gibi birçok istisna olduğunu unutmayın. +Bunun, doğrulamanın basitleştirilmiş bir açıklaması olduğunu ve [değişmez değişkenlere](https://docs.sourcify.dev/docs/immutables/) sahip olmak gibi bununla çalışmayacak birçok istisna bulunduğunu unutmayın. ## Kaynak kodu doğrulama araçları {#source-code-verification-tools} @@ -70,38 +70,44 @@ Sözleşme doğrulamanın geleneksel süreci karmaşık olabilir. İşte bu nede ### Etherscan {#etherscan} -Etherscan, çoğunlukla bir [Ethereum blokzincir arayıcı](/developers/docs/data-and-analytics/block-explorers/) olarak bilinmesine rağmen akıllı sözleşme geliştiricileri ve kullanıcıları için bir [kaynak kodu doğrulama hizmeti](https://etherscan.io/verifyContract) de sunar. +Çoğunlukla bir [Ethereum blokzincir gezgini](/developers/docs/data-and-analytics/block-explorers/) olarak bilinmesine rağmen Etherscan, akıllı sözleşme geliştiricileri ve kullanıcıları için bir [kaynak kodu doğrulama hizmeti](https://etherscan.io/verifyContract) de sunar. -Etherscan, sözleşme bit kodunu orijinal veri yükünden (kaynak kodu, kütüphane adresi, derleyici ayarları, sözleşme adresi vb.) yeniden derlemenize olanak sağlar. Yeniden derlenen bit kodu, zincir üstündeki sözleşmenin bit kodu (ve yapıcı parametreleri) ile ilişkilendirilirse, [sözleşme doğrulanır](https://info.etherscan.com/types-of-contract-verification/). +Etherscan, sözleşme bit kodunu orijinal veri yükünden (kaynak kodu, kütüphane adresi, derleyici ayarları, sözleşme adresi vb.) yeniden derlemenize olanak sağlar. Yeniden derlenen bit kodu, zincir üstü sözleşmenin bit kodu (ve yapıcı parametreleri) ile ilişkilendirilirse, [sözleşme doğrulanır](https://info.etherscan.com/types-of-contract-verification/). -Doğrulandıktan sonra, sözleşmenizin kaynak kodu bir "Doğrulandı" etiketi alır ve başkalarının denetlemesi için Etherscan'de yayınlanır. Ayrıca, kaynak kodları doğrulanmış akıllı sözleşmelerden oluşan bir depo olan [Doğrulanmış Sözleşmeler](https://etherscan.io/contractsVerified/) bölümüne de eklenir. +Doğrulandıktan sonra, sözleşmenizin kaynak kodu bir "Doğrulandı" etiketi alır ve başkalarının denetlemesi için Etherscan'de yayınlanır. Ayrıca, doğrulanmış kaynak kodlarına sahip akıllı sözleşmelerin bir deposu olan [Doğrulanmış Sözleşmeler](https://etherscan.io/contractsVerified/) bölümüne de eklenir. -Etherscan, sözleşmeleri doğrulamak için en çok kullanılan araçtır. Fakat, Etherscan ile sözleşme doğrulamanın bir dezavantajı vardır; zincir üzerindeki bit kodunun **meta veri karması** ile yeniden derlenmiş bit kodunu karşılaştırmakta başarısızdır. Bundan dolayı Etherscan'deki eşleşmeler kısmi eşleşmelerdir. +Etherscan, sözleşmeleri doğrulamak için en çok kullanılan araçtır. Ancak Etherscan'in sözleşme doğrulamasının bir dezavantajı vardır: zincir üstü bit kodunun ve yeniden derlenmiş bit kodunun **meta veri karmasını** karşılaştırmada başarısız olur. Bundan dolayı Etherscan'deki eşleşmeler kısmi eşleşmelerdir. -[Etherscan'de sözleşme doğrulama hakkında daha fazla bilgi](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). +[Etherscan'de sözleşmeleri doğrulama hakkında daha fazlası](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). + +### Blockscout {#blockscout} + +[Blockscout](https://blockscout.com/), akıllı sözleşme geliştiricileri ve kullanıcıları için bir [sözleşme doğrulama hizmeti](https://eth.blockscout.com/contract-verification) de sunan açık kaynaklı bir blokzincir gezginidir. Açık kaynaklı bir alternatif olarak Blockscout, doğrulamanın nasıl yapıldığı konusunda şeffaflık sunar ve doğrulama sürecini iyileştirmek için topluluk katkılarına olanak tanır. + +Diğer doğrulama hizmetlerine benzer şekilde Blockscout, bit kodunu yeniden derleyerek ve dağıtılmış sözleşmeyle karşılaştırarak sözleşmenizin kaynak kodunu doğrulamanıza olanak tanır. Doğrulandıktan sonra, sözleşmeniz doğrulama durumu alır ve kaynak kodu denetim ve etkileşim için herkese açık hale gelir. Doğrulanmış sözleşmeler ayrıca, kolay gezinme ve keşif için Blockscout'un [doğrulanmış sözleşmeler deposunda](https://eth.blockscout.com/verified-contracts) listelenir. ### Sourcify {#sourcify} -[Sourcify](https://sourcify.dev/#/verifier), açık kaynaklı ve merkeziyetsiz sözleşmeleri onaylamak için kullanılan bir başka araçtır. Bir blok arayıcı değildir ve sadece [Ethereum Sanal Makinesi tabanlı farklı ağlarda](https://docs.sourcify.dev/docs/chains) bulunan sözleşmeleri doğrular. Diğer araçların üzerine geliştirileceği herkese açık bir altyapı görevi görür ve meta veri dosyasında bulunan [ABI](/developers/docs/smart-contracts/compiling/#web-applications) ve [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) yorumlarını kullanarak daha insan dostu sözleşme etkileşimleri sağlamayı amaçlar. +[Sourcify](https://sourcify.dev/#/verifier), sözleşmeleri doğrulamak için kullanılan, açık kaynaklı ve merkeziyetsiz başka bir araçtır. Bir blok gezgini değildir ve yalnızca [farklı EVM tabanlı ağlardaki](https://docs.sourcify.dev/docs/chains) sözleşmeleri doğrular. Diğer araçların üzerine inşa edilebileceği halka açık bir altyapı görevi görür ve meta veri dosyasında bulunan [ABI](/developers/docs/smart-contracts/compiling/#web-applications) ve [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) yorumlarını kullanarak daha insan dostu sözleşme etkileşimleri sağlamayı amaçlar. -Sourcify, Etherscan'den farklı olarak meta veri karmasıyla tam eşleşmeleri destekler. Doğrulanmış sözleşmeler, HTTP ve merkeziyetsiz [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs) üzerindeki [içerik adresli](https://web3.storage/docs/concepts/content-addressing/) [herkese açık deposunda](https://docs.sourcify.dev/docs/repository/) sunulur. Bu, eklenen meta veri karması bir IPFS karması olduğu için bir sözleşmenin meta verilerinin IPSF üzerinden alınmasına olanak sağlar. +Sourcify, Etherscan'den farklı olarak meta veri karmasıyla tam eşleşmeleri destekler. Doğrulanmış sözleşmeler, merkeziyetsiz, [içerik adresli](https://docs.storacha.network/concepts/content-addressing/) bir depolama olan HTTP ve [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs) üzerindeki [genel deposunda](https://docs.sourcify.dev/docs/repository/) sunulur. Bu, eklenen meta veri karması bir IPFS karması olduğu için bir sözleşmenin meta verilerinin IPSF üzerinden alınmasına olanak sağlar. -Ek olarak, bu dosyaların IPFS karmaları meta veride de bulunduğu için kaynak kod dosyaları IPFS üzerinden de alınabilir. Bir sözleşme, API veya [UI](https://sourcify.dev/#/verifier) üzerinden meta veri dosyası ve kaynak dosyaları temin edilerek ya da eklentiler kullanılarak doğrulanabilir. Sourcify izleme aracı, yeni bloklar üzerinde oluşturulan sözleşmeleri de dinler ve meta verileri ile kaynak dosyaları IPFS üzerinde yayımlanmış sözleşmeleri de doğrulamaya çalışır. +Ek olarak, bu dosyaların IPFS karmaları meta veride de bulunduğu için kaynak kod dosyaları IPFS üzerinden de alınabilir. Bir sözleşme, API'si veya [kullanıcı arayüzü](https://sourcify.dev/#/verifier) üzerinden meta veri dosyası ve kaynak dosyaları sağlanarak veya eklentiler kullanılarak doğrulanabilir. Sourcify izleme aracı, yeni bloklar üzerinde oluşturulan sözleşmeleri de dinler ve meta verileri ile kaynak dosyaları IPFS üzerinde yayımlanmış sözleşmeleri de doğrulamaya çalışır. -[Sourcify'da sözleşme doğrulama üzerine daha fazla bilgi](https://blog.soliditylang.org/2020/06/25/sourcify-faq/). +[Sourcify'da sözleşmeleri doğrulama hakkında daha fazlası](https://soliditylang.org/blog/2020/06/25/sourcify-faq/). ### Tenderly {#tenderly} -[Tenderly platformu](https://tenderly.co/), Web3 geliştiricilerinin akıllı sözleşmeler oluşturmasını, test etmesini, izlemesini ve çalıştırmasını mümkün kılar. Hata ayıklama araçlarını gözlemlenebilirlik ve altyapı yapı taşları ile birleştiren Tenderly, geliştiricilerin akıllı sözleşme geliştirme sürecini hızlandırmasına yardımcı olur. Tenderly özelliklerini tam olarak etkinleştirmek için geliştiricilerin çeşitli yöntemler kullanarak [kaynak kodu doğrulaması gerçekleştirmesi](https://docs.tenderly.co/monitoring/contract-verification) gerekir. +[Tenderly platformu](https://tenderly.co/), Web3 geliştiricilerinin akıllı sözleşmeler oluşturmasını, test etmesini, izlemesini ve çalıştırmasını sağlar. Hata ayıklama araçlarını gözlemlenebilirlik ve altyapı yapı taşları ile birleştiren Tenderly, geliştiricilerin akıllı sözleşme geliştirme sürecini hızlandırmasına yardımcı olur. Tenderly özelliklerini tam olarak etkinleştirmek için geliştiricilerin çeşitli yöntemler kullanarak [kaynak kodu doğrulaması yapmaları](https://docs.tenderly.co/monitoring/contract-verification) gerekir. Bir sözleşmeyi gizli veya herkese açık şekilde doğrulamak mümkündür. Eğer gizlice doğrulanırsa, akıllı sözleşme sadece size (ve projenizdeki diğer üyelere) görünür olur. Bir sözleşmeyi herkese açık biçimde doğrulamak, bu sözleşmenin Tenderly platformunu kullanan herkes için görünür olmasına yol açar. -Sözleşmelerinizi [Gösterge Paneli](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-a-smart-contract), [Tenderly Hardhat eklentisi](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-the-tenderly-hardhat-plugin) veya [CLI](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-cli) kullanarak doğrulayabilirsiniz. +Sözleşmelerinizi [Kontrol Paneli'ni](https://docs.tenderly.co/contract-verification), [Tenderly Hardhat eklentisini](https://docs.tenderly.co/contract-verification/hardhat) veya [CLI'yi](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-cli) kullanarak doğrulayabilirsiniz. Gösterge Paneli aracılığıyla sözleşme doğrularken Solidity derleyicisi tarafından üretilen kaynak dosyasını ya da meta veri dosyasını, adresi/ağı ve derleyici ayarlarını içe aktarmanız gerekir. Tenderly Hardhat eklentisini kullanmak, otomatik (kodsuz) ve manuel (kod tabanlı) doğrulama arasında seçim yapmanıza olanak tanıyarak doğrulama işlemi üzerinde daha az çabayla daha fazla kontrole sahip olmanızı sağlar. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Sözleşme kaynak kodunu doğrulama](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) diff --git a/public/content/translations/tr/developers/docs/standards/index.md b/public/content/translations/tr/developers/docs/standards/index.md index c5781246604..101d9da4761 100644 --- a/public/content/translations/tr/developers/docs/standards/index.md +++ b/public/content/translations/tr/developers/docs/standards/index.md @@ -1,58 +1,58 @@ --- -title: Ethereum Geliştirme Standartları -description: +title: "Ethereum Geliştirme Standartları" +description: "EIP'ler, ERC-20 ve ERC-721 gibi jeton standartları ve geliştirme kuralları da dahil olmak üzere Ethereum standartları hakkında bilgi edinin." lang: tr incomplete: true --- ## Standartlara genel bakış {#standards-overview} -Ethereum topluluğu, projelerin ([Ethereum istemcileri](/developers/docs/nodes-and-clients/) ve cüzdanlar gibi) uygulamalar arasında birlikte çalışabilir durumda kalmasına yardımcı olan ve akıllı sözleşmeler ve dapp'lerin birleştirilebilir kalmasını sağlayan birçok standardı benimsemiştir. +Ethereum topluluğu, projelerin ([Ethereum istemcileri](/developers/docs/nodes-and-clients/) ve cüzdanlar gibi) uygulamalar genelinde birlikte çalışabilir kalmasına yardımcı olan ve akıllı sözleşmeler ile merkeziyetsiz uygulamaların birleştirilebilir kalmasını sağlayan birçok standardı benimsemiştir. -Genellikle standartlar, bir [standart süreci](https://eips.ethereum.org/EIPS/eip-1) aracılığıyla topluluk üyeleri tarafından tartışılan [Ethereum İyileştirme Önerileri](/eips/) (EIP'ler) olarak sunulur. +Genellikle standartlar, topluluk üyeleri tarafından [standart bir süreç](https://eips.ethereum.org/EIPS/eip-1) aracılığıyla tartışılan [Ethereum İyileştirme Önerileri](/eips/) (EIP'ler) olarak tanıtılır. -- [EIP'lere giriş](/eips/) -- [EIP listesi](https://eips.ethereum.org/) +- [EIP'lere Giriş](/eips/) +- [EIP Listesi](https://eips.ethereum.org/) - [EIP GitHub deposu](https://github.com/ethereum/EIPs) - [EIP tartışma panosu](https://ethereum-magicians.org/c/eips) - [Ethereum Yönetişimine Giriş](/governance/) - [Ethereum Yönetişimine Genel Bakış](https://web.archive.org/web/20201107234050/https://blog.bmannconsulting.com/ethereum-governance/) _31 Mart 2019 - Boris Mann_ - [Ethereum Protokol Geliştirme Yönetişimi ve Ağ Yükseltme Koordinasyonu](https://hudsonjameson.com/posts/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) _23 Mart 2020 - Hudson Jameson_ -- [Ethereum Çekirdek Geliştiricilerinin Bütün Toplantılarını İçeren Oynatma Listesi](https://www.youtube.com/@EthereumProtocol) _(YouTube Oynatma Listesi)_ +- [Tüm Ethereum Çekirdek Geliştirici Toplantılarının Oynatma Listesi](https://www.youtube.com/@EthereumProtocol) _(YouTube Oynatma Listesi)_ ## Standart türleri {#types-of-standards} 3 tür EIP vardır: - Standart İzleme: Ethereum uygulamalarının çoğunu ya da tamamını etkileyen herhangi bir değişikliği açıklar -- [Meta İzleme](https://eips.ethereum.org/meta): Ethereum'u çevreleyen bir süreci açıklar ya da bir süreçte değişiklik önerir -- [Bilgi İzleme](https://eips.ethereum.org/informational): bir Ethereum tasarım sorununu açıklar ya da Ethereum topluluğuna genel yönergeler ya da bilgiler sağlar +- [Meta İzleme](https://eips.ethereum.org/meta): Ethereum'u çevreleyen bir süreci tanımlar veya bir süreçte değişiklik önerir +- [Bilgi İzleme](https://eips.ethereum.org/informational): bir Ethereum tasarım sorununu tanımlar veya Ethereum topluluğuna genel yönergeler ya da bilgiler sağlar Ayrıca, Standart İzleme 4 kategoriye ayrılmıştır: -- [Çekirdek](https://eips.ethereum.org/core): mutabakat çatalı gerektiren iyileştirmeler -- [Ağ Oluşturma](https://eips.ethereum.org/networking): devp2p ve Hafif Ethereum Alt Protokolü ile ilgili iyileştirmelerin yanı sıra whisper ve swarm ağ protokolü spesifikasyonlarına önerilen iyileştirmeler. -- [Arayüz](https://eips.ethereum.org/interface): istemci API/RPC spesifikasyonları ve standartları ile ilgili iyileştirmeler ve yöntem adları ile sözleşme ABI'leri gibi dil düzeyindeki belirli standartlar. -- [ERC](https://eips.ethereum.org/erc): uygulama seviyesindeki standartlar ve teamüller +- [Çekirdek](https://eips.ethereum.org/core): bir mutabakat çatalı gerektiren iyileştirmeler +- [Ağ Oluşturma](https://eips.ethereum.org/networking): devp2p ve Hafif Ethereum Alt Protokolü etrafındaki iyileştirmelerin yanı sıra whisper ve swarm'ın ağ protokolü özelliklerine yönelik önerilen iyileştirmeler. +- [Arayüz](https://eips.ethereum.org/interface): istemci API/RPC spesifikasyonları ve standartları ile ilgili iyileştirmeler ve yöntem adları ile sözleşme ABI'leri gibi belirli dil düzeyindeki standartlar. +- [ERC](https://eips.ethereum.org/erc): uygulama düzeyindeki standartlar ve kurallar -Bu farklı türler ve kategoriler daha fazla bilgi [EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-types) içinde bulunabilir +Bu farklı türler ve kategoriler hakkında daha ayrıntılı bilgi [EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-types) belgesinde bulunabilir. -### Token standartları {#token-standards} +### Jeton standartları {#token-standards} -- [ERC-20](/developers/docs/standards/tokens/erc-20/) - Oylama token'ları, stake etme token'ları veya sanal para birimleri gibi değiştirilebilir (birbirinin yerine geçebilir) token'lar için standart bir arayüz. - - [ERC-223](/developers/docs/standards/tokens/erc-223/) - Jetonların ether ile aynı şekilde davranmasını sağlayan ve alıcı tarafında jeton transferlerinin işlenmesini destekleyen bir değiştirilebilir jeton standardıdır. - - [ERC-1363](/developers/docs/standards/tokens/erc-1363/) - ERC-20 jetonları için transfer veya transferFrom sonrası alıcı kodunun veya onaylandıktan sonra harcama kodunun yürütülmesini destekleyen bir jeton arayüzünü tanımlar. -- [ERC-721](/developers/docs/standards/tokens/erc-721/) - Bir şarkı veya sanat eserinin telif hakkı gibi değiştirilemez token'lar için standart bir arayüz. - - [ERC-2309](https://eips.ethereum.org/EIPS/eip-2309) - Ardışık jeton tanımlayıcıları kullanarak bir veya çok sayıda değiştirilemez jeton oluştururken/transfer ederken yayımlanan standartlaştırılmış bir olay. +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - Oylama jetonları, hisseleme jetonları veya sanal para birimleri gibi değiştirilebilir (birbiri yerine kullanılabilir) jetonlar için standart bir arayüz. + - [ERC-223](/developers/docs/standards/tokens/erc-223/) - Jetonların ether ile aynı şekilde davranmasını sağlayan ve alıcı tarafında jeton transferlerinin işlenmesini destekleyen bir değiştirilebilir jeton standardı. + - [ERC-1363](/developers/docs/standards/tokens/erc-1363/) - Tek bir işlemde alıcı sözleşmelerinde geri arama (callback) yürütmeyi destekleyen ERC-20 jetonları için bir uzantı arayüzü. +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - Bir sanat eseri veya şarkı için bir tapu gibi, değiştirilemez jetonlar için standart bir arayüz. + - [ERC-2309](https://eips.ethereum.org/EIPS/eip-2309) - Ardışık jeton tanımlayıcıları kullanılarak bir veya daha fazla değiştirilemez jeton oluşturulurken/aktarılırken yayılan standartlaştırılmış bir olay. - [ERC-4400](https://eips.ethereum.org/EIPS/eip-4400) - EIP-721 tüketici rolü için arayüz uzantısı. - - [ERC-4907](https://eips.ethereum.org/EIPS/eip-4907) - ERC-721 jetonlarına sınırlı izinlere sahip zaman sınırlı bir rol ekler. -- [ERC-777](/developers/docs/standards/tokens/erc-777/) - **(TAVSİYE EDİLMEZ)** ERC-20'yi geliştiren bir jeton standardı. + - [ERC-4907](https://eips.ethereum.org/EIPS/eip-4907) - ERC-721 jetonlarına kısıtlı izinlere sahip, zaman sınırlı bir rol ekler. +- [ERC-777](/developers/docs/standards/tokens/erc-777/) - **(ÖNERİLMEZ)** ERC-20'yi geliştiren bir jeton standardı. - [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - Hem değiştirilebilir hem de değiştirilemez varlıkları içerebilen bir jeton standardı. -- [ERC-4626](/developers/docs/standards/tokens/erc-4626/) - Verim taşıyan kasaların teknik parametrelerini optimize etmek ve birleştirmek için tasarlanmış, tokenize edilmiş bir kasa standardı. +- [ERC-4626](/developers/docs/standards/tokens/erc-4626/) - Getiri sağlayan kasaların teknik parametrelerini optimize etmek ve birleştirmek için tasarlanmış tokenize edilmiş bir kasa standardı. [Jeton standartları](/developers/docs/standards/tokens/) hakkında daha fazla bilgi edinin. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} - [Ethereum İyileştirme Önerileri (EIP'ler)](/eips/) diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-1155/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-1155/index.md index d9ea715db0f..b8521da193c 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/erc-1155/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-1155/index.md @@ -1,35 +1,35 @@ --- -title: ERC-1155 Çoklu Token Standardı -description: +title: "ERC-1155 Çoklu Token Standardı" +description: "Değiştirilebilir ve değiştirilemez jetonları tek bir sözleşmede birleştiren çoklu jeton standardı olan ERC-1155 hakkında bilgi edinin." lang: tr --- ## Giriş {#introduction} -Birden çok token türünü yöneten sözleşmeler için standart bir arayüz. Dağıtılan tek bir sözleşme; değiştirilebilir token, değiştirilemez token veya diğer yapılandırmaların (örneğin yarı-değişebilir token) herhangi bir kombinasyonunu içerebilir. +Birden çok token türünü yöneten sözleşmeler için standart bir arayüz. Dağıtılmış tek bir sözleşme, değiştirilebilir jetonların, değiştirilemez jetonların veya diğer yapılandırmaların (ör. yarı-değiştirilebilir jetonlar) herhangi bir kombinasyonunu içerebilir. **Çoklu-Token Standardı ne anlama geliyor?** -Basit bir fikirdir: Herhangi bir sayıda değiştirilebilir ve değiştirilemez token türünü temsil edebilen ve kontrol edebilen bir akıllı sözleşme arayüzü oluşturmayı amaçlar. Böylece ERC-1155 token'ı, [ERC-20](/developers/docs/standards/tokens/erc-20/) ve [ERC-721](/developers/docs/standards/tokens/erc-721/) token'ı ile aynı işlevleri gerçekleştirebilir. Hatta ikisini aynı anda bile yapabilir. Bu, hem ERC-20 hem de ERC-721 standartlarının işlevselliğini iyileştirerek daha verimli kılar ve bariz uygulama hatalarını düzeltir. +Basit bir fikirdir: Herhangi bir sayıda değiştirilebilir ve değiştirilemez token türünü temsil edebilen ve kontrol edebilen bir akıllı sözleşme arayüzü oluşturmayı amaçlar. Bu şekilde, ERC-1155 jetonu, bir [ERC-20](/developers/docs/standards/tokens/erc-20/) ve [ERC-721](/developers/docs/standards/tokens/erc-721/) jetonu ile aynı işlevleri ve hatta her ikisini aynı anda yapabilir. Bu, hem ERC-20 hem de ERC-721 standartlarının işlevselliğini iyileştirerek daha verimli kılar ve bariz uygulama hatalarını düzeltir. -ERC-1155 token'ı, [EIP-1155](https://eips.ethereum.org/EIPS/eip-1155)'te tam olarak açıklanmıştır. +ERC-1155 jetonu, [EIP-1155](https://eips.ethereum.org/EIPS/eip-1155) belgesinde tamamen açıklanmıştır. ## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için öncelikle [token standartları](/developers/docs/standards/tokens/), [ERC-20](/developers/docs/standards/tokens/erc-20/) ve [ERC-721](/developers/docs/standards/tokens/erc-721/) hakkında okuma yapmanızı öneririz. +Bu sayfayı daha iyi anlamak için öncelikle [jeton standartları](/developers/docs/standards/tokens/), [ERC-20](/developers/docs/standards/tokens/erc-20/) ve [ERC-721](/developers/docs/standards/tokens/erc-721/) hakkında bilgi edinmenizi öneririz. ## ERC-1155 Fonksiyonları ve Özellikleri: {#body} -- [Toplu Aktarım](#batch_transfers): Tek bir aramada birden çok varlığı aktarın. -- [Toplu Bakiye](#batch_balance): Birden fazla varlığın bakiyesini tek bir çağrıda alın. -- [Toplu Onay](#batch_approval): Bir adres için tüm token'ları onaylayın. -- [Kancalar](#receive_hook): Token kancalarını alın. -- [NFT Desteği](#nft_support): Arz yalnızca 1 ise, bunu NFT olarak düşünün. -- [Güvenli Aktarım Kuralları](#safe_transfer_rule): Güvenli aktarım için birtakım kurallar. +- [Toplu Aktarım](#batch_transfers): Tek bir çağrıda birden çok varlığı aktarın. +- [Toplu Bakiye](#batch_balance): Tek bir çağrıda birden fazla varlığın bakiyesini alın. +- [Toplu Onay](#batch_approval): Bir adrese tüm jetonları onaylayın. +- [Kancalar](#receive_hook): Jeton alma kancası. +- [NFT Desteği](#nft_support): Arz yalnızca 1 ise bunu NFT olarak kabul edin. +- [Güvenli Aktarım Kuralları](#safe_transfer_rule): Güvenli aktarım için kurallar dizisi. ### Toplu Aktarımlar {#batch-transfers} -Toplu aktarım, normal ERC-20 aktarımlarına çok benzer şekilde çalışır. Normal ERC-20 `transferFrom` fonksiyonuna bakalım: +Toplu aktarım, normal ERC-20 aktarımlarına çok benzer şekilde çalışır. Normal ERC-20 transferFrom fonksiyonuna bakalım: ```solidity // ERC-20 @@ -45,17 +45,17 @@ function safeBatchTransferFrom( ) external; ``` -ERC-1155'teki tek fark, değerleri bir dizi olarak geçirmemiz ve ayrıca bir dizi kimlik geçirmemizdir. Örneğin, `ids=[3, 6, 13]` ve `values=[100, 200, 5]` olduğunda, elde edilen aktarımlar şöyle olacaktır +ERC-1155'teki tek fark, değerleri bir dizi olarak geçirmemiz ve ayrıca bir dizi kimlik geçirmemizdir. Örneğin, `ids=[3, 6, 13]` ve `values=[100, 200, 5]` verildiğinde, sonuçta ortaya çıkan transferler şöyle olacaktır -1. Kimliği 3 olan 100 token'ı `_from`'dan `_to`'ya aktarın. -2. Kimliği 6 olan 200 token'ı `_from`'dan `_to`'ya aktarın. -3. 13 kimliğine sahip 5 token'ı `_from`'dan `_to`'ya aktarın. +1. 3 kimliğine sahip 100 jetonu `_from` adresinden `_to` adresine transfer edin. +2. 6 kimliğine sahip 200 jetonu `_from` adresinden `_to` adresine transfer edin. +3. 13 kimliğine sahip 5 jetonu `_from` adresinden `_to` adresine transfer edin. -ERC-1155'de sadece `transferFrom` bulunur, `transfer` yoktur. Normal bir `transfer` gibi kullanmak için, gönderen adresini fonksiyonu çağıran adrese ayarlayın. +ERC-1155'te yalnızca `transferFrom` vardır, `transfer` yoktur. Normal bir `transfer` gibi kullanmak için, gönderen adresini fonksiyonu çağıran adrese ayarlamanız yeterlidir. ### Toplu Bakiye {#batch-balance} -İlgili ERC-20 `balanceOf` çağrısı da aynı şekilde toplu destekli ortak fonksiyonuna sahiptir. Bir hatırlatma olarak, ERC-20 sürümü şudur: +İlgili ERC-20 `balanceOf` çağrısı da benzer şekilde toplu destekli bir partner fonksiyona sahiptir. Bir hatırlatma olarak, ERC-20 sürümü şudur: ```solidity // ERC-20 @@ -70,7 +70,7 @@ function balanceOfBatch( Bakiye çağrısı için daha da basit şekilde tek bir aramada birden fazla bakiye alabiliriz. Sahip dizisini ve ardından token kimlikleri dizisini geçiriyoruz. -Örneğin, `_ids=[3, 6, 13]` ve `_owners=[0xbeef..., 0x1337..., 0x1111...]` olduğunda döndürülen değer şu olacaktır +Örneğin `_ids=[3, 6, 13]` ve `_owners=[0xbeef..., 0x1337..., 0x1111...]` verildiğinde, dönüş değeri şöyle olacaktır ```solidity [ @@ -95,9 +95,9 @@ function isApprovedForAll( ) external view returns (bool); ``` -Onaylar, ERC-20'den biraz farklıdır. Belirli miktarları onaylamak yerine, `setApprovalForAll` aracılığıyla bir operatörü onaylandı veya onaylanmadı olarak ayarlarsınız. +Onaylar, ERC-20'den biraz farklıdır. Belirli tutarları onaylamak yerine, `setApprovalForAll` aracılığıyla bir operatörü onaylanmış veya onaylanmamış olarak ayarlarsınız. -Mevcut durumun okunması `isApprovedForAll` üzerinden yapılabilir. Gördüğünüz gibi, bir "ya hep ya hiç" işlemidir. Kaç token onaylanacağını ve hatta hangi token sınıflarının onaylanacağını tanımlayamazsınız. +Mevcut durumu okuma işlemi `isApprovedForAll` aracılığıyla yapılabilir. Gördüğünüz gibi, bir "ya hep ya hiç" işlemidir. Kaç token onaylanacağını ve hatta hangi token sınıflarının onaylanacağını tanımlayamazsınız. Bu kasıtlı olarak basitlik göz önünde bulundurularak tasarlanmıştır. Her şeyi yalnızca bir adres için onaylayabilirsiniz. @@ -113,7 +113,7 @@ function onERC1155BatchReceived( ) external returns(bytes4); ``` -[EIP-165](https://eips.ethereum.org/EIPS/eip-165) desteği göz önünde bulundurulduğunda, ERC-1155 yalnızca akıllı sözleşmeler için alma kancalarını destekler. Kanca fonksiyonu, şu şekilde olan bir sihirli önceden tanımlanmış bytes4 değeri döndürmelidir: +[EIP-165](https://eips.ethereum.org/EIPS/eip-165) desteği sayesinde ERC-1155, yalnızca akıllı sözleşmeler için alma kancalarını destekler. Kanca fonksiyonu, şu şekilde olan bir sihirli önceden tanımlanmış bytes4 değeri döndürmelidir: ```solidity bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) @@ -123,24 +123,24 @@ Alıcı sözleşme bu değeri döndürdüğünde, sözleşmenin aktarımı kabul ### NFT Desteği {#nft-support} -Arz yalnızca bir olduğunda, token esasen bir değiştirilemez token'dır (NFT). Ve ERC-721 için standart olduğu gibi, bir meta veri URL'si tanımlayabilirsiniz. URL istemciler tarafından okunabilir ve modifiye edilebilir, [burada](https://eips.ethereum.org/EIPS/eip-1155#metadata) görebilirsiniz. +Arz yalnızca bir olduğunda, token esasen bir değiştirilemez token'dır (NFT). Ve ERC-721 için standart olduğu gibi, bir meta veri URL'si tanımlayabilirsiniz. URL, istemciler tarafından okunabilir ve değiştirilebilir, [buraya](https://eips.ethereum.org/EIPS/eip-1155#metadata) bakın. ### Güvenli Aktarım Kuralı {#safe-transfer-rule} Birkaç güvenli aktarım kuralına daha önceki açıklamalarda değinmiştik. Ama kuralların en önemlisine bir bakalım: -1. Arayanın, `_from` adresi için token'ları harcaması için onaylanmış olması veya arayanın, `_from` değerine eşit olması gerekir. +1. Çağıran, `_from` adresi için jetonları harcamak üzere onaylanmış olmalı veya çağıran `_from` ile aynı olmalıdır. 2. Transfer çağrısı şu durumlarda geri dönmelidir - 1. `_to` adresi 0'sa. - 2. `_ids` uzunluğu `_values` uzunluğuyla eşit değilse. - 3. `_ids` içindeki token'lar için sahiplerin herhangi bir bakiyesi, alıcıya gönderilen `_values` içindeki ilgili miktardan daha düşükse. + 1. `_to` adresinin 0 olması. + 2. `_ids` uzunluğunun `_values` uzunluğu ile aynı olmaması. + 3. `_ids` içindeki jetonlar için sahiplerin bakiyelerinden herhangi birinin, alıcıya gönderilen `_values` içindeki ilgili tutarlardan daha düşük olması. 4. başka herhangi bir hata gerçekleşirse. -_Not_: Kanca dahil tüm toplu fonksiyonlar, toplu olmayan sürümler olarak da mevcuttur. Bu, yalnızca bir varlığın aktarılmasının muhtemelen hâlâ en yaygın kullanılan yol olacağı düşünülerek, gaz verimliliği için yapılır. Güvenli aktarım kuralları da dahil olmak üzere açıklamalarda basitlik için bunlardan bahsetmedik. İsimler aynıdır: Sadece "Batch"i kaldırın. +_Not_: Kanca dâhil tüm toplu fonksiyonlar, toplu olmayan sürümler olarak da mevcuttur. Bu, yalnızca bir varlığın aktarılmasının muhtemelen hâlâ en yaygın kullanılan yol olacağı düşünülerek, gaz verimliliği için yapılır. Güvenli aktarım kuralları da dahil olmak üzere açıklamalarda basitlik için bunlardan bahsetmedik. İsimler aynıdır: Sadece "Batch"i kaldırın. -## Daha fazla bilgi {#further-reading} +## Daha fazla kaynak {#further-reading} -- [EIP-1155: Çoklu Token Standardı](https://eips.ethereum.org/EIPS/eip-1155) -- [ERC-1155: Openzeppelin Belgeleri](https://docs.openzeppelin.com/contracts/3.x/erc1155) +- [EIP-1155: Çoklu Jeton Standardı](https://eips.ethereum.org/EIPS/eip-1155) +- [ERC-1155: Openzeppelin Dokümanları](https://docs.openzeppelin.com/contracts/5.x/erc1155) - [ERC-1155: GitHub Deposu](https://github.com/enjin/erc-1155) -- [Alchemy NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) +- [Alchemy NFT API'si](https://www.alchemy.com/docs/reference/nft-api-quickstart) diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-1363/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-1363/index.md new file mode 100644 index 00000000000..0966137f447 --- /dev/null +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-1363/index.md @@ -0,0 +1,212 @@ +--- +title: "ERC-1363 Ödenebilir Jeton Standardı" +description: "ERC-1363, transferlerden sonra alıcı bir sözleşmede veya onaylardan sonra harcayan bir sözleşmede, tümü tek bir işlemde olmak üzere özel mantık yürütmeyi destekleyen ERC-20 jetonları için bir genişletme arayüzüdür." +lang: tr +--- + +## Giriş {#introduction} + +### ERC-1363 nedir? {#what-is-erc1363} + +ERC-1363, transferlerden sonra alıcı bir sözleşmede veya onaylardan sonra harcayan bir sözleşmede, tümü tek bir işlemde olmak üzere özel mantık yürütmeyi destekleyen ERC-20 jetonları için bir genişletme arayüzüdür. + +### ERC-20'den farkları {#erc20-differences} + +`transfer`, `transferFrom` ve `approve` gibi standart ERC-20 işlemleri, ayrı bir işlem olmaksızın alıcı veya harcayan sözleşmesinde kod yürütülmesine izin vermez. +Bu durum, kullanıcı arayüzü geliştirmede karmaşıklığa ve benimsenmesinde zorluğa neden olur çünkü kullanıcıların ilk işlemin yürütülmesini beklemesi ve ardından ikinci işlemi göndermesi gerekir. +Ayrıca iki kez GAZ ödemeleri gerekir. + +ERC-1363, misli jetonların eylemleri daha kolay gerçekleştirmesini ve herhangi bir zincir dışı dinleyici kullanmadan çalışmasını sağlar. +Tek bir işlemde, bir transferden veya onaydan sonra bir alıcı veya harcayan sözleşmesinde geri arama yapılmasına olanak tanır. + +## Ön Koşullar {#prerequisites} + +Bu sayfayı daha iyi anlamak için önce şunları okumanızı öneririz: + +- [Jeton standartları](/developers/docs/standards/tokens/) +- [ERC-20](/developers/docs/standards/tokens/erc-20/) + +## Gövde {#body} + +ERC-1363, ERC-20 jetonlarının `transfer`, `transferFrom` veya `approve` işlemlerinden sonra akıllı sözleşmelerle etkileşime girmesi için standart bir API sunar. + +Bu standart, jetonları transfer etmek için temel işlevsellik sağlar, ayrıca jetonların zincir üzerindeki başka bir üçüncü tarafça harcanabilmesi için onaylanmasına ve ardından alıcı veya harcayan sözleşmesinde bir geri arama yapılmasına olanak tanır. + +ERC-20 geri aramalarını kabul edebilen akıllı sözleşmeler için önerilen birçok kullanım alanı vardır. + +Örneğin: + +- **Kitle satışları**: gönderilen jetonlar anında ödül dağıtımını tetikler. +- **Hizmetler**: ödeme, hizmet erişimini tek adımda etkinleştirir. +- **Faturalar**: jetonlar faturaları otomatik olarak öder. +- **Abonelikler**: yıllık ücretin onaylanması, ilk ayın ödemesi dahilinde aboneliği etkinleştirir. + +Bu nedenlerle başlangıçta **"Ödenebilir Jeton"** olarak adlandırılmıştır. + +Geri arama davranışı, kullanım alanını daha da genişleterek şunlar gibi sorunsuz etkileşimleri mümkün kılar: + +- **Hisseleme**: transfer edilen jetonlar bir hisseleme sözleşmesinde otomatik kilitlemeyi tetikler. +- **Oylama**: alınan jetonlar bir yönetişim sisteminde oyları kaydeder. +- **Takas**: jeton onayları, takas mantığını tek adımda etkinleştirir. + +ERC-1363 jetonları, alınan bir transfer veya onaydan sonra bir geri aramanın yürütülmesini gerektiren tüm durumlarda belirli yardımcı programlar için kullanılabilir. +ERC-1363, alıcının jetonları işleme yeteneğini doğrulayarak akıllı sözleşmelerde jeton kaybını veya jeton kilitlenmesini önlemek için de kullanışlıdır. + +Diğer ERC-20 genişletme önerilerinin aksine ERC-1363, ERC-20 `transfer` ve `transferFrom` yöntemlerini geçersiz kılmaz ve ERC-20 ile geriye dönük uyumluluğu koruyarak uygulanacak arayüz kimliklerini tanımlar. + +[EIP-1363'den](https://eips.ethereum.org/EIPS/eip-1363): + +### Yöntemler {#methods} + +ERC-1363 standardını uygulayan akıllı sözleşmeler, `ERC1363` arayüzündeki tüm fonksiyonların yanı sıra `ERC20` ve `ERC165` arayüzlerini de **MUTLAKA** uygulamalıdır. + +```solidity +pragma solidity ^0.8.0; + +/** + * @title ERC1363 + * @dev Tek bir işlemde, `transfer` veya `transferFrom` sonrası alıcı bir sözleşmede kod yürütmeyi veya `approve` sonrası harcayan bir sözleşmede kod yürütmeyi destekleyen ERC-20 jetonları için bir genişletme arayüzü. + */ +interface ERC1363 is ERC20, ERC165 { + /* + * NOT: bu arayüz için ERC-165 tanımlayıcısı 0xb0202a11'dir. + * 0xb0202a11 === + * bytes4(keccak256('transferAndCall(address,uint256)')) ^ + * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) + */ + + /** + * @dev Çağıranın hesabından `to` adresine `value` miktarında jeton taşır + * ve ardından `to` üzerinde `ERC1363Receiver::onTransferReceived` fonksiyonunu çağırır. + * @param to Jetonların transfer edildiği adres. + * @param value Transfer edilecek jeton miktarı. + * @return Bir hata oluşmadığı sürece işlemin başarılı olduğunu gösteren bir boole değeri. + */ + function transferAndCall(address to, uint256 value) external returns (bool); + + /** + * @dev Çağıranın hesabından `to` adresine `value` miktarında jeton taşır + * ve ardından `to` üzerinde `ERC1363Receiver::onTransferReceived` fonksiyonunu çağırır. + * @param to Jetonların transfer edildiği adres. + * @param value Transfer edilecek jeton miktarı. + * @param data Belirtilen bir formatı olmayan, `to` adresine yapılan çağrıda gönderilen ek veriler. + * @return Bir hata oluşmadığı sürece işlemin başarılı olduğunu gösteren bir boole değeri. + */ + function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev Ödenek mekanizmasını kullanarak `from` adresinden `to` adresine `value` miktarında jeton taşır + * ve ardından `to` üzerinde `ERC1363Receiver::onTransferReceived` fonksiyonunu çağırır. + * @param from Jetonların gönderileceği adres. + * @param to Jetonların transfer edildiği adres. + * @param value Transfer edilecek jeton miktarı. + * @return Bir hata oluşmadığı sürece işlemin başarılı olduğunu gösteren bir boole değeri. + */ + function transferFromAndCall(address from, address to, uint256 value) external returns (bool); + + /** + * @dev Ödenek mekanizmasını kullanarak `from` adresinden `to` adresine `value` miktarında jeton taşır + * ve ardından `to` üzerinde `ERC1363Receiver::onTransferReceived` fonksiyonunu çağırır. + * @param from Jetonların gönderileceği adres. + * @param to Jetonların transfer edildiği adres. + * @param value Transfer edilecek jeton miktarı. + * @param data Belirtilen bir formatı olmayan, `to` adresine yapılan çağrıda gönderilen ek veriler. + * @return Bir hata oluşmadığı sürece işlemin başarılı olduğunu gösteren bir boole değeri. + */ + function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev Çağıranın jetonları üzerinde `spender` için `value` miktarında jetonu ödenek olarak ayarlar + * ve ardından `spender` üzerinde `ERC1363Spender::onApprovalReceived` fonksiyonunu çağırır. + * @param spender Fonları harcayacak adres. + * @param value Harcanacak jeton miktarı. + * @return Bir hata oluşmadığı sürece işlemin başarılı olduğunu gösteren bir boole değeri. + */ + function approveAndCall(address spender, uint256 value) external returns (bool); + + /** + * @dev Çağıranın jetonları üzerinde `spender` için `value` miktarında jetonu ödenek olarak ayarlar + * ve ardından `spender` üzerinde `ERC1363Spender::onApprovalReceived` fonksiyonunu çağırır. + * @param spender Fonları harcayacak adres. + * @param value Harcanacak jeton miktarı. + * @param data Belirtilen bir formatı olmayan, `spender` adresine yapılan çağrıda gönderilen ek veriler. + * @return Bir hata oluşmadığı sürece işlemin başarılı olduğunu gösteren bir boole değeri. + */ + function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); +} + +interface ERC20 { + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + function transfer(address to, uint256 value) external returns (bool); + function transferFrom(address from, address to, uint256 value) external returns (bool); + function approve(address spender, uint256 value) external returns (bool); + function totalSupply() external view returns (uint256); + function balanceOf(address account) external view returns (uint256); + function allowance(address owner, address spender) external view returns (uint256); +} + +interface ERC165 { + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} +``` + +`transferAndCall` veya `transferFromAndCall` aracılığıyla ERC-1363 jetonlarını kabul etmek isteyen bir akıllı sözleşme, `ERC1363Receiver` arayüzünü **MUTLAKA** uygulamalıdır: + +```solidity +/** + * @başlık ERC1363Receiver + * @dev ERC-1363 jeton sözleşmelerinden `transferAndCall` veya `transferFromAndCall` desteklemek isteyen herhangi bir sözleşme için arayüz. + */ +interface ERC1363Receiver { + /** + * @dev ERC-1363 jetonları bu sözleşmeye `ERC1363::transferAndCall` veya `ERC1363::transferFromAndCall` aracılığıyla + * `operator` tarafından `from` adresinden transfer edildiğinde bu fonksiyon çağrılır. + * + * NOT: Transferi kabul etmek için bu, + * `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` + * (yani 0x88a7ca5c veya kendi fonksiyon seçicisi) döndürmelidir. + * + * @param operator `transferAndCall` veya `transferFromAndCall` fonksiyonunu çağıran adres. + * @param from Jetonların transfer edildiği adres. + * @param value Transfer edilen jeton miktarı. + * @param data Belirtilen bir formatı olmayan ek veriler. + * @return Bir hata oluşmadığı sürece transfere izin verilirse `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` döndürür. + */ + function onTransferReceived(address operator, address from, uint256 value, bytes calldata data) external returns (bytes4); +} +``` + +`approveAndCall` aracılığıyla ERC-1363 jetonlarını kabul etmek isteyen bir akıllı sözleşme, `ERC1363Spender` arayüzünü **MUTLAKA** uygulamalıdır: + +```solidity +/** + * @başlık ERC1363Spender + * @dev ERC-1363 jeton sözleşmelerinden `approveAndCall` desteklemek isteyen herhangi bir sözleşme için arayüz. + */ +interface ERC1363Spender { + /** + * @dev Bir ERC-1363 jeton `sahibi` bu sözleşmeyi `ERC1363::approveAndCall` aracılığıyla + * jetonlarını harcamak için onayladığında bu fonksiyon çağrılır. + * + * NOT: Onayı kabul etmek için bu, + * `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` + * (yani 0x7b04a2d0 veya kendi fonksiyon seçicisi) döndürmelidir. + * + * @param owner `approveAndCall` fonksiyonunu çağıran ve daha önce jetonlara sahip olan adres. + * @param value Harcanacak jeton miktarı. + * @param data Belirtilen bir formatı olmayan ek veriler. + * @return Bir hata oluşmadığı sürece onaya izin verilirse `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` döndürür. + */ + function onApprovalReceived(address owner, uint256 value, bytes calldata data) external returns (bytes4); +} +``` + +## Daha fazla kaynak {#further-reading} + +- [ERC-1363: Ödenebilir Jeton Standardı](https://eips.ethereum.org/EIPS/eip-1363) +- [ERC-1363: GitHub Deposu](https://github.com/vittominacori/erc1363-payable-token) diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-20/index.md index fb8aa505a53..87d59a78d3f 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/erc-20/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-20/index.md @@ -1,6 +1,6 @@ --- -title: ERC-20 Token Standardı -description: +title: "ERC-20 Token Standardı" +description: "Birlikte çalışabilir jeton uygulamalarını mümkün kılan, Ethereum'daki takas edilebilir jetonlar için standart olan ERC-20 hakkında bilgi edinin." lang: tr --- @@ -15,9 +15,9 @@ Token'lar Ethereum'daki hemen hemen her şeyi temsil edebilir: - şirket hissesi gibi finansal varlıklar - ABD Doları gibi itibari para birimi - ons altın -- ve daha fazlası... +- ve dahası... -Ethereum'un bu kadar güçlü bir özelliği güçlü bir standart tarafından idare edilmeli, değil mi? ERC-20 tam da bu noktada devreye giriyor! Bu standart, geliştiricilerin diğer ürün ve servislerle uyumlu token uygulamaları inşa etmesini sağlar. ERC-20 standardı, [ether](/glossary/#ether)'e ek işlevsellik kazandırmak için de kullanılır. +Ethereum'un bu kadar güçlü bir özelliği güçlü bir standart tarafından idare edilmeli, değil mi? ERC-20 tam da bu noktada devreye giriyor! Bu standart, geliştiricilerin diğer ürün ve servislerle uyumlu token uygulamaları inşa etmesini sağlar. ERC-20 standardı, [ether](/glossary/#ether)'a ek işlevsellik kazandırmak için de kullanılır. **ERC-20 nedir?** @@ -27,9 +27,9 @@ ERC-20, Değiştirilebilir Jetonlar için bir standart getirmiştir: Başka bir - [Hesaplar](/developers/docs/accounts) - [Akıllı Sözleşmeler](/developers/docs/smart-contracts/) -- [Token standartları](/developers/docs/standards/tokens/) +- [Jeton standartları](/developers/docs/standards/tokens/) -## Şablon {#body} +## Gövde {#body} Fabian Vogelsteller tarafından Kasım 2015'te önerilen ERC-20 (Ethereum Yorum Talebi 20), Akıllı Sözleşmeler içindeki token'lar için bir API sağlayan bir Token Standardıdır. @@ -42,7 +42,7 @@ ERC-20'nin sağladığı örnek işlevler: Eğer bir Akıllı Sözleşme aşağıdaki metodları ve olayları uygularsa bir ERC-20 Token Sözleşmesi olarak çağrılabilir ve dağıtıldığı andan itibaren Ethereum'da oluşturulan token'ları takip etmekten sorumludur. -[EIP-20](https://eips.ethereum.org/EIPS/eip-20)'den: +[EIP-20'den](https://eips.ethereum.org/EIPS/eip-20): ### Yöntemler {#methods} @@ -67,11 +67,12 @@ event Approval(address indexed _owner, address indexed _spender, uint256 _value) ### Örnekler {#web3py-example} -Ethereum'daki herhangi bir ERC-20 Token Sözleşmesini incelememizi basitleştirmek için bir Standart'ın ne kadar önemli olduğunu görelim. Herhangi bir ERC-20 token'a arayüz oluşturmak için sadece Sözleşme Uygulama İkili Arayüzü'ne (ABI) ihtiyacımız var. Aşağıda görebileceğiniz gibi az sürtünmeli bir örnek olması için basitleştirilmiş bir ABI kullanacağız. +Ethereum'daki herhangi bir ERC-20 Token Sözleşmesini incelememizi basitleştirmek için bir Standart'ın ne kadar önemli olduğunu görelim. +Herhangi bir ERC-20 token'a arayüz oluşturmak için sadece Sözleşme Uygulama İkili Arayüzü'ne (ABI) ihtiyacımız var. Aşağıda görebileceğiniz gibi az sürtünmeli bir örnek olması için basitleştirilmiş bir ABI kullanacağız. #### Web3.py Örneği {#web3py-example} -İlk olarak, [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python kütüphanesini kurduğunuzdan emin olun: +Öncelikle, [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python kütüphanesini yüklediğinizden emin olun: ``` pip install web3 @@ -84,12 +85,12 @@ from web3 import Web3 w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI -weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Wrapped ether (WETH) +weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Sarılmış ether (WETH) acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2 -# This is a simplified Contract Application Binary Interface (ABI) of an ERC-20 Token Contract. -# It will expose only the methods: balanceOf(address), decimals(), symbol() and totalSupply() +# Bu, bir ERC-20 Jeton Sözleşmesinin basitleştirilmiş bir Sözleşme Uygulama İkili Arayüzüdür (ABI). +# Sadece şu metotları kullanıma sunacaktır: balanceOf(address), decimals(), symbol() ve totalSupply() simplified_abi = [ { 'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}], @@ -125,8 +126,8 @@ addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decima # DAI print("===== %s =====" % symbol) -print("Total Supply:", totalSupply) -print("Addr Balance:", addr_balance) +print("Toplam Arz:", totalSupply) +print("Adres Bakiyesi:", addr_balance) weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi) symbol = weth_contract.functions.symbol().call() @@ -136,38 +137,50 @@ addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decim # WETH print("===== %s =====" % symbol) -print("Total Supply:", totalSupply) -print("Addr Balance:", addr_balance) +print("Toplam Arz:", totalSupply) +print("Adres Bakiyesi:", addr_balance) ``` ## Bilinen sorunlar {#erc20-issues} ### ERC-20 jeton alma sorunu {#reception-issue} +**20.06.2024 itibarıyla en az 83.656.418$ değerinde ERC-20 jetonu bu sorun nedeniyle kaybedildi. Saf bir ERC-20 uygulamasının, aşağıda listelendiği gibi standardın üzerine bir dizi ek kısıtlama uygulamadığınız sürece bu soruna yatkın olduğunu unutmayın.** + ERC-20 jetonları, ERC-20 jetonlarını işlemek üzere tasarlanmamış bir akıllı sözleşmeye gönderildiğinde kalıcı olarak kaybolabilir. Bunun nedeni, alıcı sözleşmesinin gelen jetonları tanıma veya yanıtlama işlevine sahip olmaması ve ERC-20 standardında alıcı sözleşmesini gelen jetonlar hakkında bilgilendirmek için bir mekanizmanın bulunmamasıdır. Bu sorunun başlıca ortaya çıkma şekilleri şunlardır: -1. Jeton transfer mekanizması - - ERC-20 jetonları, transfer veya transferFrom fonksiyonları kullanılarak transfer edilir - - Bir kullanıcı bu fonksiyonları kullanarak bir sözleşme adresine jeton gönderdiğinde, alıcı sözleşmesinin bunları işlemek üzere tasarlanmış olup olmadığına bakılmaksızın jetonlar aktarılır -2. Bildirim eksikliği - - Alıcı sözleşmesi, kendisine jeton gönderildiğine dair bir bildirim veya geri arama almaz - - Alıcı sözleşmesinde jetonları işlemek için bir mekanizma yoksa (örneğin, bir yedek fonksiyon veya jeton alımını yönetmek için özel bir fonksiyon), jetonlar sözleşme adresinde takılı kalır -3. Yerleşik işlemenin olmaması - - ERC-20 standardının sözleşmelerin uygulanması için zorunlu bir fonksiyon barındırmaması, birçok sözleşmenin gelen jetonları düzgün bir şekilde yönetememesine yol açar +1. Jeton transfer mekanizması -Bu sorundan dolayı [ERC-223](/developers/docs/standards/tokens/erc-223) [ERC-1363](/developers/docs/standards/tokens/erc-1363) gibi bazı alternatif standartlar ortaya çıktı +- ERC-20 jetonları, transfer veya transferFrom fonksiyonları kullanılarak transfer edilir + - Bir kullanıcı bu fonksiyonları kullanarak bir sözleşme adresine jeton gönderdiğinde, alıcı sözleşmesinin bunları işlemek üzere tasarlanmış olup olmadığına bakılmaksızın jetonlar aktarılır -## daha fazla okuma {#further-reading} +2. Bildirim eksikliği + - Alıcı sözleşmesi, kendisine jeton gönderildiğine dair bir bildirim veya geri arama almaz + - Alıcı sözleşmesinde jetonları işlemek için bir mekanizma yoksa (örneğin, bir yedek fonksiyon veya jeton alımını yönetmek için özel bir fonksiyon), jetonlar sözleşme adresinde takılı kalır +3. Yerleşik işlemenin olmaması + - ERC-20 standardının sözleşmelerin uygulanması için zorunlu bir fonksiyon barındırmaması, birçok sözleşmenin gelen jetonları düzgün bir şekilde yönetememesine yol açar -- [EIP-20: ERC-20 Token Standardı](https://eips.ethereum.org/EIPS/eip-20) -- [OpenZeppelin - Token'lar](https://docs.openzeppelin.com/contracts/3.x/tokens#ERC20) -- [OpenZeppelin - ERC-20 Uygulaması](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) -- [Alchemy - Solidity ERC20 Jetonları için bir Rehber](https://www.alchemy.com/overviews/erc20-solidity) +**Olası Çözümler** + +ERC-20 ile bu sorunu tamamen önlemek mümkün olmasa da son kullanıcı için jeton kaybı olasılığını önemli ölçüde azaltacak yöntemler vardır: + +- En yaygın sorun, bir kullanıcının jetonları jeton sözleşme adresinin kendisine göndermesidir (ör. USDT jeton sözleşmesinin adresine yatırılan USDT). Bu tür transfer girişimlerini geri döndürmek için `transfer(..)` işlevinin kısıtlanması tavsiye edilir. `transfer(..)` işlevinin uygulaması içinde `require(_to != address(this));` kontrolünü eklemeyi düşünün. +- Genel olarak `transfer(..)` işlevi, sözleşmelere jeton yatırmak için tasarlanmamıştır. `approve(..) `& transferFrom(..)`modeli, bunun yerine sözleşmelere ERC-20 jetonları yatırmak için kullanılır. Transfer işlevini, onunla herhangi bir sözleşmeye jeton yatırılmasına izin vermeyecek şekilde kısıtlamak mümkündür, ancak bu, jetonların`trasnfer(..)` işleviyle sözleşmelere yatırılabileceğini varsayan sözleşmelerle (ör. Uniswap likidite havuzları) uyumluluğu bozabilir. +- Sözleşmenizin hiçbir zaman jeton alması gerekmese bile, sözleşmenize ERC-20 jetonlarının gelebileceğini her zaman varsayın. Alıcı tarafında, yanlışlıkla yapılan yatırmaları önlemenin veya reddetmenin bir yolu yoktur. Yanlışlıkla yatırılan ERC-20 jetonlarını çıkarmanıza olanak tanıyacak bir işlev uygulamanız tavsiye edilir. +- Alternatif jeton standartlarını kullanmayı düşünün. +[ERC-223](/developers/docs/standards/tokens/erc-223) veya [ERC-1363](/developers/docs/standards/tokens/erc-1363) gibi bazı alternatif standartlar bu sorundan ortaya çıkmıştır. + +## Daha fazla kaynak {#further-reading} + +- [EIP-20: ERC-20 Jeton Standardı](https://eips.ethereum.org/EIPS/eip-20) +- [OpenZeppelin - Jetonlar](https://docs.openzeppelin.com/contracts/3.x/tokens#ERC20) +- [OpenZeppelin - ERC-20 Uygulaması](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) +- [Alchemy - Solidity ERC20 Jetonları Rehberi](https://www.alchemy.com/overviews/erc20-solidity) -## Diğer değiştirilebilir jeton standartları {#fungible-token-standards} +## Diğer takas edilebilir jeton standartları {#fungible-token-standards} - [ERC-223](/developers/docs/standards/tokens/erc-223) - [ERC-1363](/developers/docs/standards/tokens/erc-1363) - [ERC-777](/developers/docs/standards/tokens/erc-777) -- [ERC-4626 - Jetonlaştırılmış kasalar](/developers/docs/standards/tokens/erc-4626) \ No newline at end of file +- [ERC-4626 - Jetonlaştırılmış kasalar](/developers/docs/standards/tokens/erc-4626) diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md index e8c87d7c282..4a9c8062afd 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-223/index.md @@ -1,6 +1,6 @@ --- -title: ERC-223 Jeton Standardı -description: ERC-223 değiştirilebilir jeton standardına genel bir bakış, çalışma şekli ve ERC-20 ile karşılaştırılması. +title: "ERC-223 Jeton Standardı" +description: "ERC-223 değiştirilebilir jeton standardına genel bir bakış, çalışma şekli ve ERC-20 ile karşılaştırılması." lang: tr --- @@ -123,14 +123,14 @@ contract VeryBasicERC223Token { contract RecipientContract is IERC223Recipient { event Deposit(address whoSentTheTokens); uint256 deposits = 0; - address tokenA; // The only token that we want to accept. + address tokenA; // Kabul etmek istediğimiz tek jeton. function tokenReceived(address _from, uint _value, bytes memory _data) public override { - // It is important to understand that within this function - // msg.sender is the address of a token that is being received, - // msg.value is always 0 as the token contract does not own or send Ether in most cases, - // _from is the sender of the token transfer, - // _value is the amount of tokens that was deposited. + // Bu fonksiyonun içinde şunu anlamak önemlidir + // msg.sender, alınan bir jetonun adresidir, + // msg.value her zaman 0'dır çünkü jeton sözleşmesi çoğu durumda ether sahibi değildir veya ether göndermez, + // _from, jeton transferinin göndericisidir, + // _value, yatırılan jetonların miktarıdır. require(msg.sender == tokenA); deposits += _value; emit Deposit(_from); @@ -154,7 +154,7 @@ contract RecipientContract is IERC223Recipient { ### Jeton yatırımı tamamlandıktan sonra bazı fonksiyonları yürütmek istersek ne yapmalıyız? {#function-execution} -Bunu yapmanın birkaç yolu vardır. Bu örnekte, ERC-223 transferlerini Ether transferlerine özdeş hale getiren yöntemi takip edeceğiz: +Bunu yapmanın birkaç yolu vardır. Bu örnekte, ERC-223 transferlerini ether transferlerine özdeş hale getiren yöntemi takip edeceğiz: ```solidity contract RecipientContract is IERC223Recipient { @@ -177,7 +177,7 @@ contract RecipientContract is IERC223Recipient { } ``` -`RecipientContract` bir ERC-223 jetonu aldığında sözleşme, tıpkı Ether işlemlerinin fonksiyon çağrılarını işlem `data` olarak kodlaması gibi jeton işleminin `_data` parametresi olarak kodlanan bir fonksiyonu yürütür. Daha fazla bilgi için [veri alanını](/developers/docs/transactions/#the-data-field) okuyun. +`RecipientContract` bir ERC-223 jetonu aldığında sözleşme, tıpkı ether işlemlerinin fonksiyon çağrılarını işlem `data` olarak kodlaması gibi, jeton işleminin `_data` parametresi olarak kodlanan bir fonksiyonu yürütür. Daha fazla bilgi için [veri alanını](/developers/docs/transactions/#the-data-field) okuyun. Yukarıdaki örnekte, bir ERC-223 jetonunun `transfer(address,uin256,bytes calldata _data)` fonksiyonu ile `RecipientContract` adresine transferi gerekmektedir. Eğer veri parametresi `0xc2985578` (`foo()` fonksiyonunun imzası) ise, jeton depozitosu alındıktan sonra foo() fonksiyonu çağrılır ve Foo() olayı tetiklenir. diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-4626/index.md index 57eb3ad9a88..f6257fdfda6 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/erc-4626/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-4626/index.md @@ -1,6 +1,6 @@ --- -title: EIP-4626 Tokenize edilmiş Kasa Standardı -description: Verim taşıyan kasalar için bir standart. +title: "EIP-4626 Tokenize edilmiş Kasa Standardı" +description: "Verim taşıyan kasalar için bir standart." lang: tr --- @@ -14,17 +14,33 @@ Borç veren piyasalar, toplayıcılar ve özünde faiz getiren tokenler, kullan Verim-taşıyan para kasalarındaki ERC-4626, daha tutarlı ve sağlam uygulama kalıpları oluşturarak geliştiricilerin çok az özel çabası ile entegrasyon çabasını azaltacak ve çeşitli uygulamalarda verime erişimin kilidini açacaktır. -ERC-4626 token'ı, [EIP-4626](https://eips.ethereum.org/EIPS/eip-4626)'te tam olarak açıklanmıştır. +ERC-4626 jetonu, [EIP-4626](https://eips.ethereum.org/EIPS/eip-4626) içinde tamamen açıklanmıştır. + +**Eşzamansız kasa uzantısı (ERC-7540)** + +ERC-4626, bir sınıra kadar atomik para yatırma ve geri alma işlemleri için optimize edilmiştir. Limite ulaşılırsa yeni para yatırma veya geri alma işlemi gönderilemez. Bu sınırlama, Kasa ile arabirim oluşturmak için bir ön koşul olarak eşzamansız eylemleri veya gecikmeleri olan herhangi bir akıllı sözleşme sistemi için (ör. gerçek dünya varlık protokolleri, teminatsız borç verme protokolleri, zincirler arası borç verme protokolleri, likit hisseleme jetonları veya sigorta güvenlik modülleri) iyi çalışmaz. + +ERC-7540, ERC-4626 Kasalarının faydasını eşzamansız kullanım durumları için genişletir. Mevcut Kasa arayüzü (`deposit`/`withdraw`/`mint`/`redeem`), eşzamansız İstekleri talep etmek için tam olarak kullanılır. + +ERC-7540 uzantısı, [ERC-7540](https://eips.ethereum.org/EIPS/eip-7540) içinde tamamen açıklanmıştır. + +**Çoklu varlık kasası uzantısı (ERC-7575)** + +ERC-4626 tarafından desteklenmeyen eksik bir kullanım durumu, likidite sağlayıcı (LP) Jetonları gibi birden fazla varlığa veya giriş noktasına sahip olan Kasalardır. Bunlar, ERC-4626'nın kendisinin bir ERC-20 olması gerekliliği nedeniyle genellikle kullanışsız veya uyumsuzdur. + +ERC-7575, ERC-20 jeton uygulamasını ERC-4626 uygulamasından harici hale getirerek birden çok varlığa sahip Kasalar için destek ekler. + +ERC-7575 uzantısı, [ERC-7575](https://eips.ethereum.org/EIPS/eip-7575) içinde tamamen açıklanmıştır. ## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamak için önce [token standartları](/developers/docs/standards/tokens/) ve [ERC-20](/developers/docs/standards/tokens/erc-20/) hakkında okumanızı öneririz. +Bu sayfayı daha iyi anlamak için önce [jeton standartları](/developers/docs/standards/tokens/) ve [ERC-20](/developers/docs/standards/tokens/erc-20/) hakkında bilgi edinmenizi öneririz. ## ERC-4626 Fonksiyonları ve Özellikleri: {#body} ### Yöntemler {#methods} -#### asset {#asset} +#### varlık {#asset} ```solidity function asset() public view returns (address assetTokenAddress) @@ -32,7 +48,7 @@ function asset() public view returns (address assetTokenAddress) Bu fonksiyon; muhasebe, yatırma ve çekme kasası için kullanılan temel jetonun adresini döndürür. -#### totalAssets {#totalassets} +#### toplamVarlıklar {#totalassets} ```solidity function totalAssets() public view returns (uint256) @@ -40,31 +56,31 @@ function totalAssets() public view returns (uint256) Bu fonksiyon, kasa tarafından tutulan temel varlıkların toplam miktarını döndürür. -#### convertToShares {#convertoshares} +#### paylaraDönüştür {#convertoshares} ```solidity function convertToShares(uint256 assets) public view returns (uint256 shares) ``` -Bu fonksiyon, sağlanan `assets` miktarı için olan kasa tarafından takas edilen `shares` miktarını döndürür. +Bu işlev, sağlanan `assets` tutarı karşılığında kasa tarafından değiştirilecek `shares` tutarını döndürür. -#### convertToAssets {#convertoassets} +#### varlıklaraDönüştür {#convertoassets} ```solidity function convertToAssets(uint256 shares) public view returns (uint256 assets) ``` -Bu fonksiyon, sağlanan `shares` miktarı için olan kasa tarafından takas edilen `assets` miktarını döndürür. +Bu işlev, sağlanan `shares` tutarı karşılığında kasa tarafından değiştirilecek `assets` tutarını döndürür. -#### maxDeposit {#maxdeposit} +#### maksimumYatırma {#maxdeposit} ```solidity function maxDeposit(address receiver) public view returns (uint256 maxAssets) ``` -Bu fonksiyon, `receiver` tarafından yapılan tek bir [`deposit`](#deposit) çağrısında yatırılabilecek temel varlıkların maksimum miktarını döndürür. +Bu işlev, `receiver` için basılan paylarla tek bir [`deposit`](#deposit) çağrısında yatırılabilecek maksimum dayanak varlık miktarını döndürür. -#### previewDeposit {#previewdeposit} +#### yatırmaÖnizlemesi {#previewdeposit} ```solidity function previewDeposit(uint256 assets) public view returns (uint256 shares) @@ -72,23 +88,23 @@ function previewDeposit(uint256 assets) public view returns (uint256 shares) Bu fonksiyon, kullanıcıların güncel bloktaki yatırma etkilerini simüle etmelerini sağlar. -#### mevduat {#deposit} +#### yatırma {#deposit} ```solidity function deposit(uint256 assets, address receiver) public returns (uint256 shares) ``` -Bu fonksiyon, temel jetonların `assets`'ini kasaya yatırır ve `shares` mülkiyetini `receiver`'a verir. +Bu işlev, dayanak jetonların `assets` tutarını kasaya yatırır ve `shares` mülkiyetini `receiver`'a verir. -#### maxMint {#maxmint} +#### maksimumBasım {#maxmint} ```solidity function maxMint(address receiver) public view returns (uint256 maxShares) ``` -Bu fonksiyon, `receiver` tarafından yapılan tek bir [`mint`](#mint) çağrısında basılabilecek payların maksimum miktarını döndürür. +Bu işlev, `receiver` için basılan paylarla tek bir [`mint`](#mint) çağrısında basılabilecek maksimum pay miktarını döndürür. -#### previewMint {#previewmint} +#### basımÖnizlemesi {#previewmint} ```solidity function previewMint(uint256 shares) public view returns (uint256 assets) @@ -96,23 +112,23 @@ function previewMint(uint256 shares) public view returns (uint256 assets) Bu fonksiyon, kullanıcıların güncel bloktaki basma etkilerini simüle etmelerini sağlar. -#### mint {#mint} +#### basım {#mint} ```solidity function mint(uint256 shares, address receiver) public returns (uint256 assets) ``` -Bu fonksiyon, temel jetonların `assets`'ini yatırarak `receiver`'a tam olarak `shares` kasa payı basar. +Bu işlev, dayanak jetonların `assets` tutarını yatırarak `receiver`'a tam olarak `shares` kasa payı basar. -#### maxWithdraw {#maxwithdraw} +#### maksimumÇekme {#maxwithdraw} ```solidity function maxWithdraw(address owner) public view returns (uint256 maxAssets) ``` -Bu fonksiyon, `owner` bakiyesinden tek bir [`withdraw`](#withdraw) çağrısıyla çekilebilecek maksimum temel varlık miktarını döndürür. +Bu işlev, tek bir [`withdraw`](#withdraw) çağrısıyla `owner` bakiyesinden çekilebilecek maksimum dayanak varlık miktarını döndürür. -#### previewWithdraw {#previewwithdraw} +#### çekimÖnizlemesi {#previewwithdraw} ```solidity function previewWithdraw(uint256 assets) public view returns (uint256 shares) @@ -120,23 +136,23 @@ function previewWithdraw(uint256 assets) public view returns (uint256 shares) Bu fonksiyon, kullanıcıların güncel bloktaki çekme etkilerini simüle etmelerini sağlar. -#### para çek {#withdraw} +#### çekme {#withdraw} ```solidity function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares) ``` -Bu fonksiyon, `owner`'dan `shares` yakar ve kasadan `receiver`'a tam olarak `assets` jeton gönderir. +Bu işlev, `owner`dan `shares` yakar ve kasadan `receiver`a tam olarak `assets` jeton gönderir. -#### maxRedeem {#maxredeem} +#### maksimumGeriAlma {#maxredeem} ```solidity function maxRedeem(address owner) public view returns (uint256 maxShares) ``` -Bu fonksiyon, [`redeem`](#redeem) çağrısı ile `owner` bakiyesinden geri alınabilecek maksimum pay miktarını döndürür. +Bu işlev, bir [`redeem`](#redeem) çağrısı aracılığıyla `owner` bakiyesinden geri alınabilecek maksimum pay miktarını döndürür. -#### previewRedeem {#previewredeem} +#### geriAlmaÖnizlemesi {#previewredeem} ```solidity function previewRedeem(uint256 shares) public view returns (uint256 assets) @@ -144,15 +160,15 @@ function previewRedeem(uint256 shares) public view returns (uint256 assets) Bu fonksiyon, kullanıcıların güncel bloktaki geri alma etkilerini simüle etmelerini sağlar. -#### redeem {#redeem} +#### geriAlma {#redeem} ```solidity function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets) ``` -Bu fonksiyon, `owner`'dan spesifik sayıda `shares`'i geri alır ve kasadaki temel jetonun `assets`'ini `receiver`'a gönderir. +Bu işlev, `owner`dan belirli sayıda `shares` geri alır ve kasadaki dayanak jetonun `assets` tutarını `receiver`a gönderir. -#### totalSupply {#totalsupply} +#### toplamArz {#totalsupply} ```solidity function totalSupply() public view returns (uint256) @@ -160,23 +176,23 @@ function totalSupply() public view returns (uint256) Dolaşımdaki geri alınmamış kasa paylarının toplam sayısını verir. -#### balanceOf {#balanceof} +#### bakiye {#balanceof} ```solidity function balanceOf(address owner) public view returns (uint256) ``` -`owner`'ın güncel olarak sahip olduğu toplam kasa payı miktarını döndürür. +`owner`ın şu anda sahip olduğu toplam kasa payı miktarını döndürür. -### Arayüzün haritası {#mapOfTheInterface} +### Arayüz haritası {#mapOfTheInterface} ![ERC-4626 arayüzünün haritası](./map-of-erc-4626.png) -### Etkinlikler {#events} +### Olaylar {#events} #### Yatırma Olayları -Jetonlar kasaya [`mint`](#mint) ve [`deposit`](#deposit) yöntemleri aracılığıyla yatırıldığında çıkarılmış olmak **ZORUNDADIR** +Jetonlar, [`mint`](#mint) ve [`deposit`](#deposit) yöntemleriyle kasaya yatırıldığında **KESİNLİKLE** yayınlanmalıdır. ```solidity event Deposit( @@ -187,11 +203,11 @@ event Deposit( ) ``` -`sender`'ın, `shares` için `assets` takası yapan ve söz konusu `shares`'i `owner`'a transfer eden kullanıcı olduğu durumlarda. +Burada `sender`, `assets`'i `shares` ile takas eden ve bu `shares`'i `owner`'a aktaran kullanıcıdır. #### Çekim Olayı -Paylar kasadan [`redeem`](#redeem) veya [`withdraw`](#withdraw) yöntemlerinde bir yatıran tarafından çekildiğinde çıkarılmış olmak **ZORUNDADIR**. +Paylar, bir mevduat sahibi tarafından [`redeem`](#redeem) veya [`withdraw`](#withdraw) yöntemlerinde kasadan çekildiğinde **KESİNLİKLE** yayınlanmalıdır. ```solidity event Withdraw( @@ -203,9 +219,9 @@ event Withdraw( ) ``` -`sender`'ın çekimi tetikleyen ve `assets` için `owner`'ın sahip olduğu `shares`'i takas eden kullanıcı olduğu durumlarda. `receiver`, çekilmiş `assets`'i alan kullanıcıdır. +Burada `sender`, çekme işlemini tetikleyen ve `owner`'ın sahip olduğu `shares`'i `assets` ile takas eden kullanıcıdır. `receiver`, çekilen `assets`'i alan kullanıcıdır. -## Daha fazla okuma {#further-reading} +## Daha fazla kaynak {#further-reading} -- [EIP-4626: Tokenize edilmiş kasa Standartı](https://eips.ethereum.org/EIPS/eip-4626) +- [EIP-4626: Jetonlaştırılmış Kasa Standardı](https://eips.ethereum.org/EIPS/eip-4626) - [ERC-4626: GitHub Deposu](https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC4626.sol) diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-721/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-721/index.md index d06fedf917e..9e9ee82a1ce 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/erc-721/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-721/index.md @@ -1,6 +1,6 @@ --- -title: ERC-721 Değiştirilemez Token Standardı -description: +title: "ERC-721 Değiştirilemeyen Token Standardı" +description: "Ethereum'daki benzersiz dijital varlıkları temsil eden, eşsiz jetonlar (NFT'ler) için standart olan ERC-721 hakkında bilgi edinin." lang: tr --- @@ -12,25 +12,29 @@ Bir Değiştirilemez Token (NFT), bir şeyi veya bir kimseyi eşsiz bir yolla ta **ERC-721 nedir?** -ERC-721, NFT için bir standart getirir, başka bir deyişle, bu Token türü benzersizdir ve örneğin yaşı, nadirliği ve hatta görseli gibi başka bir şey nedeniyle aynı Akıllı Sözleşmedeki başka bir Token'dan farklı değere sahip olabilir. Görsel mi? +ERC-721, NFT için bir standart getirir, başka bir deyişle, bu Token türü benzersizdir ve örneğin yaşı, nadirliği ve hatta görseli gibi başka bir şey nedeniyle aynı Akıllı Sözleşmedeki başka bir Token'dan farklı değere sahip olabilir. +Görsel mi? -Evet! Tüm NFT'ler `tokenId` denilen bir `uint256` değişkenine sahiptir, yani herhangi bir ERC-721 sözleşmesi için, `sözleşme adresi, uint256 tokenId` çifti küresel olarak eşsiz olmalıdır. Bununla birlikte, bir dapp girdi olarak `tokenId` kullanan ve çıktı olarak da zombiler, silahlar, yetenekler ya da muhteşem kedicikler gibi havalı bir şeyin görüntüsünü veren bir "dönüştürücüye" sahip olabilir! +Evet! Tüm NFT'ler `tokenId` adlı bir `uint256` değişkenine sahiptir, bu nedenle herhangi bir ERC-721 Sözleşmesi için, +`sözleşme adresi, uint256 tokenId` çifti küresel olarak eşsiz olmalıdır. Bununla birlikte, bir dapp girdi olarak `tokenId` kullanan ve çıktı olarak da zombiler, silahlar, yetenekler ya da muhteşem kedicikler gibi havalı bir şeyin görüntüsünü veren bir +"dönüştürücüye" sahip olabilir! ## Ön Koşullar {#prerequisites} - [Hesaplar](/developers/docs/accounts/) - [Akıllı Sözleşmeler](/developers/docs/smart-contracts/) -- [Token standartları](/developers/docs/standards/tokens/) +- [Jeton standartları](/developers/docs/standards/tokens/) -## Şablon {#body} +## Gövde {#body} William Entriken, Dieter Shirley, Jacob Evans ve Nastassia Sachs tarafından Ocak 2018'de önerilen ERC-721 (Ethereum Yorum Talebi 721), Akıllı Sözleşmeler içindeki token'lar için bir API uygulayan bir Değiştirilebilir Token Standardıdır. -Token'ları bir hesaptan diğerine aktarmak, bir hesabın mevcut token bakiyesini almak, belirli bir token'ın sahibini almak ve ayrıca ağda mevcut olan token'ın toplam arzını almak gibi işlevler sağlar. Bunların yanı sıra, bir hesaptan bir miktar token'ın üçüncü taraf bir hesap tarafından taşınabileceğini onaylamak gibi başka işlevleri de vardır. +Token'ları bir hesaptan diğerine aktarmak, bir hesabın mevcut token bakiyesini almak, belirli bir token'ın sahibini almak ve ayrıca ağda mevcut olan token'ın toplam arzını almak gibi işlevler sağlar. +Bunların yanı sıra, bir hesaptan bir miktar token'ın üçüncü taraf bir hesap tarafından taşınabileceğini onaylamak gibi başka işlevleri de vardır. Bir Akıllı Sözleşme aşağıdaki yöntemleri ve olayları uygularsa, ERC-721 Değiştirilemez Token Sözleşmesi olarak adlandırılabilir ve dağıtıldıktan sonra, Ethereum üzerinde oluşturulan token'ları takip etmekten sorumlu olur. -[EIP-721](https://eips.ethereum.org/EIPS/eip-721)'den: +[EIP-721'den](https://eips.ethereum.org/EIPS/eip-721): ### Yöntemler {#methods} @@ -56,11 +60,12 @@ Bir Akıllı Sözleşme aşağıdaki yöntemleri ve olayları uygularsa, ERC-721 ### Örnekler {#web3py-example} -Ethereum'daki herhangi bir ERC-721 Token Sözleşmesini incelememizi basitleştirmek için bir Standart'ın ne kadar önemli olduğunu görelim. Herhangi bir ERC-721 token'a arayüz oluşturmak için sadece sözleşmenin Uygulama İkili Arayüzü'ne (ABI) ihtiyacımız var. Aşağıda görebileceğiniz gibi az sürtünmeli bir örnek olması için basitleştirilmiş bir ABI kullanacağız. +Ethereum'daki herhangi bir ERC-721 Token Sözleşmesini incelememizi basitleştirmek için bir Standart'ın ne kadar önemli olduğunu görelim. +Herhangi bir ERC-721 token'a arayüz oluşturmak için sadece sözleşmenin Uygulama İkili Arayüzü'ne (ABI) ihtiyacımız var. Aşağıda görebileceğiniz gibi az sürtünmeli bir örnek olması için basitleştirilmiş bir ABI kullanacağız. #### Web3.py Örneği {#web3py-example} -İlk olarak, [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python kütüphanesini kurduğunuzdan emin olun: +Öncelikle, [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python kütüphanesini yüklediğinizden emin olun: ``` pip install web3 @@ -73,12 +78,12 @@ from web3._utils.events import get_event_data w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) -ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # CryptoKitties Contract +ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # CryptoKitties Sözleşmesi -acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # CryptoKitties Sales Auction +acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # CryptoKitties Satış Müzayedesi -# This is a simplified Contract Application Binary Interface (ABI) of an ERC-721 NFT Contract. -# It will expose only the methods: balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply() +# Bu, bir ERC-721 NFT Sözleşmesinin basitleştirilmiş bir Sözleşme Uygulama İkili Arayüzüdür (ABI). +# Yalnızca şu yöntemleri kullanıma sunacaktır: balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply() simplified_abi = [ { 'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}], @@ -136,7 +141,7 @@ print(f"{name} [{symbol}] NFTs in Auctions: {kitties_auctions}") pregnant_kitties = ck_contract.functions.pregnantKitties().call() print(f"{name} [{symbol}] NFTs Pregnants: {pregnant_kitties}") -# Using the Transfer Event ABI to get info about transferred Kitties. +# Aktarılan Kedicikler hakkında bilgi almak için Transfer Olayı ABI'sini kullanma. tx_event_abi = { 'anonymous': False, 'inputs': [ @@ -147,7 +152,7 @@ tx_event_abi = { 'type': 'event' } -# We need the event's signature to filter the logs +# Günlükleri filtrelemek için olayın imzasına ihtiyacımız var event_signature = w3.keccak(text="Transfer(address,address,uint256)").hex() logs = w3.eth.get_logs({ @@ -156,25 +161,25 @@ logs = w3.eth.get_logs({ "topics": [event_signature] }) -# Notes: -# - Increase the number of blocks up from 120 if no Transfer event is returned. -# - If you didn't find any Transfer event you can also try to get a tokenId at: +# Notlar: +# - Herhangi bir Transfer olayı döndürülmezse blok sayısını 120'den yukarı artırın. +# - Herhangi bir Transfer olayı bulamadıysanız, şuradan bir tokenId almayı da deneyebilirsiniz: # https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events -# Click to expand the event's logs and copy its "tokenId" argument +# Etkinliğin günlüklerini genişletmek için tıklayın ve "tokenId" bağımsız değişkenini kopyalayın recent_tx = [get_event_data(w3.codec, tx_event_abi, log)["args"] for log in logs] if recent_tx: - kitty_id = recent_tx[0]['tokenId'] # Paste the "tokenId" here from the link above + kitty_id = recent_tx[0]['tokenId'] # Yukarıdaki bağlantıdan "tokenId"yi buraya yapıştırın is_pregnant = ck_contract.functions.isPregnant(kitty_id).call() print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}") ``` CryptoKitties Sözleşmesi, Standart olanlar dışında bazı ilginç Olaylara sahiptir. -Hadi ikisine bakalım, `Pregnant` ve `Birth`. +İkisini kontrol edelim, `Pregnant` ve `Birth`. ```python -# Using the Pregnant and Birth Events ABI to get info about new Kitties. +# Yeni Kedicikler hakkında bilgi almak için Pregnant ve Birth Olayları ABI'sini kullanma. ck_extra_events_abi = [ { 'anonymous': False, @@ -198,13 +203,13 @@ ck_extra_events_abi = [ 'type': 'event' }] -# We need the event's signature to filter the logs +# Günlükleri filtrelemek için olayın imzasına ihtiyacımız var ck_event_signatures = [ w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(), w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(), ] -# Here is a Pregnant Event: +# İşte bir Pregnant Olayı: # - https://etherscan.io/tx/0xc97eb514a41004acc447ac9d0d6a27ea6da305ac8b877dff37e49db42e1f8cef#eventlog pregnant_logs = w3.eth.get_logs({ "fromBlock": w3.eth.block_number - 120, @@ -214,7 +219,7 @@ pregnant_logs = w3.eth.get_logs({ recent_pregnants = [get_event_data(w3.codec, ck_extra_events_abi[0], log)["args"] for log in pregnant_logs] -# Here is a Birth Event: +# İşte bir Birth Olayı: # - https://etherscan.io/tx/0x3978028e08a25bb4c44f7877eb3573b9644309c044bf087e335397f16356340a birth_logs = w3.eth.get_logs({ "fromBlock": w3.eth.block_number - 120, @@ -227,18 +232,24 @@ recent_births = [get_event_data(w3.codec, ck_extra_events_abi[1], log)["args"] f ## Popüler NFT'ler {#popular-nfts} -- [Etherscan NFT Tracker](https://etherscan.io/tokens-nft), aktarım hacmine göre Ethereum üzerindeki en yüksek NFT'leri sıralar. -- [CryptoKitties](https://www.cryptokitties.co/) yetiştirilebilen, toplanabilen ve aşırı şirin olan CryptoKitties dediğimiz yaratıklar çevresinde gelişen bir oyundur. -- [Sorare](https://sorare.com/), sınırlı sayılı koleksiyon parçaları toplayabileceğiniz, takımlarınızı yönetebileceğiniz ve ödüller kazanmak için rekabet edebileceğiniz küresel bir fantezi futbol oyunudur. -- [Ethereum İsim Hizmeti (ENS)](https://ens.domains/); basit, insanlar tarafından okunabilir isimler kullanarak hem blok zinciri üstünde hem de dışında kaynakları yönetmenin güvenli ve merkeziyetsiz bir yolunu sunar. -- [POAP](https://poap.xyz), etkinliklere katılan veya belirli eylemleri tamamlayan kişilere ücretsiz NFT'ler sunar. POAP'ler oluşturmak ve dağıtmak ücretsizdir. -- [Unstoppable Domains](https://unstoppabledomains.com/), blok zincirleri üzerinde alan adları inşa eden San-Francisco merkezli bir şirkettir. Blok zinciri alan adları, kripto para adreslerini insanlar tarafından okunabilir adlarla değiştirir ve sansüre dayanıklı web sitelerini etkinleştirmek için kullanılabilir. -- [Gods Unchained Cards](https://godsunchained.com/), oyun içi varlıklara gerçek sahiplik getirmek için NFT'leri kullanan Ethereum blok zinciri üzerindeki bir Kart Ticareti Oyunudur. -- [Bored Ape Yacht Club](https://boredapeyachtclub.com), kanıtlanabilir derecede ender bir sanat eseri olmasının yanı sıra, kulübe üyelik simgesi olarak hareket eden ve topluluk çabalarının sonucu olarak zamanla artan üye avantajları ve faydaları sağlayan 10.000 benzersiz NFT'den oluşan bir koleksiyondur. - -## Daha fazla bilgi {#further-reading} - -- [EIP-721: ERC-721 Değiştirilemez Token Standardı](https://eips.ethereum.org/EIPS/eip-721) +- [Etherscan NFT Tracker](https://etherscan.io/nft-top-contracts) Ethereum'daki en iyi NFT'leri transfer hacmine göre listeler. +- [CryptoKitties](https://www.cryptokitties.co/), CryptoKitties adını verdiğimiz, yetiştirilebilir, koleksiyonluk ve çok sevimli + yaratıklar etrafında şekillenen bir oyundur. +- [Sorare](https://sorare.com/), sınırlı sayıda üretilmiş koleksiyon ürünleri toplayabildiğiniz, takımlarınızı yönetebildiğiniz ve ödül kazanmak için rekabet edebildiğiniz + küresel bir fantezi futbol oyunudur. +- [Ethereum İsim Servisi (ENS)](https://ens.domains/), basit ve insan tarafından okunabilir isimler kullanarak hem + blokzincir üzerindeki hem de dışındaki kaynakları adreslemek için güvenli ve merkeziyetsiz bir yol sunar. +- [POAP](https://poap.xyz), etkinliklere katılan veya belirli eylemleri tamamlayan kişilere ücretsiz NFT'ler dağıtır. POAP'ler oluşturmak ve dağıtmak ücretsizdir. +- [Unstoppable Domains](https://unstoppabledomains.com/), San Francisco merkezli, blokzincirler üzerinde + alan adları oluşturan bir şirkettir. Blokzincir alan adları, kripto para adreslerini insanlar tarafından okunabilir adlarla değiştirir ve sansüre dayanıklı web sitelerini etkinleştirmek + için kullanılabilir. +- [Gods Unchained Cards](https://godsunchained.com/), oyun içi varlıklara gerçek mülkiyet kazandırmak için NFT'leri kullanan, + Ethereum blokzinciri üzerindeki bir Takas Kartı Oyunu'dur (TCG). +- [Bored Ape Yacht Club](https://boredapeyachtclub.com), kanıtlanabilir derecede nadir bir sanat eseri olmasının yanı sıra kulüp için bir üyelik jetonu görevi gören ve topluluk çabaları sonucunda zamanla artan üye ayrıcalıkları ve avantajları sağlayan 10.000 benzersiz NFT'den oluşan bir koleksiyondur. + +## Daha fazla kaynak {#further-reading} + +- [EIP-721: ERC-721 Eşsiz Jeton Standardı](https://eips.ethereum.org/EIPS/eip-721) - [OpenZeppelin - ERC-721 Belgeleri](https://docs.openzeppelin.com/contracts/3.x/erc721) - [OpenZeppelin - ERC-721 Uygulaması](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol) -- [Alchemy NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) +- [Alchemy NFT API'si](https://www.alchemy.com/docs/reference/nft-api-quickstart) diff --git a/public/content/translations/tr/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/tr/developers/docs/standards/tokens/erc-777/index.md index 7d9db5fb4a5..f9b43e03ea2 100644 --- a/public/content/translations/tr/developers/docs/standards/tokens/erc-777/index.md +++ b/public/content/translations/tr/developers/docs/standards/tokens/erc-777/index.md @@ -1,20 +1,20 @@ --- -title: ERC-777 Token Standardı -description: +title: "ERC-777 Token Standardı" +description: "Güvenlik nedeniyle ERC-20 önerilse de, kancalara sahip geliştirilmiş bir değiştirilebilir jeton standardı olan ERC-777 hakkında bilgi edinin." lang: tr --- ## Uyarı {#warning} -**ERC777'nin, [farklı saldırı türlerine karşı duyarlı olduğu için](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620) doğru şekilde uygulanması zordur. Onun yerine [ERC-20](/developers/docs/standards/tokens/erc-20/) kullanılması tavsiye edilir.** Bu sayfa tarihi arşiv olarak kalır. +**ERC-777'nin, [farklı saldırı biçimlerine karşı savunmasızlığı](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620) nedeniyle düzgün bir şekilde uygulanması zordur. Bunun yerine [ERC-20](/developers/docs/standards/tokens/erc-20/) kullanılması önerilir.** Bu sayfa, tarihsel bir arşiv olarak kalır. ## Giriş {#introduction} ERC-777, mevcut [ERC-20](/developers/docs/standards/tokens/erc-20/) standardını geliştiren bir değiştirilebilir jeton standardıdır. -## Ön koşullar {#prerequisites} +## Ön Koşullar {#prerequisites} -Bu sayfayı daha iyi anlamanız için ilk olarak [ERC-20](/developers/docs/standards/tokens/erc-20/) hakkında okuma yapmanızı öneririz. +Bu sayfayı daha iyi anlamak için öncelikle [ERC-20](/developers/docs/standards/tokens/erc-20/) hakkında bilgi edinmenizi öneririz. ## ERC-777, ERC-20'nin üzerine ne tür iyileştirmeler önerir? {#-erc-777-vs-erc-20} @@ -28,18 +28,18 @@ Kancalar, [ERC-1820](https://eips.ethereum.org/EIPS/eip-1820) standardı kullan #### Kancalar neden kullanışlıdır? {#why-are-hooks-great} -1. Kancalar, bir sözleşmeye token göndermeyi ve sözleşmeyi tek bir işlemde bilgilendirmeyi sağlar, bunun aksine [ERC-20](https://eips.ethereum.org/EIPS/eip-20) ise bunu başarmak için çift çağrı (`approve`/`transferFrom`) gerektirir. +1. Kancalar, bir sözleşmeye jeton göndermeyi ve sözleşmeyi tek bir işlemde bilgilendirmeyi sağlar; bunun aksine [ERC-20](https://eips.ethereum.org/EIPS/eip-20) ise bunu başarmak için çift çağrı (`approve`/`transferFrom`) gerektirir. 2. Kayıtlı kancalara sahip olmayan sözleşmeler ERC-777 ile uyumsuzlardır. Gönderen sözleşme, alıcı sözleşme bir kanca kaydetmediyse işlemi iptal eder. Bu, ERC-777 dışındaki akıllı sözleşmelere yanlışlıkla transfer yapılmasını önler. 3. Kancalar işlemleri reddedebilirler. ### Ondalıklar {#decimals} -Standart ayrıca ERC-20'de oluşan `decimals` hakkındaki kafa karışıklığını çözer. Bu netlik, geliştirici deneyimini geliştirir. +Standart ayrıca ERC-20'de `decimals` kaynaklı kafa karışıklığını da çözer. Bu netlik, geliştirici deneyimini geliştirir. -### ERC-20 ile geriye doğru uyumluluk {#backwards-compatibility-with-erc-20} +### ERC-20 ile geriye dönük uyumluluk {#backwards-compatibility-with-erc-20} ERC-777 sözleşmeleri ile sanki ERC-20 sözleşmeleriymiş gibi etkileşime geçilebilir. -## Daha Fazla Okuma {#further-reading} +## Ek Okumalar {#further-reading} -[EIP-777: Jeton Standardı](https://eips.ethereum.org/EIPS/eip-777) \ No newline at end of file +[EIP-777: Jeton Standardı](https://eips.ethereum.org/EIPS/eip-777)